mirror of
https://github.com/shlinkio/shlink-web-client.git
synced 2025-01-03 06:47:29 +03:00
Migrated serice worker generation to vite-plugin-pwa
This commit is contained in:
parent
ced3fa00ef
commit
408ec82a10
7 changed files with 1792 additions and 191 deletions
145
manifest.ts
Normal file
145
manifest.ts
Normal file
|
@ -0,0 +1,145 @@
|
||||||
|
export const manifest = {
|
||||||
|
short_name: 'Shlink',
|
||||||
|
name: 'Shlink',
|
||||||
|
start_url: '/',
|
||||||
|
display: 'standalone',
|
||||||
|
theme_color: '#4696e5',
|
||||||
|
background_color: '#4696e5',
|
||||||
|
icons: [
|
||||||
|
{
|
||||||
|
src: './icons/icon-16x16.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '16x16',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-24x24.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '24x24',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-32x32.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '32x32',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-40x40.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '40x40',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-48x48.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '48x48',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-60x60.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '60x60',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-64x64.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '64x64',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-72x72.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '72x72',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-76x76.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '76x76',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-96x96.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '96x96',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-114x114.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '114x114',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-120x120.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '120x120',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-128x128.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '128x128',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-144x144.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '144x144',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-150x150.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '150x150',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-152x152.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '152x152',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-160x160.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '160x160',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-167x167.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '167x167',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-180x180.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '180x180',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-192x192.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '192x192',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-196x196.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '196x196',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-228x228.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '228x228',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-256x256.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '256x256',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-310x310.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '310x310',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-384x384.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '384x384',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-512x512.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '512x512',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: './icons/icon-1024x1024.png',
|
||||||
|
type: 'image/png',
|
||||||
|
sizes: '1024x1024',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
1659
package-lock.json
generated
1659
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -107,7 +107,8 @@
|
||||||
"stylelint": "^14.13.0",
|
"stylelint": "^14.13.0",
|
||||||
"ts-mockery": "^1.2.0",
|
"ts-mockery": "^1.2.0",
|
||||||
"typescript": "^4.8.4",
|
"typescript": "^4.8.4",
|
||||||
"vite": "^4.0.3"
|
"vite": "^4.0.3",
|
||||||
|
"vite-plugin-pwa": "^0.14.0"
|
||||||
},
|
},
|
||||||
"browserslist": [
|
"browserslist": [
|
||||||
">0.2%",
|
">0.2%",
|
||||||
|
|
|
@ -1,145 +0,0 @@
|
||||||
{
|
|
||||||
"short_name": "Shlink",
|
|
||||||
"name": "Shlink",
|
|
||||||
"start_url": "/",
|
|
||||||
"display": "standalone",
|
|
||||||
"theme_color": "#4696e5",
|
|
||||||
"background_color": "#4696e5",
|
|
||||||
"icons": [
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-16x16.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "16x16"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-24x24.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "24x24"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-32x32.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "32x32"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-40x40.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "40x40"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-48x48.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "48x48"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-60x60.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "60x60"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-64x64.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "64x64"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-72x72.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "72x72"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-76x76.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "76x76"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-96x96.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "96x96"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-114x114.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "114x114"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-120x120.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "120x120"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-128x128.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "128x128"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-144x144.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "144x144"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-150x150.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "150x150"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-152x152.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "152x152"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-160x160.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "160x160"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-167x167.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "167x167"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-180x180.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "180x180"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-192x192.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "192x192"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-196x196.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "196x196"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-228x228.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "228x228"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-256x256.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "256x256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-310x310.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "310x310"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-384x384.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "384x384"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-512x512.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "512x512"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "./icons/icon-1024x1024.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "1024x1024"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -49,7 +49,7 @@ registerRoute(
|
||||||
// Return true to signal that we want to use the handler.
|
// Return true to signal that we want to use the handler.
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
createHandlerBoundToURL(process.env.PUBLIC_URL + '/index.html')
|
createHandlerBoundToURL('/index.html')
|
||||||
);
|
);
|
||||||
|
|
||||||
// An example runtime caching route for requests that aren't handled by the
|
// An example runtime caching route for requests that aren't handled by the
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
// To learn more about the benefits of this model and instructions on how to
|
// To learn more about the benefits of this model and instructions on how to
|
||||||
// opt-in, read https://cra.link/PWA
|
// opt-in, read https://cra.link/PWA
|
||||||
|
import pack from'../package.json';
|
||||||
|
|
||||||
const isLocalhost = Boolean(
|
const isLocalhost = Boolean(
|
||||||
window.location.hostname === 'localhost' ||
|
window.location.hostname === 'localhost' ||
|
||||||
|
@ -26,7 +27,7 @@ type Config = {
|
||||||
export function register(config?: Config) {
|
export function register(config?: Config) {
|
||||||
if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
|
if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
|
||||||
// The URL constructor is available in all browsers that support SW.
|
// The URL constructor is available in all browsers that support SW.
|
||||||
const publicUrl = new URL(process.env.PUBLIC_URL ?? '', window.location.href);
|
const publicUrl = new URL(pack.homepage, window.location.href);
|
||||||
if (publicUrl.origin !== window.location.origin) {
|
if (publicUrl.origin !== window.location.origin) {
|
||||||
// Our service worker won't work if PUBLIC_URL is on a different origin
|
// Our service worker won't work if PUBLIC_URL is on a different origin
|
||||||
// from what our page is served on. This might happen if a CDN is used to
|
// from what our page is served on. This might happen if a CDN is used to
|
||||||
|
@ -35,7 +36,7 @@ export function register(config?: Config) {
|
||||||
}
|
}
|
||||||
|
|
||||||
window.addEventListener('load', () => {
|
window.addEventListener('load', () => {
|
||||||
const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
|
const swUrl = `${pack.homepage}/service-worker.js`;
|
||||||
|
|
||||||
if (isLocalhost) {
|
if (isLocalhost) {
|
||||||
// This is running on localhost. Let's check if a service worker still exists or not.
|
// This is running on localhost. Let's check if a service worker still exists or not.
|
||||||
|
|
|
@ -1,24 +1,20 @@
|
||||||
import { defineConfig } from 'vite';
|
import { defineConfig } from 'vite';
|
||||||
import react from '@vitejs/plugin-react';
|
import react from '@vitejs/plugin-react';
|
||||||
|
import { VitePWA } from 'vite-plugin-pwa';
|
||||||
|
import { manifest } from './manifest';
|
||||||
|
|
||||||
// https://vitejs.dev/config/
|
// https://vitejs.dev/config/
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
plugins: [react()],
|
plugins: [react(), VitePWA({
|
||||||
|
strategies: 'injectManifest',
|
||||||
|
srcDir: './src',
|
||||||
|
filename: 'service-worker.ts',
|
||||||
|
injectRegister: false,
|
||||||
|
manifestFilename: 'manifest.json',
|
||||||
|
manifest,
|
||||||
|
})],
|
||||||
build: {
|
build: {
|
||||||
outDir: 'build',
|
outDir: 'build',
|
||||||
rollupOptions: {
|
|
||||||
input: {
|
|
||||||
index: './index.html', // default entry point
|
|
||||||
'service-worker': './src/service-worker.ts', // service worker
|
|
||||||
},
|
|
||||||
output: {
|
|
||||||
entryFileNames: ({ name }) => (
|
|
||||||
name === 'service-worker'
|
|
||||||
? '[name].js' // put service worker in root
|
|
||||||
: 'assets/[name]-[hash].js' // others in `assets/js/`
|
|
||||||
),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
server: {
|
server: {
|
||||||
port: 3000,
|
port: 3000,
|
||||||
|
|
Loading…
Reference in a new issue