diff --git a/.eslintrc.json b/.eslintrc.json index 1f7274063ccb..a11cf4d3a49f 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -12,6 +12,7 @@ "semi": [2, "always"], "eqeqeq": [2, "smart"], "no-use-before-define": [2, "nofunc"], + "no-confusing-arrow": "off", "no-unused-vars": [2, {"vars": "local", "args": "none"}], "no-multi-str": 2, "no-irregular-whitespace": 2, diff --git a/cli/cli.js b/cli/cli.js index fbf4063e228d..8037d7580ae8 100644 --- a/cli/cli.js +++ b/cli/cli.js @@ -18,53 +18,36 @@ */ /* eslint-disable no-console */ const program = require('commander'); -const yeoman = require('yeoman-environment'); const chalk = require('chalk'); const packageJson = require('../package.json'); -const logger = require('./utils').logger; -const initHelp = require('./utils').initHelp; -const toString = require('./utils').toString; -const getCommand = require('./utils').getCommand; -const getCommandOptions = require('./utils').getCommandOptions; -const getArgs = require('./utils').getArgs; -const CLI_NAME = require('./utils').CLI_NAME; +const { + CLI_NAME, initHelp, logger, createYeomanEnv, toString, getCommand, getCommandOptions, getArgs, done +} = require('./utils'); const initAutoCompletion = require('./completion').init; const SUB_GENERATORS = require('./commands'); const version = packageJson.version; -const env = yeoman.createEnv(); const JHIPSTER_NS = CLI_NAME; +const env = createYeomanEnv(); /* setup debugging */ logger.init(program); -/* Register yeoman generators */ -Object.keys(SUB_GENERATORS).forEach((generator) => { - env.register(require.resolve(`../generators/${generator}`), `${JHIPSTER_NS}:${generator}`); -}); - -const done = () => { - logger.info(chalk.green.bold('Congratulations, JHipster execution is complete!')); -}; - /** * Run a yeoman command */ -const runYoCommand = (cmd, args, opts) => { +const runYoCommand = (cmd, args, options, opts) => { logger.debug(`cmd: ${toString(cmd)}`); logger.debug(`args: ${toString(args)}`); logger.debug(`opts: ${toString(opts)}`); const command = getCommand(cmd, args, opts); - const options = getCommandOptions(packageJson, process.argv.slice(2)); logger.info(chalk.yellow(`Executing ${command}`)); logger.info(chalk.yellow(`Options: ${toString(options)}`)); try { env.run(command, options, done); } catch (e) { - logger.error(e.message); - logger.log(e); - process.exit(1); + logger.error(e.message, e); } }; @@ -80,11 +63,23 @@ Object.keys(SUB_GENERATORS).forEach((key) => { command.allowUnknownOption() .description(opts.desc) .action((args) => { - runYoCommand(key, program.args, opts); + const options = getCommandOptions(packageJson, process.argv.slice(2)); + if (opts.cliOnly) { + logger.debug('Executing CLI only script'); + /* eslint-disable global-require, import/no-dynamic-require */ + require(`./${key}`)(program.args, options, env); + /* eslint-enable */ + } else { + runYoCommand(key, program.args, options, opts); + } }) .on('--help', () => { - logger.debug('Adding additional help info'); - env.run(`${JHIPSTER_NS}:${key} --help`, done); + if (opts.help) { + logger.info(opts.help); + } else { + logger.debug('Adding additional help info'); + env.run(`${JHIPSTER_NS}:${key} --help`, done); + } }); }); diff --git a/cli/commands.js b/cli/commands.js index a3f5d5a7205f..d1bb121f8e8b 100644 --- a/cli/commands.js +++ b/cli/commands.js @@ -37,7 +37,22 @@ module.exports = { }, 'import-jdl': { argument: ['jdlFiles...'], - desc: 'Create entities from the JDL file passed in argument' + cliOnly: true, + desc: 'Create entities from the JDL file passed in argument', + help: ` + --skip-install # Do not automatically install dependencies Default: false + --db # Provide DB option for the application when using skip-server flag + --json-only # Generate only the JSON files and skip entity regeneration Default: false + --ignore-application # Ignores application generation Default: false + --skip-ui-grouping # Disable the UI grouping behaviour for entity client side code Default: false + +Arguments: + jdlFiles # The JDL file names Type: String[] Required: true + +Example: + jhipster import-jdl myfile.jdl + jhipster import-jdl myfile1.jdl myfile2.jdl + ` }, info: { desc: 'Display information about your current project and system' diff --git a/cli/import-jdl.js b/cli/import-jdl.js new file mode 100644 index 000000000000..7f3f07ef6d2c --- /dev/null +++ b/cli/import-jdl.js @@ -0,0 +1,223 @@ +const chalk = require('chalk'); +const _ = require('lodash'); +const path = require('path'); +const shelljs = require('shelljs'); +const jhiCore = require('jhipster-core'); +const pretty = require('js-object-pretty-print').pretty; +const pluralize = require('pluralize'); +const { fork } = require('child_process'); + +const { + CLI_NAME, GENERATOR_NAME, logger, toString, getOptionsFromArgs, done, getOptionAsArgs +} = require('./utils'); +const jhipsterUtils = require('../generators/utils'); + +const packagejs = require('../package.json'); +const statistics = require('../generators/statistics'); + +const runYeomanProcess = require.resolve('./run-yeoman-process.js'); + +function importJDL() { + logger.info('The JDL is being parsed.'); + const jdlImporter = new jhiCore.JDLImporter(this.jdlFiles, { + databaseType: this.prodDatabaseType, + applicationType: this.applicationType, + applicationName: this.baseName, + generatorVersion: packagejs.version, + forceNoFiltering: this.options.force + }); + let importState = { + exportedEntities: [], + exportedApplications: [] + }; + try { + importState = jdlImporter.import(); + logger.debug(`importState exportedEntities: ${importState.exportedEntities.length}`); + logger.debug(`importState exportedApplications: ${importState.exportedApplications.length}`); + if (importState.exportedEntities.length > 0) { + const entityNames = _.uniq(importState.exportedEntities + .map(exportedEntity => exportedEntity.name)) + .join(', '); + logger.log(`Found entities: ${chalk.yellow(entityNames)}.`); + } else { + logger.log(chalk.yellow('No change in entity configurations, no entities were updated.')); + } + logger.log('The JDL has been successfully parsed'); + } catch (error) { + logger.debug('Error:', error); + if (error) { + const errorName = `${error.name}:` || ''; + const errorMessage = error.message || ''; + logger.log(chalk.red(`${errorName} ${errorMessage}`)); + } + logger.error(`Error while parsing applications and entities from the JDL ${error}`); + } + return importState; +} + +const shouldGenerateApplications = generator => !generator.options['ignore-application'] && generator.importState.exportedApplications.length !== 0; + +const generateApplicationFiles = ({ + generator, application, withEntities, inAppFolder +}) => { + const baseName = application[GENERATOR_NAME].baseName; + logger.info(`Generating application ${baseName} in a new parallel process`); + logger.debug(`Generating application: ${pretty(application[GENERATOR_NAME])}`); + + const cwd = inAppFolder ? path.join(generator.pwd, baseName) : generator.pwd; + logger.debug(`Child process will be triggered for ${runYeomanProcess} with cwd: ${cwd}`); + + const command = `${CLI_NAME}:app`; + fork(runYeomanProcess, [command, ...getOptionAsArgs(generator.options, withEntities)], { + cwd + }); +}; + +const generateEntityFiles = (generator, entity, inAppFolder, env) => { + const options = { + ...generator.options, + regenerate: true, + 'from-cli': true, + 'skip-install': true, + 'skip-client': entity.skipClient, + 'skip-server': entity.skipServer, + 'no-fluent-methods': entity.noFluentMethod, + 'skip-user-management': entity.skipUserManagement, + 'skip-ui-grouping': generator.options['skip-ui-grouping'] + }; + const command = `${CLI_NAME}:entity ${entity.name}`; + if (inAppFolder) { + const baseNames = entity.applications; + baseNames.forEach((baseName) => { + logger.info(`Generating entities for application ${baseName} in a new parallel process`); + const cwd = path.join(generator.pwd, baseName); + logger.debug(`Child process will be triggered for ${runYeomanProcess} with cwd: ${cwd}`); + + fork(runYeomanProcess, [command, ...getOptionAsArgs(options)], { cwd }); + }); + } else { + /* Traditional entity only generation */ + env.run(command, options, done); + } +}; + +class JDLProcessor { + constructor(jdlFiles, options) { + logger.debug(`JDLProcessor started with jdlFiles: ${jdlFiles} and options: ${toString(options)}`); + this.jdlFiles = jdlFiles; + this.options = options; + this.pwd = process.cwd(); + } + + validate() { + if (this.jdlFiles) { + this.jdlFiles.forEach((key) => { + if (!shelljs.test('-f', key)) { + logger.error(chalk.red(`\nCould not find ${key}, make sure the path is correct.\n`)); + } + }); + } + } + + getConfig() { + if (jhiCore.FileUtils.doesFileExist('.yo-rc.json')) { + logger.info('Found .yo-rc.json on path. This is an existing app'); + const configuration = jhipsterUtils.getAllJhipsterConfig(null, true); + this.applicationType = configuration.applicationType; + this.baseName = configuration.baseName; + this.databaseType = configuration.databaseType || jhipsterUtils.getDBTypeFromDBValue(this.options.db); + this.prodDatabaseType = configuration.prodDatabaseType || this.options.db; + this.devDatabaseType = configuration.devDatabaseType || this.options.db; + this.skipClient = configuration.skipClient; + this.clientFramework = configuration.clientFramework; + this.clientFramework = this.clientFramework || 'angularX'; + this.clientPackageManager = configuration.clientPackageManager; + if (!this.clientPackageManager) { + if (this.useNpm) { + this.clientPackageManager = 'npm'; + } else { + this.clientPackageManager = 'yarn'; + } + } + } + } + + importJDL() { + this.importState = importJDL.call(this); + } + + sendInsight() { + statistics.sendSubGenEvent('generator', 'import-jdl'); + } + + generateApplications() { + if (!shouldGenerateApplications(this)) { + logger.debug('Applications not generated'); + return; + } + logger.log(`Generating ${this.importState.exportedApplications.length} ` + + `${pluralize('application', this.importState.exportedApplications.length)}.`); + + this.importState.exportedApplications.forEach((application) => { + try { + generateApplicationFiles({ + generator: this, + application, + withEntities: this.importState.exportedEntities.length !== 0, + inAppFolder: this.importState.exportedApplications.length > 1 + }); + } catch (error) { + logger.error(`Error while generating applications from the parsed JDL\n${error}`); + } + }); + } + + generateEntities(env) { + if (this.importState.exportedEntities.length === 0 || shouldGenerateApplications(this)) { + return; + } + if (this.options['json-only']) { + logger.log('Entity JSON files created. Entity generation skipped.'); + return; + } + try { + this.importState.exportedEntities.forEach((exportedEntity) => { + logger.log(`Generating ${this.importState.exportedEntities.length} ` + + `${pluralize('entity', this.importState.exportedEntities.length)}.`); + + generateEntityFiles(this, exportedEntity, this.importState.exportedApplications.length > 1, env); + }); + } catch (error) { + logger.error(`Error while generating entities from the parsed JDL\n${error}`); + } + } + + end() { + if (!this.options['skip-install'] && !this.skipClient && !this.options['json-only'] + && !shouldGenerateApplications(this)) { + logger.debug('Building client'); + // TODO figure out a way to do this nicely + // this.rebuildClient(); + } + } +} + +module.exports = (args, options, env) => { + logger.debug('cmd: import-jdl from ./import-jdl'); + logger.debug(`args: ${toString(args)}`); + const jdlFiles = getOptionsFromArgs(args); + logger.info(chalk.yellow(`Executing import-jdl ${jdlFiles.join(' ')}`)); + logger.info(chalk.yellow(`Options: ${toString(options)}`)); + try { + const jdlImporter = new JDLProcessor(jdlFiles, options); + jdlImporter.validate(); + jdlImporter.getConfig(); + jdlImporter.importJDL(); + jdlImporter.sendInsight(); + jdlImporter.generateApplications(); + jdlImporter.generateEntities(env); + jdlImporter.end(); + } catch (e) { + logger.error(`Error during import-jdl: ${e.message}`, e); + } +}; diff --git a/cli/jhipster.js b/cli/jhipster.js index 7e21c424bc1c..0aa31dfac6a3 100755 --- a/cli/jhipster.js +++ b/cli/jhipster.js @@ -20,7 +20,7 @@ const semver = require('semver'); const path = require('path'); const packageJson = require('../package.json'); -const logger = require('./utils').logger; +const { logger } = require('./utils'); const currentNodeVersion = process.versions.node; const minimumNodeVersion = packageJson.engines.node; @@ -31,7 +31,6 @@ if (!semver.satisfies(currentNodeVersion, minimumNodeVersion)) { }\nJHipster requires Node version ${minimumNodeVersion }\nPlease update your version of Node.`); /* eslint-enable */ - process.exit(1); } let preferLocal = true; diff --git a/cli/run-yeoman-process.js b/cli/run-yeoman-process.js new file mode 100644 index 000000000000..604e8a781f91 --- /dev/null +++ b/cli/run-yeoman-process.js @@ -0,0 +1,18 @@ +const chalk = require('chalk'); + +const packageJson = require('../package.json'); +const { + logger, createYeomanEnv, toString, getCommandOptions, done +} = require('./utils'); + +const env = createYeomanEnv(); + +const command = process.argv[2]; +const options = getCommandOptions(packageJson, process.argv.slice(3)); +logger.info(chalk.yellow(`Executing ${command} on ${process.cwd()}`)); +logger.info(chalk.yellow(`Options: ${toString(options)}`)); +try { + env.run(command, options, done); +} catch (e) { + logger.error(e.message, e); +} diff --git a/cli/utils.js b/cli/utils.js index 5823810b2042..34d42515110b 100644 --- a/cli/utils.js +++ b/cli/utils.js @@ -20,8 +20,13 @@ const chalk = require('chalk'); const didYouMean = require('didyoumean'); const meow = require('meow'); +const yeoman = require('yeoman-environment'); +const _ = require('lodash'); + +const SUB_GENERATORS = require('./commands'); const CLI_NAME = 'jhipster'; +const GENERATOR_NAME = 'generator-jhipster'; const debug = function (msg) { if (this.debugEnabled) { console.log(`${chalk.blue('DEBUG!')} ${msg}`); @@ -36,8 +41,12 @@ const log = function (msg) { console.log(msg); }; -const error = function (msg) { +const error = function (msg, trace) { console.error(`${chalk.red.bold('ERROR!')} ${chalk.red(msg)}`); + if (trace) { + console.log(trace); + } + process.exit(1); }; const init = function (program) { @@ -46,8 +55,9 @@ const init = function (program) { const argv = program.normalize(process.argv); this.debugEnabled = program.debug = argv.includes('-d') || argv.includes('--debug'); // Need this early + info(argv); if (this.debugEnabled) { - debug('Debug logging is on'); + info('Debug logging is on'); } }; @@ -118,6 +128,20 @@ const getOptionsFromArgs = (args) => { return options; }; +/* Convert option objects to commandline args */ +const getOptionAsArgs = (options, withEntities) => { + const args = Object.entries(options).map(([key, value]) => { + if (value === true) { + return `--${_.kebabCase(key)}`; + } + return value ? `--${_.kebabCase(key)} ${value}` : ''; + }); + if (withEntities) args.push('--with-entities'); + args.push('--from-cli'); + logger.debug(`converted options: ${args}`); + return _.uniq(args.join(' ').split(' ')); +}; + /** * Get options for the command */ @@ -150,13 +174,30 @@ const getCommandOptions = (pkg, argv) => { return { 'from-cli': true }; }; +const done = () => { + logger.info(chalk.green.bold('Congratulations, JHipster execution is complete!')); +}; + +const createYeomanEnv = () => { + const env = yeoman.createEnv(); + /* Register yeoman generators */ + Object.keys(SUB_GENERATORS).forEach((generator) => { + env.register(require.resolve(`../generators/${generator}`), `${CLI_NAME}:${generator}`); + }); + return env; +}; + module.exports = { CLI_NAME, + GENERATOR_NAME, toString, logger, initHelp, getArgs, getOptionsFromArgs, getCommand, - getCommandOptions + getCommandOptions, + done, + createYeomanEnv, + getOptionAsArgs }; diff --git a/generators/app/index.js b/generators/app/index.js index 7f068f40f8b6..b61fd5b1136f 100644 --- a/generators/app/index.js +++ b/generators/app/index.js @@ -159,7 +159,7 @@ module.exports = class extends BaseGenerator { get initializing() { return { - validateFromCLi() { + validateFromCli() { if (!this.options['from-cli']) { this.warning(`Deprecated: JHipster seems to be invoked using Yeoman command. Please use the JHipster CLI. Run ${chalk.red('jhipster ')} instead of ${chalk.red('yo jhipster:')}`); } @@ -300,6 +300,7 @@ module.exports = class extends BaseGenerator { this.composeWith(require.resolve('../server'), { 'client-hook': !this.skipClient, + 'from-cli': this.options['from-cli'], configOptions: this.configOptions, force: this.options.force, debug: this.isDebugEnabled @@ -312,6 +313,7 @@ module.exports = class extends BaseGenerator { this.composeWith(require.resolve('../client'), { 'skip-install': this.options['skip-install'], 'skip-commit-hook': this.options['skip-commit-hook'], + 'from-cli': this.options['from-cli'], configOptions: this.configOptions, force: this.options.force, debug: this.isDebugEnabled @@ -392,6 +394,7 @@ module.exports = class extends BaseGenerator { this.composeWith(require.resolve('../entity'), { regenerate: true, 'skip-install': true, + 'from-cli': this.options['from-cli'], force: this.options.force, debug: this.isDebugEnabled, arguments: [entity.name] diff --git a/generators/aws-containers/index.js b/generators/aws-containers/index.js index 1d53e0b74c07..f0842531040d 100644 --- a/generators/aws-containers/index.js +++ b/generators/aws-containers/index.js @@ -87,7 +87,7 @@ module.exports = class extends BaseGenerator { get initializing() { return { - validateFromCLi() { + validateFromCli() { if (!this.options['from-cli']) { this.warning(`Deprecated: JHipster seems to be invoked using Yeoman command. Please use the JHipster CLI. Run ${chalk.red('jhipster ')} instead of ${chalk.red('yo jhipster:')}`); } diff --git a/generators/ci-cd/index.js b/generators/ci-cd/index.js index ff35729ca36e..647412779eae 100644 --- a/generators/ci-cd/index.js +++ b/generators/ci-cd/index.js @@ -50,7 +50,7 @@ module.exports = class extends BaseGenerator { get initializing() { return { - validateFromCLi() { + validateFromCli() { if (!this.options['from-cli']) { this.warning(`Deprecated: JHipster seems to be invoked using Yeoman command. Please use the JHipster CLI. Run ${chalk.red('jhipster ')} instead of ${chalk.red('yo jhipster:')}`); } diff --git a/generators/client/files-angular.js b/generators/client/files-angular.js index 2fffc3fd95cc..20ec38992eb9 100644 --- a/generators/client/files-angular.js +++ b/generators/client/files-angular.js @@ -44,6 +44,7 @@ const files = { 'webpack/webpack.common.js', 'webpack/webpack.dev.js', 'webpack/webpack.prod.js', + 'postcss.config.js', { file: 'webpack/logo-jhipster.png', method: 'copy' } ] } @@ -84,12 +85,6 @@ const files = { templates: [ 'content/scss/rtl.scss', ] - }, - { - condition: generator => generator.useSass, - templates: [ - 'postcss.config.js' - ] } ], image: [ diff --git a/generators/client/index.js b/generators/client/index.js index b272ba6fd7d9..e71c14ef01a0 100644 --- a/generators/client/index.js +++ b/generators/client/index.js @@ -141,6 +141,7 @@ module.exports = class extends BaseGenerator { 'client', { 'skip-install': this.options['skip-install'], + 'from-cli': this.options['from-cli'], configOptions: this.configOptions, force: this.options.force } @@ -153,7 +154,7 @@ module.exports = class extends BaseGenerator { // Public API method used by the getter and also by Blueprints _initializing() { return { - validateFromCLi() { + validateFromCli() { if (!this.options['from-cli']) { this.warning(`Deprecated: JHipster seems to be invoked using Yeoman command. Please use the JHipster CLI. Run ${chalk.red('jhipster ')} instead of ${chalk.red('yo jhipster:')}`); } diff --git a/generators/client/templates/angular/package.json.ejs b/generators/client/templates/angular/package.json.ejs index afd17cbab3b0..70fa9e38a9f7 100644 --- a/generators/client/templates/angular/package.json.ejs +++ b/generators/client/templates/angular/package.json.ejs @@ -17,6 +17,7 @@ limitations under the License. -%> <% var optionsForwarder = clientPackageManager == 'yarn' ? '' : '-- '%> + { "name": "<%= dasherizedBaseName %>", "version": "0.0.0", @@ -34,9 +35,9 @@ "@angular/platform-browser": "6.1.0", "@angular/platform-browser-dynamic": "6.1.0", "@angular/router": "6.1.0", - "@fortawesome/angular-fontawesome": "0.1.1", - "@fortawesome/fontawesome-svg-core": "1.2.2", - "@fortawesome/free-solid-svg-icons": "5.2.0", + "@fortawesome/angular-fontawesome": "0.2.0", + "@fortawesome/fontawesome-svg-core": "1.2.4", + "@fortawesome/free-solid-svg-icons": "5.3.1", "@ng-bootstrap/ng-bootstrap": "3.0.0", "bootstrap": "4.1.3", "core-js": "2.5.7", @@ -60,21 +61,30 @@ "@angular/cli": "6.1.2", "@angular/compiler-cli": "6.1.0", "@ngtools/webpack": "6.0.0", + <%_ if (protractorTests) { _%> + "@types/chai": "4.1.4", + <%_ } _%> "@types/jest": "22.2.3", + <%_ if (protractorTests) { _%> + "@types/mocha": "5.2.5", + <%_ } _%> "@types/node": "9.4.7", - "angular-router-loader": "0.8.5", <%_ if (protractorTests) { _%> "@types/selenium-webdriver": "3.0.8", <%_ } _%> + "angular-router-loader": "0.8.5", "angular2-template-loader": "0.6.2", "browser-sync": "2.24.6", "browser-sync-webpack-plugin": "2.2.2", "cache-loader": "1.2.2", + <%_ if (protractorTests) { _%> + "chai": "4.1.2", + "chai-as-promised": "7.1.1", + <%_ } _%> "codelyzer": "4.2.1", "copy-webpack-plugin": "4.5.1", "css-loader": "0.28.10", "exports-loader": "0.7.0", - "extract-text-webpack-plugin": "4.0.0-beta.0", "file-loader": "1.1.11", "fork-ts-checker-webpack-plugin": "0.4.1", "friendly-errors-webpack-plugin": "1.7.0", @@ -88,20 +98,21 @@ "jest-junit": "5.1.0", "jest-preset-angular": "5.2.2", "jest-sonar-reporter": "2.0.0", - <%_ if (protractorTests) { _%> - "jasmine-reporters": "2.2.1", - <%_ } _%> <%_ if(!skipCommitHook) { _%> "lint-staged": "7.0.0", <%_ } _%> <%_ if (enableTranslation) { _%> "merge-jsons-webpack-plugin": "1.0.14", <%_ } _%> + <%_ if (protractorTests) { _%> + "mocha": "5.2.0", + <%_ } _%> + "mini-css-extract-plugin": "0.4.2", "moment-locales-webpack-plugin": "1.0.5", + "optimize-css-assets-webpack-plugin": "5.0.1", "prettier": "1.11.1", <%_ if (protractorTests) { _%> "protractor": "5.4.0", - "protractor-jasmine2-screenshot-reporter": "0.4.0", <%_ } _%> "proxy-middleware": "0.15.0", "raw-loader": "0.5.1", @@ -123,8 +134,8 @@ <%_ if (useSass) { _%> "sass": "1.13.0", "sass-loader": "7.1.0", - "postcss-loader": "2.1.1", <%_ } _%> + "postcss-loader": "2.1.1", <%_ if (buildTool === 'maven') { _%> "xml2js": "0.4.19", <%_ } _%> @@ -156,7 +167,7 @@ <%_ if(!skipCommitHook) { _%> "precommit": "lint-staged", <%_ } _%> - "prettier:format": "<%= clientPackageManager %> prettier --write 'src/**/*.{ts,css,scss}'", + "prettier:format": "prettier --write \"src/**/*.{ts,css,scss}\"", "lint": "tslint --project tsconfig.json -e 'node_modules/**'", "lint:fix": "<%= clientPackageManager %> run lint <%= optionsForwarder %>--fix", "ngc": "ngc -p tsconfig-aot.json", @@ -167,6 +178,7 @@ "postinstall": "webdriver-manager update --gecko false", <%_ } _%> "start": "<%= clientPackageManager %> run webpack:dev", + "start-tls": "<%= clientPackageManager %> run webpack:dev <%= optionsForwarder %>--env.tls", "serve": "<%= clientPackageManager %> run start", "build": "<%= clientPackageManager %> run webpack:prod", "test": "<%= clientPackageManager %> run lint && jest --coverage --logHeapUsage -w=2 --config src/test/javascript/jest.conf.js", diff --git a/generators/client/templates/angular/src/test/javascript/e2e/account/account.spec.ts.ejs b/generators/client/templates/angular/src/test/javascript/e2e/account/account.spec.ts.ejs index fc1a78b94f02..179800d679ce 100644 --- a/generators/client/templates/angular/src/test/javascript/e2e/account/account.spec.ts.ejs +++ b/generators/client/templates/angular/src/test/javascript/e2e/account/account.spec.ts.ejs @@ -25,6 +25,8 @@ if (enableTranslation) { elementGetter = `getAttribute('jhiTranslate')`; } _%> +const expect = chai.expect; + describe('account', () => { let navBarPage: NavBarPage; @@ -34,30 +36,30 @@ describe('account', () => { let settingsPage: SettingsPage; <%_ } _%> - beforeAll(async () => { + before(async () => { await browser.get('/'); navBarPage = new NavBarPage(true); }); it('should fail to login with bad password', async () => { <%_ if (enableTranslation) { _%> - const expect1 = /home.title/; + const expect1 = 'home.title'; <%_ } else { _%> - const expect1 = /Welcome, Java Hipster!/; + const expect1 = 'Welcome, Java Hipster!'; <%_ } _%> const value1 = await element(by.css('h1')).<%- elementGetter %>; - expect(value1).toMatch(expect1); + expect(value1).to.eq(expect1); <%_ if (authenticationType !== 'oauth2') { _%> signInPage = await navBarPage.getSignInPage(); await signInPage.autoSignInUsing('admin', 'foo'); <%_ if (enableTranslation) { _%> - const expect2 = /login.messages.error.authentication/; + const expect2 = 'login.messages.error.authentication'; <%_ } else { _%> - const expect2 = /Failed to sign in!/; + const expect2 = 'Failed to sign in! Please check your credentials and try again.'; <%_ } _%> const value2 = await element(by.css('.alert-danger')).<%- elementGetter %>; - expect(value2).toMatch(expect2); + expect(value2).to.eq(expect2); <%_ } else { _%> signInPage = await navBarPage.getSignInPage(); await signInPage.loginWithOAuth('admin', 'foo'); @@ -65,11 +67,11 @@ describe('account', () => { // Keycloak const alert = element(by.css('.alert-error')); if (await alert.isPresent()) { - expect(await alert.getText()).toMatch('Invalid username or password.'); + expect(await alert.getText()).to.eq('Invalid username or password.'); } else { // Okta const error = element(by.css('.infobox-error')); - expect(await error.getText()).toMatch('Sign in failed!'); + expect(await error.getText()).to.eq('Sign in failed!'); } <%_ } _%> }); @@ -80,60 +82,61 @@ describe('account', () => { signInPage = await navBarPage.getSignInPage(); <%_ if (enableTranslation) { _%> - const expect1 = /global.form.username/; + const expect1 = 'global.form.username'; <%_ } else { _%> - const expect1 = /Login/; + const expect1 = 'Login'; <%_ } _%> const value1 = await element(by.className('username-label')).<%- elementGetter %>; - expect(value1).toMatch(expect1); + expect(value1).to.eq(expect1); await signInPage.autoSignInUsing('admin', 'admin'); <%_ } else {_%> await signInPage.loginWithOAuth('', 'admin'); <%_ } _%> <%_ if (enableTranslation) { _%> - const expect2 = /home.logged.message/; + const expect2 = 'home.logged.message'; <%_ } else { _%> - const expect2 = /You are logged in as user "admin"/; + const expect2 = 'You are logged in as user "admin".'; <%_ } _%> - const value2 = element(by.id('home-logged-message')); - await browser.wait(ec.visibilityOf(value2), 5000); - expect(await value2.<%- elementGetter %>).toMatch(expect2); - + await browser.wait(ec.visibilityOf(element(by.id('home-logged-message')))); + const value2 = await element(by.id('home-logged-message')).<%- elementGetter %>; + expect(value2).to.eq(expect2); + <%_ if (authenticationType === 'oauth2') { _%> await navBarPage.autoSignOut(); <%_ } _%> }); - + <%_ if (authenticationType !== 'oauth2') { _%> it('should be able to update settings', async () => { settingsPage = await navBarPage.getSettingsPage(); <%_ if (enableTranslation) { _%> - const expect1 = /settings.title/; + const expect1 = 'settings.title'; <%_ } else { _%> - const expect1 = /User settings for \[admin\]/; + const expect1 = 'User settings for [admin]'; <%_ } _%> const value1 = await settingsPage.getTitle(); - expect(value1).toMatch(expect1); + expect(value1).to.eq(expect1); await settingsPage.save(); <%_ if (enableTranslation) { _%> - const expect2 = /settings.messages.success/; + const expect2 = 'settings.messages.success'; <%_ } else { _%> - const expect2 = /Settings saved!/; + const expect2 = 'Settings saved!'; <%_ } _%> - const value2 = await element(by.css('.alert-success')).<%- elementGetter %>; - expect(value2).toMatch(expect2); + const alert = element(by.css('.alert-success')); + const value2 = await alert.<%- elementGetter %>; + expect(value2).to.eq(expect2); }); it('should fail to update password when using incorrect current password', async () => { passwordPage = await navBarPage.getPasswordPage(); <%_ if (enableTranslation) { _%> - expect(await passwordPage.getTitle()).toMatch(/password.title/); + expect(await passwordPage.getTitle()).to.eq('password.title'); <%_ } else { _%> - expect(await passwordPage.getTitle()).toMatch(/Password for \[admin\]/); + expect(await passwordPage.getTitle()).to.eq('Password for [admin]'); <%_ } _%> await passwordPage.setCurrentPassword('wrong_current_password'); @@ -142,12 +145,13 @@ describe('account', () => { await passwordPage.save(); <%_ if (enableTranslation) { _%> - const expect2 = /password.messages.error/; + const expect2 = 'password.messages.error'; <%_ } else { _%> - const expect2 = /An error has occurred! The password could not be changed./; + const expect2 = 'An error has occurred! The password could not be changed.'; <%_ } _%> - const value2 = await element(by.css('.alert-danger')).<%- elementGetter %>; - expect(value2).toMatch(expect2); + const alert = element(by.css('.alert-danger')); + const value2 = await alert.<%- elementGetter %>; + expect(value2).to.eq(expect2); settingsPage = await navBarPage.getSettingsPage(); }); @@ -155,9 +159,9 @@ describe('account', () => { passwordPage = await navBarPage.getPasswordPage(); <%_ if (enableTranslation) { _%> - expect(await passwordPage.getTitle()).toMatch(/password.title/); + expect(await passwordPage.getTitle()).to.eq('password.title'); <%_ } else { _%> - expect(await passwordPage.getTitle()).toMatch(/Password for \[admin\]/); + expect(await passwordPage.getTitle()).to.eq('Password for [admin]'); <%_ } _%> await passwordPage.setCurrentPassword('admin'); @@ -166,12 +170,13 @@ describe('account', () => { await passwordPage.save(); <%_ if (enableTranslation) { _%> - const expect2 = /password.messages.success/; + const expect2 = 'password.messages.success'; <%_ } else { _%> - const expect2 = /Password changed!/; + const expect2 = 'Password changed!'; <%_ } _%> - const value2 = await element(by.css('.alert-success')).<%- elementGetter %>; - expect(value2).toMatch(expect2); + const alert = element(by.css('.alert-success')); + const value2 = await alert.<%- elementGetter %>; + expect(value2).to.eq(expect2); await navBarPage.autoSignOut(); await navBarPage.goToSignInPage(); await signInPage.autoSignInUsing('admin', 'newpassword'); @@ -184,7 +189,7 @@ describe('account', () => { await passwordPage.save(); }); - afterAll(async () => { + after(async () => { await navBarPage.autoSignOut(); }); <%_ } _%> diff --git a/generators/client/templates/angular/src/test/javascript/e2e/admin/administration.spec.ts.ejs b/generators/client/templates/angular/src/test/javascript/e2e/admin/administration.spec.ts.ejs index 7d29b0317d6e..16caaaac50eb 100644 --- a/generators/client/templates/angular/src/test/javascript/e2e/admin/administration.spec.ts.ejs +++ b/generators/client/templates/angular/src/test/javascript/e2e/admin/administration.spec.ts.ejs @@ -25,12 +25,14 @@ if (enableTranslation) { elementGetter = `getAttribute('jhiTranslate')`; } _%> +const expect = chai.expect; + describe('administration', () => { let navBarPage: NavBarPage; let signInPage: SignInPage; - beforeAll(async () => { + before(async () => { await browser.get('/'); navBarPage = new NavBarPage(true); signInPage = await navBarPage.getSignInPage(); @@ -44,78 +46,78 @@ describe('administration', () => { beforeEach(async () => { await navBarPage.clickOnAdminMenu(); }); - + <%_ if (authenticationType !== 'oauth2') { _%> it('should load user management', async () => { await navBarPage.clickOnAdmin('user-management'); <%_ if (enableTranslation) { _%> - const expect1 = /userManagement.home.title/; + const expect1 = 'userManagement.home.title'; <%_ } else { _%> - const expect1 = /Users/; + const expect1 = 'Users'; <%_ } _%> const value1 = await element(by.id('user-management-page-heading')).<%- elementGetter %>; - expect(value1).toMatch(expect1); + expect(value1).to.eq(expect1); }); <%_ } _%> it('should load metrics', async () => { await navBarPage.clickOnAdmin('<%= jhiPrefixDashed %>-metrics'); <%_ if (enableTranslation) { _%> - const expect1 = /metrics.title/; + const expect1 = 'metrics.title'; <%_ } else { _%> - const expect1 = /Application Metrics/; + const expect1 = 'Application Metrics'; <%_ } _%> const value1 = await element(by.id('metrics-page-heading')).<%- elementGetter %>; - expect(value1).toMatch(expect1); + expect(value1).to.eq(expect1); }); it('should load health', async () => { await navBarPage.clickOnAdmin('<%= jhiPrefixDashed %>-health'); <%_ if (enableTranslation) { _%> - const expect1 = /health.title/; + const expect1 = 'health.title'; <%_ } else { _%> - const expect1 = /Health Checks/; + const expect1 = 'Health Checks'; <%_ } _%> const value1 = await element(by.id('health-page-heading')).<%- elementGetter %>; - expect(value1).toMatch(expect1); + expect(value1).to.eq(expect1); }); it('should load configuration', async () => { await navBarPage.clickOnAdmin('<%= jhiPrefixDashed %>-configuration'); <%_ if (enableTranslation) { _%> - const expect1 = /configuration.title/; + const expect1 = 'configuration.title'; <%_ } else { _%> - const expect1 = /Configuration/; + const expect1 = 'Configuration'; <%_ } _%> const value1 = await element(by.id('configuration-page-heading')).<%- elementGetter %>; - expect(value1).toMatch(expect1); + expect(value1).to.eq(expect1); }); <%_ if (databaseType !== 'no' && databaseType !== 'cassandra') { _%> it('should load audits', async () => { await navBarPage.clickOnAdmin('audits'); <%_ if (enableTranslation) { _%> - const expect1 = /audits.title/; + const expect1 = 'audits.title'; <%_ } else { _%> - const expect1 = /Audits/; + const expect1 = 'Audits'; <%_ } _%> const value1 = await element(by.id('audits-page-heading')).<%- elementGetter %>; - expect(value1).toMatch(expect1); + expect(value1).to.eq(expect1); }); <%_ } _%> it('should load logs', async () => { await navBarPage.clickOnAdmin('logs'); <%_ if (enableTranslation) { _%> - const expect1 = /logs.title/; + const expect1 = 'logs.title'; <%_ } else { _%> - const expect1 = /Logs/; + const expect1 = 'Logs'; <%_ } _%> const value1 = await element(by.id('logs-page-heading')).<%- elementGetter %>; - expect(value1).toMatch(expect1); + expect(value1).to.eq(expect1); }); - afterAll(async () => { + after(async () => { await navBarPage.autoSignOut(); }); }); diff --git a/generators/client/templates/angular/src/test/javascript/protractor.conf.js.ejs b/generators/client/templates/angular/src/test/javascript/protractor.conf.js.ejs index d93960635725..bdabd330110c 100644 --- a/generators/client/templates/angular/src/test/javascript/protractor.conf.js.ejs +++ b/generators/client/templates/angular/src/test/javascript/protractor.conf.js.ejs @@ -16,8 +16,6 @@ See the License for the specific language governing permissions and limitations under the License. -%> -const HtmlScreenshotReporter = require('protractor-jasmine2-screenshot-reporter'); -const JasmineReporters = require('jasmine-reporters'); exports.config = { allScriptsTimeout: 20000, @@ -40,13 +38,15 @@ exports.config = { baseUrl: 'http://localhost:<%= serverPort %>/', - framework: 'jasmine2', + framework: 'mocha', SELENIUM_PROMISE_MANAGER: false, - jasmineNodeOpts: { - showColors: true, - defaultTimeoutInterval: 720000 + mochaOpts: { + reporter: 'spec', + slow: 3000, + ui: 'bdd', + timeout: 720000 }, beforeLaunch: function() { @@ -57,13 +57,14 @@ exports.config = { onPrepare: function() { browser.driver.manage().window().setSize(1280, 1024); - jasmine.getEnv().addReporter(new JasmineReporters.JUnitXmlReporter({ - savePath: '<%= BUILD_DIR %>reports/e2e', - consolidateAll: false - })); - jasmine.getEnv().addReporter(new HtmlScreenshotReporter({ - dest: "<%= BUILD_DIR %>reports/e2e/screenshots" - })); + // Disable animations + // @ts-ignore + browser.executeScript('document.body.className += " notransition";'); + const chai = require('chai'); + const chaiAsPromised = require('chai-as-promised'); + chai.use(chaiAsPromised); + // @ts-ignore + global.chai = chai; }, useAllAngular2AppRoots: true diff --git a/generators/client/templates/angular/webpack/webpack.dev.js.ejs b/generators/client/templates/angular/webpack/webpack.dev.js.ejs index 5dcab907f3a1..861614dc1130 100644 --- a/generators/client/templates/angular/webpack/webpack.dev.js.ejs +++ b/generators/client/templates/angular/webpack/webpack.dev.js.ejs @@ -49,8 +49,9 @@ module.exports = (options) => webpackMerge(commonConfig({ env: ENV }), { '/h2-console', '/auth' ], - target: 'http://127.0.0.1:<%= serverPort %>', + target: `http${options.tls ? 's' : ''}://127.0.0.1:<%= serverPort %>`, secure: false, + changeOrigin: options.tls, headers: { host: 'localhost:9000' } }<% if (websocket === 'spring-websocket') { %>,{ context: [ @@ -155,6 +156,11 @@ module.exports = (options) => webpackMerge(commonConfig({ env: ENV }), { proxy: { target: 'http://localhost:9060'<% if (websocket === 'spring-websocket') { %>, ws: true<% } %> + }, + socket: { + clients: { + heartbeatTimeout: 60000 + } } }, { reload: false diff --git a/generators/client/templates/angular/webpack/webpack.prod.js.ejs b/generators/client/templates/angular/webpack/webpack.prod.js.ejs index 4a1d9228d4c8..72aff7d25225 100644 --- a/generators/client/templates/angular/webpack/webpack.prod.js.ejs +++ b/generators/client/templates/angular/webpack/webpack.prod.js.ejs @@ -18,7 +18,8 @@ -%> const webpack = require('webpack'); const webpackMerge = require('webpack-merge'); -const ExtractTextPlugin = require("extract-text-webpack-plugin"); +const MiniCssExtractPlugin = require('mini-css-extract-plugin'); +const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin"); const Visualizer = require('webpack-visualizer-plugin'); const MomentLocalesPlugin = require('moment-locales-webpack-plugin'); const TerserPlugin = require('terser-webpack-plugin'); @@ -32,9 +33,7 @@ const commonConfig = require('./webpack.common.js'); const ENV = 'production'; <%_ if (useSass) { _%> const sass = require('sass'); -const extractSASS = new ExtractTextPlugin(`content/[name]-sass.[hash].css`); <%_ } _%> -const extractCSS = new ExtractTextPlugin(`content/[name].[hash].css`); module.exports = webpackMerge(commonConfig({ env: ENV }), { // Enable source maps. Please note that this will slow down the build. @@ -62,22 +61,23 @@ module.exports = webpackMerge(commonConfig({ env: ENV }), { <%_ if (useSass) { _%> { test: /\.scss$/, - use: ['to-string-loader', 'css-loader', { - loader: 'sass-loader', + use: ['to-string-loader', 'css-loader', { + loader: 'sass-loader', options: { implementation: sass } }], exclude: /(vendor\.scss|global\.scss)/ }, { test: /(vendor\.scss|global\.scss)/, - use: extractSASS.extract({ - fallback: 'style-loader', - use: ['css-loader', 'postcss-loader', { - loader: 'sass-loader', + use: [ + MiniCssExtractPlugin.loader, + 'css-loader', + 'postcss-loader', + { + loader: 'sass-loader', options: { implementation: sass } - }], - publicPath: '../' - }) + } + ] }, <%_ } _%> { @@ -87,11 +87,11 @@ module.exports = webpackMerge(commonConfig({ env: ENV }), { }, { test: /(vendor\.css|global\.css)/, - use: extractCSS.extract({ - fallback: 'style-loader', - use: ['css-loader'], - publicPath: '../' - }) + use: [ + MiniCssExtractPlugin.loader, + 'css-loader', + 'postcss-loader' + ] }] }, optimization: { @@ -132,14 +132,17 @@ module.exports = webpackMerge(commonConfig({ env: ENV }), { indent_level: 2 } } - }) + }), + new OptimizeCSSAssetsPlugin({}) ] }, plugins: [ - <%_ if (useSass) { _%> - extractSASS, - <%_ } _%> - extractCSS, + new MiniCssExtractPlugin({ + // Options similar to the same options in webpackOptions.output + // both options are optional + filename: '[name].[contenthash].css', + chunkFilename: '[id].css' + }), new MomentLocalesPlugin({ localesToKeep: [ // jhipster-needle-i18n-language-moment-webpack - JHipster will add/remove languages in this array diff --git a/generators/client/templates/react/package.json.ejs b/generators/client/templates/react/package.json.ejs index af9a159bac9f..96977f0bca09 100644 --- a/generators/client/templates/react/package.json.ejs +++ b/generators/client/templates/react/package.json.ejs @@ -17,6 +17,7 @@ See the License for the specific language governing permissions and limitations under the License. -%> <%_ var optionsForwarder = clientPackageManager == 'yarn' ? '' : '-- ' _%> + { "name": "<%= dasherizedBaseName %>", "version": "0.0.0", @@ -27,9 +28,9 @@ limitations under the License. "node_modules" ], "dependencies": { - "@fortawesome/fontawesome-svg-core": "1.2.2", - "@fortawesome/free-solid-svg-icons": "5.2.0", - "@fortawesome/react-fontawesome": "0.1.2", + "@fortawesome/react-fontawesome": "0.1.3", + "@fortawesome/fontawesome-svg-core": "1.2.4", + "@fortawesome/free-solid-svg-icons": "5.3.1", "availity-reactstrap-validation": "2.0.6", "axios": "0.18.0", "bootstrap": "4.1.3", @@ -189,7 +190,7 @@ limitations under the License. <%_ if(!skipCommitHook) { _%> "precommit": "lint-staged", <%_ } _%> - "prettier:format": "<%= clientPackageManager %> prettier --write 'src/**/*.{ts,tsx,css,scss}'", + "prettier:format": "prettier --write \"src/**/*.{ts,tsx,css,scss}\"", "lint": "tslint --project tsconfig.json -e 'node_modules/**'", "lint:fix": "<%= clientPackageManager %> run lint <%= optionsForwarder %>--fix", "cleanup": "rimraf <%= BUILD_DIR %>www", @@ -198,6 +199,7 @@ limitations under the License. "postinstall": "webdriver-manager update --gecko false", <%_ } _%> "start": "<%= clientPackageManager %> run webpack:dev", + "start-tls": "<%= clientPackageManager %> run webpack:dev <%= optionsForwarder %>--env.tls", "test": "<%= clientPackageManager %> run lint && jest --coverage --logHeapUsage -w=2 --config src/test/javascript/jest.conf.js", "test:watch": "<%= clientPackageManager %> test <%= optionsForwarder %>--watch", "webpack:dev": "<%= clientPackageManager %> run webpack-dev-server <%= optionsForwarder %>--config webpack/webpack.dev.js --inline --port=9060 --env.stats=minimal", diff --git a/generators/client/templates/react/webpack/webpack.dev.js.ejs b/generators/client/templates/react/webpack/webpack.dev.js.ejs index 9fcb9fa7271e..7118ed71e8de 100644 --- a/generators/client/templates/react/webpack/webpack.dev.js.ejs +++ b/generators/client/templates/react/webpack/webpack.dev.js.ejs @@ -79,8 +79,9 @@ module.exports = (options) => webpackMerge(commonConfig({ env: ENV }), { '/h2-console', '/auth' ], - target: 'http://127.0.0.1:<%= serverPort %>', + target: `http${options.tls ? 's' : ''}://127.0.0.1:<%= serverPort %>`, secure: false, + changeOrigin: options.tls, headers: { host: 'localhost:9000' } }<% if (websocket === 'spring-websocket') { %>,{ context: [ @@ -107,6 +108,11 @@ module.exports = (options) => webpackMerge(commonConfig({ env: ENV }), { proxy: { target: 'http://localhost:9060'<% if (websocket === 'spring-websocket') { %>, ws: true<% } %> + }, + socket: { + clients: { + heartbeatTimeout: 60000 + } } }, { reload: false diff --git a/generators/docker-compose/index.js b/generators/docker-compose/index.js index 1b2a3c6b7864..7a55de658068 100644 --- a/generators/docker-compose/index.js +++ b/generators/docker-compose/index.js @@ -47,7 +47,7 @@ module.exports = class extends BaseGenerator { get initializing() { return { - validateFromCLi() { + validateFromCli() { if (!this.options['from-cli']) { this.warning(`Deprecated: JHipster seems to be invoked using Yeoman command. Please use the JHipster CLI. Run ${chalk.red('jhipster ')} instead of ${chalk.red('yo jhipster:')}`); } @@ -156,6 +156,7 @@ module.exports = class extends BaseGenerator { this.appsYaml = []; this.keycloakRedirectUri = ''; let portIndex = 8080; + this.serverPort = portIndex; this.appsFolders.forEach((appsFolder, index) => { const appConfig = this.appConfigs[index]; const lowercaseBaseName = appConfig.baseName.toLowerCase(); diff --git a/generators/docker-compose/templates/jhipster-registry.yml.ejs b/generators/docker-compose/templates/jhipster-registry.yml.ejs index 2e6474255c22..435219044589 100644 --- a/generators/docker-compose/templates/jhipster-registry.yml.ejs +++ b/generators/docker-compose/templates/jhipster-registry.yml.ejs @@ -27,7 +27,7 @@ services: # "native" profile means the filesystem is used to store data, see # http://cloud.spring.io/spring-cloud-config/spring-cloud-config.html environment: - - SPRING_PROFILES_ACTIVE=dev<% if (authenticationType === 'oauth2') { %>,oauth2<% } %> + - SPRING_PROFILES_ACTIVE=dev<% if (authenticationType === 'oauth2') { %>,oauth2<% } %><% if (authenticationType === 'uaa') { %>,uaa<% } %> - SPRING_SECURITY_USER_PASSWORD=<%= adminPassword %> - JHIPSTER_REGISTRY_PASSWORD=<%= adminPassword %> - SPRING_CLOUD_CONFIG_SERVER_COMPOSITE_0_TYPE=native diff --git a/generators/docker-compose/templates/realm-config/jhipster-realm.json.ejs b/generators/docker-compose/templates/realm-config/jhipster-realm.json.ejs index a760a13d9d5b..27823b5c8721 100644 --- a/generators/docker-compose/templates/realm-config/jhipster-realm.json.ejs +++ b/generators/docker-compose/templates/realm-config/jhipster-realm.json.ejs @@ -755,7 +755,7 @@ "bearerOnly": false, "consentRequired": false, "standardFlowEnabled": true, - "implicitFlowEnabled": false, + "implicitFlowEnabled": true, "directAccessGrantsEnabled": false, "serviceAccountsEnabled": false, "publicClient": true, diff --git a/generators/entity-client/index.js b/generators/entity-client/index.js index c4d7aa535250..e65b63852268 100644 --- a/generators/entity-client/index.js +++ b/generators/entity-client/index.js @@ -35,7 +35,8 @@ module.exports = class extends BaseGenerator { context: opts.context, force: opts.force, debug: opts.context.isDebugEnabled, - 'skip-install': opts.context.options['skip-install'] + 'skip-install': opts.context.options['skip-install'], + 'from-cli': opts.context.options['from-cli'] }); } else { useBlueprint = false; diff --git a/generators/entity-client/templates/angular/src/test/javascript/e2e/entities/entity.spec.ts.ejs b/generators/entity-client/templates/angular/src/test/javascript/e2e/entities/entity.spec.ts.ejs index 398c9d01f4ae..286ad020fc01 100644 --- a/generators/entity-client/templates/angular/src/test/javascript/e2e/entities/entity.spec.ts.ejs +++ b/generators/entity-client/templates/angular/src/test/javascript/e2e/entities/entity.spec.ts.ejs @@ -16,6 +16,7 @@ See the License for the specific language governing permissions and limitations under the License. -%> +/* tslint:disable no-unused-expression */ import { browser, ExpectedConditions as ec, <% if ( fieldsContainInstant || fieldsContainZonedDateTime ) { %>protractor<% } %> } from 'protractor'; import { NavBarPage, SignInPage } from '../../<%= entityParentPathAddition %>page-objects/jhi-page-objects'; @@ -38,6 +39,8 @@ for (let relationship of relationships) { } } _%> +const expect = chai.expect; + describe('<%= entityClass %> e2e test', () => { let navBarPage: NavBarPage; @@ -50,7 +53,7 @@ describe('<%= entityClass %> e2e test', () => { const absolutePath = path.resolve(__dirname, fileToUpload); <%_ } _%> - beforeAll(async () => { + before(async () => { await browser.get('/'); navBarPage = new NavBarPage(); signInPage = await navBarPage.getSignInPage(); @@ -67,10 +70,10 @@ describe('<%= entityClass %> e2e test', () => { <%= entityInstance %>ComponentsPage = new <%= entityClass %>ComponentsPage(); <%_ if (enableTranslation) { _%> expect(await <%= entityInstance %>ComponentsPage.getTitle()) - .toMatch(/<%= angularAppName %>.<%= entityTranslationKey %>.home.title/); + .to.eq('<%= angularAppName %>.<%= entityTranslationKey %>.home.title'); <%_ } else { _%> expect(await <%= entityInstance %>ComponentsPage.getTitle()) - .toMatch(/<%= entityClassPluralHumanized %>/); + .to.eq('<%= entityClassPluralHumanized %>'); <%_ } _%> }); @@ -79,15 +82,17 @@ describe('<%= entityClass %> e2e test', () => { <%= entityInstance %>UpdatePage = new <%= entityClass %>UpdatePage(); <%_ if (enableTranslation) { _%> expect(await <%= entityInstance %>UpdatePage.getPageTitle()) - .toMatch(/<%= angularAppName %>.<%= entityTranslationKey %>.home.createOrEditLabel/); + .to.eq('<%= angularAppName %>.<%= entityTranslationKey %>.home.createOrEditLabel'); <%_ } else { _%> expect(await <%= entityInstance %>UpdatePage.getPageTitle()) - .toMatch(/Create or edit a <%= entityClassHumanized %>/); + .to.eq('Create or edit a <%= entityClassHumanized %>'); <%_ } _%> await <%= entityInstance %>UpdatePage.cancel(); }); <%= openBlockComment %> it('should create and save <%= entityClassPlural %>', async () => { + const nbButtonsBeforeCreate = await <%= entityInstance %>ComponentsPage.countDeleteButtons(); + await <%= entityInstance %>ComponentsPage.clickOnCreateButton(); <%_ fields.forEach((field) => { const fieldName = field.fieldName; @@ -98,35 +103,35 @@ describe('<%= entityClass %> e2e test', () => { _%> <%_ if (['Integer', 'Long', 'Float', 'Double', 'BigDecimal'].includes(fieldType)) { _%> await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('5'); - expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).toMatch('5'); + expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.eq('5'); <%_ } else if (fieldType === 'LocalDate') { _%> await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('2000-12-31'); - expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).toMatch('2000-12-31'); + expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.eq('2000-12-31'); <%_ } else if (['Instant', 'ZonedDateTime'].includes(fieldType)) { _%> await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('01/01/2001' + protractor.Key.TAB + '02:30AM'); - expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).toContain('2001-01-01T02:30'); + expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.contain('2001-01-01T02:30'); <%_ } else if (fieldType === 'Boolean') { _%> const selected<%= fieldNameCapitalized %> = <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input(); if (await selected<%= fieldNameCapitalized %>.isSelected()) { await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input().click(); - expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input().isSelected()).toBeFalsy(); + expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input().isSelected()).to.be.false; } else { await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input().click(); - expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input().isSelected()).toBeTruthy(); + expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input().isSelected()).to.be.true; } <%_ } else if (['byte[]', 'ByteBuffer'].includes(fieldType) && fieldTypeBlobContent === 'text') { _%> await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('<%= fieldName %>'); - expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).toMatch('<%= fieldName %>'); + expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.eq('<%= fieldName %>'); <%_ } else if (['byte[]', 'ByteBuffer'].includes(fieldType)) { _%> await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input(absolutePath); <%_ } else if (fieldIsEnum) { _%> await <%= entityInstance %>UpdatePage.<%=fieldName %>SelectLastOption(); <%_ } else if (fieldType === 'UUID'){ _%> await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('64c99148-3908-465d-8c4a-e510e3ade974'); - expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).toMatch('64c99148-3908-465d-8c4a-e510e3ade974'); + expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.eq('64c99148-3908-465d-8c4a-e510e3ade974'); <%_ } else { _%> await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('<%= fieldName %>'); - expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).toMatch('<%= fieldName %>'); + expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.eq('<%= fieldName %>'); <%_ } _%> <%_ }); _%> <%_ relationships.forEach((relationship) => { @@ -141,9 +146,10 @@ describe('<%= entityClass %> e2e test', () => { <%_ } _%> <%_ }); _%> await <%= entityInstance %>UpdatePage.save(); - expect(await <%= entityInstance %>UpdatePage.getSaveButton().isPresent()).toBeFalsy(); - });<%= closeBlockComment %> + expect(await <%= entityInstance %>UpdatePage.getSaveButton().isPresent()).to.be.false; + expect(await <%= entityInstance %>ComponentsPage.countDeleteButtons()).to.eq(nbButtonsBeforeCreate + 1); + });<%= closeBlockComment %> <%= openBlockComment %> it('should delete last <%= entityClass %>', async () => { const nbButtonsBeforeDelete = await <%= entityInstance %>ComponentsPage.countDeleteButtons(); @@ -152,17 +158,17 @@ describe('<%= entityClass %> e2e test', () => { <%= entityInstance %>DeleteDialog = new <%= entityClass %>DeleteDialog(); <%_ if (enableTranslation) { _%> expect(await <%= entityInstance %>DeleteDialog.getDialogTitle()) - .toMatch(/<%= i18nKeyPrefix %>.delete.question/); + .to.eq('<%= i18nKeyPrefix %>.delete.question'); <%_ } else { _%> expect(await <%= entityInstance %>DeleteDialog.getDialogTitle()) - .toMatch(/Are you sure you want to delete this <%= entityClassHumanized %>?/); + .to.eq('Are you sure you want to delete this <%= entityClassHumanized %>?'); <%_ } _%> await <%= entityInstance %>DeleteDialog.clickOnConfirmButton(); - expect(await <%= entityInstance %>ComponentsPage.countDeleteButtons()).toBe(nbButtonsBeforeDelete - 1); + expect(await <%= entityInstance %>ComponentsPage.countDeleteButtons()).to.eq(nbButtonsBeforeDelete - 1); });<%= closeBlockComment %> - afterAll(async () => { + after(async () => { await navBarPage.autoSignOut(); }); }); diff --git a/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-delete-dialog.tsx.ejs b/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-delete-dialog.tsx.ejs index 4ecb79ec76cb..9e5423eab770 100644 --- a/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-delete-dialog.tsx.ejs +++ b/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-delete-dialog.tsx.ejs @@ -27,7 +27,7 @@ import { I<%= entityReactName %> } from 'app/shared/model/<%= entityModelFileNam import { IRootState } from 'app/shared/reducers'; import { getEntity, deleteEntity } from './<%= entityFileName %>.reducer'; -export interface I<%= entityReactName %>DeleteDialogProps extends StateProps, DispatchProps, RouteComponentProps<{id: number}> {} +export interface I<%= entityReactName %>DeleteDialogProps extends StateProps, DispatchProps, RouteComponentProps<{id: string}> {} export class <%= entityReactName %>DeleteDialog extends React.ComponentDeleteDialogProps> { componentDidMount() { diff --git a/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-detail.tsx.ejs b/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-detail.tsx.ejs index a1e6cdbe387f..7dda2c4630f4 100644 --- a/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-detail.tsx.ejs +++ b/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-detail.tsx.ejs @@ -42,7 +42,7 @@ import { I<%= entityReactName %> } from 'app/shared/model/<%= entityModelFileNam // tslint:disable-next-line:no-unused-variable import { APP_DATE_FORMAT, APP_LOCAL_DATE_FORMAT } from 'app/config/constants'; -export interface I<%= entityReactName %>DetailProps extends StateProps, DispatchProps, RouteComponentProps<{id: number}> {} +export interface I<%= entityReactName %>DetailProps extends StateProps, DispatchProps, RouteComponentProps<{id: string}> {} export class <%= entityReactName %>Detail extends React.ComponentDetailProps> { diff --git a/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-update.tsx.ejs b/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-update.tsx.ejs index 875796cc1b61..ab609af626d2 100644 --- a/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-update.tsx.ejs +++ b/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-update.tsx.ejs @@ -121,7 +121,7 @@ import { convertDateTimeFromServer } from 'app/shared/util/date-utils'; import { mapIdList } from 'app/shared/util/entity-utils'; <%_ } _%> -export interface I<%= entityReactName %>UpdateProps extends StateProps, DispatchProps, RouteComponentProps<{id: number}> {} +export interface I<%= entityReactName %>UpdateProps extends StateProps, DispatchProps, RouteComponentProps<{id: string}> {} export interface I<%= entityReactName %>UpdateState { isNew: boolean; @@ -129,7 +129,7 @@ export interface I<%= entityReactName %>UpdateState { ids<%= val.relationshipName %>: any[]; <%_ }) _%> <%_ relFieldNames.forEach(val => { _%> - <%= val.relationshipFieldName %>Id: number; + <%= val.relationshipFieldName %>Id: string; <%_ }) _%> } @@ -142,7 +142,7 @@ export class <%= entityReactName %>Update extends React.Component: [], <%_ }) _%> <%_ relFieldNames.forEach(val => { _%> - <%= val.relationshipFieldName %>Id: 0, + <%= val.relationshipFieldName %>Id: '0', <%_ }) _%> isNew: !this.props.match.params || !this.props.match.params.id, }; @@ -329,7 +329,7 @@ export class <%= entityReactName %>Update extends React.Component - /> + /> <%_ } else if (['byte[]', 'ByteBuffer'].includes(fieldType)) { diff --git a/generators/entity-client/templates/react/src/test/javascript/e2e/entities/entity.spec.ts.ejs b/generators/entity-client/templates/react/src/test/javascript/e2e/entities/entity.spec.ts.ejs index 278ca4e2494c..2a08d887199d 100644 --- a/generators/entity-client/templates/react/src/test/javascript/e2e/entities/entity.spec.ts.ejs +++ b/generators/entity-client/templates/react/src/test/javascript/e2e/entities/entity.spec.ts.ejs @@ -93,6 +93,8 @@ describe('<%= entityClass %> e2e test', () => { }); <%= openBlockComment %> it('should create and save <%= entityClassPlural %>', async () => { + const nbButtonsBeforeCreate = await <%= entityInstance %>ComponentsPage.countDeleteButtons(); + <%_ fields.forEach((field) => { const fieldName = field.fieldName; const fieldNameCapitalized = field.fieldNameCapitalized; @@ -148,6 +150,9 @@ describe('<%= entityClass %> e2e test', () => { await <%= entityInstance %>UpdatePage.save(); await waitUntilHidden(<%= entityInstance %>UpdatePage.getSaveButton()); expect(await <%= entityInstance %>UpdatePage.getSaveButton().isPresent()).to.be.false; + + <%= entityInstance %>ComponentsPage.waitUntilDeleteButtonsLength(nbButtonsBeforeCreate + 1); + expect(await <%= entityInstance %>ComponentsPage.countDeleteButtons()).to.eq(nbButtonsBeforeCreate + 1); });<%= closeBlockComment %> <%= openBlockComment %> it('should delete last <%= entityClass %>', async () => { diff --git a/generators/entity-i18n/index.js b/generators/entity-i18n/index.js index 3c9a096cfa5c..c49b2bfd56b9 100644 --- a/generators/entity-i18n/index.js +++ b/generators/entity-i18n/index.js @@ -35,7 +35,8 @@ module.exports = class extends BaseGenerator { context: opts.context, force: opts.force, debug: opts.context.isDebugEnabled, - 'skip-install': opts.context.options['skip-install'] + 'skip-install': opts.context.options['skip-install'], + 'from-cli': opts.context.options['from-cli'] }); } else { useBlueprint = false; diff --git a/generators/entity-i18n/templates/i18n/entity_my.json.ejs b/generators/entity-i18n/templates/i18n/entity_my.json.ejs new file mode 100644 index 000000000000..9b8c22877455 --- /dev/null +++ b/generators/entity-i18n/templates/i18n/entity_my.json.ejs @@ -0,0 +1,57 @@ +<%# + Copyright 2013-2018 the original author or authors from the JHipster project. + + This file is part of the JHipster project, see https://www.jhipster.tech/ + for more information. + + 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. +-%><% +let helpBlocks = 0; %> +{ + "<%= angularAppName %>": { + "<%= entityTranslationKey %>" : { + "home": { + "title": "<%= entityClassPluralHumanized %>", + "createLabel": "<%= entityClassHumanized %> အသစ်ထည့်မည်", + "createOrEditLabel": "<%= entityClassHumanized %> အသစ်ထည့်ခြင်း (သို့) ပြုပြင်ခြင်း"<% if (searchEngine === 'elasticsearch') { %>, + "search": "ရှာဖွေရန် <%= entityClassHumanized %>"<% } %> + },<% if (!microserviceAppName) { %> + "created": "{{ param }} အိုင်ဒီဖြင့် <%= entityClassHumanized %> အသစ်တစ်ခုအား ထည့်ပြီးပါပြီ။", + "updated": "{{ param }} အိုင်ဒီဖြင့် <%= entityClassHumanized %> တစ်ခုအား ပြုပြင်ပြီးပါပြီ။", + "deleted": "{{ param }} အိုင်ဒီဖြင့် <%= entityClassHumanized %> တစ်ခုအား ဖျက်ပြီးပါပြီ။",<% } %> + "delete": { + "question": "<%= entityClassHumanized %> {{ id }} အား ဖျက်ပါမည်။ သေချာပါသလား?" + }, + "detail": { + "title": "<%= entityClassHumanized %>" + }<% for (idx in fields) { + if (typeof fields[idx].javadoc !== 'undefined') ++helpBlocks; %>, + "<%=fields[idx].fieldName%>": "<%= fields[idx].fieldNameHumanized %>"<% } %><% for (idx in relationships) { %>, + "<%=relationships[idx].relationshipName%>": "<%= relationships[idx].relationshipNameHumanized %>"<% } if (helpBlocks > 0){%>, + "help": {<% for (idx in fields) { + if (fields[idx].javadoc) { + --helpBlocks; %> + "<%=fields[idx].fieldName%>": "<%= fields[idx].javadoc %>"<% if (helpBlocks > 0) { %>,<%} + } + } %> + }<% } %> + } + }<% if (microserviceAppName) { %>, + "<%= microserviceAppName %>": { + "<%= entityTranslationKey %>" : { + "created": "{{ param }} အိုင်ဒီဖြင့် <%= entityClassHumanized %> အသစ်တစ်ခုအား ထည့်ပြီးပါပြီ။", + "updated": "{{ param }} အိုင်ဒီဖြင့် <%= entityClassHumanized %> တစ်ခုအား ပြုပြင်ပြီးပါပြီ။", + "deleted": "{{ param }} အိုင်ဒီဖြင့် <%= entityClassHumanized %> တစ်ခုအား ဖျက်ပြီးပါပြီ။" + } + }<% } %> +} diff --git a/generators/entity-server/index.js b/generators/entity-server/index.js index 7388a3da212a..4e46d154d6b5 100644 --- a/generators/entity-server/index.js +++ b/generators/entity-server/index.js @@ -37,7 +37,8 @@ module.exports = class extends BaseGenerator { useBlueprint = this.composeBlueprint(blueprint, 'entity-server', { context: opts.context, force: opts.force, - debug: opts.context.isDebugEnabled + debug: opts.context.isDebugEnabled, + 'from-cli': opts.context.options['from-cli'] }); } else { useBlueprint = false; diff --git a/generators/entity/index.js b/generators/entity/index.js index 617022dcda74..cd60fd10c490 100644 --- a/generators/entity/index.js +++ b/generators/entity/index.js @@ -128,6 +128,7 @@ module.exports = class extends BaseGenerator { 'entity', { 'skip-install': this.options['skip-install'], + 'from-cli': this.options['from-cli'], force: this.options.force, arguments: [this.context.name] } @@ -140,7 +141,7 @@ module.exports = class extends BaseGenerator { // Public API method used by the getter and also by Blueprints _initializing() { return { - validateFromCLi() { + validateFromCli() { if (!this.options['from-cli']) { this.warning(`Deprecated: JHipster seems to be invoked using Yeoman command. Please use the JHipster CLI. Run ${chalk.red('jhipster ')} instead of ${chalk.red('yo jhipster:')}`); } @@ -684,7 +685,7 @@ module.exports = class extends BaseGenerator { const jhiTablePrefix = context.jhiTablePrefix; if (context.dto && context.dto === 'mapstruct') { - if (otherEntityData && (!otherEntityData.dto || otherEntityData.dto !== 'mapstruct')) { + if (otherEntityData && (!otherEntityData.dto || otherEntityData.dto !== 'mapstruct') && otherEntityName !== 'user') { this.warning(chalk.red(`This entity has the DTO option, and it has a relationship with entity "${otherEntityName}" that doesn't have the DTO option. This will result in an error.`)); } } diff --git a/generators/export-jdl/index.js b/generators/export-jdl/index.js index 8e055f7a0ee7..813551df9646 100644 --- a/generators/export-jdl/index.js +++ b/generators/export-jdl/index.js @@ -36,7 +36,7 @@ module.exports = class extends BaseGenerator { get default() { return { - validateFromCLi() { + validateFromCli() { if (!this.options['from-cli']) { this.warning(`Deprecated: JHipster seems to be invoked using Yeoman command. Please use the JHipster CLI. Run ${chalk.red('jhipster ')} instead of ${chalk.red('yo jhipster:')}`); } diff --git a/generators/generator-base-private.js b/generators/generator-base-private.js index 2faeb99616e3..3bf30156191a 100644 --- a/generators/generator-base-private.js +++ b/generators/generator-base-private.js @@ -982,10 +982,7 @@ module.exports = class extends Generator { * @param {string} db - db */ getDBTypeFromDBValue(db) { - if (constants.SQL_DB_OPTIONS.map(db => db.value).includes(db)) { - return 'sql'; - } - return db; + return jhipsterUtils.getDBTypeFromDBValue(db); } /** diff --git a/generators/generator-base.js b/generators/generator-base.js index 5a0324b75be5..19ef486c7257 100644 --- a/generators/generator-base.js +++ b/generators/generator-base.js @@ -50,11 +50,13 @@ const SERVER_MAIN_RES_DIR = constants.SERVER_MAIN_RES_DIR; */ module.exports = class extends PrivateBase { /** + * Deprecated * Get the JHipster configuration from the .yo-rc.json file. * * @param {string} namespace - namespace of the .yo-rc.json config file. By default: generator-jhipster */ getJhipsterAppConfig(namespace = 'generator-jhipster') { + this.warning('This method is deprecated. Use getAllJhipsterConfig'); const fromPath = '.yo-rc.json'; if (shelljs.test('-f', fromPath)) { const fileData = this.fs.readJSON(fromPath); @@ -2313,6 +2315,7 @@ module.exports = class extends PrivateBase { 'skip-install': true, 'skip-server': skipServer, 'skip-client': skipClient, + 'from-cli': generator.options['from-cli'], languages: generator.languages, force: generator.options.force, debug: generator.options.debug @@ -2539,23 +2542,7 @@ module.exports = class extends PrivateBase { * @param {boolean} force force getting direct from file */ getAllJhipsterConfig(generator = this, force) { - let configuration = generator.config.getAll() || {}; - if ((force || !configuration.baseName) && jhiCore.FileUtils.doesFileExist('.yo-rc.json')) { - const yoRc = JSON.parse(fs.readFileSync('.yo-rc.json', { encoding: 'utf-8' })); - configuration = yoRc['generator-jhipster']; - // merge the blueprint config if available - if (configuration.blueprint) { - configuration = Object.assign(configuration, yoRc[configuration.blueprint]); - } - } - if (!configuration.get || typeof configuration.get !== 'function') { - Object.assign(configuration, { - getAll: () => configuration, - get: key => configuration[key], - set: (key, value) => { configuration[key] = value; } - }); - } - return configuration; + return jhipsterUtils.getAllJhipsterConfig(generator, force); } /** diff --git a/generators/generator-constants.js b/generators/generator-constants.js index 1c4cae146f51..b269434b436f 100644 --- a/generators/generator-constants.js +++ b/generators/generator-constants.js @@ -18,7 +18,7 @@ */ // version of docker images -const DOCKER_JHIPSTER_REGISTRY = 'jhipster/jhipster-registry:v4.0.1'; +const DOCKER_JHIPSTER_REGISTRY = 'jhipster/jhipster-registry:v4.0.2'; const DOCKER_JAVA_JRE = 'openjdk:8-jre-alpine'; const DOCKER_MYSQL = 'mysql:5.7.20'; const DOCKER_MARIADB = 'mariadb:10.3.7'; @@ -42,7 +42,7 @@ const DOCKER_JHIPSTER_LOGSTASH = 'jhipster/jhipster-logstash:v3.0.1'; const DOCKER_JHIPSTER_IMPORT_DASHBOARDS = 'jhipster/jhipster-import-dashboards:v3.0.1'; const DOCKER_JHIPSTER_ZIPKIN = 'jhipster/jhipster-zipkin:v3.0.1'; const DOCKER_TRAEFIK = 'traefik:1.5.3'; -const DOCKER_CONSUL = 'consul:1.2.0'; +const DOCKER_CONSUL = 'consul:1.2.3'; const DOCKER_CONSUL_CONFIG_LOADER = 'jhipster/consul-config-loader:v0.3.0'; const DOCKER_PROMETHEUS = 'prom/prometheus:v1.6.3'; const DOCKER_PROMETHEUS_ALERTMANAGER = 'prom/alertmanager:v0.6.2'; @@ -140,6 +140,7 @@ const LANGUAGES = [ { name: 'Japanese', dispName: '日本語', value: 'ja' }, { name: 'Korean', dispName: '한국어', value: 'ko' }, { name: 'Marathi', dispName: 'मराठी', value: 'mr' }, + { name: 'Myanmar', dispName: 'မြန်မာ', value: 'my' }, { name: 'Polish', dispName: 'Polski', value: 'pl' }, { name: 'Portuguese (Brazilian)', dispName: 'Português (Brasil)', value: 'pt-br', localeId: 'pt' diff --git a/generators/import-jdl/index.js b/generators/import-jdl/index.js index 890b4ce0f9d7..4b5a9c97cd92 100644 --- a/generators/import-jdl/index.js +++ b/generators/import-jdl/index.js @@ -16,273 +16,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -const _ = require('lodash'); -const path = require('path'); -const shelljs = require('shelljs'); const chalk = require('chalk'); -const jhiCore = require('jhipster-core'); const BaseGenerator = require('../generator-base'); -const packagejs = require('../../package.json'); -const statistics = require('../statistics'); -class ImporterGenerator extends BaseGenerator { - constructor(args, opts) { - super(args, opts); - this.argument('jdlFiles', { type: Array, required: true }); - this.jdlFiles = this.options.jdlFiles; - // This adds support for a `--from-cli` flag - this.option('from-cli', { - desc: 'Indicates the command is run from JHipster CLI', - type: Boolean, - defaults: false - }); - - // This adds support for a `--db` flag - this.option('db', { - desc: 'Provide DB option for the application when using skip-server flag', - type: String - }); - - // This adds support for a `--json-only` flag - this.option('json-only', { - desc: 'Generate only the JSON files and skip entity regeneration', - type: Boolean, - defaults: false - }); - - // Support for the '--ignore-application' flag - this.option('ignore-application', { - desc: 'Ignores application generation', - type: Boolean, - defaults: false - }); - - // This adds support for a `--skip-ui-grouping` flag - this.option('skip-ui-grouping', { - desc: 'Disable the UI grouping behaviour for entity client side code', - type: Boolean, - defaults: false - }); - - if (this.config.get('baseName')) { - const configuration = this.config.getAll(); - this.applicationType = configuration.applicationType; - this.baseName = configuration.baseName; - this.databaseType = configuration.databaseType || this.getDBTypeFromDBValue(this.options.db); - this.prodDatabaseType = configuration.prodDatabaseType || this.options.db; - this.devDatabaseType = configuration.devDatabaseType || this.options.db; - this.skipClient = configuration.skipClient; - this.clientFramework = configuration.clientFramework; - this.clientFramework = this.clientFramework || 'angularX'; - this.clientPackageManager = configuration.clientPackageManager; - if (!this.clientPackageManager) { - if (this.useNpm) { - this.clientPackageManager = 'npm'; - } else { - this.clientPackageManager = 'yarn'; - } - } - } - - this.importState = importJDL.call(this); - } -} - -function importJDL() { - this.log('The JDL is being parsed.'); - const jdlImporter = new jhiCore.JDLImporter(this.jdlFiles, { - databaseType: this.prodDatabaseType, - applicationType: this.applicationType, - applicationName: this.baseName, - generatorVersion: packagejs.version, - forceNoFiltering: this.options.force - }); - let importState = { - exportedEntities: [], - exportedApplications: [] - }; - try { - importState = jdlImporter.import(); - if (importState.exportedEntities.length > 0) { - const entityNames = _.uniq(importState.exportedEntities - .map(exportedEntity => exportedEntity.name)) - .join(', '); - this.log(`Found entities: ${chalk.yellow(entityNames)}.`); - } else { - this.log(chalk.yellow('No change in entity configurations, no entities were updated.')); - } - this.log('The JDL has been successfully parsed'); - } catch (error) { - this.debug('Error:', error); - if (error) { - const errorName = `${error.name}:` || ''; - const errorMessage = error.message || ''; - this.log(chalk.red(`${errorName} ${errorMessage}`)); - } - this.error(`Error while parsing applications and entities from the JDL ${error}`); - } - return importState; -} - -module.exports = class extends ImporterGenerator { - constructor(args, opts) { - super(args, opts); - this.registerClientTransforms(); - this.applicationsLeftToGenerate = []; - this.entitiesLeftToGenerate = []; - } - - get initializing() { - return { - validateFromCLi() { - if (!this.options['from-cli']) { - this.warning(`Deprecated: JHipster seems to be invoked using Yeoman command. Please use the JHipster CLI. Run ${chalk.red('jhipster ')} instead of ${chalk.red('yo jhipster:')}`); - } - }, - - validate() { - if (this.jdlFiles) { - this.jdlFiles.forEach((key) => { - if (!shelljs.test('-f', key)) { - this.env.error(chalk.red(`\nCould not find ${key}, make sure the path is correct.\n`)); - } - }); - } - }, - - getConfig() { - if (!this.config.get('baseName') && jhiCore.FileUtils.doesFileExist('.yo-rc.json')) { - this.createConfigFromNewConfFile(this); - } - const configuration = this.config.getAll(); - this.applicationType = configuration.applicationType; - this.baseName = configuration.baseName; - this.databaseType = configuration.databaseType || this.getDBTypeFromDBValue(this.options.db); - this.prodDatabaseType = configuration.prodDatabaseType || this.options.db; - this.devDatabaseType = configuration.devDatabaseType || this.options.db; - this.skipClient = configuration.skipClient; - this.clientFramework = configuration.clientFramework; - this.clientFramework = this.clientFramework || 'angularX'; - this.clientPackageManager = configuration.clientPackageManager; - if (!this.clientPackageManager) { - if (this.useNpm) { - this.clientPackageManager = 'npm'; - } else { - this.clientPackageManager = 'yarn'; - } - } - } - }; - } - - get configuring() { - return { - insight() { - statistics.sendSubGenEvent('generator', 'import-jdl'); - } - }; - } - - get writing() { - return { - generateApplications() { - if (!shouldGenerateApplications(this) || this.importState.exportedApplications.length === 0) { - return; - } - this.log(`Generating ${this.importState.exportedApplications.length} ` - + `application${this.importState.exportedApplications.length > 1 ? 's' : ''}.`); - if (this.importState.exportedApplications.length === 1) { - const application = this.importState.exportedApplications[0]; - try { - generateApplicationFiles({ - generator: this, - application, - withEntities: this.importState.exportedEntities.length !== 0 - }); - } catch (error) { - this.error(`Error while generating applications from the parsed JDL\n${error}`); - } - } else { - // sub-folder generation, not yet handled - this.applicationsLeftToGenerate = this.importState.exportedApplications - .map(application => application['generator-jhipster'].baseName); - } - }, - - generateEntities() { - if (this.importState.exportedEntities.length === 0 || this.importState.exportedApplications.length !== 0) { - return; - } - if (this.options['json-only']) { - this.log('Entity JSON files created. Entity generation skipped.'); - return; - } - try { - this.importState.exportedEntities.forEach((exportedEntity) => { - if (this.importState.exportedApplications.length === 0 - || this.importState.exportedApplications.length === 1) { - this.log(`Generating ${this.importState.exportedEntities.length} ` - + `entit${this.importState.exportedEntities.length === 1 ? 'y' : 'ies'}.`); - generateEntityFiles(this, exportedEntity); - } else { - // sub-folder generation, not yet handled - this.entitiesLeftToGenerate.push(exportedEntity.name); - } - }); - } catch (error) { - this.error(`Error while generating entities from the parsed JDL\n${error}`); - } - } - }; - } - - end() { - if (!this.options['skip-install'] && !this.skipClient && !this.options['json-only'] - && !shouldGenerateApplications(this, this.jdlObject)) { - this.debug('Building client'); - this.rebuildClient(); - } - if (this.applicationsLeftToGenerate.length !== 0) { - this.info(`Here are the application names to generate manually: ${this.applicationsLeftToGenerate.join(', ')}`); - } - if (this.entitiesLeftToGenerate.length !== 0) { - this.info(`Here are the entity names to generate manually: ${_.uniq(this.entitiesLeftToGenerate).join(', ')}`); +/** + * This sub-generatot is deprecated. Import JDL is now handled by JHipster CLI. See "./cli/import-jdl.js" + */ +module.exports = class extends BaseGenerator { + initializing() { + if (!this.options['from-cli']) { + this.warning('Deprecated: JHipster seems to be invoked using Yeoman command. Please use the JHipster CLI'); + this.error(`Deprecated: Run ${chalk.red('jhipster import-jdl')} instead of ${chalk.red('yo jhipster:import-jdl')}`); } } }; - -function shouldGenerateApplications(generator) { - return !generator.options['ignore-application'] && generator.importState.exportedApplications.length !== 0; -} - -function generateApplicationFiles(args) { - callSubGenerator(args.generator, '..', 'app', { - force: args.generator.options.force, - debug: args.generator.options.debug, - 'skip-client': args.generator.options.skipClient, - 'skip-server': args.generator.options.skipServer, - 'skip-install': args.generator.options['skip-install'], - 'skip-user-management': args.application['generator-jhipster'].skipUserManagement, - 'jhi-prefix': args.application['generator-jhipster'].jhiPrefix, - 'with-entities': args.withEntities - }); -} - -function generateEntityFiles(generator, entity) { - callSubGenerator(generator, '..', 'entity', { - force: generator.options.force, - debug: generator.options.debug, - regenerate: true, - 'skip-install': true, - 'skip-client': entity.skipClient, - 'skip-server': entity.skipServer, - 'no-fluent-methods': entity.noFluentMethod, - 'skip-user-management': entity.skipUserManagement, - 'skip-ui-grouping': generator.options['skip-ui-grouping'], - arguments: [entity.name] - }); -} - -function callSubGenerator(generator, subgenPath, name, args) { - generator.composeWith(require.resolve(path.join(subgenPath, name)), args); -} diff --git a/generators/kubernetes/index.js b/generators/kubernetes/index.js index 4a5d9ed0b760..cc9a096d99ff 100644 --- a/generators/kubernetes/index.js +++ b/generators/kubernetes/index.js @@ -49,7 +49,7 @@ module.exports = class extends BaseGenerator { get initializing() { return { - validateFromCLi() { + validateFromCli() { if (!this.options['from-cli']) { this.warning(`Deprecated: JHipster seems to be invoked using Yeoman command. Please use the JHipster CLI. Run ${chalk.red('jhipster ')} instead of ${chalk.red('yo jhipster:')}`); } diff --git a/generators/languages/index.js b/generators/languages/index.js index 3cd0bd2fa02a..46fe4d80d211 100644 --- a/generators/languages/index.js +++ b/generators/languages/index.js @@ -135,6 +135,17 @@ module.exports = class extends BaseGenerator { } } + get configuring() { + return { + saveConfig() { + if (this.enableTranslation) { + this.languages = _.union(this.currentLanguages, this.languagesToApply); + this.config.set('languages', this.languages); + } + } + }; + } + get default() { return { insight() { @@ -175,13 +186,6 @@ module.exports = class extends BaseGenerator { if (configOptions.clientFramework) { this.clientFramework = configOptions.clientFramework; } - }, - - saveConfig() { - if (this.enableTranslation) { - this.languages = _.union(this.currentLanguages, this.languagesToApply); - this.config.set('languages', this.languages); - } } }; } diff --git a/generators/languages/templates/src/main/resources/i18n/messages_my.properties.ejs b/generators/languages/templates/src/main/resources/i18n/messages_my.properties.ejs new file mode 100644 index 000000000000..51818d5fc3f1 --- /dev/null +++ b/generators/languages/templates/src/main/resources/i18n/messages_my.properties.ejs @@ -0,0 +1,39 @@ +<%# + Copyright 2013-2018 the original author or authors from the JHipster project. + + This file is part of the JHipster project, see https://www.jhipster.tech/ + for more information. + + 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. +-%> +# Error page +error.title=တောင်းဆိုမှုမှားယွင်းနေပါသည်။ +error.subtitle=ဝမ်းနည်းပါတယ်, မှားယွင်းမှုတစ်ခုဖြစ်ပွားခဲ့သည်။ +error.status=အခြေအနေ: +error.message=မက်ဆေ့ခ်ျ: + +# Activation email +email.activation.title=<%= baseName %> account activation +email.activation.greeting=Dear {0} +email.activation.text1=Your <%= baseName %> account has been created, please click on the URL below to activate it: +email.activation.text2=Regards, +email.signature=<%= baseName %> Team. + +# Creation email +email.creation.text1=Your <%= baseName %> account has been created, please click on the URL below to access it: + +# Reset email +email.reset.title=<%= baseName %> password reset +email.reset.greeting=Dear {0} +email.reset.text1=For your <%= baseName %> account a password reset was requested, please click on the URL below to reset it: +email.reset.text2=Regards, diff --git a/generators/languages/templates/src/main/webapp/i18n/my/activate.json.ejs b/generators/languages/templates/src/main/webapp/i18n/my/activate.json.ejs new file mode 100644 index 000000000000..22f358aa467d --- /dev/null +++ b/generators/languages/templates/src/main/webapp/i18n/my/activate.json.ejs @@ -0,0 +1,27 @@ +<%# + Copyright 2013-2018 the original author or authors from the JHipster project. + + This file is part of the JHipster project, see https://www.jhipster.tech/ + for more information. + + 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. +-%> +{ + "activate": { + "title": "Activate လုပ်ခြင်း", + "messages": { + "success": " သင်၏အကောင့် activate လုပ်ပြီးပါပြီ။ ကျေးဇူးပြု၍ ", + "error": " activate လုပ်ဆောင်ချက် မအောင်မြင်ပါ။ ပြန်လည်၍ မှတ်ပုံတင်ပါ။" + } + } +} diff --git a/generators/languages/templates/src/main/webapp/i18n/my/audits.json b/generators/languages/templates/src/main/webapp/i18n/my/audits.json new file mode 100644 index 000000000000..435cbe9141a6 --- /dev/null +++ b/generators/languages/templates/src/main/webapp/i18n/my/audits.json @@ -0,0 +1,27 @@ +{ + "audits": { + "title": "စာရင်းစစ်ဆေးခြင်း", + "filter": { + "title": "နေ့စွဲအလိုက်ရှာရန်", + "from": "မှ", + "to": "ထိ", + "button": { + "weeks": "ရက်သတ္တပတ်", + "today": "ယနေ့", + "clear": "ရှင်းလင်းမည်", + "close": "ပိတ်မည်" + } + }, + "table": { + "header": { + "principal": "အသုံးပြုသူ", + "date": "နေ့စွဲ", + "status": "အခြေအနေ", + "data": "အခြားဒေတာ" + }, + "data": { + "remoteAddress": "Remote Address:" + } + } + } +} diff --git a/generators/languages/templates/src/main/webapp/i18n/my/configuration.json b/generators/languages/templates/src/main/webapp/i18n/my/configuration.json new file mode 100644 index 000000000000..aebf13f9828f --- /dev/null +++ b/generators/languages/templates/src/main/webapp/i18n/my/configuration.json @@ -0,0 +1,10 @@ +{ + "configuration": { + "title": "Configuration များ", + "filter": "Filter (by prefix)", + "table": { + "prefix": "Prefix", + "properties": "Properties" + } + } +} diff --git a/generators/languages/templates/src/main/webapp/i18n/my/error.json b/generators/languages/templates/src/main/webapp/i18n/my/error.json new file mode 100644 index 000000000000..21822fa5e369 --- /dev/null +++ b/generators/languages/templates/src/main/webapp/i18n/my/error.json @@ -0,0 +1,13 @@ +{ + "error": { + "title": "မှားယွင်းနေသည်!", + "http": { + "400": "တောင်းဆိုမှုမှားယွင်းနေပါသည်။", + "403": "သင်သည် ဤစာမျက်နှာကိုဝင်ရောက်ခွင့်မရှိပါ။", + "405": "The HTTP verb you used is not supported for this URL.", + "500": "ဆာဗာ error တက်နေပါသည်။" + }, + "concurrencyFailure": "Another user modified this data at the same time as you. Your changes were rejected.", + "validation": "ဆာဗာတွင် validation error တက်နေပါသည်။" + } +} diff --git a/generators/languages/templates/src/main/webapp/i18n/my/gateway.json b/generators/languages/templates/src/main/webapp/i18n/my/gateway.json new file mode 100644 index 000000000000..6eb7791bc204 --- /dev/null +++ b/generators/languages/templates/src/main/webapp/i18n/my/gateway.json @@ -0,0 +1,15 @@ +{ + "gateway": { + "title": "Gateway", + "routes": { + "title": "Current routes", + "url": "URL", + "service": "Service", + "servers": "Available servers", + "error": "Warning: no server available!" + }, + "refresh": { + "button": "Refresh" + } + } +} diff --git a/generators/languages/templates/src/main/webapp/i18n/my/global.json.ejs b/generators/languages/templates/src/main/webapp/i18n/my/global.json.ejs new file mode 100644 index 000000000000..88cc2a85ef25 --- /dev/null +++ b/generators/languages/templates/src/main/webapp/i18n/my/global.json.ejs @@ -0,0 +1,159 @@ +<%# + Copyright 2013-2018 the original author or authors from the JHipster project. + + This file is part of the JHipster project, see https://www.jhipster.tech/ + for more information. + + 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. +-%> +{ + "global": { + "title": "<%= capitalizedBaseName %>", + "browsehappy": "သင် browser version အသစ် အသုံးပြုရန်လိုအပ်ပါသည်။ ကျေးဇူးပြု၍ အဆင့်မြှင့်တင်ပါ။", + "menu": { + "home": "မူလစာမျက်နှာ", + "jhipster-needle-menu-add-element": "JHipster will add additional menu entries here (do not translate!)", + "entities": { + "main": "Entities များ", + "jhipster-needle-menu-add-entry": "JHipster will add additional entities here (do not translate!)" + }, + "account": { + "main": "အကောင့်", + "settings": "Setting များ", + "password": "လျှို့ဝှက်ကုဒ်", + "sessions": "Session များ", + "login": "ဆိုင်းအင်", + "logout": "ဆိုင်းအောက်", + "register": "မှတ်ပုံတင်မည်" + }, + "admin": { + "main": "စီမံခန့်ခွဲမှု", + <%_ if (applicationType === 'gateway') { _%> + "gateway": "Gateway", + <%_ } _%> + "userManagement": "အသုံးပြုသူများအား စီမံခန့်ခွဲမှု", + "tracker": "အသုံးပြုသူများအား ခြေရာခံခြင်း", + "metrics": "Metrics များ", + "health": "စနစ်အခြေအနေ", + "configuration": "Configuration များ", + "logs": "Log များ", + <%_ if (databaseType !== 'no' && databaseType !== 'cassandra') { _%> + "audits": "စာရင်းစစ်ဆေးခြင်း", + <%_ } _%> + "apidocs": "API", + "database": "ဒေတာဘေ့စ", + "jhipster-needle-menu-add-admin-element": "JHipster will add additional menu entries here (do not translate!)" + }, + "language": "ဘာသာစကား" + }, + "form": { + "username": "အသုံးပြုသူအိုင်ဒီ", + "username.placeholder": "သင်၏ အသုံးပြုသူအိုင်ဒီ", + "currentpassword": "လက်ရှိအသုံးပြုနေသော လျှို့ဝှက်ကုဒ်", + "currentpassword.placeholder": "လက်ရှိအသုံးပြုနေသော လျှို့ဝှက်ကုဒ်", + "newpassword": "လျှို့ဝှက်ကုဒ်အသစ်", + "newpassword.placeholder": "လျှို့ဝှက်ကုဒ်အသစ်", + "confirmpassword": "လျှို့ဝှက်ကုဒ်အသစ် အတည်ပြုခြင်း", + "confirmpassword.placeholder": "လျှို့ဝှက်ကုဒ်အသစ် အတည်ပြုခြင်း", + "email": "အီးမေးလ်လိပ်စာ", + "email.placeholder": "သင်၏ အီးမေးလ်လိပ်စာ" + }, + "messages": { + "info": { + "authenticated": { + "prefix": "သင် ", + "link": "ဆိုင်းအင်", + "suffix": " လုပ်လိုလျှင်, အောက်ပါအကောင့်များဖြင့် ကြိုးစားကြည့်နိုင်ပါသည်။
- စီမံခန့်ခွဲသူ (အသုံးပြုသူအိုင်ဒီ=\"admin\" နှင့် လျှို့ဝှက်ကုဒ်=\"admin\")
- သာမန်အသုံးပြုသူ (အသုံးပြုသူအိုင်ဒီ=\"user\" နှင့် လျှို့ဝှက်ကုဒ်=\"user\")" + }, + "register": { + "noaccount": "သင့်မှာ အကောင့်မရှိဘူးလား။", + "link": "အကောင့်အသစ် မှတ်ပုံတင်မည်။" + } + }, + "error": { + "dontmatch": "လျှို့ဝှက်ကုဒ်နှင့် ၎င်း၏အတည်ပြုချက်သည် မကိုက်ညီပါ။" + }, + "validate": { + "newpassword": { + "required": "သင်၏ လျှို့ဝှက်ကုဒ် လိုအပ်ပါသည်။", + "minlength": "သင်၏ လျှို့ဝှက်ကုဒ်သည် အနည်းဆုံးအက္ခရာ ၄ လုံးပါရှိရမည်။ ", + "maxlength": "သင်၏ လျှို့ဝှက်ကုဒ်သည် အက္ခရာအလုံး ၅၀ ထက်မပိုရပါ။", + "strength": "Password strength:" + }, + "confirmpassword": { + "required": "သင်၏ အတည်ပြုမည့်လျှို့ဝှက်ကုဒ် လိုအပ်ပါသည်။", + "minlength": "သင်၏ အတည်ပြုမည့်လျှို့ဝှက်ကုဒ်သည် အနည်းဆုံးအက္ခရာ ၅ လုံးပါရှိရမည်။ ", + "maxlength": "သင်၏ အတည်ပြုမည့်လျှို့ဝှက်ကုဒ်သည် အက္ခရာအလုံး ၅၀ ထက်မပိုရပါ။" + }, + "email": { + "required": "သင်၏ အီးမေးလ်လိပ်စာ လိုအပ်ပါသည်။", + "invalid": "သင်၏ အီးမေးလ်လိပ်စာ မှားနေပါသည်။", + "minlength": "သင်၏ အီးမေးလ်လိပ်စာသည် အနည်းဆုံးအက္ခရာ ၅ လုံးပါရှိရမည်။ ", + "maxlength": "သင်၏ အီးမေးလ်လိပ်စာသည် အက္ခရာအလုံး ၅၀ ထက်မပိုရပါ။" + } + } + }, + "field": { + "id": "အိုင်ဒီ" + }, + "ribbon": { + "dev":"Development" + }, + "item-count": "စုစုပေါင်း {{total}} ခု၏ {{first}} မှ {{second}} ထိ ဖေါ်ပြနေသည်။" + }, + "entity": { + "action": { + "addblob": "Add blob", + "addimage": "ပုံတင်မည်", + "back": "နောက်သို့", + "cancel": "မလုပ်ဆောင်ပါ", + "delete": "ဖျက်မည်", + "edit": "ပြုပြင်မည်", + "open": "ဖွင့်မည်", + "save": "သိမ်းမည်", + "view": "ကြည့်မည်" + }, + "detail": { + "field": "Field", + "value": "Value" + }, + "delete": { + "title": "ဖျက်ပါမည်။ သေချာပါသလား?" + }, + "validation": { + "required": "ဖြည့်စွက်ရန်လိုအပ်ပါသည်။", + "minlength": "အနည်းဆုံးအက္ခရာ {{ min }} လုံးပါရှိရမည်။", + "maxlength": "အက္ခရာအလုံး {{ max }} ထက်မပိုရပါ။", + "min": "အနည်းဆုံး {{ min }} ဖြစ်ရပါမည်။", + "max": "အများဆုံး {{ max }} ဖြစ်ရပါမည်။", + "minbytes": "အနည်းဆုံး {{ min }} bytes ရှိရမည်။", + "maxbytes": "အများဆုံး {{ max }} bytes ရှိရမည်။", + "pattern": "ဤ {{ pattern }} ပုံစံကို လိုက်နာရပါမည်။", + "number": "ဂဏန်းဖြစ်ရပါမည်။", + "datetimelocal": "နေ့စွဲနှင့်အချိန် ဖြစ်ရပါမည်။", + "patternLogin": "အက္ခရာများ၊ ဂဏန်းနှင့်အီးမေးလ်လိပ်စာများသာပါဝင်ရပါမည်။" + } + }, + "error": { + "internalServerError": "ဆာဗာအမှားတစ်ခုခု ဖြစ်ပေါ်နေပါသည်။", + "server.not.reachable": "ဆာဗာနှင့်အဆက်အသွယ်မရနိုင်ပါ။", + "url.not.found": "မတွေ့ရှိပါ။", + "NotNull": "{{ fieldName }} ဖြည့်စွက်ရန်လိုအပ်ပါသည်။", + "Size": "{{ fieldName }} သည် သတ်မှတ်ထားသော အနည်းဆုံး/အများဆုံး ကန့်သတ်ချက်များနှင့် မကိုက်ညီပါ။", + "userexists": "အသုံးပြုသူအိုင်ဒီသည် မှတ်ပုံတင်ပြီးသားဖြစ်နေပါသည်။", + "emailexists": "အီးမေးလ်လိပ်စာသည်အသုံးပြုပြီးသားဖြစ်နေပါသည်။", + "idexists": "{{ entityName }} အသစ်တွင် အိုင်ဒီ မပါရှိရပါ။", + "idnull": "အိုင်ဒီမှားနေပါသည်။" + }, + "footer": "စာမျက်နှာသည် အောက်ခြေဖြစ်ပါသည်။" +} diff --git a/generators/languages/templates/src/main/webapp/i18n/my/health.json.ejs b/generators/languages/templates/src/main/webapp/i18n/my/health.json.ejs new file mode 100644 index 000000000000..a172f07fb2fa --- /dev/null +++ b/generators/languages/templates/src/main/webapp/i18n/my/health.json.ejs @@ -0,0 +1,60 @@ +<%# + Copyright 2013-2018 the original author or authors from the JHipster project. + + This file is part of the JHipster project, see https://www.jhipster.tech/ + for more information. + + 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. +-%> +{ + "health": { + "title": "Health Checks", + "refresh.button": "Refresh", + "stacktrace": "Stacktrace", + "details": { + "details": "Details", + "properties": "Properties", + "name": "Name", + "value": "Value", + "error": "Error" + }, + "indicator": { + <%_ if (messageBroker === 'kafka') { _%> + "binders": "Message broker", + <%_ } _%> + <%_ if (applicationType === 'gateway' || serviceDiscoveryType) { _%> + "discoveryComposite": "Discovery Composite", + "refreshScope": "Microservice Refresh Scope", + "configServer": "Microservice Config Server", + "hystrix": "Hystrix",<% if (serviceDiscoveryType === 'consul') { %> + "consul": "Consul",<% } %> + <%_ } _%> + "diskSpace": "Disk space", + "mail": "Email"<% if (searchEngine === 'elasticsearch') { %>, + "elasticsearch": "Elasticsearch"<% } %><% if (databaseType === 'sql') { %>, + "db": "Database"<% } %><% if (databaseType === 'mongodb') { %>, + "mongo": "MongoDB"<% } %><% if (databaseType === 'cassandra') { %>, + "cassandra": "Cassandra"<% } %><% if (databaseType === 'couchbase') { %>, + "couchbase": "Couchbase"<% } %> + }, + "table": { + "service": "Service name", + "status": "Status" + }, + "status": { + "UNKNOWN": "UNKNOWN", + "UP": "UP", + "DOWN": "DOWN" + } + } +} diff --git a/generators/languages/templates/src/main/webapp/i18n/my/home.json b/generators/languages/templates/src/main/webapp/i18n/my/home.json new file mode 100644 index 000000000000..ce40f11213bc --- /dev/null +++ b/generators/languages/templates/src/main/webapp/i18n/my/home.json @@ -0,0 +1,19 @@ +{ + "home": { + "title": "ဂျာဗား Hipster, ကြိုဆိုပါ၏။", + "subtitle": "ဤစာမျက်နှာသည် သင်၏မူလစာမျက်နှာဖြစ်ပါသည်။", + "logged": { + "message": "သင်သည်အသုံးပြုသူ \"{{username}}\" အဖြစ် ဝင်ရောက်အသုံးပြုနေပါသည်။" + }, + "question": "JHipster နှင့်ပတ်သက်၍ မေးစရာရှိပါက", + "link": { + "homepage": "JHipster မူလစာမျက်နှာ", + "stackoverflow": "JHipster on Stack Overflow", + "bugtracker": "JHipster bug tracker", + "chat": "JHipster အများပြည်သူစကားစမြည်ပြောသည့်နေရာ။", + "follow": "တွစ်တာပေါ်တွင် @java_hipster ကို follow လုပ်ရန်။" + }, + "like": "JHipster ကိုကြိုက်နှစ်သက်ပါလျှင်, ကျွန်တော်တို့ကို ကြယ်ပွင့်လေးတပွင့်ပေးခဲ့ပါ။", + "github": "GitHub" + } +} diff --git a/generators/languages/templates/src/main/webapp/i18n/my/login.json b/generators/languages/templates/src/main/webapp/i18n/my/login.json new file mode 100644 index 000000000000..5b944e8068e6 --- /dev/null +++ b/generators/languages/templates/src/main/webapp/i18n/my/login.json @@ -0,0 +1,19 @@ +{ + "login": { + "title": "ဆိုင်းအင်လုပ်ခြင်း", + "form": { + "password": "လျှို့ဝှက်ကုဒ်", + "password.placeholder": "သင်၏ လျှို့ဝှက်ကုဒ်", + "rememberme": "ကျွန်တော့်ကိုမှတ်ထားပါ။", + "button": "ဝင်မည်" + }, + "messages": { + "error": { + "authentication": "မအောင်မြင်ပါ။ သင့်ရဲ့အသုံးပြုသူအိုင်ဒီ (သို့) လျှို့ဝှက်ကုဒ်စစ်ဆေးပြီးထပ်မံကြိုးစားပါ။" + } + }, + "password" : { + "forgot": "လျှို့ဝှက်ကုဒ်မေ့နေပါသလား?" + } + } +} diff --git a/generators/languages/templates/src/main/webapp/i18n/my/logs.json b/generators/languages/templates/src/main/webapp/i18n/my/logs.json new file mode 100644 index 000000000000..a614b128da59 --- /dev/null +++ b/generators/languages/templates/src/main/webapp/i18n/my/logs.json @@ -0,0 +1,11 @@ +{ + "logs": { + "title": "Logs", + "nbloggers": "There are {{ total }} loggers.", + "filter": "Filter", + "table": { + "name": "Name", + "level": "Level" + } + } +} diff --git a/generators/languages/templates/src/main/webapp/i18n/my/metrics.json b/generators/languages/templates/src/main/webapp/i18n/my/metrics.json new file mode 100644 index 000000000000..9d804947c571 --- /dev/null +++ b/generators/languages/templates/src/main/webapp/i18n/my/metrics.json @@ -0,0 +1,101 @@ +{ + "metrics": { + "title": "Application Metrics", + "refresh.button": "Refresh", + "updating": "Updating...", + "jvm": { + "title": "JVM Metrics", + "memory": { + "title": "Memory", + "total": "Total Memory", + "heap": "Heap Memory", + "nonheap": "Non-Heap Memory" + }, + "threads": { + "title": "Threads", + "all": "All", + "runnable": "Runnable", + "timedwaiting": "Timed waiting", + "waiting": "Waiting", + "blocked": "Blocked", + "dump": { + "title": "Threads dump", + "id": "Id: ", + "blockedtime": "Blocked Time", + "blockedcount": "Blocked Count", + "waitedtime": "Waited Time", + "waitedcount": "Waited Count", + "lockname": "Lock name", + "stacktrace": "Stacktrace", + "show": "Show Stacktrace", + "hide": "Hide Stacktrace" + } + }, + "gc": { + "title": "Garbage collections", + "marksweepcount": "Mark Sweep count", + "marksweeptime": "Mark Sweep time", + "scavengecount": "Scavenge count", + "scavengetime": "Scavenge time" + }, + "http": { + "title": "HTTP requests (events per second)", + "active": "Active requests:", + "total": "Total requests:", + "table": { + "code": "Code", + "count": "Count", + "mean": "Mean", + "average": "Average" + }, + "code": { + "ok": "Ok", + "notfound": "Not found", + "servererror": "Server Error" + } + } + }, + "servicesstats": { + "title": "Services statistics (time in millisecond)", + "table": { + "name": "Service name", + "count": "Count", + "mean": "Mean", + "min": "Min", + "max": "Max", + "p50": "p50", + "p75": "p75", + "p95": "p95", + "p99": "p99" + } + }, + "cache": { + "title": "Cache statistics", + "cachename": "Cache name", + "hits": "Cache Hits", + "misses": "Cache Misses", + "gets": "Cache Gets", + "puts": "Cache Puts", + "removals": "Cache Removals", + "evictions": "Cache Evictions", + "hitPercent": "Cache Hit %", + "missPercent": "Cache Miss %", + "averageGetTime": "Average get time (µs)", + "averagePutTime": "Average put time (µs)", + "averageRemoveTime": "Average remove time (µs)" + }, + "datasource": { + "usage": "Usage", + "title": "DataSource statistics (time in millisecond)", + "name": "Pool usage", + "count": "Count", + "mean": "Mean", + "min": "Min", + "max": "Max", + "p50": "p50", + "p75": "p75", + "p95": "p95", + "p99": "p99" + } + } +} diff --git a/generators/languages/templates/src/main/webapp/i18n/my/password.json b/generators/languages/templates/src/main/webapp/i18n/my/password.json new file mode 100644 index 000000000000..862debb57d7a --- /dev/null +++ b/generators/languages/templates/src/main/webapp/i18n/my/password.json @@ -0,0 +1,12 @@ +{ + "password": { + "title": "[{{username}}] အတွက် လျှို့ဝှက်ကုဒ်", + "form": { + "button": "သိမ်းမည်" + }, + "messages": { + "error": "အမှားတစ်ခုခုဖြစ်ပေါ်နေပါသည်၊ လျှို့ဝှက်ကုဒ်ပြောင်းလဲမှုမအောင်မြင်ပါ။", + "success": "လျှို့ဝှက်ကုဒ် ပြောင်းလဲပြီးပါပြီ။" + } + } +} diff --git a/generators/languages/templates/src/main/webapp/i18n/my/register.json b/generators/languages/templates/src/main/webapp/i18n/my/register.json new file mode 100644 index 000000000000..1684ba76a39f --- /dev/null +++ b/generators/languages/templates/src/main/webapp/i18n/my/register.json @@ -0,0 +1,24 @@ +{ + "register": { + "title": "မှတ်ပုံတင်ခြင်း", + "form": { + "button": "မှတ်ပုံတင်ပါ" + }, + "messages": { + "validate": { + "login": { + "required": "သင်၏ အသုံးပြုသူအိုင်ဒီ လိုအပ်ပါသည်။", + "minlength": "သင်၏အသုံးပြုသူအိုင်ဒီသည် အနည်းဆုံး အက္ခရာတစ်လုံး ပါရှိရမည်။", + "maxlength": "သင်၏ အသုံးပြုသူအိုင်ဒီသည် အက္ခရာအလုံး ၅၀ထက်မပိုရပါ။", + "pattern": "သင်၏ အသုံးပြုသူအိုင်ဒီသည် အက္ခရာများနှင့်ဂဏန်းသာပါဝင်နိုင်သည်။" + } + }, + "success": "မှတ်ပုံတင်ခြင်းအောင်မြင်ပါပြီ၊ အတည်ပြုချက်အတွက်သင်၏အီးမေးလ်ကိုစစ်ဆေးပါ။", + "error": { + "fail": "မှတ်ပုံတင်ခြင်းမအောင်မြင်ပါ၊ ထပ်မံကြိုးစားပါ။", + "userexists": "အသုံးပြုသူအိုင်ဒီသည် မှတ်ပုံတင်ပြီးသားဖြစ်နေပါသည်၊ အခြား အိုင်ဒီကိုရွေးချယ်ပါ။", + "emailexists": "အီးမေးလ်လိပ်စာသည်အသုံးပြုပြီးသားဖြစ်နေပါသည်၊ အခြား အီးမေးလ်လိပ်စာကိုရွေးချယ်ပါ။" + } + } + } +} diff --git a/generators/languages/templates/src/main/webapp/i18n/my/reset.json.ejs b/generators/languages/templates/src/main/webapp/i18n/my/reset.json.ejs new file mode 100644 index 000000000000..631d7059073b --- /dev/null +++ b/generators/languages/templates/src/main/webapp/i18n/my/reset.json.ejs @@ -0,0 +1,45 @@ +<%# + Copyright 2013-2018 the original author or authors from the JHipster project. + + This file is part of the JHipster project, see https://www.jhipster.tech/ + for more information. + + 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. +-%> +{ + "reset": { + "request": { + "title": "လျှို့ဝှက်ကုဒ်အား reset လုပ်ခြင်း", + "form": { + "button": "Reset လုပ်မည်" + }, + "messages": { + "info": "သင်မှတ်ပုံတင်ခဲ့သော အီးမေးလ်လိပ်စာရိုက်ထည့်ပါ။", + "success": "သင်၏လျှို့ဝှက်ကုဒ် reset ပြုလုပ်ရန်အတွက် သင့်အီးမေးလ်ကိုစစ်ဆေးပါ။", + "notfound": "အီးမေးလ်လိပ်စာမှတ်ပုံတင်ထားခြင်းမရှိပါ၊ စစ်ဆေးပြီးထပ်မံကြိုးစားပါ။" + } + }, + "finish" : { + "title": "လျှို့ဝှက်ကုဒ်အား reset လုပ်ခြင်း", + "form": { + "button": "လျှို့ဝှက်ကုဒ်အသစ်အတည်ပြုမည်" + }, + "messages": { + "info": "လျှို့ဝှက်ကုဒ်အသစ်တစ်ခုကိုရွေးချယ်ပါ။", + "success": "လျှို့ဝှက်ကုဒ်အား reset ပြုလုပ်ပြီးပါပြီး ကျေးဇူးပြုပြီး", + "keymissing": "reset key ပျောက်ဆုံးနေပါသည်။", + "error": "သင်၏လျှို့ဝှက်ကုဒ် reset လုပ်၍မရပါ။ လျှို့ဝှက်ကုဒ်ပြောင်းရန် တောင်းဆိုမှုအား 24 နာရီအတွင်းသာအသုံးပြု၍ရနိုင်ပါသည်။" + } + } + } +} diff --git a/generators/languages/templates/src/main/webapp/i18n/my/sessions.json b/generators/languages/templates/src/main/webapp/i18n/my/sessions.json new file mode 100644 index 000000000000..d410035ee7ca --- /dev/null +++ b/generators/languages/templates/src/main/webapp/i18n/my/sessions.json @@ -0,0 +1,15 @@ +{ + "sessions": { + "title": "Active sessions for [{{username}}]", + "table": { + "ipaddress": "IP address", + "useragent": "User Agent", + "date": "Date", + "button": "Invalidate" + }, + "messages": { + "success": "Session invalidated!", + "error": "An error has occurred! The session could not be invalidated." + } + } +} diff --git a/generators/languages/templates/src/main/webapp/i18n/my/settings.json b/generators/languages/templates/src/main/webapp/i18n/my/settings.json new file mode 100644 index 000000000000..9b6566f22201 --- /dev/null +++ b/generators/languages/templates/src/main/webapp/i18n/my/settings.json @@ -0,0 +1,32 @@ +{ + "settings": { + "title": "အသုံးပြုသူ [{{username}}] ၏ settings", + "form": { + "firstname": "အမည်", + "firstname.placeholder": "သင်၏အမည်", + "lastname": "မျိုးနွယ်အမည်", + "lastname.placeholder": "သင်၏မျိုးနွယ်အမည်", + "language": "ဘာသာစကား", + "button": "သိမ်းမည်" + }, + "messages": { + "error": { + "fail": "အမှားတစ်ခုခုဖြစ်ပေါ်နေပါသည်၊ settings သိမ်းဆည်းမှုမအောင်မြင်ပါ။", + "emailexists": "အီးမေးလ်လိပ်စာသည်အသုံးပြုပြီးသားဖြစ်နေပါသည်၊ အခြား အီးမေးလ်လိပ်စာကိုရွေးချယ်ပါ။" + }, + "success": "Settings သိမ်းဆည်းပြီးပါပြီ။", + "validate": { + "firstname": { + "required": "သင်၏အမည် လိုအပ်ပါသည်။", + "minlength": "သင်၏အမည်သည် အနည်းဆုံး အက္ခရာတစ်လုံး ပါရှိရမည်။ ", + "maxlength": "သင်၏အမည်သည် အက္ခရာအလုံး ၅၀ ထက်မပိုရပါ။" + }, + "lastname": { + "required": "သင်၏မျိုးနွယ်အမည် လိုအပ်ပါသည်။", + "minlength": "သင်၏မျိုးနွယ်အမည်သည် အနည်းဆုံး အက္ခရာတစ်လုံး ပါရှိရမည်။ ", + "maxlength": "သင်၏မျိုးနွယ်အမည်သည် အက္ခရာအလုံး ၅၀ ထက်မပိုရပါ။" + } + } + } + } +} diff --git a/generators/languages/templates/src/main/webapp/i18n/my/tracker.json b/generators/languages/templates/src/main/webapp/i18n/my/tracker.json new file mode 100644 index 000000000000..0651de0d1640 --- /dev/null +++ b/generators/languages/templates/src/main/webapp/i18n/my/tracker.json @@ -0,0 +1,12 @@ +{ + "tracker": { + "title": "Real-time user activities", + "table": { + "userlogin": "User", + "ipaddress": "IP Address", + "userAgent": "User agent", + "page": "Current page", + "time": "Time" + } + } +} diff --git a/generators/languages/templates/src/main/webapp/i18n/my/user-management.json b/generators/languages/templates/src/main/webapp/i18n/my/user-management.json new file mode 100644 index 000000000000..7aa262e2a818 --- /dev/null +++ b/generators/languages/templates/src/main/webapp/i18n/my/user-management.json @@ -0,0 +1,30 @@ +{ + "userManagement": { + "home": { + "title": "အသုံးပြုသူများ", + "createLabel": "အသုံးပြုသူအသစ်", + "createOrEditLabel": "အသုံးပြုသူအသစ် မှတ်ပုံတင်ခြင်း (သို့) ပြုပြင်ခြင်း" + }, + "created": "{{ param }} အိုင်ဒီဖြင့် အသုံးပြုသူအသစ်တစ်ဦးအား မှတ်ပုံတင်ပြီးပါပြီ။", + "updated": "{{ param }} အိုင်ဒီဖြင့် အသုံးပြုသူအား ပြုပြင်ပြီးပါပြီ။", + "deleted": "{{ param }} အိုင်ဒီဖြင့် အသုံးပြုသူအား ဖျက်ပြီးပါပြီ။", + "delete": { + "question": "{{ login }} အိုင်ဒီဖြင့် အသုံးပြုသူအား ဖျက်မည်။ သေချာပါသလား?" + }, + "detail": { + "title": "အသုံးပြုသူ" + }, + "login": "အသုံးပြုသူအိုင်ဒီ", + "firstName": "အမည်", + "lastName": "မျိုးနွယ်အမည်", + "email": "အီးမေးလ်လိပ်စာ", + "activated": "Activated", + "deactivated": "Deactivated", + "profiles": "ပရိုဖိုင်", + "langKey": "ဘာသာစကား", + "createdBy": "မှတ်ပုံတင်သူ", + "createdDate": "မှတ်ပုံတင်သည့်နေ့စွဲ", + "lastModifiedBy": "ပြုပြင်သူ", + "lastModifiedDate": "ပြုပြင်သည့်နေ့စွဲ" + } +} diff --git a/generators/openshift/index.js b/generators/openshift/index.js index 57afad4a6eb0..811070ae788d 100644 --- a/generators/openshift/index.js +++ b/generators/openshift/index.js @@ -48,7 +48,7 @@ module.exports = class extends BaseGenerator { get initializing() { return { - validateFromCLi() { + validateFromCli() { if (!this.options['from-cli']) { this.warning(`Deprecated: JHipster seems to be invoked using Yeoman command. Please use the JHipster CLI. Run ${chalk.red('jhipster ')} instead of ${chalk.red('yo jhipster:')}`); } diff --git a/generators/rancher-compose/index.js b/generators/rancher-compose/index.js index c8bd76cbaa42..828f93bb85d8 100644 --- a/generators/rancher-compose/index.js +++ b/generators/rancher-compose/index.js @@ -49,7 +49,7 @@ module.exports = class extends BaseGenerator { get initializing() { return { - validateFromCLi() { + validateFromCli() { if (!this.options['from-cli']) { this.warning(`Deprecated: JHipster seems to be invoked using Yeoman command. Please use the JHipster CLI. Run ${chalk.red('jhipster ')} instead of ${chalk.red('yo jhipster:')}`); } @@ -81,6 +81,7 @@ module.exports = class extends BaseGenerator { loadConfig() { this.defaultAppsFolders = this.config.get('appsFolders'); + this.authenticationType = this.config.get('authenticationType'); this.directoryPath = this.config.get('directoryPath'); this.monitoring = this.config.get('monitoring'); this.useKafka = false; @@ -208,6 +209,10 @@ module.exports = class extends BaseGenerator { parentConfiguration[databaseServiceName] = databaseYamlConfig; } + + // Expose authenticationType + this.authenticationType = appConfig.authenticationType; + // Add search engine configuration const searchEngine = appConfig.searchEngine; if (searchEngine === 'elasticsearch') { diff --git a/generators/rancher-compose/templates/docker-compose.yml.ejs b/generators/rancher-compose/templates/docker-compose.yml.ejs index 056d266c738c..5264c258417b 100644 --- a/generators/rancher-compose/templates/docker-compose.yml.ejs +++ b/generators/rancher-compose/templates/docker-compose.yml.ejs @@ -50,7 +50,7 @@ services: #volumes: # - ./central-server-config:/central-config environment: - - SPRING_PROFILES_ACTIVE=dev + - SPRING_PROFILES_ACTIVE=dev<% if (authenticationType === 'oauth2') { %>,oauth2<% } %><% if (authenticationType === 'uaa') { %>,uaa<% } %> - SPRING_SECURITY_USER_PASSWORD=<%= adminPassword %> <%_ if (monitoring === 'elk') { _%> - JHIPSTER_LOGGING_LOGSTASH_ENABLED=true diff --git a/generators/server/files.js b/generators/server/files.js index 867fa0e570de..34d0ab46ae68 100644 --- a/generators/server/files.js +++ b/generators/server/files.js @@ -260,6 +260,7 @@ const serverFiles = { 'logback-spring.xml', 'config/application.yml', 'config/application-dev.yml', + 'config/application-tls.yml', 'config/application-prod.yml', 'i18n/messages.properties' ] @@ -747,6 +748,13 @@ const serverFiles = { { file: 'package/config/cassandra/package-info.java', renameTo: generator => `${generator.javaDir}config/cassandra/package-info.java` }, ] }, + { + condition: generator => generator.searchEngine === 'elasticsearch', + path: SERVER_MAIN_SRC_DIR, + templates: [ + { file: 'package/config/ElasticsearchConfiguration.java', renameTo: generator => `${generator.javaDir}config/ElasticsearchConfiguration.java` }, + ] + }, { condition: generator => generator.messageBroker === 'kafka', path: SERVER_MAIN_SRC_DIR, diff --git a/generators/server/index.js b/generators/server/index.js index 01f074912e38..00c8f80df83a 100644 --- a/generators/server/index.js +++ b/generators/server/index.js @@ -92,6 +92,7 @@ module.exports = class extends BaseGenerator { 'server', { 'client-hook': !this.skipClient, + 'from-cli': this.options['from-cli'], configOptions: this.configOptions, force: this.options.force } @@ -104,7 +105,7 @@ module.exports = class extends BaseGenerator { // Public API method used by the getter and also by Blueprints _initializing() { return { - validateFromCLi() { + validateFromCli() { if (!this.options['from-cli']) { this.warning(`Deprecated: JHipster seems to be invoked using Yeoman command. Please use the JHipster CLI. Run ${chalk.red('jhipster ')} instead of ${chalk.red('yo jhipster:')}`); } diff --git a/generators/server/templates/build.gradle.ejs b/generators/server/templates/build.gradle.ejs index baff3ecbfacb..f937c22db270 100644 --- a/generators/server/templates/build.gradle.ejs +++ b/generators/server/templates/build.gradle.ejs @@ -329,7 +329,7 @@ dependencies { <%_ if (searchEngine === 'elasticsearch') { _%> compile "org.springframework.boot:spring-boot-starter-data-elasticsearch" // Spring Data Jest dependencies for Elasticsearch - runtime ("com.github.vanroy:spring-boot-starter-data-jest") { + compile ("com.github.vanroy:spring-boot-starter-data-jest") { exclude module: 'commons-logging' } // log4j needed to create embedded elasticsearch instance diff --git a/generators/server/templates/gradle/profile_dev.gradle.ejs b/generators/server/templates/gradle/profile_dev.gradle.ejs index ba6bf2644a8f..0b74388a2832 100644 --- a/generators/server/templates/gradle/profile_dev.gradle.ejs +++ b/generators/server/templates/gradle/profile_dev.gradle.ejs @@ -34,6 +34,9 @@ def profiles = 'dev' if (project.hasProperty('no-liquibase')) { profiles += ',no-liquibase' } +if (project.hasProperty('tls')) { + profiles += ',tls' +} bootRun { args = [] diff --git a/generators/server/templates/gradle/sonar.gradle.ejs b/generators/server/templates/gradle/sonar.gradle.ejs index 880e1e46a713..83294d2e5205 100644 --- a/generators/server/templates/gradle/sonar.gradle.ejs +++ b/generators/server/templates/gradle/sonar.gradle.ejs @@ -63,7 +63,7 @@ sonarqube { property "sonar.testExecutionReportPaths", "${project.buildDir}/test-results/jest/TESTS-results-sonar.xml" <%_ } _%> property "sonar.typescript.lcov.reportPaths", "${project.buildDir}/test-results/lcov.info" - property "sonar.junit.reportsPath", "${project.buildDir}/test-results/test/" + property "sonar.junit.reportPaths", "${project.buildDir}/test-results/test" property "sonar.sources", "${project.projectDir}/<%= MAIN_DIR %>" property "sonar.tests", "${project.projectDir}/<%= TEST_DIR %>" } diff --git a/generators/server/templates/gradle/wrapper/gradle-wrapper.jar b/generators/server/templates/gradle/wrapper/gradle-wrapper.jar index 758de960ec79..0d4a9516871a 100644 Binary files a/generators/server/templates/gradle/wrapper/gradle-wrapper.jar and b/generators/server/templates/gradle/wrapper/gradle-wrapper.jar differ diff --git a/generators/server/templates/gradle/wrapper/gradle-wrapper.properties b/generators/server/templates/gradle/wrapper/gradle-wrapper.properties index 115e6ac0aaba..a95009c3b9ed 100644 --- a/generators/server/templates/gradle/wrapper/gradle-wrapper.properties +++ b/generators/server/templates/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/generators/server/templates/pom.xml.ejs b/generators/server/templates/pom.xml.ejs index 96818c70ebe9..998f59b1e9f6 100644 --- a/generators/server/templates/pom.xml.ejs +++ b/generators/server/templates/pom.xml.ejs @@ -69,6 +69,7 @@ + 2.0.20 @@ -1179,6 +1180,12 @@ ,swagger + + tls + + ,tls + + <%_ if (!skipClient) { _%> webpack @@ -1323,7 +1330,7 @@ - dev${profile.no-liquibase} + dev${profile.tls}${profile.no-liquibase} diff --git a/generators/server/templates/src/main/docker/config/realm-config/jhipster-realm.json.ejs b/generators/server/templates/src/main/docker/config/realm-config/jhipster-realm.json.ejs index 7087fa34d404..2f740544cb68 100644 --- a/generators/server/templates/src/main/docker/config/realm-config/jhipster-realm.json.ejs +++ b/generators/server/templates/src/main/docker/config/realm-config/jhipster-realm.json.ejs @@ -755,7 +755,7 @@ "bearerOnly": false, "consentRequired": false, "standardFlowEnabled": true, - "implicitFlowEnabled": false, + "implicitFlowEnabled": true, "directAccessGrantsEnabled": false, "serviceAccountsEnabled": false, "publicClient": true, diff --git a/generators/server/templates/src/main/docker/jhipster-registry.yml.ejs b/generators/server/templates/src/main/docker/jhipster-registry.yml.ejs index 123239bf5509..8bfc970adb29 100644 --- a/generators/server/templates/src/main/docker/jhipster-registry.yml.ejs +++ b/generators/server/templates/src/main/docker/jhipster-registry.yml.ejs @@ -28,7 +28,7 @@ services: # See https://www.jhipster.tech/microservices-architecture/#registry_app_configuration environment: # - _JAVA_OPTIONS=-Xmx512m -Xms256m - - SPRING_PROFILES_ACTIVE=dev,swagger<% if (authenticationType === 'oauth2') { %>,oauth2<% } %> + - SPRING_PROFILES_ACTIVE=dev,swagger<% if (authenticationType === 'oauth2') { %>,oauth2<% } %><% if (authenticationType === 'uaa') { %>,uaa<% } %> - SPRING_SECURITY_USER_PASSWORD=admin - JHIPSTER_REGISTRY_PASSWORD=admin - SPRING_CLOUD_CONFIG_SERVER_COMPOSITE_0_TYPE=native diff --git a/generators/server/templates/src/main/java/package/Application.java.ejs b/generators/server/templates/src/main/java/package/Application.java.ejs index bd60be0e5290..9f8ef069c6e8 100644 --- a/generators/server/templates/src/main/java/package/Application.java.ejs +++ b/generators/server/templates/src/main/java/package/Application.java.ejs @@ -26,6 +26,7 @@ import <%=packageName%>.config.DefaultProfileUtil; import io.github.jhipster.config.JHipsterConstants; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; @@ -48,6 +49,7 @@ import org.springframework.core.env.Environment; import javax.annotation.PostConstruct; import java.net.InetAddress; +import java.net.UnknownHostException; import java.util.Arrays; import java.util.Collection; @@ -103,34 +105,47 @@ public class <%= mainClass %> { SpringApplication app = new SpringApplication(<%= mainClass %>.class); DefaultProfileUtil.addDefaultProfile(app); Environment env = app.run(args).getEnvironment(); + logApplicationStartup(env); + } + + private static void logApplicationStartup(Environment env) { String protocol = "http"; if (env.getProperty("server.ssl.key-store") != null) { protocol = "https"; } + String serverPort = env.getProperty("server.port"); + String contextPath = env.getProperty("server.servlet.context-path"); + if (StringUtils.isBlank(contextPath)) { + contextPath = "/"; + } String hostAddress = "localhost"; try { hostAddress = InetAddress.getLocalHost().getHostAddress(); - } catch (Exception e) { + } catch (UnknownHostException e) { log.warn("The host name could not be determined, using `localhost` as fallback"); } log.info("\n----------------------------------------------------------\n\t" + "Application '{}' is running! Access URLs:\n\t" + - "Local: \t\t{}://localhost:{}\n\t" + - "External: \t{}://{}:{}\n\t" + + "Local: \t\t{}://localhost:{}{}\n\t" + + "External: \t{}://{}:{}{}\n\t" + "Profile(s): \t{}\n----------------------------------------------------------", env.getProperty("spring.application.name"), protocol, - env.getProperty("server.port"), + serverPort, + contextPath, protocol, hostAddress, - env.getProperty("server.port"), + serverPort, + contextPath, env.getActiveProfiles()); <%_ if (serviceDiscoveryType && (applicationType === 'microservice' || applicationType === 'gateway' || applicationType === 'uaa')) { _%> String configServerStatus = env.getProperty("configserver.status"); + if (configServerStatus == null) { + configServerStatus = "Not found or not setup for this application"; + } log.info("\n----------------------------------------------------------\n\t" + - "Config Server: \t{}\n----------------------------------------------------------", - configServerStatus == null ? "Not found or not setup for this application" : configServerStatus); + "Config Server: \t{}\n----------------------------------------------------------", configServerStatus); <%_ } _%> } } diff --git a/generators/server/templates/src/main/java/package/config/AsyncConfiguration.java.ejs b/generators/server/templates/src/main/java/package/config/AsyncConfiguration.java.ejs index c0fce487b8ae..143f3858c8cc 100644 --- a/generators/server/templates/src/main/java/package/config/AsyncConfiguration.java.ejs +++ b/generators/server/templates/src/main/java/package/config/AsyncConfiguration.java.ejs @@ -29,13 +29,16 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.*; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.scheduling.annotation.SchedulingConfigurer; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; import java.util.concurrent.Executor; +import java.util.concurrent.Executors; @Configuration @EnableAsync @EnableScheduling -public class AsyncConfiguration implements AsyncConfigurer { +public class AsyncConfiguration implements AsyncConfigurer, SchedulingConfigurer { private final Logger log = LoggerFactory.getLogger(AsyncConfiguration.class); @@ -61,4 +64,14 @@ public class AsyncConfiguration implements AsyncConfigurer { public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { return new SimpleAsyncUncaughtExceptionHandler(); } + + @Override + public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { + taskRegistrar.setScheduler(scheduledTaskExecutor()); + } + + @Bean + public Executor scheduledTaskExecutor() { + return Executors.newScheduledThreadPool(jHipsterProperties.getAsync().getCorePoolSize()); + } } diff --git a/generators/server/templates/src/main/java/package/config/DateTimeFormatConfiguration.java.ejs b/generators/server/templates/src/main/java/package/config/DateTimeFormatConfiguration.java.ejs index 860a7ea36f95..536f9f3b8e19 100644 --- a/generators/server/templates/src/main/java/package/config/DateTimeFormatConfiguration.java.ejs +++ b/generators/server/templates/src/main/java/package/config/DateTimeFormatConfiguration.java.ejs @@ -27,6 +27,9 @@ import org.springframework.web.reactive.config.WebFluxConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; <%_ } _%> +/** + * Configure the converters to use the ISO format for dates by default. + */ @Configuration public class DateTimeFormatConfiguration implements Web<% if (reactive) { %>Flux<% } else { %>Mvc<% } %>Configurer { diff --git a/generators/server/templates/src/main/java/package/config/ElasticsearchConfiguration.java.ejs b/generators/server/templates/src/main/java/package/config/ElasticsearchConfiguration.java.ejs new file mode 100644 index 000000000000..2efea03dd9f2 --- /dev/null +++ b/generators/server/templates/src/main/java/package/config/ElasticsearchConfiguration.java.ejs @@ -0,0 +1,90 @@ +<%# + Copyright 2013-2018 the original author or authors from the JHipster project. + + This file is part of the JHipster project, see https://www.jhipster.tech/ + for more information. + + 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. +-%> +package <%=packageName%>.config; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.github.vanroy.springdata.jest.JestElasticsearchTemplate; +import com.github.vanroy.springdata.jest.mapper.DefaultJestResultsMapper; +import io.searchbox.client.JestClient; +import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.data.elasticsearch.core.ElasticsearchOperations; +import org.springframework.data.elasticsearch.core.EntityMapper; +import org.springframework.data.elasticsearch.core.convert.ElasticsearchConverter; +import org.springframework.data.elasticsearch.core.mapping.SimpleElasticsearchMappingContext; + +import java.io.IOException; + +@Configuration +@EnableConfigurationProperties(ElasticsearchProperties.class) +public class ElasticsearchConfiguration { + + private ObjectMapper mapper; + + public ElasticsearchConfiguration(ObjectMapper mapper) { + this.mapper = mapper; + } + + @Bean + public EntityMapper getEntityMapper() { + return new CustomEntityMapper(mapper); + } + + @Bean + @Primary + public ElasticsearchOperations elasticsearchTemplate(final JestClient jestClient, + final ElasticsearchConverter elasticsearchConverter, + final SimpleElasticsearchMappingContext simpleElasticsearchMappingContext, + EntityMapper mapper) { + return new JestElasticsearchTemplate( + jestClient, + elasticsearchConverter, + new DefaultJestResultsMapper(simpleElasticsearchMappingContext, mapper)); + } + + public class CustomEntityMapper implements EntityMapper { + + private ObjectMapper objectMapper; + + public CustomEntityMapper(ObjectMapper objectMapper) { + this.objectMapper = objectMapper; + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); + objectMapper.configure(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS, true); + objectMapper.configure(SerializationFeature.INDENT_OUTPUT, false); + objectMapper.configure(DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS, true); + } + + @Override + public String mapToString(Object object) throws IOException { + return objectMapper.writeValueAsString(object); + } + + @Override + public T mapToObject(String source, Class clazz) throws IOException { + return objectMapper.readValue(source, clazz); + } + } + +} diff --git a/generators/server/templates/src/main/java/package/config/JacksonConfiguration.java.ejs b/generators/server/templates/src/main/java/package/config/JacksonConfiguration.java.ejs index 7b4c8b234c18..ac684d3dd351 100644 --- a/generators/server/templates/src/main/java/package/config/JacksonConfiguration.java.ejs +++ b/generators/server/templates/src/main/java/package/config/JacksonConfiguration.java.ejs @@ -21,6 +21,8 @@ package <%=packageName%>.config; <%_ if (databaseType === 'sql') { _%> import com.fasterxml.jackson.datatype.hibernate5.Hibernate5Module; <%_ } _%> +import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.module.afterburner.AfterburnerModule; import org.springframework.context.annotation.Bean; @@ -30,6 +32,21 @@ import org.zalando.problem.violations.ConstraintViolationProblemModule; @Configuration public class JacksonConfiguration { + + /** + * Support for Java date and time API. + * @return the corresponding Jackson module. + */ + @Bean + public JavaTimeModule javaTimeModule() { + return new JavaTimeModule(); + } + + @Bean + public Jdk8Module jdk8TimeModule() { + return new Jdk8Module(); + } + <%_ if (databaseType === 'sql') { _%> /* diff --git a/generators/server/templates/src/main/java/package/config/MessagingConfiguration.java.ejs b/generators/server/templates/src/main/java/package/config/MessagingConfiguration.java.ejs index 90ca6bd522d9..6df734d10929 100644 --- a/generators/server/templates/src/main/java/package/config/MessagingConfiguration.java.ejs +++ b/generators/server/templates/src/main/java/package/config/MessagingConfiguration.java.ejs @@ -18,13 +18,15 @@ -%> package <%=packageName%>.config; -import java.text.SimpleDateFormat; -import java.util.Date; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import org.springframework.cloud.stream.annotation.EnableBinding; import org.springframework.cloud.stream.messaging.Source; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.integration.annotation.InboundChannelAdapter; +import org.springframework.integration.annotation.Poller; import org.springframework.integration.core.MessageSource; import org.springframework.messaging.support.GenericMessage; @@ -39,16 +41,19 @@ import org.springframework.messaging.support.GenericMessage; @EnableBinding(value = { Source.class }) public class MessagingConfiguration { + @Value("${spring.application.name:JhipsterService}") + private String applicationName; + /** - * This sends a test message at regular intervals. + * This sends a test message at regular intervals set as fixedRate (in ms) * * In order to see the test messages, you can use the Kafka command-line client: * "./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic topic-jhipster --from-beginning". */ @Bean - @InboundChannelAdapter(value = Source.OUTPUT) + @InboundChannelAdapter(value = Source.OUTPUT, poller = @Poller(fixedRate = "60000")) public MessageSource timerMessageSource() { - return () -> new GenericMessage<>("Test message from JHipster sent at " + - new SimpleDateFormat().format(new Date())); + return () -> new GenericMessage<>("Test message from " + applicationName + + " sent at " + LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); } } diff --git a/generators/server/templates/src/main/java/package/config/OAuth2SsoConfiguration.java.ejs b/generators/server/templates/src/main/java/package/config/OAuth2SsoConfiguration.java.ejs index f775a721d44a..566e5bd5a530 100644 --- a/generators/server/templates/src/main/java/package/config/OAuth2SsoConfiguration.java.ejs +++ b/generators/server/templates/src/main/java/package/config/OAuth2SsoConfiguration.java.ejs @@ -24,8 +24,10 @@ import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.builders.WebSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.oauth2.client.OAuth2ClientContext; import org.springframework.security.oauth2.client.OAuth2RestTemplate; @@ -37,6 +39,8 @@ import org.springframework.web.filter.CorsFilter; import io.github.jhipster.security.AjaxLogoutSuccessHandler; @EnableOAuth2Sso +@EnableWebSecurity +@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true) @Configuration public class OAuth2SsoConfiguration extends WebSecurityConfigurerAdapter { diff --git a/generators/server/templates/src/main/java/package/service/UserService.java.ejs b/generators/server/templates/src/main/java/package/service/UserService.java.ejs index f3b84c0076b9..cafec216ef9a 100644 --- a/generators/server/templates/src/main/java/package/service/UserService.java.ejs +++ b/generators/server/templates/src/main/java/package/service/UserService.java.ejs @@ -227,25 +227,14 @@ public class UserService { public <% if (reactive) { %>Mono<% } else { %>User<% } %> registerUser(UserDTO userDTO, String password) { <%_ if (!reactive) { _%> userRepository.findOneByLogin(userDTO.getLogin().toLowerCase()).ifPresent(existingUser -> { - if (!existingUser.getActivated()) { - userRepository.delete(existingUser); - <%_ if (cacheManagerIsAvailable === true) { _%> - this.clearUserCaches(existingUser); - <%_ } _%> - } else { + boolean removed = removeNonActivatedUser(existingUser); + if (!removed) { throw new LoginAlreadyUsedException(); } }); userRepository.findOneByEmailIgnoreCase(userDTO.getEmail()).ifPresent(existingUser -> { - if (!existingUser.getActivated()) { - userRepository.delete(existingUser); - <%_ if (databaseType === 'sql') { _%> - userRepository.flush(); - <%_ } _%> - <%_ if (cacheManagerIsAvailable === true) { _%> - this.clearUserCaches(existingUser); - <%_ } _%> - } else { + boolean removed = removeNonActivatedUser(existingUser); + if (!removed) { throw new EmailAlreadyUsedException(); } }); @@ -331,6 +320,19 @@ public class UserService { }); <%_ } _%> } + private boolean removeNonActivatedUser(User existingUser){ + if(existingUser.getActivated()) { + return false; + } + userRepository.delete(existingUser); + <%_ if (databaseType === 'sql') { _%> + userRepository.flush(); + <%_ } _%> + <%_ if (cacheManagerIsAvailable === true) { _%> + this.clearUserCaches(existingUser); + <%_ } _%> + return true; + } public <% if (reactive) { %>Mono<% } else { %>User<% } %> createUser(UserDTO userDTO) { User user = new User();<% if (databaseType === 'cassandra') { %> diff --git a/generators/server/templates/src/main/resources/config/application-dev.yml.ejs b/generators/server/templates/src/main/resources/config/application-dev.yml.ejs index ff136d098016..631e99658e59 100644 --- a/generators/server/templates/src/main/resources/config/application-dev.yml.ejs +++ b/generators/server/templates/src/main/resources/config/application-dev.yml.ejs @@ -52,7 +52,10 @@ eureka: spring: profiles: active: dev - include: swagger + include: + - swagger + # Uncomment to activate TLS for the dev profile + #- tls devtools: restart: enabled: true @@ -226,22 +229,8 @@ spring: enabled: true <%_ } _%> -# =================================================================== -# To enable SSL in development, uncomment the the "server.ssl" properties below. -# -# JHipster has generated a self-signed certificate, which will be used to encrypt traffic. -# As your browser will not understand this certificate, you will need to import it. -# -# Another (easiest) solution with Chrome is to enable the "allow-insecure-localhost" flag -# at chrome://flags/#allow-insecure-localhost -# =================================================================== server: port: <%= serverPort %> -# ssl: -# key-store: classpath:config/tls/keystore.p12 -# key-store-password: password -# key-store-type: PKCS12 -# key-alias: selfsigned # =================================================================== # JHipster specific properties @@ -260,7 +249,7 @@ jhipster: app1: /api,/v2/api-docs # recommended dev configuration <%_ } _%> http: - version: V_1_1 # To use HTTP/2 you will need SSL support (see above the "server.ssl" configuration) + version: V_1_1 # To use HTTP/2 you will need to activate TLS (see application-tls.yml) <%_ if (cacheProvider !== 'no') { _%> cache: # Cache configuration <%_ if (cacheProvider === 'hazelcast') { _%> diff --git a/generators/server/templates/src/main/resources/config/application-prod.yml.ejs b/generators/server/templates/src/main/resources/config/application-prod.yml.ejs index 91e67e706756..5375564e5adf 100644 --- a/generators/server/templates/src/main/resources/config/application-prod.yml.ejs +++ b/generators/server/templates/src/main/resources/config/application-prod.yml.ejs @@ -202,7 +202,7 @@ spring: <%_ } _%> # =================================================================== -# To enable SSL in production, generate a certificate using: +# To enable TLS in production, generate a certificate using: # keytool -genkey -alias <%= baseName.toLowerCase() %> -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650 # # You can also use Let's Encrypt: diff --git a/generators/server/templates/src/main/resources/config/application-tls.yml.ejs b/generators/server/templates/src/main/resources/config/application-tls.yml.ejs new file mode 100644 index 000000000000..e082c8f455b6 --- /dev/null +++ b/generators/server/templates/src/main/resources/config/application-tls.yml.ejs @@ -0,0 +1,18 @@ +# =================================================================== +# Activate this profile to enable TLS and HTTP/2. +# +# JHipster has generated a self-signed certificate, which will be used to encrypt traffic. +# As your browser will not understand this certificate, you will need to import it. +# +# Another (easiest) solution with Chrome is to enable the "allow-insecure-localhost" flag +# at chrome://flags/#allow-insecure-localhost +# =================================================================== +server: + ssl: + key-store: classpath:config/tls/keystore.p12 + key-store-password: password + key-store-type: PKCS12 + key-alias: selfsigned +jhipster: + http: + version: V_2_0 diff --git a/generators/server/templates/src/main/resources/static/microservices_index.html.ejs b/generators/server/templates/src/main/resources/static/microservices_index.html.ejs index 1e2856a00e11..46c264463c2a 100644 --- a/generators/server/templates/src/main/resources/static/microservices_index.html.ejs +++ b/generators/server/templates/src/main/resources/static/microservices_index.html.ejs @@ -79,7 +79,7 @@
  • It does not have a front-end. The front-end should be generated on a JHipster gateway
  • It is serving REST APIs, under the '/api' URLs.
  • -
  • Swagger documentation endpoint for those APIs is at /v2/api-docs, but if you want access to the full Swagger UI, you should use a JHipster gateway, which will serve as an API developer portal
  • +
  • Swagger documentation endpoint for those APIs is at /v2/api-docs, but if you want access to the full Swagger UI, you should use a JHipster gateway, which will serve as an API developer portal

diff --git a/generators/server/templates/src/test/java/package/security/SecurityUtilsUnitTest.java.ejs b/generators/server/templates/src/test/java/package/security/SecurityUtilsUnitTest.java.ejs index 1b952c11a074..63554028d827 100644 --- a/generators/server/templates/src/test/java/package/security/SecurityUtilsUnitTest.java.ejs +++ b/generators/server/templates/src/test/java/package/security/SecurityUtilsUnitTest.java.ejs @@ -39,10 +39,10 @@ import java.util.Optional; import static org.assertj.core.api.Assertions.assertThat; /** -* Test class for the SecurityUtils utility class. -* -* @see SecurityUtils -*/ + * Test class for the SecurityUtils utility class. + * + * @see SecurityUtils + */ public class SecurityUtilsUnitTest { <%_ if (!reactive) { _%> diff --git a/generators/server/templates/src/test/java/package/web/rest/AccountResourceIntTest.java.ejs b/generators/server/templates/src/test/java/package/web/rest/AccountResourceIntTest.java.ejs index dfe462b9fd74..cb9ee15373c9 100644 --- a/generators/server/templates/src/test/java/package/web/rest/AccountResourceIntTest.java.ejs +++ b/generators/server/templates/src/test/java/package/web/rest/AccountResourceIntTest.java.ejs @@ -762,7 +762,7 @@ public class AccountResourceIntTest <% if (databaseType === 'cassandra') { %>ext // Duplicate email - with uppercase email address ManagedUserVM userWithUpperCaseEmail = new ManagedUserVM(); userWithUpperCaseEmail.setId(firstUser.getId()); - userWithUpperCaseEmail.setLogin("test-register-duplicate-email-2"); + userWithUpperCaseEmail.setLogin("test-register-duplicate-email-3"); userWithUpperCaseEmail.setPassword(firstUser.getPassword()); userWithUpperCaseEmail.setFirstName(firstUser.getFirstName()); userWithUpperCaseEmail.setLastName(firstUser.getLastName()); @@ -788,7 +788,7 @@ public class AccountResourceIntTest <% if (databaseType === 'cassandra') { %>ext .expectStatus().isCreated(); <%_ } _%> - Optional testUser4 = userRepository.findOneByLogin("test-register-duplicate-email-2")<% if (reactive) { %>.blockOptional()<% } %>; + Optional testUser4 = userRepository.findOneByLogin("test-register-duplicate-email-3")<% if (reactive) { %>.blockOptional()<% } %>; assertThat(testUser4.isPresent()).isTrue(); assertThat(testUser4.get().getEmail()).isEqualTo("test-register-duplicate-email@example.com"); diff --git a/generators/spring-controller/index.js b/generators/spring-controller/index.js index b4246f34cb87..9b67a12aef9f 100644 --- a/generators/spring-controller/index.js +++ b/generators/spring-controller/index.js @@ -54,6 +54,7 @@ module.exports = class extends BaseGenerator { blueprint, 'spring-controller', { + 'from-cli': this.options['from-cli'], force: this.options.force, arguments: [this.name], default: this.options.default @@ -67,7 +68,7 @@ module.exports = class extends BaseGenerator { // Public API method used by the getter and also by Blueprints _initializing() { return { - validateFromCLi() { + validateFromCli() { if (!this.options['from-cli']) { this.warning(`Deprecated: JHipster seems to be invoked using Yeoman command. Please use the JHipster CLI. Run ${chalk.red('jhipster ')} instead of ${chalk.red('yo jhipster:')}`); } diff --git a/generators/spring-service/index.js b/generators/spring-service/index.js index f513415516f2..92dc1e52a989 100644 --- a/generators/spring-service/index.js +++ b/generators/spring-service/index.js @@ -51,6 +51,7 @@ module.exports = class extends BaseGenerator { blueprint, 'spring-service', { + 'from-cli': this.options['from-cli'], force: this.options.force, arguments: [this.name], default: this.options.default @@ -64,7 +65,7 @@ module.exports = class extends BaseGenerator { // Public API method used by the getter and also by Blueprints _initializing() { return { - validateFromCLi() { + validateFromCli() { if (!this.options['from-cli']) { this.warning(`Deprecated: JHipster seems to be invoked using Yeoman command. Please use the JHipster CLI. Run ${chalk.red('jhipster ')} instead of ${chalk.red('yo jhipster:')}`); } diff --git a/generators/upgrade/index.js b/generators/upgrade/index.js index fc61525388ce..dc4bffac9bd7 100644 --- a/generators/upgrade/index.js +++ b/generators/upgrade/index.js @@ -70,7 +70,7 @@ module.exports = class extends BaseGenerator { get initializing() { return { - validateFromCLi() { + validateFromCli() { if (!this.options['from-cli']) { this.warning(`Deprecated: JHipster seems to be invoked using Yeoman command. Please use the JHipster CLI. Run ${chalk.red('jhipster ')} instead of ${chalk.red('yo jhipster:')}`); } @@ -82,6 +82,7 @@ module.exports = class extends BaseGenerator { }, loadConfig() { + this.config = this.getAllJhipsterConfig(this, true); this.currentVersion = this.config.get('jhipsterVersion'); this.clientPackageManager = this.config.get('clientPackageManager'); this.clientFramework = this.config.get('clientFramework'); @@ -155,7 +156,7 @@ module.exports = class extends BaseGenerator { assertJHipsterProject() { const done = this.async(); - if (!this.getJhipsterAppConfig()) { + if (!this.config.baseName) { this.error('Current directory does not contain a JHipster project.'); } done(); diff --git a/generators/utils.js b/generators/utils.js index 9c588a6d92b5..e50961de5d04 100644 --- a/generators/utils.js +++ b/generators/utils.js @@ -21,6 +21,9 @@ const path = require('path'); const shelljs = require('shelljs'); const ejs = require('ejs'); const _ = require('lodash'); +const jhiCore = require('jhipster-core'); +const fs = require('fs'); + const constants = require('./generator-constants'); const LANGUAGES_MAIN_SRC_DIR = `../../languages/templates/${constants.CLIENT_MAIN_SRC_DIR}`; @@ -37,7 +40,9 @@ module.exports = { getJavadoc, buildEnumInfo, copyObjectProps, - decodeBase64 + decodeBase64, + getAllJhipsterConfig, + getDBTypeFromDBValue }; /** @@ -388,3 +393,39 @@ function copyObjectProps(toObj, fromObj) { function decodeBase64(string, encoding = 'utf-8') { return Buffer.from(string, 'base64').toString(encoding); } + +/** + * Get all the generator configuration from the .yo-rc.json file + * @param {Generator} generator the generator instance to use + * @param {boolean} force force getting direct from file + */ +function getAllJhipsterConfig(generator, force) { + let configuration = generator && generator.config ? generator.config.getAll() || {} : {}; + if ((force || !configuration.baseName) && jhiCore.FileUtils.doesFileExist('.yo-rc.json')) { + const yoRc = JSON.parse(fs.readFileSync('.yo-rc.json', { encoding: 'utf-8' })); + configuration = yoRc['generator-jhipster']; + // merge the blueprint config if available + if (configuration.blueprint) { + configuration = Object.assign(configuration, yoRc[configuration.blueprint]); + } + } + if (!configuration.get || typeof configuration.get !== 'function') { + Object.assign(configuration, { + getAll: () => configuration, + get: key => configuration[key], + set: (key, value) => { configuration[key] = value; } + }); + } + return configuration; +} + +/** + * Get DB type from DB value + * @param {string} db - db + */ +function getDBTypeFromDBValue(db) { + if (constants.SQL_DB_OPTIONS.map(db => db.value).includes(db)) { + return 'sql'; + } + return db; +} diff --git a/package-lock.json b/package-lock.json index 1651e6f57928..9062ec74cfbb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,8 @@ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", "requires": { - "call-me-maybe": "1.0.1", - "glob-to-regexp": "0.3.0" + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" } }, "@nodelib/fs.stat": { @@ -45,7 +45,7 @@ "integrity": "sha512-JY+iV6r+cO21KtntVvFkD+iqjtdpRUpGqKWgfkCdZq1R+kbreEl8EcdcJR4SmiIgsIQT33s6QzheQ9a275Q8xw==", "dev": true, "requires": { - "acorn": "5.7.1" + "acorn": "^5.0.3" } }, "ajv": { @@ -53,10 +53,10 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.3.tgz", "integrity": "sha1-wG9Zh3jETGsWGrr+NGa4GtGBTtI=", "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "json-schema-traverse": "0.3.1", - "json-stable-stringify": "1.0.1" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "json-schema-traverse": "^0.3.0", + "json-stable-stringify": "^1.0.1" } }, "ajv-keywords": { @@ -101,7 +101,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "ansi-wrap": { @@ -114,8 +114,8 @@ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.3" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "argparse": { @@ -123,7 +123,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "arr-diff": { @@ -131,8 +131,8 @@ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", "requires": { - "arr-flatten": "1.1.0", - "array-slice": "0.2.3" + "arr-flatten": "^1.0.1", + "array-slice": "^0.2.3" } }, "arr-flatten": { @@ -165,7 +165,7 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -209,7 +209,7 @@ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", "requires": { - "lodash": "4.17.10" + "lodash": "^4.14.0" } }, "asynckit": { @@ -237,8 +237,8 @@ "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", "requires": { - "follow-redirects": "1.5.5", - "is-buffer": "1.1.6" + "follow-redirects": "^1.3.0", + "is-buffer": "^1.1.5" } }, "babel-code-frame": { @@ -247,9 +247,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" }, "dependencies": { "ansi-styles": { @@ -264,11 +264,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "supports-color": { @@ -295,13 +295,13 @@ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -309,7 +309,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -317,7 +317,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -325,7 +325,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -333,9 +333,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "kind-of": { @@ -351,7 +351,7 @@ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "binaryextensions": { @@ -370,7 +370,7 @@ "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" } }, "brace-expansion": { @@ -378,7 +378,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -387,16 +387,16 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.2", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -404,7 +404,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -425,15 +425,15 @@ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, "call-me-maybe": { @@ -447,7 +447,7 @@ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "dev": true, "requires": { - "callsites": "0.2.0" + "callsites": "^0.2.0" } }, "callsites": { @@ -466,9 +466,9 @@ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", "requires": { - "camelcase": "4.1.0", - "map-obj": "2.0.0", - "quick-lru": "1.1.0" + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" } }, "caseless": { @@ -482,7 +482,7 @@ "integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=", "dev": true, "requires": { - "underscore-contrib": "0.3.0" + "underscore-contrib": "~0.3.0" } }, "chai": { @@ -491,12 +491,12 @@ "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", "dev": true, "requires": { - "assertion-error": "1.0.2", - "check-error": "1.0.2", - "deep-eql": "3.0.1", - "get-func-name": "2.0.0", - "pathval": "1.1.0", - "type-detect": "4.0.3" + "assertion-error": "^1.0.1", + "check-error": "^1.0.1", + "deep-eql": "^3.0.0", + "get-func-name": "^2.0.0", + "pathval": "^1.0.0", + "type-detect": "^4.0.0" } }, "chalk": { @@ -504,9 +504,9 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "chardet": { @@ -539,10 +539,10 @@ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "arr-union": { @@ -555,7 +555,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -565,7 +565,7 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "requires": { - "restore-cursor": "1.0.1" + "restore-cursor": "^1.0.1" } }, "cli-table": { @@ -594,9 +594,9 @@ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" } }, "clone": { @@ -619,9 +619,9 @@ "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", "requires": { - "inherits": "2.0.3", - "process-nextick-args": "2.0.0", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" }, "dependencies": { "process-nextick-args": { @@ -634,13 +634,13 @@ "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.2", - "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.2" + "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": { @@ -648,7 +648,7 @@ "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.1" + "safe-buffer": "~5.1.0" } } } @@ -668,8 +668,8 @@ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color": { @@ -677,8 +677,8 @@ "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", "requires": { - "color-convert": "1.9.1", - "color-string": "1.5.3" + "color-convert": "^1.9.1", + "color-string": "^1.5.2" } }, "color-convert": { @@ -686,7 +686,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "requires": { - "color-name": "1.1.3" + "color-name": "^1.1.1" } }, "color-name": { @@ -699,8 +699,8 @@ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", "requires": { - "color-name": "1.1.3", - "simple-swizzle": "0.2.2" + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" } }, "colornames": { @@ -718,8 +718,8 @@ "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.1.tgz", "integrity": "sha512-pI3btWyiuz7Ken0BWh9Elzsmv2bM9AhA7psXib4anUXy/orfZ/E0MbQwhSOG/9L8hLlalqrU0UhOuqxW1YjmVw==", "requires": { - "color": "3.0.0", - "text-hex": "1.0.0" + "color": "3.0.x", + "text-hex": "1.0.x" } }, "combined-stream": { @@ -727,7 +727,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { @@ -755,9 +755,9 @@ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "conf": { @@ -765,11 +765,11 @@ "resolved": "https://registry.npmjs.org/conf/-/conf-2.0.0.tgz", "integrity": "sha512-iCLzBsGFi8S73EANsEJZz0JnJ/e5VZef/kSaxydYZLAvw0rFNAUx5R7K5leC/CXXR2mZfXWhUvcZOO/dM2D5xg==", "requires": { - "dot-prop": "4.2.0", - "env-paths": "1.0.0", - "make-dir": "1.0.0", - "pkg-up": "2.0.0", - "write-file-atomic": "2.3.0" + "dot-prop": "^4.1.0", + "env-paths": "^1.0.0", + "make-dir": "^1.0.0", + "pkg-up": "^2.0.0", + "write-file-atomic": "^2.3.0" } }, "contains-path": { @@ -793,11 +793,11 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "requires": { - "nice-try": "1.0.4", - "path-key": "2.0.1", - "semver": "5.5.0", - "shebang-command": "1.2.0", - "which": "1.3.0" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "cryptiles": { @@ -805,7 +805,7 @@ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", "requires": { - "boom": "5.2.0" + "boom": "5.x.x" }, "dependencies": { "boom": { @@ -813,7 +813,7 @@ "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" } } } @@ -823,7 +823,7 @@ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "requires": { - "array-find-index": "1.0.2" + "array-find-index": "^1.0.1" } }, "dargs": { @@ -836,7 +836,7 @@ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "dateformat": { @@ -862,8 +862,8 @@ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", "requires": { - "decamelize": "1.2.0", - "map-obj": "1.0.1" + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" }, "dependencies": { "map-obj": { @@ -883,7 +883,7 @@ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "requires": { - "mimic-response": "1.0.1" + "mimic-response": "^1.0.0" } }, "deep-eql": { @@ -892,7 +892,7 @@ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "requires": { - "type-detect": "4.0.3" + "type-detect": "^4.0.0" } }, "deep-extend": { @@ -912,8 +912,8 @@ "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", "dev": true, "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.12" + "foreach": "^2.0.5", + "object-keys": "^1.0.8" } }, "define-property": { @@ -921,8 +921,8 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -930,7 +930,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -938,7 +938,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -946,9 +946,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "kind-of": { @@ -964,13 +964,13 @@ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", "dev": true, "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" }, "dependencies": { "globby": { @@ -979,12 +979,12 @@ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } } } @@ -1009,9 +1009,9 @@ "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", "requires": { - "colorspace": "1.1.1", - "enabled": "1.0.2", - "kuler": "1.0.0" + "colorspace": "1.1.x", + "enabled": "1.0.x", + "kuler": "1.0.x" } }, "didyoumean": { @@ -1029,8 +1029,8 @@ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", "requires": { - "arrify": "1.0.1", - "path-type": "3.0.0" + "arrify": "^1.0.1", + "path-type": "^3.0.0" }, "dependencies": { "path-type": { @@ -1038,7 +1038,7 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" } }, "pify": { @@ -1054,7 +1054,7 @@ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { - "esutils": "2.0.2" + "esutils": "^2.0.2" } }, "dot-prop": { @@ -1062,7 +1062,7 @@ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", "requires": { - "is-obj": "1.0.1" + "is-obj": "^1.0.0" } }, "drange": { @@ -1081,7 +1081,7 @@ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "editions": { @@ -1107,12 +1107,12 @@ "dev": true, "requires": { "ejs": "2.5.6", - "ejs-include-regex": "1.0.0", - "globby": "6.1.0", - "read-input": "0.3.1", - "rewire": "2.5.2", - "syntax-error": "1.3.0", - "yargs": "7.1.0" + "ejs-include-regex": "^1.0.0", + "globby": "^6.1.0", + "read-input": "^0.3.1", + "rewire": "^2.5.1", + "syntax-error": "^1.1.6", + "yargs": "^7.0.1" }, "dependencies": { "ejs": { @@ -1127,11 +1127,11 @@ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } } } @@ -1141,7 +1141,7 @@ "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", "requires": { - "env-variable": "0.0.4" + "env-variable": "0.0.x" } }, "env-paths": { @@ -1159,8 +1159,8 @@ "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", "requires": { - "string-template": "0.2.1", - "xtend": "4.0.1" + "string-template": "~0.2.1", + "xtend": "~4.0.0" } }, "error-ex": { @@ -1168,7 +1168,7 @@ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "es-abstract": { @@ -1177,11 +1177,11 @@ "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", "dev": true, "requires": { - "es-to-primitive": "1.1.1", - "function-bind": "1.1.1", - "has": "1.0.1", - "is-callable": "1.1.3", - "is-regex": "1.0.4" + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" } }, "es-to-primitive": { @@ -1190,9 +1190,9 @@ "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", "dev": true, "requires": { - "is-callable": "1.1.3", - "is-date-object": "1.0.1", - "is-symbol": "1.0.1" + "is-callable": "^1.1.1", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.1" } }, "escape-string-regexp": { @@ -1206,45 +1206,45 @@ "integrity": "sha512-DyH6JsoA1KzA5+OSWFjg56DFJT+sDLO0yokaPZ9qY0UEmYrPA1gEX/G1MnVkmRDsksG4H1foIVz2ZXXM3hHYvw==", "dev": true, "requires": { - "ajv": "6.5.2", - "babel-code-frame": "6.26.0", - "chalk": "2.4.1", - "cross-spawn": "6.0.5", - "debug": "3.1.0", - "doctrine": "2.1.0", - "eslint-scope": "4.0.0", - "eslint-utils": "1.3.1", - "eslint-visitor-keys": "1.0.0", - "espree": "4.0.0", - "esquery": "1.0.1", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "functional-red-black-tree": "1.0.1", - "glob": "7.1.2", - "globals": "11.7.0", - "ignore": "3.3.5", - "imurmurhash": "0.1.4", - "inquirer": "5.2.0", - "is-resolvable": "1.1.0", - "js-yaml": "3.12.0", - "json-stable-stringify-without-jsonify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.10", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "7.0.0", - "progress": "2.0.0", - "regexpp": "1.1.0", - "require-uncached": "1.0.3", - "semver": "5.5.0", - "string.prototype.matchall": "2.0.0", - "strip-ansi": "4.0.0", - "strip-json-comments": "2.0.1", - "table": "4.0.3", - "text-table": "0.2.0" + "ajv": "^6.5.0", + "babel-code-frame": "^6.26.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^4.0.0", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^4.0.0", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^5.2.0", + "is-resolvable": "^1.1.0", + "js-yaml": "^3.11.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.5", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^1.1.0", + "require-uncached": "^1.0.3", + "semver": "^5.5.0", + "string.prototype.matchall": "^2.0.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^4.0.3", + "text-table": "^0.2.0" }, "dependencies": { "ajv": { @@ -1253,10 +1253,10 @@ "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", "dev": true, "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.1" } }, "ansi-regex": { @@ -1292,7 +1292,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -1303,9 +1303,9 @@ "integrity": "sha512-hUFXRlE6AY84z0qYh4wKdtSF4EqDnyT8sxrvTpcXCV4ENSLF8li5yNA1yDM26iinH8Ierbpc4lv8Rp62uX6VSQ==", "dev": true, "requires": { - "eslint-restricted-globals": "0.1.1", - "object.assign": "4.1.0", - "object.entries": "1.0.4" + "eslint-restricted-globals": "^0.1.1", + "object.assign": "^4.1.0", + "object.entries": "^1.0.4" } }, "eslint-import-resolver-node": { @@ -1314,8 +1314,8 @@ "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", "dev": true, "requires": { - "debug": "2.6.9", - "resolve": "1.7.1" + "debug": "^2.6.9", + "resolve": "^1.5.0" } }, "eslint-module-utils": { @@ -1324,8 +1324,8 @@ "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", "dev": true, "requires": { - "debug": "2.6.9", - "pkg-dir": "1.0.0" + "debug": "^2.6.8", + "pkg-dir": "^1.0.0" } }, "eslint-plugin-import": { @@ -1334,16 +1334,16 @@ "integrity": "sha512-t6hGKQDMIt9N8R7vLepsYXgDfeuhp6ZJSgtrLEDxonpSubyxUZHjhm6LsAaZX8q6GYVxkbT3kTsV9G5mBCFR6A==", "dev": true, "requires": { - "contains-path": "0.1.0", - "debug": "2.6.9", + "contains-path": "^0.1.0", + "debug": "^2.6.8", "doctrine": "1.5.0", - "eslint-import-resolver-node": "0.3.2", - "eslint-module-utils": "2.2.0", - "has": "1.0.1", - "lodash": "4.17.10", - "minimatch": "3.0.4", - "read-pkg-up": "2.0.0", - "resolve": "1.7.1" + "eslint-import-resolver-node": "^0.3.1", + "eslint-module-utils": "^2.2.0", + "has": "^1.0.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.3", + "read-pkg-up": "^2.0.0", + "resolve": "^1.6.0" }, "dependencies": { "doctrine": { @@ -1352,8 +1352,8 @@ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "dev": true, "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" + "esutils": "^2.0.2", + "isarray": "^1.0.0" } }, "find-up": { @@ -1362,7 +1362,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "load-json-file": { @@ -1371,10 +1371,10 @@ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" } }, "path-type": { @@ -1383,7 +1383,7 @@ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "dev": true, "requires": { - "pify": "2.3.0" + "pify": "^2.0.0" } }, "read-pkg": { @@ -1392,9 +1392,9 @@ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" } }, "read-pkg-up": { @@ -1403,8 +1403,8 @@ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" } }, "strip-bom": { @@ -1427,8 +1427,8 @@ "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", "dev": true, "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "eslint-utils": { @@ -1449,8 +1449,8 @@ "integrity": "sha512-kapdTCt1bjmspxStVKX6huolXVV5ZfyZguY1lcfhVVZstce3bqxH9mcLzNn3/mlgW6wQ732+0fuG9v7h0ZQoKg==", "dev": true, "requires": { - "acorn": "5.7.1", - "acorn-jsx": "4.1.1" + "acorn": "^5.6.0", + "acorn-jsx": "^4.1.1" } }, "esprima": { @@ -1464,7 +1464,7 @@ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.0.0" } }, "esrecurse": { @@ -1473,7 +1473,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -1493,13 +1493,13 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" }, "dependencies": { "cross-spawn": { @@ -1507,9 +1507,9 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "requires": { - "lru-cache": "4.1.3", - "shebang-command": "1.2.0", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } } } @@ -1524,13 +1524,13 @@ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -1538,7 +1538,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -1546,7 +1546,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -1561,7 +1561,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", "requires": { - "kind-of": "1.1.0" + "kind-of": "^1.1.0" } }, "external-editor": { @@ -1569,9 +1569,9 @@ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-1.1.1.tgz", "integrity": "sha1-Etew24UPf/fnCBuvQAVwAGDEYAs=", "requires": { - "extend": "3.0.1", - "spawn-sync": "1.0.15", - "tmp": "0.0.29" + "extend": "^3.0.0", + "spawn-sync": "^1.0.15", + "tmp": "^0.0.29" } }, "extglob": { @@ -1579,14 +1579,14 @@ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -1594,7 +1594,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -1602,7 +1602,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -1610,7 +1610,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -1618,7 +1618,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -1626,9 +1626,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "kind-of": { @@ -1653,12 +1653,12 @@ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.2.tgz", "integrity": "sha512-TR6zxCKftDQnUAPvkrCWdBgDq/gbqx8A3ApnBrR5rMvpp6+KMJI0Igw7fkWPgeVK0uhRXTXdvO3O+YP0CaUX2g==", "requires": { - "@mrmlnc/readdir-enhanced": "2.2.1", - "@nodelib/fs.stat": "1.1.0", - "glob-parent": "3.1.0", - "is-glob": "4.0.0", - "merge2": "1.2.2", - "micromatch": "3.1.10" + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.0.1", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.1", + "micromatch": "^3.1.10" } }, "fast-json-stable-stringify": { @@ -1688,8 +1688,8 @@ "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" } }, "file-entry-cache": { @@ -1698,8 +1698,8 @@ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "dev": true, "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" } }, "fill-range": { @@ -1707,10 +1707,10 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -1718,7 +1718,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -1729,8 +1729,8 @@ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "first-chunk-stream": { @@ -1738,7 +1738,7 @@ "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz", "integrity": "sha1-G97NuOCDwGZLkZRVgVd6Q6nzHXA=", "requires": { - "readable-stream": "2.3.3" + "readable-stream": "^2.0.2" } }, "flat-cache": { @@ -1747,10 +1747,10 @@ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", "dev": true, "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" + "circular-json": "^0.3.1", + "del": "^2.0.2", + "graceful-fs": "^4.1.2", + "write": "^0.2.1" } }, "follow-redirects": { @@ -1758,7 +1758,7 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.5.tgz", "integrity": "sha512-GHjtHDlY/ehslqv0Gr5N0PUJppgg/q0rOBvX0na1s7y1A3LWxPqCYU76s3Z1bM4+UZB4QF0usaXLT5wFpof5PA==", "requires": { - "debug": "3.1.0" + "debug": "^3.1.0" }, "dependencies": { "debug": { @@ -1792,9 +1792,9 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "requires": { - "asynckit": "0.4.0", + "asynckit": "^0.4.0", "combined-stream": "1.0.6", - "mime-types": "2.1.18" + "mime-types": "^2.1.12" } }, "fragment-cache": { @@ -1802,7 +1802,7 @@ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "fs-extra": { @@ -1811,9 +1811,9 @@ "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "4.0.0", - "universalify": "0.1.1" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, "fs.realpath": { @@ -1838,11 +1838,11 @@ "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=", "requires": { - "ansi": "0.3.1", - "has-unicode": "2.0.1", - "lodash.pad": "4.5.1", - "lodash.padend": "4.6.1", - "lodash.padstart": "4.6.1" + "ansi": "^0.3.0", + "has-unicode": "^2.0.0", + "lodash.pad": "^4.1.0", + "lodash.padend": "^4.1.0", + "lodash.padstart": "^4.1.0" } }, "get-caller-file": { @@ -1872,7 +1872,7 @@ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "gh-got": { @@ -1880,8 +1880,8 @@ "resolved": "https://registry.npmjs.org/gh-got/-/gh-got-6.0.0.tgz", "integrity": "sha512-F/mS+fsWQMo1zfgG9MD8KWvTWPPzzhuVwY++fhQ5Ggd+0P+CAMHtzMZhNxG+TqGfHDChJKsbh6otfMGqO2AKBw==", "requires": { - "got": "7.1.0", - "is-plain-obj": "1.1.0" + "got": "^7.0.0", + "is-plain-obj": "^1.1.0" } }, "github-username": { @@ -1889,7 +1889,7 @@ "resolved": "https://registry.npmjs.org/github-username/-/github-username-4.1.0.tgz", "integrity": "sha1-y+KABBiDIG2kISrp5LXxacML9Bc=", "requires": { - "gh-got": "6.0.0" + "gh-got": "^6.0.0" } }, "glob": { @@ -1897,12 +1897,12 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-parent": { @@ -1910,8 +1910,8 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { "is-glob": { @@ -1919,7 +1919,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } @@ -1940,13 +1940,13 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz", "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==", "requires": { - "array-union": "1.0.2", - "dir-glob": "2.0.0", - "fast-glob": "2.2.2", - "glob": "7.1.2", - "ignore": "3.3.5", - "pify": "3.0.0", - "slash": "1.0.0" + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" }, "dependencies": { "pify": { @@ -1961,20 +1961,20 @@ "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", "requires": { - "decompress-response": "3.3.0", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-plain-obj": "1.1.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "isurl": "1.0.0", - "lowercase-keys": "1.0.1", - "p-cancelable": "0.3.0", - "p-timeout": "1.2.1", - "safe-buffer": "5.1.1", - "timed-out": "4.0.1", - "url-parse-lax": "1.0.0", - "url-to-options": "1.0.1" + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" } }, "graceful-fs": { @@ -1987,7 +1987,7 @@ "resolved": "https://registry.npmjs.org/grouped-queue/-/grouped-queue-0.3.3.tgz", "integrity": "sha1-wWfSpTGcWg4JZO9qJbfC34mWyFw=", "requires": { - "lodash": "4.17.10" + "lodash": "^4.17.2" } }, "growl": { @@ -2001,9 +2001,9 @@ "resolved": "https://registry.npmjs.org/gulp-filter/-/gulp-filter-5.1.0.tgz", "integrity": "sha1-oF4Rr/sHz33PQafeHLe2OsN4PnM=", "requires": { - "multimatch": "2.1.0", - "plugin-error": "0.1.2", - "streamfilter": "1.0.7" + "multimatch": "^2.0.0", + "plugin-error": "^0.1.2", + "streamfilter": "^1.0.5" } }, "har-schema": { @@ -2016,8 +2016,8 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "requires": { - "ajv": "5.2.3", - "har-schema": "2.0.0" + "ajv": "^5.1.0", + "har-schema": "^2.0.0" } }, "has": { @@ -2026,7 +2026,7 @@ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.0.2" } }, "has-ansi": { @@ -2034,7 +2034,7 @@ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "has-flag": { @@ -2058,7 +2058,7 @@ "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", "requires": { - "has-symbol-support-x": "1.4.2" + "has-symbol-support-x": "^1.4.1" } }, "has-unicode": { @@ -2071,9 +2071,9 @@ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { @@ -2081,8 +2081,8 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "kind-of": { @@ -2090,7 +2090,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2100,10 +2100,10 @@ "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.1", - "sntp": "2.1.0" + "boom": "4.x.x", + "cryptiles": "3.x.x", + "hoek": "4.x.x", + "sntp": "2.x.x" } }, "he": { @@ -2127,9 +2127,9 @@ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.14.1" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "iconv-lite": { @@ -2157,8 +2157,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -2171,19 +2171,19 @@ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", "requires": { - "ansi-escapes": "3.1.0", - "chalk": "2.4.1", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.2.0", - "figures": "2.0.0", - "lodash": "4.17.10", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.1.0", + "figures": "^2.0.0", + "lodash": "^4.3.0", "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rxjs": "5.5.10", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" + "run-async": "^2.2.0", + "rxjs": "^5.5.2", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" }, "dependencies": { "ansi-escapes": { @@ -2201,7 +2201,7 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "requires": { - "restore-cursor": "2.0.0" + "restore-cursor": "^2.0.0" } }, "external-editor": { @@ -2209,9 +2209,9 @@ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "requires": { - "chardet": "0.4.2", - "iconv-lite": "0.4.19", - "tmp": "0.0.33" + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" } }, "figures": { @@ -2219,7 +2219,7 @@ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "requires": { - "escape-string-regexp": "1.0.5" + "escape-string-regexp": "^1.0.5" } }, "is-fullwidth-code-point": { @@ -2232,7 +2232,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "requires": { - "mimic-fn": "1.1.0" + "mimic-fn": "^1.0.0" } }, "restore-cursor": { @@ -2240,8 +2240,8 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" } }, "string-width": { @@ -2249,8 +2249,8 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "strip-ansi": { @@ -2258,7 +2258,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "tmp": { @@ -2266,7 +2266,7 @@ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.2" } } } @@ -2276,15 +2276,15 @@ "resolved": "https://registry.npmjs.org/insight/-/insight-0.10.1.tgz", "integrity": "sha512-kLGeYQkh18f8KuC68QKdi0iwUcIaayJVB/STpX7x452/7pAUm1yfG4giJwcxbrTh0zNYtc8kBR+6maLMOzglOQ==", "requires": { - "async": "2.6.0", - "chalk": "2.4.1", - "conf": "1.4.0", - "inquirer": "5.2.0", - "lodash.debounce": "4.0.8", - "os-name": "2.0.1", - "request": "2.85.0", - "tough-cookie": "2.3.4", - "uuid": "3.3.2" + "async": "^2.1.4", + "chalk": "^2.3.0", + "conf": "^1.3.1", + "inquirer": "^5.0.0", + "lodash.debounce": "^4.0.8", + "os-name": "^2.0.1", + "request": "^2.74.0", + "tough-cookie": "^2.0.0", + "uuid": "^3.0.0" }, "dependencies": { "conf": { @@ -2292,11 +2292,11 @@ "resolved": "https://registry.npmjs.org/conf/-/conf-1.4.0.tgz", "integrity": "sha512-bzlVWS2THbMetHqXKB8ypsXN4DQ/1qopGwNJi1eYbpwesJcd86FBjFciCQX/YwAhp9bM7NVnPFqZ5LpV7gP0Dg==", "requires": { - "dot-prop": "4.2.0", - "env-paths": "1.0.0", - "make-dir": "1.0.0", - "pkg-up": "2.0.0", - "write-file-atomic": "2.3.0" + "dot-prop": "^4.1.0", + "env-paths": "^1.0.0", + "make-dir": "^1.0.0", + "pkg-up": "^2.0.0", + "write-file-atomic": "^2.3.0" } } } @@ -2316,7 +2316,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2324,7 +2324,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2344,7 +2344,7 @@ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, "is-callable": { @@ -2358,7 +2358,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2366,7 +2366,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2382,9 +2382,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -2409,7 +2409,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-glob": { @@ -2417,7 +2417,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "is-number": { @@ -2425,7 +2425,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2433,7 +2433,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2453,7 +2453,7 @@ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", "requires": { - "is-number": "4.0.0" + "is-number": "^4.0.0" }, "dependencies": { "is-number": { @@ -2475,7 +2475,7 @@ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { - "is-path-inside": "1.0.1" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -2484,7 +2484,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-plain-obj": { @@ -2497,7 +2497,7 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "is-promise": { @@ -2511,7 +2511,7 @@ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { - "has": "1.0.1" + "has": "^1.0.1" } }, "is-resolvable": { @@ -2530,7 +2530,7 @@ "resolved": "https://registry.npmjs.org/is-scoped/-/is-scoped-1.0.0.tgz", "integrity": "sha1-RJypgpnnEwOCViieyytUDcQ3yzA=", "requires": { - "scoped-regex": "1.0.0" + "scoped-regex": "^1.0.0" } }, "is-stream": { @@ -2589,9 +2589,9 @@ "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.2.1.tgz", "integrity": "sha512-TS+hoFl8Z5FAFMK38nhBkdLt44CclNRgDHWeMgsV8ko3nDlr/9UI2Sf839sW7enijf8oKsZYXRvM8g0it9Zmcw==", "requires": { - "binaryextensions": "2.1.1", - "editions": "1.3.4", - "textextensions": "2.2.0" + "binaryextensions": "2", + "editions": "^1.3.3", + "textextensions": "2" } }, "isurl": { @@ -2599,14 +2599,14 @@ "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", "requires": { - "has-to-string-tag-x": "1.4.1", - "is-object": "1.0.1" + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" } }, "jhipster-core": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/jhipster-core/-/jhipster-core-3.3.2.tgz", - "integrity": "sha512-kw7Jn7nDelm2HePQV0l6Xmzj1rRHz8iukuIXPaOgAym39qKm9vWmGHft+pVwkrbIA4j0cLtZkUOU243CkyDE7g==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/jhipster-core/-/jhipster-core-3.3.3.tgz", + "integrity": "sha512-9DcJKjhnLkRHI4i+gKmrrEwiuz0szeHu2Zx2XWcsMSOP+zkIZ/HPtKQ+PTLFEKrjWSXDbo4lKpCycdxXp1jZxw==", "requires": { "chevrotain": "3.7.4", "fs-extra": "7.0.0", @@ -2619,13 +2619,18 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.0.tgz", "integrity": "sha512-EglNDLRpmaTWiD/qraZn6HREAEAHJcJOmxNEYwq6xeMKnVMAy3GUcFB+wXt2C6k4CNvB/mP1y/U3dzvKKj5OtQ==", "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "4.0.0", - "universalify": "0.1.1" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } } } }, + "js-object-pretty-print": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/js-object-pretty-print/-/js-object-pretty-print-0.3.0.tgz", + "integrity": "sha1-RnDkUAZu4ezPNRdMfRl/WqOLz3Q=" + }, "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", @@ -2637,8 +2642,8 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", "requires": { - "argparse": "1.0.10", - "esprima": "4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "js2xmlparser": { @@ -2647,7 +2652,7 @@ "integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=", "dev": true, "requires": { - "xmlcreate": "1.0.2" + "xmlcreate": "^1.0.1" } }, "jsbn": { @@ -2663,17 +2668,17 @@ "dev": true, "requires": { "babylon": "7.0.0-beta.19", - "bluebird": "3.5.1", - "catharsis": "0.8.9", - "escape-string-regexp": "1.0.5", - "js2xmlparser": "3.0.0", - "klaw": "2.0.0", - "marked": "0.3.19", - "mkdirp": "0.5.1", - "requizzle": "0.2.1", - "strip-json-comments": "2.0.1", + "bluebird": "~3.5.0", + "catharsis": "~0.8.9", + "escape-string-regexp": "~1.0.5", + "js2xmlparser": "~3.0.0", + "klaw": "~2.0.0", + "marked": "~0.3.6", + "mkdirp": "~0.5.1", + "requizzle": "~0.2.1", + "strip-json-comments": "~2.0.1", "taffydb": "2.6.2", - "underscore": "1.8.3" + "underscore": "~1.8.3" } }, "json-parse-better-errors": { @@ -2696,7 +2701,7 @@ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "requires": { - "jsonify": "0.0.0" + "jsonify": "~0.0.0" } }, "json-stable-stringify-without-jsonify": { @@ -2715,7 +2720,7 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.6" } }, "jsonify": { @@ -2751,7 +2756,7 @@ "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=", "dev": true, "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.9" } }, "kuler": { @@ -2759,7 +2764,7 @@ "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.0.tgz", "integrity": "sha512-oyy6pu/yWRjiVfCoJebNUKFL061sNtrs9ejKTbirIwY3oiHmENVCSkHhxDV85Dkm7JYR/czMCBeoM87WilTdSg==", "requires": { - "colornames": "1.1.1" + "colornames": "^1.1.1" } }, "lcid": { @@ -2767,7 +2772,7 @@ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "requires": { - "invert-kv": "1.0.0" + "invert-kv": "^1.0.0" } }, "levn": { @@ -2776,8 +2781,8 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, "load-json-file": { @@ -2786,11 +2791,11 @@ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" } }, "locate-path": { @@ -2798,8 +2803,8 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" }, "dependencies": { "path-exists": { @@ -2855,7 +2860,7 @@ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "requires": { - "chalk": "2.4.1" + "chalk": "^2.0.1" } }, "logform": { @@ -2863,11 +2868,11 @@ "resolved": "https://registry.npmjs.org/logform/-/logform-1.9.1.tgz", "integrity": "sha512-ZHrZE8VSf7K3xKxJiQ1aoTBp2yK+cEbFcgarsjzI3nt3nE/3O0heNSppoOQMUJVMZo/xiVwCxiXIabaZApsKNQ==", "requires": { - "colors": "1.3.2", - "fast-safe-stringify": "2.0.6", - "fecha": "2.3.3", - "ms": "2.1.1", - "triple-beam": "1.3.0" + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^2.3.3", + "ms": "^2.1.1", + "triple-beam": "^1.2.0" }, "dependencies": { "ms": { @@ -2888,8 +2893,8 @@ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" } }, "lowercase-keys": { @@ -2902,8 +2907,8 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "macos-release": { @@ -2916,7 +2921,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.0.0.tgz", "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=", "requires": { - "pify": "2.3.0" + "pify": "^2.3.0" } }, "map-cache": { @@ -2934,7 +2939,7 @@ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "marked": { @@ -2948,7 +2953,7 @@ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "requires": { - "mimic-fn": "1.1.0" + "mimic-fn": "^1.0.0" } }, "mem-fs": { @@ -2956,9 +2961,9 @@ "resolved": "https://registry.npmjs.org/mem-fs/-/mem-fs-1.1.3.tgz", "integrity": "sha1-uK6NLj/Lb10/kWXBLUVRoGXZicw=", "requires": { - "through2": "2.0.3", - "vinyl": "1.2.0", - "vinyl-file": "2.0.0" + "through2": "^2.0.0", + "vinyl": "^1.1.0", + "vinyl-file": "^2.0.0" } }, "mem-fs-editor": { @@ -2966,17 +2971,17 @@ "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-5.1.0.tgz", "integrity": "sha512-2Yt2GCYEbcotYbIJagmow4gEtHDqzpq5XN94+yAx/NT5+bGqIjkXnm3KCUQfE6kRfScGp9IZknScoGRKu8L78w==", "requires": { - "commondir": "1.0.1", - "deep-extend": "0.6.0", - "ejs": "2.6.1", - "glob": "7.1.2", - "globby": "8.0.1", - "isbinaryfile": "3.0.2", - "mkdirp": "0.5.1", - "multimatch": "2.1.0", - "rimraf": "2.6.2", - "through2": "2.0.3", - "vinyl": "2.2.0" + "commondir": "^1.0.1", + "deep-extend": "^0.6.0", + "ejs": "^2.5.9", + "glob": "^7.0.3", + "globby": "^8.0.1", + "isbinaryfile": "^3.0.2", + "mkdirp": "^0.5.0", + "multimatch": "^2.0.0", + "rimraf": "^2.2.8", + "through2": "^2.0.0", + "vinyl": "^2.0.1" }, "dependencies": { "clone": { @@ -2994,13 +2999,13 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz", "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==", "requires": { - "array-union": "1.0.2", - "dir-glob": "2.0.0", - "fast-glob": "2.2.2", - "glob": "7.1.2", - "ignore": "3.3.5", - "pify": "3.0.0", - "slash": "1.0.0" + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" } }, "pify": { @@ -3018,12 +3023,12 @@ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", "requires": { - "clone": "2.1.1", - "clone-buffer": "1.0.0", - "clone-stats": "1.0.0", - "cloneable-readable": "1.1.2", - "remove-trailing-separator": "1.1.0", - "replace-ext": "1.0.0" + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" } } } @@ -3033,15 +3038,15 @@ "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==", "requires": { - "camelcase-keys": "4.2.0", - "decamelize-keys": "1.1.0", - "loud-rejection": "1.6.0", - "minimist-options": "3.0.2", - "normalize-package-data": "2.4.0", - "read-pkg-up": "3.0.0", - "redent": "2.0.0", - "trim-newlines": "2.0.0", - "yargs-parser": "10.0.0" + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0", + "yargs-parser": "^10.0.0" }, "dependencies": { "find-up": { @@ -3049,7 +3054,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "load-json-file": { @@ -3057,10 +3062,10 @@ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "requires": { - "graceful-fs": "4.1.11", - "parse-json": "4.0.0", - "pify": "3.0.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } }, "parse-json": { @@ -3068,8 +3073,8 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "requires": { - "error-ex": "1.3.1", - "json-parse-better-errors": "1.0.2" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, "path-type": { @@ -3077,7 +3082,7 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" } }, "pify": { @@ -3090,9 +3095,9 @@ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "requires": { - "load-json-file": "4.0.0", - "normalize-package-data": "2.4.0", - "path-type": "3.0.0" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" } }, "read-pkg-up": { @@ -3100,8 +3105,8 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", "requires": { - "find-up": "2.1.0", - "read-pkg": "3.0.0" + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" } }, "strip-bom": { @@ -3114,7 +3119,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.0.0.tgz", "integrity": "sha512-+DHejWujTVYeMHLff8U96rLc4uE4Emncoftvn5AjhB1Jw1pWxLzgBUT/WYbPrHmy6YPEBTZQx5myHhVcuuu64g==", "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" } } } @@ -3129,19 +3134,19 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.9", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" }, "dependencies": { "arr-diff": { @@ -3154,8 +3159,8 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" } }, "is-extendable": { @@ -3163,7 +3168,7 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } }, "kind-of": { @@ -3183,7 +3188,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "requires": { - "mime-db": "1.33.0" + "mime-db": "~1.33.0" } }, "mimic-fn": { @@ -3201,7 +3206,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -3214,8 +3219,8 @@ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", "requires": { - "arrify": "1.0.1", - "is-plain-obj": "1.1.0" + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" } }, "mixin-deep": { @@ -3223,8 +3228,8 @@ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -3232,7 +3237,7 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -3304,10 +3309,10 @@ "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", "requires": { - "array-differ": "1.0.0", - "array-union": "1.0.2", - "arrify": "1.0.1", - "minimatch": "3.0.4" + "array-differ": "^1.0.0", + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "minimatch": "^3.0.0" } }, "mute-stream": { @@ -3320,18 +3325,18 @@ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-odd": "2.0.0", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-odd": "^2.0.0", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "arr-diff": { @@ -3344,8 +3349,8 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" } }, "is-extendable": { @@ -3353,7 +3358,7 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } }, "kind-of": { @@ -3380,11 +3385,11 @@ "integrity": "sha512-v1J/FLUB9PfGqZLGDBhQqODkbLotP0WtLo9R4EJY2PPu5f5Xg4o0rA8FDlmrjFSv9vBBKcfnOSpfYYuu5RTHqg==", "dev": true, "requires": { - "@sinonjs/formatio": "2.0.0", - "just-extend": "1.1.27", - "lolex": "2.6.0", - "path-to-regexp": "1.7.0", - "text-encoding": "0.6.4" + "@sinonjs/formatio": "^2.0.0", + "just-extend": "^1.1.27", + "lolex": "^2.3.2", + "path-to-regexp": "^1.7.0", + "text-encoding": "^0.6.4" } }, "normalize-package-data": { @@ -3392,10 +3397,10 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.5.0", - "validate-npm-package-license": "3.0.1" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "npm-run-path": { @@ -3403,7 +3408,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "npmlog": { @@ -3411,9 +3416,9 @@ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", "integrity": "sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI=", "requires": { - "ansi": "0.3.1", - "are-we-there-yet": "1.1.4", - "gauge": "1.2.7" + "ansi": "~0.3.1", + "are-we-there-yet": "~1.1.2", + "gauge": "~1.2.5" } }, "number-is-nan": { @@ -3436,9 +3441,9 @@ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -3446,7 +3451,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "kind-of": { @@ -3454,7 +3459,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3470,7 +3475,7 @@ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" } }, "object.assign": { @@ -3479,10 +3484,10 @@ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "dev": true, "requires": { - "define-properties": "1.1.2", - "function-bind": "1.1.1", - "has-symbols": "1.0.0", - "object-keys": "1.0.12" + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" } }, "object.entries": { @@ -3491,10 +3496,10 @@ "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=", "dev": true, "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.12.0", - "function-bind": "1.1.1", - "has": "1.0.1" + "define-properties": "^1.1.2", + "es-abstract": "^1.6.1", + "function-bind": "^1.1.0", + "has": "^1.0.1" } }, "object.pick": { @@ -3502,7 +3507,7 @@ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "once": { @@ -3510,7 +3515,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "one-time": { @@ -3529,12 +3534,12 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" } }, "os-locale": { @@ -3542,9 +3547,9 @@ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" } }, "os-name": { @@ -3552,8 +3557,8 @@ "resolved": "https://registry.npmjs.org/os-name/-/os-name-2.0.1.tgz", "integrity": "sha1-uaOGNhwXrjohc27wWZQFyajF3F4=", "requires": { - "macos-release": "1.1.0", - "win-release": "1.1.1" + "macos-release": "^1.0.0", + "win-release": "^1.0.0" } }, "os-shim": { @@ -3586,7 +3591,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "requires": { - "p-limit": "1.1.0" + "p-limit": "^1.1.0" } }, "p-timeout": { @@ -3594,7 +3599,7 @@ "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", "requires": { - "p-finally": "1.0.0" + "p-finally": "^1.0.0" } }, "p-try": { @@ -3613,7 +3618,7 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.2.0" } }, "pascalcase": { @@ -3632,7 +3637,7 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "2.0.1" + "pinkie-promise": "^2.0.0" } }, "path-is-absolute": { @@ -3679,9 +3684,9 @@ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "pathval": { @@ -3710,7 +3715,7 @@ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { @@ -3719,7 +3724,7 @@ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", "dev": true, "requires": { - "find-up": "1.1.2" + "find-up": "^1.0.0" } }, "pkg-up": { @@ -3727,7 +3732,7 @@ "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", "requires": { - "find-up": "2.1.0" + "find-up": "^2.1.0" }, "dependencies": { "find-up": { @@ -3735,7 +3740,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } } } @@ -3745,11 +3750,11 @@ "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", "requires": { - "ansi-cyan": "0.1.1", - "ansi-red": "0.1.1", - "arr-diff": "1.1.0", - "arr-union": "2.1.0", - "extend-shallow": "1.1.4" + "ansi-cyan": "^0.1.1", + "ansi-red": "^0.1.1", + "arr-diff": "^1.0.1", + "arr-union": "^2.0.1", + "extend-shallow": "^1.1.2" } }, "pluralize": { @@ -3819,8 +3824,8 @@ "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.9.tgz", "integrity": "sha512-maAX1cnBkzIZ89O4tSQUOF098xjGMC8N+9vuY/WfHwg87THw6odD2Br35donlj5e6KnB1SB0QBHhTQhhDHuTPQ==", "requires": { - "drange": "1.0.1", - "ret": "0.2.2" + "drange": "^1.0.0", + "ret": "^0.2.0" } }, "read-chunk": { @@ -3828,8 +3833,8 @@ "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-2.1.0.tgz", "integrity": "sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU=", "requires": { - "pify": "3.0.0", - "safe-buffer": "5.1.1" + "pify": "^3.0.0", + "safe-buffer": "^5.1.1" }, "dependencies": { "pify": { @@ -3851,9 +3856,9 @@ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" } }, "read-pkg-up": { @@ -3862,8 +3867,8 @@ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" } }, "readable-stream": { @@ -3871,13 +3876,13 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" } }, "rechoir": { @@ -3885,7 +3890,7 @@ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "requires": { - "resolve": "1.7.1" + "resolve": "^1.1.6" } }, "redent": { @@ -3893,8 +3898,8 @@ "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", "requires": { - "indent-string": "3.2.0", - "strip-indent": "2.0.0" + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" } }, "regex-not": { @@ -3902,8 +3907,8 @@ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" }, "dependencies": { "extend-shallow": { @@ -3911,8 +3916,8 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" } }, "is-extendable": { @@ -3920,7 +3925,7 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -3936,7 +3941,7 @@ "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==", "dev": true, "requires": { - "define-properties": "1.1.2" + "define-properties": "^1.1.2" } }, "regexpp": { @@ -3970,28 +3975,28 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.7.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.2", - "har-validator": "5.0.3", - "hawk": "6.0.2", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.1", - "stringstream": "0.0.6", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.6.0", - "uuid": "3.3.2" + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "hawk": "~6.0.2", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "stringstream": "~0.0.5", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" } }, "require-directory": { @@ -4012,8 +4017,8 @@ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "dev": true, "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" } }, "requizzle": { @@ -4022,7 +4027,7 @@ "integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=", "dev": true, "requires": { - "underscore": "1.6.0" + "underscore": "~1.6.0" }, "dependencies": { "underscore": { @@ -4038,7 +4043,7 @@ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", "requires": { - "path-parse": "1.0.5" + "path-parse": "^1.0.5" } }, "resolve-from": { @@ -4057,8 +4062,8 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" } }, "ret": { @@ -4077,7 +4082,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "run-async": { @@ -4085,7 +4090,7 @@ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "requires": { - "is-promise": "2.1.0" + "is-promise": "^2.1.0" } }, "rx": { @@ -4111,7 +4116,7 @@ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" }, "dependencies": { "ret": { @@ -4148,10 +4153,10 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -4159,7 +4164,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -4169,7 +4174,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -4182,9 +4187,9 @@ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.2.tgz", "integrity": "sha512-pRXeNrCA2Wd9itwhvLp5LZQvPJ0wU6bcjaTMywHHGX5XWhVN2nzSu7WV0q+oUY7mGK3mgSkDDzP3MgjqdyIgbQ==", "requires": { - "glob": "7.1.2", - "interpret": "1.1.0", - "rechoir": "0.6.2" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" } }, "signal-exit": { @@ -4197,7 +4202,7 @@ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", "requires": { - "is-arrayish": "0.3.2" + "is-arrayish": "^0.3.1" }, "dependencies": { "is-arrayish": { @@ -4213,14 +4218,14 @@ "integrity": "sha512-yeTza8xIZZdiXntCHJAzKll/sSYE+DuJOS8hiSapzaLqdW8eCNVVC9je9SZYYTkPm2bLts9x6UYxwuMAVVrM6Q==", "dev": true, "requires": { - "@sinonjs/formatio": "2.0.0", - "@sinonjs/samsam": "2.0.0", - "diff": "3.5.0", - "lodash.get": "4.4.2", - "lolex": "2.6.0", - "nise": "1.3.3", - "supports-color": "5.4.0", - "type-detect": "4.0.8" + "@sinonjs/formatio": "^2.0.0", + "@sinonjs/samsam": "^2.0.0", + "diff": "^3.5.0", + "lodash.get": "^4.4.2", + "lolex": "^2.4.2", + "nise": "^1.3.3", + "supports-color": "^5.4.0", + "type-detect": "^4.0.8" }, "dependencies": { "diff": { @@ -4248,7 +4253,7 @@ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0" + "is-fullwidth-code-point": "^2.0.0" }, "dependencies": { "is-fullwidth-code-point": { @@ -4264,14 +4269,14 @@ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.2", - "use": "3.1.0" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { "define-property": { @@ -4279,7 +4284,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -4287,7 +4292,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -4297,9 +4302,9 @@ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -4307,7 +4312,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -4315,7 +4320,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -4323,7 +4328,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -4331,9 +4336,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "kind-of": { @@ -4348,7 +4353,7 @@ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" }, "dependencies": { "kind-of": { @@ -4356,7 +4361,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4366,7 +4371,7 @@ "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" } }, "source-map": { @@ -4379,11 +4384,11 @@ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "requires": { - "atob": "2.1.1", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-url": { @@ -4396,8 +4401,8 @@ "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", "requires": { - "concat-stream": "1.6.0", - "os-shim": "0.1.3" + "concat-stream": "^1.4.7", + "os-shim": "^0.1.2" } }, "spdx-correct": { @@ -4405,7 +4410,7 @@ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", "requires": { - "spdx-license-ids": "1.2.2" + "spdx-license-ids": "^1.0.2" } }, "spdx-expression-parse": { @@ -4423,7 +4428,7 @@ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" }, "dependencies": { "extend-shallow": { @@ -4431,8 +4436,8 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" } }, "is-extendable": { @@ -4440,7 +4445,7 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -4455,14 +4460,14 @@ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" } }, "stack-trace": { @@ -4475,8 +4480,8 @@ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -4484,7 +4489,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -4494,15 +4499,7 @@ "resolved": "https://registry.npmjs.org/streamfilter/-/streamfilter-1.0.7.tgz", "integrity": "sha512-Gk6KZM+yNA1JpW0KzlZIhjo3EaBJDkYfXtYSbOwNIQ7Zd6006E6+sCFlW1NDvFG/vnXhKmw6TJJgiEQg/8lXfQ==", "requires": { - "readable-stream": "2.3.3" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "5.1.1" + "readable-stream": "^2.0.2" } }, "string-template": { @@ -4515,9 +4512,9 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string.prototype.matchall": { @@ -4526,11 +4523,19 @@ "integrity": "sha512-WoZ+B2ypng1dp4iFLF2kmZlwwlE19gmjgKuhL1FJfDgCREWb3ye3SDVHSzLH6bxfnvYmkCxbzkmWcQZHA4P//Q==", "dev": true, "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.12.0", - "function-bind": "1.1.1", - "has-symbols": "1.0.0", - "regexp.prototype.flags": "1.2.0" + "define-properties": "^1.1.2", + "es-abstract": "^1.10.0", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "regexp.prototype.flags": "^1.2.0" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "~5.1.0" } }, "stringstream": { @@ -4543,7 +4548,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-bom": { @@ -4551,7 +4556,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } }, "strip-bom-stream": { @@ -4559,8 +4564,8 @@ "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz", "integrity": "sha1-+H217yYT9paKpUWr/h7HKLaoKco=", "requires": { - "first-chunk-stream": "2.0.0", - "strip-bom": "2.0.0" + "first-chunk-stream": "^2.0.0", + "strip-bom": "^2.0.0" } }, "strip-eof": { @@ -4584,7 +4589,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "symbol-observable": { @@ -4598,7 +4603,7 @@ "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=", "dev": true, "requires": { - "acorn": "4.0.13" + "acorn": "^4.0.3" }, "dependencies": { "acorn": { @@ -4615,12 +4620,12 @@ "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==", "dev": true, "requires": { - "ajv": "6.5.2", - "ajv-keywords": "3.2.0", - "chalk": "2.4.1", - "lodash": "4.17.10", + "ajv": "^6.0.1", + "ajv-keywords": "^3.0.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", "slice-ansi": "1.0.0", - "string-width": "2.1.1" + "string-width": "^2.1.1" }, "dependencies": { "ajv": { @@ -4629,10 +4634,10 @@ "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", "dev": true, "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.1" } }, "ansi-regex": { @@ -4665,8 +4670,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "strip-ansi": { @@ -4675,7 +4680,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -4685,14 +4690,14 @@ "resolved": "https://registry.npmjs.org/tabtab/-/tabtab-2.2.2.tgz", "integrity": "sha1-egR/FDsBC0y9MfhX6ClhUSy/ThQ=", "requires": { - "debug": "2.6.9", - "inquirer": "1.2.3", - "lodash.difference": "4.5.0", - "lodash.uniq": "4.5.0", - "minimist": "1.2.0", - "mkdirp": "0.5.1", - "npmlog": "2.0.4", - "object-assign": "4.1.1" + "debug": "^2.2.0", + "inquirer": "^1.0.2", + "lodash.difference": "^4.5.0", + "lodash.uniq": "^4.5.0", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "npmlog": "^2.0.3", + "object-assign": "^4.1.0" }, "dependencies": { "ansi-styles": { @@ -4705,11 +4710,11 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "cli-width": { @@ -4722,20 +4727,20 @@ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-1.2.3.tgz", "integrity": "sha1-TexvMvN+97sLLtPx0aXD9UUHSRg=", "requires": { - "ansi-escapes": "1.4.0", - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-width": "2.2.0", - "external-editor": "1.1.1", - "figures": "1.7.0", - "lodash": "4.17.10", + "ansi-escapes": "^1.1.0", + "chalk": "^1.0.0", + "cli-cursor": "^1.0.1", + "cli-width": "^2.0.0", + "external-editor": "^1.1.0", + "figures": "^1.3.5", + "lodash": "^4.3.0", "mute-stream": "0.0.6", - "pinkie-promise": "2.0.1", - "run-async": "2.3.0", - "rx": "4.1.0", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "through": "2.3.8" + "pinkie-promise": "^2.0.0", + "run-async": "^2.2.0", + "rx": "^4.1.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" } }, "mute-stream": { @@ -4748,7 +4753,7 @@ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "requires": { - "is-promise": "2.1.0" + "is-promise": "^2.1.0" } }, "supports-color": { @@ -4795,8 +4800,8 @@ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, "timed-out": { @@ -4809,7 +4814,7 @@ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz", "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.1" } }, "to-object-path": { @@ -4817,7 +4822,7 @@ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -4825,7 +4830,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4835,10 +4840,10 @@ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" }, "dependencies": { "extend-shallow": { @@ -4846,8 +4851,8 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" } }, "is-extendable": { @@ -4855,7 +4860,7 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -4865,8 +4870,8 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, "tough-cookie": { @@ -4874,7 +4879,7 @@ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "trim-newlines": { @@ -4892,7 +4897,7 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -4907,7 +4912,7 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" } }, "type-detect": { @@ -4949,10 +4954,10 @@ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "arr-union": { @@ -4965,7 +4970,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { @@ -4973,10 +4978,10 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -4991,8 +4996,8 @@ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -5000,9 +5005,9 @@ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -5033,7 +5038,7 @@ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dev": true, "requires": { - "punycode": "2.1.1" + "punycode": "^2.1.0" }, "dependencies": { "punycode": { @@ -5054,7 +5059,7 @@ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", "requires": { - "prepend-http": "1.0.4" + "prepend-http": "^1.0.1" } }, "url-to-options": { @@ -5067,7 +5072,7 @@ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.2" }, "dependencies": { "kind-of": { @@ -5092,8 +5097,8 @@ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" + "spdx-correct": "~1.0.0", + "spdx-expression-parse": "~1.0.0" } }, "verror": { @@ -5101,9 +5106,9 @@ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" + "extsprintf": "^1.2.0" } }, "vinyl": { @@ -5111,8 +5116,8 @@ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", "requires": { - "clone": "1.0.4", - "clone-stats": "0.0.1", + "clone": "^1.0.0", + "clone-stats": "^0.0.1", "replace-ext": "0.0.1" } }, @@ -5121,12 +5126,12 @@ "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-2.0.0.tgz", "integrity": "sha1-p+v1/779obfRjRQPyweyI++2dRo=", "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0", - "strip-bom-stream": "2.0.0", - "vinyl": "1.2.0" + "graceful-fs": "^4.1.2", + "pify": "^2.3.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0", + "strip-bom-stream": "^2.0.0", + "vinyl": "^1.1.0" } }, "which": { @@ -5134,7 +5139,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -5148,7 +5153,7 @@ "resolved": "https://registry.npmjs.org/win-release/-/win-release-1.1.1.tgz", "integrity": "sha1-X6VeAr58qTTt/BJmVjLoSbcuUgk=", "requires": { - "semver": "5.5.0" + "semver": "^5.0.1" } }, "winston": { @@ -5156,15 +5161,15 @@ "resolved": "https://registry.npmjs.org/winston/-/winston-3.0.0.tgz", "integrity": "sha512-7QyfOo1PM5zGL6qma6NIeQQMh71FBg/8fhkSAePqtf5YEi6t+UrPDcUuHhuuUasgso49ccvMEsmqr0GBG2qaMQ==", "requires": { - "async": "2.6.0", - "diagnostics": "1.1.1", - "is-stream": "1.1.0", - "logform": "1.9.1", + "async": "^2.6.0", + "diagnostics": "^1.0.1", + "is-stream": "^1.1.0", + "logform": "^1.9.0", "one-time": "0.0.4", - "readable-stream": "2.3.6", - "stack-trace": "0.0.10", - "triple-beam": "1.3.0", - "winston-transport": "4.2.0" + "readable-stream": "^2.3.6", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.2.0" }, "dependencies": { "process-nextick-args": { @@ -5177,13 +5182,13 @@ "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.2", - "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.2" + "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": { @@ -5191,7 +5196,7 @@ "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.1" + "safe-buffer": "~5.1.0" } } } @@ -5201,8 +5206,8 @@ "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.2.0.tgz", "integrity": "sha512-0R1bvFqxSlK/ZKTH86nymOuKv/cT1PQBMuDdA7k7f0S9fM44dNH6bXnuxwXPrN8lefJgtZq08BKdyZ0DZIy/rg==", "requires": { - "readable-stream": "2.3.6", - "triple-beam": "1.3.0" + "readable-stream": "^2.3.6", + "triple-beam": "^1.2.0" }, "dependencies": { "process-nextick-args": { @@ -5215,13 +5220,13 @@ "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.2", - "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.2" + "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": { @@ -5229,7 +5234,7 @@ "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.1" + "safe-buffer": "~5.1.0" } } } @@ -5246,8 +5251,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" } }, "wrappy": { @@ -5261,7 +5266,7 @@ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "dev": true, "requires": { - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" } }, "write-file-atomic": { @@ -5269,9 +5274,9 @@ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "signal-exit": "3.0.2" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" } }, "xmlcreate": { @@ -5302,19 +5307,19 @@ "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", "dev": true, "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "5.0.0" + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.0" }, "dependencies": { "camelcase": { @@ -5329,7 +5334,7 @@ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, "requires": { - "lcid": "1.0.0" + "lcid": "^1.0.0" } } } @@ -5340,7 +5345,7 @@ "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", "dev": true, "requires": { - "camelcase": "3.0.0" + "camelcase": "^3.0.0" }, "dependencies": { "camelcase": { @@ -5362,21 +5367,21 @@ "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.3.0.tgz", "integrity": "sha512-PHSAkVOqYdcR+C+Uht1SGC4eVD/9OhygYFkYaI66xF8vKIeS1RNYay+umj2ZrQeJ50tF5Q/RSO6qGDz9y3Ifug==", "requires": { - "chalk": "2.4.1", - "cross-spawn": "6.0.5", - "debug": "3.1.0", - "diff": "3.4.0", - "escape-string-regexp": "1.0.5", - "globby": "8.0.1", - "grouped-queue": "0.3.3", - "inquirer": "5.2.0", - "is-scoped": "1.0.0", - "lodash": "4.17.10", - "log-symbols": "2.2.0", - "mem-fs": "1.1.3", - "strip-ansi": "4.0.0", - "text-table": "0.2.0", - "untildify": "3.0.3" + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^3.1.0", + "diff": "^3.3.1", + "escape-string-regexp": "^1.0.2", + "globby": "^8.0.1", + "grouped-queue": "^0.3.3", + "inquirer": "^5.2.0", + "is-scoped": "^1.0.0", + "lodash": "^4.17.10", + "log-symbols": "^2.1.0", + "mem-fs": "^1.1.0", + "strip-ansi": "^4.0.0", + "text-table": "^0.2.0", + "untildify": "^3.0.2" }, "dependencies": { "ansi-regex": { @@ -5397,7 +5402,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -5407,31 +5412,31 @@ "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-3.0.0.tgz", "integrity": "sha512-aHsNXzkdgAoakZTZsDX7T56wYWYd1O5E/GBIFAVMJLH7TKRr+1MiEJszZQbbCSA+J+lpT743/8L88j35yNdTLQ==", "requires": { - "async": "2.6.0", - "chalk": "2.4.1", - "cli-table": "0.3.1", - "cross-spawn": "6.0.5", - "dargs": "6.0.0", - "dateformat": "3.0.3", - "debug": "3.1.0", - "detect-conflict": "1.0.1", - "error": "7.0.2", - "find-up": "3.0.0", - "github-username": "4.1.0", - "istextorbinary": "2.2.1", - "lodash": "4.17.10", - "make-dir": "1.3.0", - "mem-fs-editor": "5.1.0", - "minimist": "1.2.0", - "pretty-bytes": "5.1.0", - "read-chunk": "2.1.0", - "read-pkg-up": "4.0.0", - "rimraf": "2.6.2", - "run-async": "2.3.0", - "shelljs": "0.8.2", - "text-table": "0.2.0", - "through2": "2.0.3", - "yeoman-environment": "2.3.0" + "async": "^2.6.0", + "chalk": "^2.3.0", + "cli-table": "^0.3.1", + "cross-spawn": "^6.0.5", + "dargs": "^6.0.0", + "dateformat": "^3.0.3", + "debug": "^3.1.0", + "detect-conflict": "^1.0.0", + "error": "^7.0.2", + "find-up": "^3.0.0", + "github-username": "^4.0.0", + "istextorbinary": "^2.2.1", + "lodash": "^4.17.10", + "make-dir": "^1.1.0", + "mem-fs-editor": "^5.0.0", + "minimist": "^1.2.0", + "pretty-bytes": "^5.1.0", + "read-chunk": "^2.1.0", + "read-pkg-up": "^4.0.0", + "rimraf": "^2.6.2", + "run-async": "^2.0.0", + "shelljs": "^0.8.0", + "text-table": "^0.2.0", + "through2": "^2.0.0", + "yeoman-environment": "^2.0.5" }, "dependencies": { "debug": { @@ -5447,7 +5452,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "load-json-file": { @@ -5455,10 +5460,10 @@ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "requires": { - "graceful-fs": "4.1.11", - "parse-json": "4.0.0", - "pify": "3.0.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } }, "locate-path": { @@ -5466,8 +5471,8 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "make-dir": { @@ -5475,7 +5480,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" } }, "p-limit": { @@ -5483,7 +5488,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", "requires": { - "p-try": "2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -5491,7 +5496,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "requires": { - "p-limit": "2.0.0" + "p-limit": "^2.0.0" } }, "parse-json": { @@ -5499,8 +5504,8 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "requires": { - "error-ex": "1.3.1", - "json-parse-better-errors": "1.0.2" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, "path-exists": { @@ -5513,7 +5518,7 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" } }, "pify": { @@ -5526,9 +5531,9 @@ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "requires": { - "load-json-file": "4.0.0", - "normalize-package-data": "2.4.0", - "path-type": "3.0.0" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" } }, "read-pkg-up": { @@ -5536,8 +5541,8 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", "requires": { - "find-up": "3.0.0", - "read-pkg": "3.0.0" + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" } }, "strip-bom": { @@ -5553,14 +5558,14 @@ "integrity": "sha512-QnuWAciKfp5zWAfK5GGkEyzPZJ/hSSLA11KtI3Jog96OmYWG97XQUYuSj12f/WoxP75Pn1ECG4PzFfEM8RMNwQ==", "dev": true, "requires": { - "inquirer": "5.2.0", - "lodash": "4.17.10", - "mkdirp": "0.5.1", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2", - "sinon": "5.1.1", - "yeoman-environment": "2.3.0", - "yeoman-generator": "2.0.5" + "inquirer": "^5.2.0", + "lodash": "^4.17.10", + "mkdirp": "^0.5.1", + "pinkie-promise": "^2.0.1", + "rimraf": "^2.4.4", + "sinon": "^5.0.7", + "yeoman-environment": "^2.3.0", + "yeoman-generator": "^2.0.5" }, "dependencies": { "clone": { @@ -5602,7 +5607,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "globby": { @@ -5611,12 +5616,12 @@ "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", "dev": true, "requires": { - "array-union": "1.0.2", - "dir-glob": "2.0.0", - "glob": "7.1.2", - "ignore": "3.3.5", - "pify": "3.0.0", - "slash": "1.0.0" + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" } }, "load-json-file": { @@ -5625,10 +5630,10 @@ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "4.0.0", - "pify": "3.0.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } }, "make-dir": { @@ -5637,7 +5642,7 @@ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" } }, "mem-fs-editor": { @@ -5646,17 +5651,17 @@ "integrity": "sha512-tgWmwI/+6vwu6POan82dTjxEpwAoaj0NAFnghtVo/FcLK2/7IhPUtFUUYlwou4MOY6OtjTUJtwpfH1h+eSUziw==", "dev": true, "requires": { - "commondir": "1.0.1", - "deep-extend": "0.6.0", - "ejs": "2.6.1", - "glob": "7.1.2", - "globby": "7.1.1", - "isbinaryfile": "3.0.2", - "mkdirp": "0.5.1", - "multimatch": "2.1.0", - "rimraf": "2.6.2", - "through2": "2.0.3", - "vinyl": "2.2.0" + "commondir": "^1.0.1", + "deep-extend": "^0.6.0", + "ejs": "^2.5.9", + "glob": "^7.0.3", + "globby": "^7.1.1", + "isbinaryfile": "^3.0.2", + "mkdirp": "^0.5.0", + "multimatch": "^2.0.0", + "rimraf": "^2.2.8", + "through2": "^2.0.0", + "vinyl": "^2.0.1" } }, "parse-json": { @@ -5665,8 +5670,8 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "1.3.1", - "json-parse-better-errors": "1.0.2" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, "path-type": { @@ -5675,7 +5680,7 @@ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" } }, "pify": { @@ -5696,9 +5701,9 @@ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { - "load-json-file": "4.0.0", - "normalize-package-data": "2.4.0", - "path-type": "3.0.0" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" } }, "read-pkg-up": { @@ -5707,8 +5712,8 @@ "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", "dev": true, "requires": { - "find-up": "2.1.0", - "read-pkg": "3.0.0" + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" } }, "replace-ext": { @@ -5723,13 +5728,13 @@ "integrity": "sha512-h/3uHscbt5pQNxkf7Y/Lb9/OM44YNCicHakcq73ncbrIS8lXg+ZGOZbtuU+/km4YnyiCYfQQEwANaReJz7KDfw==", "dev": true, "requires": { - "@sinonjs/formatio": "2.0.0", - "diff": "3.5.0", - "lodash.get": "4.4.2", - "lolex": "2.6.0", - "nise": "1.3.3", - "supports-color": "5.4.0", - "type-detect": "4.0.8" + "@sinonjs/formatio": "^2.0.0", + "diff": "^3.5.0", + "lodash.get": "^4.4.2", + "lolex": "^2.4.2", + "nise": "^1.3.3", + "supports-color": "^5.4.0", + "type-detect": "^4.0.8" } }, "strip-bom": { @@ -5750,12 +5755,12 @@ "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", "dev": true, "requires": { - "clone": "2.1.1", - "clone-buffer": "1.0.0", - "clone-stats": "1.0.0", - "cloneable-readable": "1.1.2", - "remove-trailing-separator": "1.1.0", - "replace-ext": "1.0.0" + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" } }, "yeoman-generator": { @@ -5764,31 +5769,31 @@ "integrity": "sha512-rV6tJ8oYzm4mmdF2T3wjY+Q42jKF2YiiD0VKfJ8/0ZYwmhCKC9Xs2346HVLPj/xE13i68psnFJv7iS6gWRkeAg==", "dev": true, "requires": { - "async": "2.6.0", - "chalk": "2.4.1", - "cli-table": "0.3.1", - "cross-spawn": "6.0.5", - "dargs": "5.1.0", - "dateformat": "3.0.3", - "debug": "3.1.0", - "detect-conflict": "1.0.1", - "error": "7.0.2", - "find-up": "2.1.0", - "github-username": "4.1.0", - "istextorbinary": "2.2.1", - "lodash": "4.17.10", - "make-dir": "1.3.0", - "mem-fs-editor": "4.0.3", - "minimist": "1.2.0", - "pretty-bytes": "4.0.2", - "read-chunk": "2.1.0", - "read-pkg-up": "3.0.0", - "rimraf": "2.6.2", - "run-async": "2.3.0", - "shelljs": "0.8.2", - "text-table": "0.2.0", - "through2": "2.0.3", - "yeoman-environment": "2.3.0" + "async": "^2.6.0", + "chalk": "^2.3.0", + "cli-table": "^0.3.1", + "cross-spawn": "^6.0.5", + "dargs": "^5.1.0", + "dateformat": "^3.0.3", + "debug": "^3.1.0", + "detect-conflict": "^1.0.0", + "error": "^7.0.2", + "find-up": "^2.1.0", + "github-username": "^4.0.0", + "istextorbinary": "^2.2.1", + "lodash": "^4.17.10", + "make-dir": "^1.1.0", + "mem-fs-editor": "^4.0.0", + "minimist": "^1.2.0", + "pretty-bytes": "^4.0.2", + "read-chunk": "^2.1.0", + "read-pkg-up": "^3.0.0", + "rimraf": "^2.6.2", + "run-async": "^2.0.0", + "shelljs": "^0.8.0", + "text-table": "^0.2.0", + "through2": "^2.0.0", + "yeoman-environment": "^2.0.5" } } } diff --git a/package.json b/package.json index 873736a97f12..a77cf2e53e96 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "ejs-lint": "npm run test:unit -- test/ejslint.js", "ejslint": "ejslint", "pretest": "npm run lint", - "test": "npm run test:unit -- test/*.spec.js --no-insight", + "test": "npm run test:unit -- test/**/*.spec.js test/*.spec.js --no-insight", "test:unit": "mocha --timeout 20000 --slow 0 --reporter spec", "jsdoc": "jsdoc --configure jsdoc-conf.json" }, @@ -57,7 +57,8 @@ "glob": "7.1.2", "gulp-filter": "5.1.0", "insight": "0.10.1", - "jhipster-core": "3.3.2", + "jhipster-core": "3.3.3", + "js-object-pretty-print": "0.3.0", "js-yaml": "3.12.0", "lodash": "4.17.10", "meow": "5.0.0", diff --git a/test/cli-utils.spec.js b/test/cli/cli-utils.spec.js similarity index 97% rename from test/cli-utils.spec.js rename to test/cli/cli-utils.spec.js index 1a439071a76b..1971e19fa0ec 100644 --- a/test/cli-utils.spec.js +++ b/test/cli/cli-utils.spec.js @@ -1,8 +1,8 @@ /* global describe, it */ const expect = require('chai').expect; -const cliUtil = require('../cli/utils'); -const packageJson = require('../package.json'); +const cliUtil = require('../../cli/utils'); +const packageJson = require('../../package.json'); describe('jhipster cli utils test', () => { describe('getArgs', () => { diff --git a/test/cli.spec.js b/test/cli/cli.spec.js similarity index 75% rename from test/cli.spec.js rename to test/cli/cli.spec.js index 6088af1647f3..d276c3b599f9 100644 --- a/test/cli.spec.js +++ b/test/cli/cli.spec.js @@ -2,22 +2,14 @@ /* eslint-disable no-unused-expressions, no-console */ const expect = require('chai').expect; -// const assert = require('chai').assert; const exec = require('child_process').exec; -const path = require('path'); -const os = require('os'); +const { getJHipsterCli } = require('../utils/utils'); describe('jhipster cli test', () => { - const cmdPath = path.join(__dirname, '../cli/jhipster'); - let cmd = `node ${cmdPath} `; - console.log(cmd); + const cmd = getJHipsterCli(); it('verify correct cmd format', () => { - if (os.platform() === 'win32') { - // corrected test for windows user - cmd = cmd.replace(/\\/g, '/'); - } expect(cmd).to.match(/node (.*)\/cli\/jhipster/g); }); diff --git a/test/cli/import-jdl.spec.js b/test/cli/import-jdl.spec.js new file mode 100644 index 000000000000..74af6128f02e --- /dev/null +++ b/test/cli/import-jdl.spec.js @@ -0,0 +1,234 @@ +/* global describe, before, beforeEach, it, afterEach */ + +const path = require('path'); +const fse = require('fs-extra'); +const assert = require('yeoman-assert'); +const expect = require('chai').expect; + +const importJdl = require('../../cli/import-jdl'); +const { testInTempDir } = require('../utils/utils'); + +let subGenCallParams = {}; + +const env = () => ({ + run(command, options, done) { + subGenCallParams.count++; + subGenCallParams.commands.push(command); + subGenCallParams.options.push(options); + done(); + } +}); + +describe('JHipster generator import jdl', () => { + beforeEach(() => { + subGenCallParams = { + count: 0, + commands: [], + options: [] + }; + }); + describe('imports a JDL model from single file with --json-only flag', () => { + beforeEach((done) => { + testInTempDir((dir) => { + fse.copySync(path.join(__dirname, '../templates/import-jdl'), dir); + importJdl(['jdl.jdl'], { 'json-only': true }); + done(); + }); + }); + + it('creates entity json files', () => { + assert.file([ + '.jhipster/Department.json', + '.jhipster/JobHistory.json', + '.jhipster/Job.json', + '.jhipster/Employee.json', + '.jhipster/Location.json', + '.jhipster/Task.json', + '.jhipster/Country.json', + '.jhipster/Region.json' + ]); + }); + it('does not call entity sub generator', () => { + expect(subGenCallParams.count).to.equal(0); + }); + }); + describe('imports a JDL model from single file', () => { + beforeEach((done) => { + testInTempDir((dir) => { + fse.copySync(path.join(__dirname, '../templates/import-jdl'), dir); + importJdl(['jdl.jdl'], {}, env()); + done(); + }); + }); + it('creates entity json files', () => { + assert.file([ + '.jhipster/Department.json', + '.jhipster/JobHistory.json', + '.jhipster/Job.json', + '.jhipster/Employee.json', + '.jhipster/Location.json', + '.jhipster/Task.json', + '.jhipster/Country.json', + '.jhipster/Region.json' + ]); + }); + it('calls entity subgenerator', () => { + expect(subGenCallParams.count).to.equal(8); + expect(subGenCallParams.commands).to.eql([ + 'jhipster:entity Region', + 'jhipster:entity Country', + 'jhipster:entity Location', + 'jhipster:entity Department', + 'jhipster:entity Task', + 'jhipster:entity Employee', + 'jhipster:entity Job', + 'jhipster:entity JobHistory' + ]); + expect(subGenCallParams.options[0]).to.eql({ + regenerate: true, + 'from-cli': true, + 'no-fluent-methods': undefined, + 'skip-client': undefined, + 'skip-install': true, + 'skip-server': undefined, + 'skip-ui-grouping': undefined, + 'skip-user-management': undefined + }); + }); + }); + describe('imports JDL apps and entities', () => { + beforeEach((done) => { + testInTempDir((dir) => { + fse.copySync(path.join(__dirname, '../templates/import-jdl'), dir); + importJdl(['apps-and-entities.jdl'], {}, env()); + done(); + }); + }); + + it('creates the applications', () => { + assert.file([ + path.join('myFirstApp', '.yo-rc.json'), + path.join('mySecondApp', '.yo-rc.json'), + path.join('myThirdApp', '.yo-rc.json') + ]); + }); + it('creates the entities', () => { + assert.file([ + path.join('myFirstApp', '.jhipster', 'A.json'), + path.join('myFirstApp', '.jhipster', 'B.json'), + path.join('myFirstApp', '.jhipster', 'E.json'), + path.join('myFirstApp', '.jhipster', 'F.json'), + path.join('mySecondApp', '.jhipster', 'E.json'), + path.join('myThirdApp', '.jhipster', 'F.json') + ]); + }); + }); + describe('imports single app and entities', () => { + beforeEach((done) => { + testInTempDir((dir) => { + fse.copySync(path.join(__dirname, '../templates/import-jdl'), dir); + importJdl(['single-app-and-entities.jdl'], { skipInstall: true }, env()); + done(); + }); + }); + + it('creates the application', () => { + assert.file(['.yo-rc.json']); + }); + it('creates the entities', () => { + assert.file([ + path.join('.jhipster', 'A.json'), + path.join('.jhipster', 'B.json'), + ]); + }); + }); + describe('imports a JDL model from multiple files', () => { + beforeEach((done) => { + testInTempDir((dir) => { + fse.copySync(path.join(__dirname, '../templates/import-jdl'), dir); + importJdl(['jdl.jdl', 'jdl2.jdl', 'jdl-ambiguous.jdl'], {}, env()); + done(); + }); + }); + + it('creates entity json files', () => { + assert.file([ + '.jhipster/Department.json', + '.jhipster/JobHistory.json', + '.jhipster/Job.json', + '.jhipster/Employee.json', + '.jhipster/Location.json', + '.jhipster/Task.json', + '.jhipster/Country.json', + '.jhipster/Region.json', + '.jhipster/DepartmentAlt.json', + '.jhipster/JobHistoryAlt.json', + '.jhipster/Listing.json', + '.jhipster/Profile.json', + '.jhipster/WishList.json' + ]); + }); + it('calls entity subgenerator', () => { + expect(subGenCallParams.count).to.equal(13); + expect(subGenCallParams.commands).to.eql([ + 'jhipster:entity Region', + 'jhipster:entity Country', + 'jhipster:entity Location', + 'jhipster:entity Department', + 'jhipster:entity Task', + 'jhipster:entity Employee', + 'jhipster:entity Job', + 'jhipster:entity JobHistory', + 'jhipster:entity DepartmentAlt', + 'jhipster:entity JobHistoryAlt', + 'jhipster:entity WishList', + 'jhipster:entity Profile', + 'jhipster:entity Listing', + ]); + expect(subGenCallParams.options[0]).to.eql({ + regenerate: true, + 'from-cli': true, + 'no-fluent-methods': undefined, + 'skip-client': undefined, + 'skip-install': true, + 'skip-server': undefined, + 'skip-ui-grouping': undefined, + 'skip-user-management': undefined + }); + }); + }); + describe('imports a JDL model which excludes Elasticsearch for a class', () => { + beforeEach((done) => { + testInTempDir((dir) => { + fse.copySync(path.join(__dirname, '../templates/import-jdl'), dir); + importJdl(['search.jdl'], {}, env()); + done(); + }); + }); + + it('creates entity json files', () => { + assert.file([ + '.jhipster/WithSearch.json', + '.jhipster/WithoutSearch.json' + ]); + assert.fileContent('.jhipster/WithoutSearch.json', /"searchEngine": false/); + }); + it('calls entity subgenerator', () => { + expect(subGenCallParams.count).to.equal(2); + expect(subGenCallParams.commands).to.eql([ + 'jhipster:entity WithSearch', + 'jhipster:entity WithoutSearch' + ]); + expect(subGenCallParams.options[0]).to.eql({ + regenerate: true, + 'from-cli': true, + 'no-fluent-methods': undefined, + 'skip-client': undefined, + 'skip-install': true, + 'skip-server': undefined, + 'skip-ui-grouping': undefined, + 'skip-user-management': undefined + }); + }); + }); +}); diff --git a/test/import-jdl.spec.js b/test/import-jdl.spec.js deleted file mode 100644 index 0b643fc7b5f0..000000000000 --- a/test/import-jdl.spec.js +++ /dev/null @@ -1,173 +0,0 @@ -/* global describe, before, beforeEach, it */ - -const path = require('path'); -const assert = require('yeoman-assert'); -const helpers = require('yeoman-test'); -const fse = require('fs-extra'); -const constants = require('../generators/generator-constants'); - -const SERVER_MAIN_SRC_DIR = constants.SERVER_MAIN_SRC_DIR; -const SERVER_TEST_SRC_DIR = constants.SERVER_TEST_SRC_DIR; - -const entityFiles = [ - `${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/domain/Job.java`, - `${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/repository/JobRepository.java`, - `${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/web/rest/JobResource.java`, - `${SERVER_TEST_SRC_DIR}com/mycompany/myapp/web/rest/JobResourceIntTest.java`, -]; - -describe('JHipster generator import jdl', () => { - describe('imports a JDL model from single file with --json-only flag', () => { - beforeEach((done) => { - helpers.run(require.resolve('../generators/import-jdl')) - .inTmpDir((dir) => { - fse.copySync(path.join(__dirname, '../test/templates/import-jdl'), dir); - }) - .withArguments(['jdl.jdl']) - .withOptions({ 'json-only': true }) - .on('end', done); - }); - - it('creates entity json files', () => { - assert.file([ - '.jhipster/Department.json', - '.jhipster/JobHistory.json', - '.jhipster/Job.json', - '.jhipster/Employee.json', - '.jhipster/Location.json', - '.jhipster/Task.json', - '.jhipster/Country.json', - '.jhipster/Region.json' - ]); - }); - it('does not create actual entity files', () => { - assert.noFile(entityFiles); - }); - }); - describe('imports a JDL model from single file', () => { - beforeEach((done) => { - helpers.run(require.resolve('../generators/import-jdl')) - .inTmpDir((dir) => { - fse.copySync(path.join(__dirname, '../test/templates/import-jdl'), dir); - }) - .withArguments(['jdl.jdl']) - .on('end', done); - }); - - it('creates entity json files', () => { - assert.file([ - '.jhipster/Department.json', - '.jhipster/JobHistory.json', - '.jhipster/Job.json', - '.jhipster/Employee.json', - '.jhipster/Location.json', - '.jhipster/Task.json', - '.jhipster/Country.json', - '.jhipster/Region.json' - ]); - }); - it('creates actual entity files', () => { - assert.file(entityFiles); - }); - }); - describe('imports JDL apps and entities', () => { - before((done) => { - helpers.run(require.resolve('../generators/import-jdl')) - .inTmpDir((dir) => { - fse.copySync(path.join(__dirname, '../test/templates/import-jdl'), dir); - }) - .withArguments(['apps-and-entities.jdl']) - .on('end', done); - }); - - it('creates the applications', () => { - assert.file([ - path.join('myFirstApp', '.yo-rc.json'), - path.join('mySecondApp', '.yo-rc.json'), - path.join('myThirdApp', '.yo-rc.json') - ]); - }); - it('creates the entities', () => { - assert.file([ - path.join('myFirstApp', '.jhipster', 'A.json'), - path.join('myFirstApp', '.jhipster', 'B.json'), - path.join('myFirstApp', '.jhipster', 'E.json'), - path.join('myFirstApp', '.jhipster', 'F.json'), - path.join('mySecondApp', '.jhipster', 'E.json'), - path.join('myThirdApp', '.jhipster', 'F.json') - ]); - }); - }); - describe('imports single app and entities', () => { - before((done) => { - helpers.run(require.resolve('../generators/import-jdl')) - .inTmpDir((dir) => { - fse.copySync(path.join(__dirname, '../test/templates/import-jdl'), dir); - }) - .withOptions({ skipInstall: true }) - .withArguments(['single-app-and-entities.jdl']) - .on('end', done); - }); - - it('creates the application', () => { - assert.file(['.yo-rc.json']); - }); - it('creates the entities', () => { - assert.file([ - path.join('.jhipster', 'A.json'), - path.join('.jhipster', 'B.json'), - ]); - }); - }); - describe('imports a JDL model from multiple files', () => { - beforeEach((done) => { - helpers.run(require.resolve('../generators/import-jdl')) - .inTmpDir((dir) => { - fse.copySync(path.join(__dirname, '../test/templates/import-jdl'), dir); - }) - .withArguments(['jdl.jdl', 'jdl2.jdl', 'jdl-ambiguous.jdl']) - .on('end', done); - }); - - it('creates entity json files', () => { - assert.file([ - '.jhipster/Department.json', - '.jhipster/JobHistory.json', - '.jhipster/Job.json', - '.jhipster/Employee.json', - '.jhipster/Location.json', - '.jhipster/Task.json', - '.jhipster/Country.json', - '.jhipster/Region.json', - '.jhipster/DepartmentAlt.json', - '.jhipster/JobHistoryAlt.json', - '.jhipster/Listing.json', - '.jhipster/Profile.json', - '.jhipster/WishList.json' - ]); - }); - it('creates actual entity files', () => { - assert.file(entityFiles); - }); - }); - describe('imports a JDL model which excludes Elasticsearch for a class', () => { - beforeEach((done) => { - helpers.run(require.resolve('../generators/import-jdl')) - .inTmpDir((dir) => { - fse.copySync(path.join(__dirname, '../test/templates/import-jdl'), dir); - }) - .withArguments(['search.jdl']) - .on('end', done); - }); - - it('creates entity json files', () => { - assert.file([ - '.jhipster/WithSearch.json', - '.jhipster/WithoutSearch.json' - ]); - assert.fileContent('.jhipster/WithoutSearch.json', /"searchEngine": false/); - assert.file(`${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/repository/search/WithSearchSearchRepository.java`); - assert.noFile(`${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/repository/search/WithoutSearchSearchRepository.java`); - }); - }); -}); diff --git a/test/templates/all-languages/.yo-rc.json b/test/templates/all-languages/.yo-rc.json index 9583f2f097fd..db4801fddbbd 100644 --- a/test/templates/all-languages/.yo-rc.json +++ b/test/templates/all-languages/.yo-rc.json @@ -52,6 +52,7 @@ "ja", "ko", "mr", + "my", "pl", "pt-br", "pt-pt", diff --git a/test/utils/expected-files.js b/test/utils/expected-files.js index 65db24634a56..e9b3a8784ef8 100644 --- a/test/utils/expected-files.js +++ b/test/utils/expected-files.js @@ -200,6 +200,7 @@ const expectedFiles = { '.prettierignore', '.prettierrc', 'package.json', + 'postcss.config.js', 'proxy.conf.json', 'src/main/webapp/404.html', `${CLIENT_MAIN_SRC_DIR}app/account/account.module.ts`, diff --git a/test/utils/utils.js b/test/utils/utils.js index 7aab1706505c..e770060252c4 100644 --- a/test/utils/utils.js +++ b/test/utils/utils.js @@ -1,4 +1,7 @@ /* global describe, beforeEach, it */ +const path = require('path'); +const os = require('os'); +const shelljs = require('shelljs'); const assert = require('yeoman-assert'); const Generator = require('../../generators/generator-base'); const constants = require('../../generators/generator-constants'); @@ -7,7 +10,9 @@ const DOCKER_DIR = constants.DOCKER_DIR; module.exports = { getFilesForOptions, - shouldBeV3DockerfileCompatible + shouldBeV3DockerfileCompatible, + getJHipsterCli, + testInTempDir }; function getFilesForOptions(files, options, prefix, excludeFiles) { @@ -29,3 +34,31 @@ function shouldBeV3DockerfileCompatible(databaseType) { assert.noFileContent(`${DOCKER_DIR + databaseType}.yml`, /links:/); }); } + +function getJHipsterCli() { + const cmdPath = path.join(__dirname, '../../cli/jhipster'); + let cmd = `node ${cmdPath} `; + if (os.platform() === 'win32') { + // corrected test for windows user + cmd = cmd.replace(/\\/g, '/'); + } + /* eslint-disable-next-line no-console */ + console.log(cmd); + return cmd; +} + +function testInTempDir(cb) { + const cwd = process.cwd(); + /* eslint-disable-next-line no-console */ + console.log(`current cwd: ${cwd}`); + const tempDir = path.join(os.tmpdir(), 'jhitemp'); + shelljs.rm('-rf', tempDir); + shelljs.mkdir('-p', tempDir); + process.chdir(tempDir); + /* eslint-disable-next-line no-console */ + console.log(`New cwd: ${process.cwd()}`); + cb(tempDir); + process.chdir(cwd); + /* eslint-disable-next-line no-console */ + console.log(`current cwd: ${process.cwd()}`); +} diff --git a/travis/scripts/02-generate-project.sh b/travis/scripts/02-generate-project.sh index f79786697e57..7d7fcc8c6fde 100755 --- a/travis/scripts/02-generate-project.sh +++ b/travis/scripts/02-generate-project.sh @@ -16,12 +16,12 @@ if [[ "$JHIPSTER" == *"uaa"* ]]; then mkdir -p "$UAA_APP_FOLDER" cp -f "$JHIPSTER_SAMPLES"/uaa/.yo-rc.json "$UAA_APP_FOLDER"/ cd "$UAA_APP_FOLDER" - jhipster --force --no-insight --with-entities --skip-checks --skip-git --skip-commit-hook + jhipster --force --no-insight --with-entities --skip-checks --skip-git --skip-commit-hook --from-cli ls -al "$UAA_APP_FOLDER" fi mkdir -p "$APP_FOLDER" cp -f "$JHIPSTER_SAMPLES"/"$JHIPSTER"/.yo-rc.json "$APP_FOLDER"/ cd "$APP_FOLDER" -jhipster --force --no-insight --skip-checks --with-entities --skip-git --skip-commit-hook +jhipster --force --no-insight --skip-checks --with-entities --skip-git --skip-commit-hook --from-cli ls -al "$APP_FOLDER"