**Integrate PWA asset generator and update favicon and manifest configuration**


@@ -9,7 +9,8 @@
|
||||
"generate:sitemap": "bun ./scripts/generate_sitemap.js open-gsio.seemueller.workers.dev",
|
||||
"generate:robotstxt": "bun ./scripts/generate_robots_txt.js open-gsio.seemueller.workers.dev",
|
||||
"generate:fonts": "cp -r ../../node_modules/katex/dist/fonts public/static",
|
||||
"generate:bevy:bundle": "bun scripts/generate-bevy-bundle.js"
|
||||
"generate:bevy:bundle": "bun scripts/generate-bevy-bundle.js",
|
||||
"generate:pwa:assets": "test ! -f public/pwa-64x64.png && pwa-assets-generator --preset minimal-2023 public/logo.png || echo 'PWA assets already exist'"
|
||||
},
|
||||
"exports": {
|
||||
"./server/index.ts": {
|
||||
@@ -30,6 +31,7 @@
|
||||
"@testing-library/user-event": "^14.5.2",
|
||||
"@types/bun": "^1.2.17",
|
||||
"@types/marked": "^6.0.0",
|
||||
"@vite-pwa/assets-generator": "^1.0.0",
|
||||
"@vitejs/plugin-react": "^4.3.4",
|
||||
"@vitest/coverage-v8": "^3.1.4",
|
||||
"@vitest/ui": "^3.1.4",
|
||||
|
Before Width: | Height: | Size: 9.9 KiB |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 638 KiB |
Before Width: | Height: | Size: 563 B |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 624 B |
Before Width: | Height: | Size: 534 KiB |
Before Width: | Height: | Size: 153 KiB |
BIN
packages/client/public/logo.png
Normal file
After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 373 KiB |
Before Width: | Height: | Size: 1.4 MiB |
Before Width: | Height: | Size: 1.4 MiB |
Before Width: | Height: | Size: 165 KiB |
@@ -1,19 +0,0 @@
|
||||
{
|
||||
"name": "",
|
||||
"short_name": "",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/android-chrome-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "/android-chrome-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
],
|
||||
"theme_color": "#fffff0",
|
||||
"background_color": "#000000",
|
||||
"display": "standalone"
|
||||
}
|
@@ -28,10 +28,9 @@ const onRenderHtml: OnRenderHtmlAsync = async (pageContext): ReturnType<OnRender
|
||||
<html data-theme="dark" lang="en">
|
||||
<head>
|
||||
<title>open-gsio</title>
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
||||
<link rel="manifest" href="/site.webmanifest">
|
||||
<link rel="icon" href="/favicon.ico" sizes="48x48">
|
||||
<link rel="icon" href="/favicon.svg" sizes="any" type="image/svg+xml">
|
||||
<link rel="apple-touch-icon" href="/apple-touch-icon-180x180.png">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="UTF-8">
|
||||
<meta name="description" content="Maker Site">
|
||||
|
@@ -7,10 +7,15 @@ import { VitePWA } from 'vite-plugin-pwa';
|
||||
// eslint-disable-next-line import/no-unresolved
|
||||
import { configDefaults } from 'vitest/config';
|
||||
|
||||
import { getColorThemes } from './src/layout/theme/color-themes';
|
||||
|
||||
const prebuildPlugin = () => ({
|
||||
name: 'prebuild',
|
||||
config(config, { command }) {
|
||||
if (command === 'build') {
|
||||
console.log('Generate PWA Assets -> public/');
|
||||
child_process.execSync('bun generate:pwa:assets');
|
||||
console.log('Generated Sitemap -> public/sitemap.xml');
|
||||
child_process.execSync('bun generate:sitemap');
|
||||
console.log('Generated Sitemap -> public/sitemap.xml');
|
||||
child_process.execSync('bun run generate:robotstxt');
|
||||
@@ -25,6 +30,13 @@ const prebuildPlugin = () => ({
|
||||
},
|
||||
});
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
||||
// const PROJECT_SOURCES_HASH = sha512Dir('./src');
|
||||
//
|
||||
// console.log({ PROJECT_SOURCES_HASH });
|
||||
|
||||
const buildId = crypto.randomUUID();
|
||||
|
||||
export default defineConfig(({ command }) => {
|
||||
return {
|
||||
mode: 'production',
|
||||
@@ -43,16 +55,52 @@ export default defineConfig(({ command }) => {
|
||||
filename: 'service-worker.js',
|
||||
devOptions: {
|
||||
enabled: false,
|
||||
navigateFallback: 'index.html',
|
||||
suppressWarnings: true,
|
||||
type: 'module',
|
||||
},
|
||||
manifest: {
|
||||
name: 'open-gsio',
|
||||
name: `open-gsio`,
|
||||
short_name: 'open-gsio',
|
||||
description: 'Assistant',
|
||||
display: 'standalone',
|
||||
description: `open-gsio client`,
|
||||
theme_color: getColorThemes().at(0)?.colors.text.accent,
|
||||
background_color: getColorThemes().at(0)?.colors.background.primary,
|
||||
scope: '/',
|
||||
start_url: '/',
|
||||
icons: [
|
||||
{
|
||||
src: 'pwa-64x64.png',
|
||||
sizes: '64x64',
|
||||
type: 'image/png',
|
||||
},
|
||||
{
|
||||
src: 'pwa-192x192.png',
|
||||
sizes: '192x192',
|
||||
type: 'image/png',
|
||||
},
|
||||
{
|
||||
src: 'pwa-512x512.png',
|
||||
sizes: '512x512',
|
||||
type: 'image/png',
|
||||
purpose: 'any',
|
||||
},
|
||||
{
|
||||
src: 'maskable-icon-512x512.png',
|
||||
sizes: '512x512',
|
||||
type: 'image/png',
|
||||
purpose: 'maskable',
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
workbox: {
|
||||
globPatterns: ['**/*.{js,css,html,ico,png,svg,wasm}'],
|
||||
navigateFallbackDenylist: [/^\/api\//],
|
||||
maximumFileSizeToCacheInBytes: 25000000,
|
||||
cacheId: buildId,
|
||||
cleanupOutdatedCaches: true,
|
||||
clientsClaim: true,
|
||||
},
|
||||
}),
|
||||
// PWA plugin saves money on data transfer by caching assets on the client
|
||||
|