({ fallbacks, basedir, id, pageExtensions })
| 7 | const TerserPlugin = require('terser-webpack-plugin') |
| 8 | |
| 9 | const getFallbackEnvs = ({ fallbacks, basedir, id, pageExtensions }) => { |
| 10 | let { document, data } = fallbacks |
| 11 | |
| 12 | if (!document) { |
| 13 | let pagesDir = undefined |
| 14 | |
| 15 | if (fs.existsSync(path.join(basedir, 'pages'))) { |
| 16 | pagesDir = path.join(basedir, 'pages') |
| 17 | } else if (fs.existsSync(path.join(basedir, 'src', 'pages'))) { |
| 18 | pagesDir = path.join(basedir, 'src', 'pages') |
| 19 | } |
| 20 | |
| 21 | if (!pagesDir) return |
| 22 | |
| 23 | const offlines = pageExtensions |
| 24 | .map(ext => path.join(pagesDir, `_offline.${ext}`)) |
| 25 | .filter(entry => fs.existsSync(entry)) |
| 26 | if (offlines.length === 1) { |
| 27 | document = '/_offline' |
| 28 | } |
| 29 | } |
| 30 | |
| 31 | if (data && data.endsWith('.json')) { |
| 32 | data = path.posix.join('/_next/data', id, data) |
| 33 | } |
| 34 | |
| 35 | const envs = { |
| 36 | __PWA_FALLBACK_DOCUMENT__: document || false, |
| 37 | __PWA_FALLBACK_IMAGE__: fallbacks.image || false, |
| 38 | __PWA_FALLBACK_AUDIO__: fallbacks.audio || false, |
| 39 | __PWA_FALLBACK_VIDEO__: fallbacks.video || false, |
| 40 | __PWA_FALLBACK_FONT__: fallbacks.font || false, |
| 41 | __PWA_FALLBACK_DATA__: data || false |
| 42 | } |
| 43 | |
| 44 | if (Object.values(envs).filter(v => !!v).length === 0) return |
| 45 | |
| 46 | console.log('> [PWA] Fallback to precache routes when fetch failed from cache or network:') |
| 47 | if (envs.__PWA_FALLBACK_DOCUMENT__) console.log(`> [PWA] document (page): ${envs.__PWA_FALLBACK_DOCUMENT__}`) |
| 48 | if (envs.__PWA_FALLBACK_IMAGE__) console.log(`> [PWA] image: ${envs.__PWA_FALLBACK_IMAGE__}`) |
| 49 | if (envs.__PWA_FALLBACK_AUDIO__) console.log(`> [PWA] audio: ${envs.__PWA_FALLBACK_AUDIO__}`) |
| 50 | if (envs.__PWA_FALLBACK_VIDEO__) console.log(`> [PWA] video: ${envs.__PWA_FALLBACK_VIDEO__}`) |
| 51 | if (envs.__PWA_FALLBACK_FONT__) console.log(`> [PWA] font: ${envs.__PWA_FALLBACK_FONT__}`) |
| 52 | if (envs.__PWA_FALLBACK_DATA__) console.log(`> [PWA] data (/_next/data/**/*.json): ${envs.__PWA_FALLBACK_DATA__}`) |
| 53 | |
| 54 | return envs |
| 55 | } |
| 56 | |
| 57 | const buildFallbackWorker = ({ id, fallbacks, basedir, destdir, minify, pageExtensions }) => { |
| 58 | const envs = getFallbackEnvs({ fallbacks, basedir, id, pageExtensions }) |
no outgoing calls
no test coverage detected
searching dependent graphs…