create-hydro-app
Version:
Create hydro apps with no build configuration.
58 lines (54 loc) • 1.4 kB
text/typescript
import { registerRoute } from "workbox-routing";
import {
NetworkFirst,
StaleWhileRevalidate,
CacheFirst,
} from "workbox-strategies";
import { CacheableResponsePlugin } from "workbox-cacheable-response";
import { ExpirationPlugin } from "workbox-expiration";
// Cache documents with NetworkFirst
registerRoute(
({ request }) =>
request.mode === "navigate" ||
(request.destination === "" && request.url.endsWith("/")),
new NetworkFirst({
cacheName: "pages",
plugins: [
new CacheableResponsePlugin({
statuses: [200],
}),
],
})
);
// Cache assets with StaleWhileRevalidate
registerRoute(
({ request }) =>
request.url.includes(".js") ||
request.destination === "style" ||
request.destination === "script" ||
request.destination === "worker",
new StaleWhileRevalidate({
cacheName: "assets",
plugins: [
new CacheableResponsePlugin({
statuses: [200],
}),
],
})
);
// Cache images with CacheFirst and 7 days expiration time
registerRoute(
({ request }) => request.destination === "image",
new CacheFirst({
cacheName: "images",
plugins: [
new CacheableResponsePlugin({
statuses: [200],
}),
new ExpirationPlugin({
maxEntries: 50,
maxAgeSeconds: 60 * 60 * 24 * 7,
}),
],
})
);