#!/usr/bin/env node const parseArgs = require('minimist'), chalk = require('chalk') const appPaths = require('../lib/app-paths') const argv = parseArgs(process.argv.slice(2), { alias: { h: 'help' }, boolean: ['h'] }) if (argv.help) { console.log(` Description Displays information about your machine and your Quasar App. Usage $ quasar info Options --help, -h Displays this message `) process.exit(0) } const os = require('os'), spawn = require('cross-spawn').sync function getSpawnOutput (command) { try { const child = spawn(command, ['--version']) return child.status === 0 ? chalk.green(String(child.output[1]).trim()) : chalk.red('Not installed') } catch (err) { return chalk.red('Not installed') } } function safePkgInfo (pkg) { try { const content = require(appPaths.resolve.app(`node_modules/${pkg}/package.json`)) return { key: ` ${String(content.name).trim()}`, value: `${chalk.green(String(content.version).trim())}${content.description ? `\t(${content.description})` : ''}` } } catch (err) { return { key: ` ${pkg}`, value: chalk.red('Not installed') } } } const getExternalIPs = require('../lib/helpers/net').getExternalNetworkInterface, output = [ { key: 'Operating System', value: chalk.green(`${os.type()}(${os.release()}) - ${os.platform()}/${os.arch()}`), section: true }, { key: 'NodeJs', value: chalk.green(process.version.slice(1)) }, { key: 'Global packages', section: true }, { key: ' NPM', value: getSpawnOutput('npm') }, { key: ' yarn', value: getSpawnOutput('yarn') }, { key: ' quasar-cli', value: getSpawnOutput('quasar') }, { key: ' vue-cli', value: getSpawnOutput('vue') }, { key: ' cordova', value: getSpawnOutput('cordova') }, { key: 'Important local packages', section: true } ] ;[ 'quasar-cli', 'quasar-framework', 'quasar-extras', 'vue', 'vue-router', 'vuex', 'electron', 'electron-packager', 'electron-builder', '@babel/core', 'webpack', 'webpack-dev-server', 'workbox-webpack-plugin', 'register-service-worker' ].forEach(pkg => output.push(safePkgInfo(pkg))) output.push( { key: 'Networking', section: true }, { key: ' Host', value: chalk.green(os.hostname()) } ) getExternalIPs().forEach(intf => { output.push({ key: ` ${ intf.deviceName }`, value: chalk.green(intf.address) }) }) const spaces = output.reduce((acc, v) => Math.max(acc, v.key.length), 0) console.log( output .map(m => `${m.section ? '\n' : ''}${ m.key }${' '.repeat(spaces - m.key.length)}\t${ m.value === undefined ? '' : m.value }`).join('\n') ) console.log()