UNPKG

@quasar/app-webpack

Version:

Quasar Framework App CLI with Webpack

90 lines (75 loc) 2.42 kB
const fse = require('fs-extra') const { log, warn } = require('../../utils/logger.js') const { isModeInstalled } = require('../modes-utils.js') const pwaDevDeps = { 'workbox-webpack-plugin': '^7.0.0' } const pwaDeps = { 'register-service-worker': '^1.7.2' } /** * @param {{ * ctx: import('../../../types/configuration/context').InternalQuasarContext, * silent: boolean * }} options */ module.exports.addMode = function addMode ({ ctx: { appPaths, cacheProxy }, silent }) { if (isModeInstalled(appPaths, 'pwa')) { if (silent !== true) { warn('PWA support detected already. Aborting.') } return } const nodePackager = cacheProxy.getModule('nodePackager') nodePackager.installPackage( Object.entries(pwaDevDeps).map(([ name, version ]) => `${ name }@${ version }`), { isDevDependency: true, displayName: 'PWA dev dependencies' } ) nodePackager.installPackage( Object.entries(pwaDeps).map(([ name, version ]) => `${ name }@${ version }`), { displayName: 'PWA dependencies' } ) log('Creating PWA source folder...') const hasTypescript = cacheProxy.getModule('hasTypescript') const { hasEslint } = cacheProxy.getModule('eslint') const format = hasTypescript ? 'ts' : 'js' fse.copySync( appPaths.resolve.cli(`templates/pwa/${ format }`), appPaths.pwaDir, // Copy .eslintrc.js only if the app has ESLint hasEslint === true ? { filter: src => !src.endsWith('/.eslintrc.cjs') } : void 0 ) log('Copying PWA icons to /public/icons/ (if they are not already there)...') fse.copySync( appPaths.resolve.cli('templates/pwa-icons'), appPaths.resolve.app('public/icons'), { overwrite: false } ) log('PWA support was added') } /** * @param {{ * ctx: import('../../../types/configuration/context').InternalQuasarContext, * }} options */ module.exports.removeMode = function removeMode ({ ctx: { appPaths, cacheProxy } }) { if (isModeInstalled(appPaths, 'pwa') === false) { warn('No PWA support detected. Aborting.') return } log('Removing PWA source folder') fse.removeSync(appPaths.pwaDir) const nodePackager = cacheProxy.getModule('nodePackager') nodePackager.uninstallPackage(Object.keys(pwaDevDeps), { displayName: 'PWA dev dependencies' }) nodePackager.uninstallPackage(Object.keys(pwaDeps), { displayName: 'PWA dependencies' }) log('PWA support was removed') }