feat: pwa with push notifications (#337)

This commit is contained in:
Joaquín Sánchez 2022-12-18 00:29:16 +01:00 committed by GitHub
parent a18e5e2332
commit f0c91a3974
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
48 changed files with 2903 additions and 14 deletions

View file

@ -2,10 +2,16 @@ import { fileURLToPath } from 'node:url'
import Inspect from 'vite-plugin-inspect'
import { isCI } from 'std-env'
import { i18n } from './config/i18n'
import { pwa } from './config/pwa'
const isPreview = process.env.PULL_REQUEST === 'true'
export default defineNuxtConfig({
typescript: {
tsConfig: {
exclude: ['../service-worker'],
},
},
modules: [
'@vueuse/nuxt',
'@unocss/nuxt',
@ -14,6 +20,7 @@ export default defineNuxtConfig({
'@nuxtjs/i18n',
'~/modules/purge-comments',
'~/modules/setup-components',
'~/modules/pwa/index', // change to '@vite-pwa/nuxt' once released and remove pwa module
],
experimental: {
reactivityTransform: true,
@ -66,6 +73,7 @@ export default defineNuxtConfig({
},
public: {
env: isCI ? isPreview ? 'staging' : 'production' : 'local',
pwaEnabled: isCI || process.env.VITE_DEV_PWA === 'true',
translateApi: '',
// Masto uses Mastodon version checks to see what features are enabled.
// Mastodon alternatives like GoToSocial will always fail these checks, so
@ -77,6 +85,13 @@ export default defineNuxtConfig({
fsBase: 'node_modules/.cache/servers',
},
},
routeRules: {
'/manifest.webmanifest': {
headers: {
'Content-Type': 'application/manifest+json',
},
},
},
nitro: {
publicAssets: [
...(!isCI || isPreview ? [{ dir: fileURLToPath(new URL('./public-dev', import.meta.url)) }] : []),
@ -99,10 +114,14 @@ export default defineNuxtConfig({
{ rel: 'alternate icon', type: 'image/x-icon', href: '/favicon.ico' },
{ rel: 'icon', type: 'image/png', href: '/favicon-16x16.png', sizes: '16x16' },
{ rel: 'icon', type: 'image/png', href: '/favicon-32x32.png', sizes: '32x32' },
{ rel: 'mask-icon', href: '/safari-pinned-tab.svg', color: '#ffffff' },
{ rel: 'apple-touch-icon', href: '/apple-touch-icon.png', sizes: '180x180' },
],
meta: [{ name: 'theme-color', content: '#ffffff' }],
},
},
i18n,
pwa,
})
declare global {