12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- "use strict";
- /*
- 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),
- 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()),
- fetchOptions: joi.object(),
- matchOptions: joi.object()
- }).with('expiration', 'cacheName')
- }).requiredKeys('urlPattern', 'handler')).when('navigationPreload', {
- is: true,
- then: joi.required()
- }),
- skipWaiting: joi.boolean().default(defaults.skipWaiting),
- sourcemap: joi.boolean().default(defaults.sourcemap)
- };
|