ui: Remove PWA navigate fallback to prevent caching API endpoint requests (#25174)
This commit is contained in:
@@ -288,9 +288,7 @@ export const API_CACHING_PATTERNS = {
|
|||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
// SvelteKit PWA plugin options
|
// SvelteKit PWA plugin options
|
||||||
export const PWA_KIT_OPTIONS = {
|
export const PWA_KIT_OPTIONS = {} as const;
|
||||||
NAVIGATE_FALLBACK: './'
|
|
||||||
} as const;
|
|
||||||
|
|
||||||
export const APPLE_META_TAGS = {
|
export const APPLE_META_TAGS = {
|
||||||
MOBILE_WEB_APP_CAPABLE: { name: 'apple-mobile-web-app-capable', content: 'yes' },
|
MOBILE_WEB_APP_CAPABLE: { name: 'apple-mobile-web-app-capable', content: 'yes' },
|
||||||
@@ -322,6 +320,14 @@ export const SVELTEKIT_PWA_OPTIONS: SvelteKitPWAOptions = {
|
|||||||
globIgnores: GLOB_IGNORES,
|
globIgnores: GLOB_IGNORES,
|
||||||
maximumFileSizeToCacheInBytes: CACHE_SETTINGS.MAX_FILE_SIZE_BYTES,
|
maximumFileSizeToCacheInBytes: CACHE_SETTINGS.MAX_FILE_SIZE_BYTES,
|
||||||
|
|
||||||
|
// Prevent @vite-pwa/sveltekit from auto-adding a NavigationRoute by
|
||||||
|
// setting navigateFallback to empty string. This keeps the service
|
||||||
|
// worker from intercepting direct browser navigation to server API
|
||||||
|
// endpoints (e.g. /slots, /models, /v1/models) which should return
|
||||||
|
// JSON, not the SPA HTML shell. The server's own static-file fallback
|
||||||
|
// handles non-API navigation to index.html for the SPA router.
|
||||||
|
navigateFallback: '',
|
||||||
|
|
||||||
// Runtime caching for API calls - use NetworkFirst so APIs are always fresh
|
// Runtime caching for API calls - use NetworkFirst so APIs are always fresh
|
||||||
runtimeCaching: [
|
runtimeCaching: [
|
||||||
{
|
{
|
||||||
@@ -351,10 +357,7 @@ export const SVELTEKIT_PWA_OPTIONS: SvelteKitPWAOptions = {
|
|||||||
|
|
||||||
devOptions: {
|
devOptions: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
suppressWarnings: true,
|
suppressWarnings: true
|
||||||
// Use PWA_KIT_OPTIONS.NAVIGATE_FALLBACK to match production SW behaviour
|
|
||||||
// (navigateFallback defaults to the configured base path, which is '/' for this SPA).
|
|
||||||
navigateFallback: PWA_KIT_OPTIONS.NAVIGATE_FALLBACK
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// SvelteKit-specific options
|
// SvelteKit-specific options
|
||||||
|
|||||||
@@ -43,7 +43,10 @@ test.describe('PWA Service Worker', () => {
|
|||||||
expect(swContent).toMatch(/"_app\/immutable\/assets\/bundle\.[a-zA-Z0-9_-]+\.css"/);
|
expect(swContent).toMatch(/"_app\/immutable\/assets\/bundle\.[a-zA-Z0-9_-]+\.css"/);
|
||||||
expect(swContent).toMatch(/"manifest\.webmanifest"/);
|
expect(swContent).toMatch(/"manifest\.webmanifest"/);
|
||||||
expect(swContent).toMatch(/"_app\/version\.json"/);
|
expect(swContent).toMatch(/"_app\/version\.json"/);
|
||||||
expect(swContent).toMatch(/NavigationRoute/);
|
// NavigationRoute is intentionally absent — server API endpoints
|
||||||
|
// (e.g. /slots, /models) must not be intercepted by the PWA and
|
||||||
|
// should return JSON directly from the server.
|
||||||
|
expect(swContent).not.toMatch(/NavigationRoute/);
|
||||||
expect(swContent).toMatch(/api-cache/);
|
expect(swContent).toMatch(/api-cache/);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -108,9 +108,11 @@ describe('PWA Build Output', () => {
|
|||||||
expect(swContent).toMatch(/"manifest\.webmanifest"/);
|
expect(swContent).toMatch(/"manifest\.webmanifest"/);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('has navigation route registered', () => {
|
it('no navigation route — API endpoints bypass PWA', () => {
|
||||||
expect(swContent).toBeTruthy();
|
expect(swContent).toBeTruthy();
|
||||||
expect(swContent).toMatch(/NavigationRoute/);
|
// NavigationRoute is intentionally absent so direct browser
|
||||||
|
// navigation to server API endpoints returns JSON, not HTML.
|
||||||
|
expect(swContent).not.toMatch(/NavigationRoute/);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('has runtime caching for API routes', () => {
|
it('has runtime caching for API routes', () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user