@quasar/app-webpack
Version:
Quasar Framework App CLI with Webpack
128 lines (103 loc) • 3.09 kB
JavaScript
const parseArgs = require('minimist')
const { log, warn, fatal } = require('../utils/logger.js')
const argv = parseArgs(process.argv.slice(2), {
alias: {
y: 'yes',
h: 'help'
},
boolean: [ 'y', 'h' ]
})
function showHelp () {
console.log(`
Description
Add/Remove support for PWA / BEX / Cordova / Capacitor / Electron modes.
Usage
$ quasar mode [add|remove] [pwa|ssr|bex|cordova|capacitor|electron] [--yes]
# determine what modes are currently installed:
$ quasar mode
Options
--yes, -y Skips the "Are you sure?" question
when removing a Quasar mode
--help, -h Displays this message
`)
process.exit(0)
}
if (argv.help) {
showHelp()
process.exit(1)
}
if (argv._.length !== 0 && argv._.length !== 2) {
console.log()
warn(`Wrong number of parameters (${ argv._.length }).`)
showHelp()
process.exit(1)
}
const { green, gray } = require('kolorist')
const { getCtx } = require('../utils/get-ctx.js')
const { generateTypes } = require('../types-generator.js')
const { isModeInstalled } = require('../modes/modes-utils.js')
async function run () {
const [ action, mode ] = argv._
const ctx = getCtx({ mode })
if (![ 'add', 'remove' ].includes(action)) {
console.log()
warn(`Unknown action specified (${ action }).`)
showHelp()
process.exit(1)
}
if (![ undefined, 'pwa', 'cordova', 'capacitor', 'electron', 'ssr', 'bex' ].includes(mode)) {
fatal(`Unknown mode "${ mode }" to ${ action }`)
}
const { addMode, removeMode } = require(`../modes/${ mode }/${ mode }-installation.js`)
const actionMap = { add: addMode, remove: removeMode }
if (action === 'remove' && argv.yes !== true && isModeInstalled(ctx.appPaths, mode)) {
console.log()
const { default: inquirer } = await import('inquirer')
const answer = await inquirer.prompt([ {
name: 'go',
type: 'confirm',
message: `Will also remove /src-${ mode } folder. Are you sure?`,
default: false
} ])
if (!answer.go) {
console.log()
console.log('⚠️ Aborted...')
console.log()
process.exit(0)
}
}
await actionMap[ action ]({ ctx })
// Ensure types are re-generated accordingly
const { QuasarConfigFile } = await import('../quasar-config-file.js')
const quasarConfFile = new QuasarConfigFile({
ctx,
// host and port don't matter for this command
port: 9000,
host: 'localhost'
})
await quasarConfFile.init()
const quasarConf = await quasarConfFile.read()
generateTypes(quasarConf)
}
async function displayModes () {
log('Detecting installed modes...')
const ctx = getCtx()
const info = []
for (const mode of [ 'pwa', 'ssr', 'cordova', 'capacitor', 'electron', 'bex' ]) {
info.push([
`Mode ${ mode.toUpperCase() }`,
isModeInstalled(ctx.appPaths, mode) ? green('yes') : gray('no')
])
}
console.log(
'\n'
+ info.map(msg => ' ' + msg[ 0 ].padEnd(16, '.') + ' ' + msg[ 1 ]).join('\n')
+ '\n'
)
}
if (argv._.length === 2) {
run()
}
else {
displayModes()
}