@quasar/app-vite
Version:
Quasar Framework App CLI with Vite
97 lines (81 loc) • 2.67 kB
JavaScript
import fse from 'fs-extra'
import { log, warn } from '../../utils/logger.js'
import { isModeInstalled } from '../modes-utils.js'
const defaultVersion = '^7.0.0'
const pwaDevDeps = {
'workbox-core': defaultVersion,
'workbox-routing': defaultVersion,
'workbox-strategies': defaultVersion,
'workbox-expiration': defaultVersion,
'workbox-precaching': defaultVersion,
'workbox-cacheable-response': defaultVersion,
'workbox-build': defaultVersion
}
const pwaDeps = {
'register-service-worker': '^1.7.2'
}
/**
* @param {{
* ctx: import('../../../types/configuration/context').InternalQuasarContext,
* silent: boolean
* }} options
*/
export async function addMode({ ctx: { appPaths, cacheProxy }, silent }) {
if (isModeInstalled(appPaths, 'pwa')) {
if (silent !== true) {
warn('PWA support detected already. Aborting.')
}
return
}
const nodePackager = await 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 = await cacheProxy.getModule('hasTypescript')
const { hasEslint } = await 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
*/
export async 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 = await 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')
}