Commit e6adddbf authored by Vignesh Mohankumar's avatar Vignesh Mohankumar Committed by GitHub

refactor: return onDemandEntries instead of mediaURLs (#6514)

* refactor: return onDemandEntries instead of mediaURLs

* lint

* fix test
parent 0050b1e1
...@@ -18,14 +18,12 @@ self.skipWaiting() ...@@ -18,14 +18,12 @@ self.skipWaiting()
// This must be done before setting up workbox-precaching, so that it takes precedence. // This must be done before setting up workbox-precaching, so that it takes precedence.
registerRoute(new DocumentRoute()) registerRoute(new DocumentRoute())
// Splits entries into: const { onDemandEntries, precacheEntries } = groupEntries(self.__WB_MANIFEST)
// - mediaURLs: loaded on-demand const onDemandURLs = onDemandEntries.map((entry) => (typeof entry === 'string' ? entry : entry.url))
// - precacheEntries
const { mediaURLs, precacheEntries } = groupEntries(self.__WB_MANIFEST)
registerRoute( registerRoute(
new Route( new Route(
({ url }) => mediaURLs.includes('.' + url.pathname), ({ url }) => onDemandURLs.includes('.' + url.pathname),
new CacheFirst({ new CacheFirst({
cacheName: 'media', cacheName: 'media',
plugins: [new ExpirationPlugin({ maxEntries: 16 })], plugins: [new ExpirationPlugin({ maxEntries: 16 })],
...@@ -33,5 +31,4 @@ registerRoute( ...@@ -33,5 +31,4 @@ registerRoute(
) )
) )
// Precaches entries and registers a default route to serve them.
precacheAndRoute(precacheEntries) precacheAndRoute(precacheEntries)
import { groupEntries } from './utils' import { groupEntries } from './utils'
describe('groupEntries', () => { describe('groupEntries', () => {
test('splits resources into mediaURLs and precacheEntries', () => { test('splits resources into onDemandEntries and precacheEntries', () => {
const resources = [ const resources = [
'./static/whitepaper.pdf', './static/whitepaper.pdf',
{ url: './static/js/main.js', revision: 'abc123' }, { url: './static/js/main.js', revision: 'abc123' },
...@@ -12,7 +12,7 @@ describe('groupEntries', () => { ...@@ -12,7 +12,7 @@ describe('groupEntries', () => {
const result = groupEntries(resources) const result = groupEntries(resources)
expect(result).toEqual({ expect(result).toEqual({
mediaURLs: ['./static/whitepaper.pdf', './static/media/image.jpg'], onDemandEntries: ['./static/whitepaper.pdf', { url: './static/media/image.jpg', revision: 'ghi789' }],
precacheEntries: [ precacheEntries: [
{ url: './static/js/main.js', revision: 'abc123' }, { url: './static/js/main.js', revision: 'abc123' },
{ url: './static/css/styles.css', revision: 'def456' }, { url: './static/css/styles.css', revision: 'def456' },
......
...@@ -16,18 +16,16 @@ export function isDevelopment() { ...@@ -16,18 +16,16 @@ export function isDevelopment() {
) )
} }
type GroupedEntries = { mediaURLs: string[]; precacheEntries: PrecacheEntry[] } type GroupedEntries = { onDemandEntries: (string | PrecacheEntry)[]; precacheEntries: PrecacheEntry[] }
export function groupEntries(entries: (string | PrecacheEntry)[]): GroupedEntries { export function groupEntries(entries: (string | PrecacheEntry)[]): GroupedEntries {
return entries.reduce<GroupedEntries>( return entries.reduce<GroupedEntries>(
({ mediaURLs, precacheEntries }, entry) => { ({ onDemandEntries, precacheEntries }, entry) => {
if (typeof entry === 'string') { if (typeof entry === 'string' || entry.url.includes('/media/')) {
return { precacheEntries, mediaURLs: [...mediaURLs, entry] } return { precacheEntries, onDemandEntries: [...onDemandEntries, entry] }
} else if (entry.url.includes('/media/')) {
return { precacheEntries, mediaURLs: [...mediaURLs, entry.url] }
} else { } else {
return { precacheEntries: [...precacheEntries, entry], mediaURLs } return { precacheEntries: [...precacheEntries, entry], onDemandEntries }
} }
}, },
{ mediaURLs: [], precacheEntries: [] } { onDemandEntries: [], precacheEntries: [] }
) )
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment