text: import { registerRoute } from 'workbox-routing';
  import {
    NetworkFirst,
    StaleWhileRevalidate,
    CacheFirst,
  } from 'workbox-strategies';
  import { ExpirationPlugin } from 'workbox-expiration';
  import { CacheableResponsePlugin } from 'workbox-cacheable-response';
  import * as googleAnalytics from 'workbox-google-analytics';
  
  googleAnalytics.initialize();
  
  registerRoute(
    ({ request }) => request.mode === 'navigate',
    new NetworkFirst({
      cacheName: 'index',
      plugins: [
        new CacheableResponsePlugin({
          statuses: [200],
        }),
      ],
    })
  );
  
  registerRoute(
    ({ request }) =>
      request.destination === 'style' || request.destination === 'script',
    new StaleWhileRevalidate({
      cacheName: 'static-resources',
      plugins: [
        new CacheableResponsePlugin({
          statuses: [200],
        }),
        new ExpirationPlugin({
          maxAgeSeconds: 30 * 24 * 60 * 60, // 30 Days
          purgeOnQuotaError: true,
        }),
      ],
    })
  );
  
  registerRoute(
    ({ request }) => request.destination === 'image',
    new CacheFirst({
      cacheName: 'images',
      plugins: [
        new ExpirationPlugin({
          maxEntries: 60,
          maxAgeSeconds: 30 * 24 * 60 * 60, // 30 Days
          purgeOnQuotaError: true,
        }),
        new CacheableResponsePlugin({
          statuses: [0, 200],
        }),
      ],
    })
  );
  
  registerRoute(
    /\/.*\.(?:json)$/,
    new StaleWhileRevalidate({
      cacheName: 'data',
      plugins: [
        new ExpirationPlugin({
          maxAgeSeconds: 30 * 24 * 60 * 60, // 30 Days
          purgeOnQuotaError: true,
        }),
        new CacheableResponsePlugin({
          statuses: [200],
        }),
      ],
    })
  );
  
  registerRoute(
    /.*api\.mapbox\.com\/fonts/,
    new CacheFirst({
      cacheName: 'mapbox-fonts',
      plugins: [
        new ExpirationPlugin({
          maxEntries: 10,
          purgeOnQuotaError: true,
        }),
        new CacheableResponsePlugin({
          statuses: [200],
        }),
      ],
    })
  );
  
  registerRoute(
    /.*(?:tiles\.mapbox|api\.mapbox)\.com.*$/,
    new StaleWhileRevalidate({
      cacheName: 'mapbox',
      plugins: [
        new ExpirationPlugin({
          maxAgeSeconds: 30 * 24 * 60 * 60, // 30 Days
          purgeOnQuotaError: true,
        }),
        new CacheableResponsePlugin({
          statuses: [200],
        }),
      ],
    })
  );
  