UNPKG

workbox-build

Version:

A module that integrates into your build process, helping you generate a manifest of local files that workbox-sw should precache.

89 lines (84 loc) 3.35 kB
/* Copyright 2019 Google LLC Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ const joi = require('@hapi/joi'); const defaults = require('../defaults'); const regExpObject = require('../objects/reg-exp'); module.exports = { babelPresetEnvTargets: joi.array().items(joi.string()) .default(defaults.babelPresetEnvTargets), cacheId: joi.string(), cleanupOutdatedCaches: joi.boolean().default(defaults.cleanupOutdatedCaches), clientsClaim: joi.boolean().default(defaults.clientsClaim), directoryIndex: joi.string(), disableDevLogs: joi.boolean().default(defaults.disableDevLogs), ignoreURLParametersMatching: joi.array().items(regExpObject), importScripts: joi.array().items(joi.string()), inlineWorkboxRuntime: joi.boolean().default(defaults.inlineWorkboxRuntime), mode: joi.string().default(process.env.NODE_ENV || defaults.mode), navigateFallback: joi.string().default(defaults.navigateFallback), navigateFallbackAllowlist: joi.array().items(regExpObject), navigateFallbackBlacklist: joi.forbidden().error(new Error( 'navigateFallbackBlacklist has been renamed navigateFallbackDenylist.')), navigateFallbackDenylist: joi.array().items(regExpObject), navigateFallbackWhitelist: joi.forbidden().error(new Error( 'navigateFallbackWhitelist has been renamed navigateFallbackAllowlist.')), navigationPreload: joi.boolean().default(defaults.navigationPreload), offlineGoogleAnalytics: joi.alternatives().try(joi.boolean(), joi.object()) .default(defaults.offlineGoogleAnalytics), runtimeCaching: joi.array().items(joi.object().keys({ method: joi.string().valid( 'DELETE', 'GET', 'HEAD', 'PATCH', 'POST', 'PUT', ), urlPattern: [regExpObject, joi.string(), joi.func()], handler: [ joi.func(), joi.string().valid( 'CacheFirst', 'CacheOnly', 'NetworkFirst', 'NetworkOnly', 'StaleWhileRevalidate'), ], options: joi.object().keys({ backgroundSync: joi.object().keys({ name: joi.string().required(), options: joi.object(), }), broadcastUpdate: joi.object().keys({ channelName: joi.string().required(), options: joi.object(), }), cacheableResponse: joi.object().keys({ statuses: joi.array().items(joi.number().min(0).max(599)), headers: joi.object(), }).or('statuses', 'headers'), cacheName: joi.string(), expiration: joi.object().keys({ maxEntries: joi.number().min(1), maxAgeSeconds: joi.number().min(1), purgeOnQuotaError: joi.boolean().default(defaults.purgeOnQuotaError), }).or('maxEntries', 'maxAgeSeconds'), networkTimeoutSeconds: joi.number().min(1), plugins: joi.array().items(joi.object()), precacheFallback: joi.object().keys({ fallbackURL: joi.string().required(), }), fetchOptions: joi.object(), matchOptions: joi.object(), }).with('expiration', 'cacheName'), })).when('navigationPreload', { is: true, then: joi.required('runtimeCaching'), }), skipWaiting: joi.boolean().default(defaults.skipWaiting), sourcemap: joi.boolean().default(defaults.sourcemap), };