fix: double config path, stale service worker, empty op-name log
- main.go: DOCKER_PATH=/config + /config.json (was /config/config.json)
- vite.config.ts: skipWaiting+clientsClaim forces new SW immediately;
navigateFallback: null prevents SW from serving stale index.html;
globPatterns excludes HTML so navigation always hits the network
- server.go: gqlOpName handles shorthand { field } syntax
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -39,8 +39,14 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func configPath() string {
|
func configPath() string {
|
||||||
|
// CONFIG_DIR points directly to the config directory (preferred).
|
||||||
|
if p := os.Getenv("CONFIG_DIR"); p != "" {
|
||||||
|
return p + "/config.json"
|
||||||
|
}
|
||||||
|
// DOCKER_PATH is also set to the config directory in docker-compose
|
||||||
|
// (the container mounts the config dir at /config, so DOCKER_PATH=/config).
|
||||||
if p := os.Getenv("DOCKER_PATH"); p != "" {
|
if p := os.Getenv("DOCKER_PATH"); p != "" {
|
||||||
return p + "/config/config.json"
|
return p + "/config.json"
|
||||||
}
|
}
|
||||||
return "config.json"
|
return "config.json"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -253,13 +253,18 @@ func writeGQLError(w http.ResponseWriter, msg string) {
|
|||||||
|
|
||||||
func gqlOpName(query string) string {
|
func gqlOpName(query string) string {
|
||||||
q := strings.TrimSpace(query)
|
q := strings.TrimSpace(query)
|
||||||
if strings.HasPrefix(q, "mutation") {
|
switch {
|
||||||
return "mutation " + firstWord(q[len("mutation"):])
|
case strings.HasPrefix(q, "mutation"):
|
||||||
|
return "mutation " + firstWord(strings.TrimSpace(q[len("mutation"):]))
|
||||||
|
case strings.HasPrefix(q, "query"):
|
||||||
|
return "query " + firstWord(strings.TrimSpace(q[len("query"):]))
|
||||||
|
case strings.HasPrefix(q, "{"):
|
||||||
|
// Shorthand query: extract first field name from { field ... }
|
||||||
|
inner := strings.TrimSpace(q[1:])
|
||||||
|
return "query {" + firstWord(inner) + "...}"
|
||||||
|
default:
|
||||||
|
return firstWord(q)
|
||||||
}
|
}
|
||||||
if strings.HasPrefix(q, "query") {
|
|
||||||
return "query " + firstWord(q[len("query"):])
|
|
||||||
}
|
|
||||||
return firstWord(q)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func firstWord(s string) string {
|
func firstWord(s string) string {
|
||||||
|
|||||||
@@ -8,6 +8,9 @@ export default defineConfig({
|
|||||||
vue(),
|
vue(),
|
||||||
VitePWA({
|
VitePWA({
|
||||||
registerType: 'autoUpdate',
|
registerType: 'autoUpdate',
|
||||||
|
// Inject a cache-busting version based on build time so stale service
|
||||||
|
// workers are replaced immediately when a new image is deployed.
|
||||||
|
injectRegister: 'auto',
|
||||||
manifest: {
|
manifest: {
|
||||||
name: 'Archivum',
|
name: 'Archivum',
|
||||||
short_name: 'Archivum',
|
short_name: 'Archivum',
|
||||||
@@ -15,16 +18,26 @@ export default defineConfig({
|
|||||||
theme_color: '#0f172a',
|
theme_color: '#0f172a',
|
||||||
background_color: '#0f172a',
|
background_color: '#0f172a',
|
||||||
display: 'standalone',
|
display: 'standalone',
|
||||||
// Icons are optional; add real PNG files to public/icons/ to enable PWA install.
|
|
||||||
icons: [],
|
icons: [],
|
||||||
},
|
},
|
||||||
workbox: {
|
workbox: {
|
||||||
globPatterns: ['**/*.{js,css,html,ico,png,svg,woff2}'],
|
// Force the new service worker to activate immediately
|
||||||
|
// instead of waiting for all tabs to close.
|
||||||
|
skipWaiting: true,
|
||||||
|
clientsClaim: true,
|
||||||
|
// Only cache these explicit file types — do NOT cache HTML so the
|
||||||
|
// SPA shell is always fetched fresh (prevents stale SW loops).
|
||||||
|
globPatterns: ['**/*.{js,css,woff2,png,svg,ico}'],
|
||||||
|
// Navigation requests (HTML) always go to the network.
|
||||||
|
navigateFallback: null,
|
||||||
runtimeCaching: [
|
runtimeCaching: [
|
||||||
{
|
{
|
||||||
urlPattern: /\/graphql$/,
|
urlPattern: /\/graphql$/,
|
||||||
handler: 'NetworkFirst',
|
handler: 'NetworkFirst',
|
||||||
options: { cacheName: 'api-cache' },
|
options: {
|
||||||
|
cacheName: 'api-cache',
|
||||||
|
networkTimeoutSeconds: 5,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user