-
Notifications
You must be signed in to change notification settings - Fork 1
/
sw-esm.js.map
1 lines (1 loc) · 166 KB
/
sw-esm.js.map
1
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///../node_modules/workbox-cacheable-response/_version.js","webpack:///../node_modules/workbox-routing/registerRoute.js","webpack:///../node_modules/workbox-core/_private/waitUntil.js","webpack:///../node_modules/workbox-precaching/utils/createCacheKey.js","webpack:///../node_modules/workbox-core/copyResponse.js","webpack:///../node_modules/workbox-core/_private/canConstructResponseFromBodyStream.js","webpack:///../node_modules/workbox-core/_private/cacheMatchIgnoreParams.js","webpack:///../node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js","webpack:///../node_modules/workbox-core/_private/timeout.js","webpack:///../node_modules/workbox-strategies/StrategyHandler.js","webpack:///../node_modules/workbox-precaching/utils/generateURLVariations.js","webpack:///../node_modules/workbox-precaching/utils/removeIgnoredSearchParams.js","webpack:///../node_modules/workbox-precaching/getCacheKeyForURL.js","webpack:///../node_modules/workbox-precaching/precacheAndRoute.js","webpack:///../node_modules/workbox-precaching/precache.js","webpack:///../node_modules/workbox-precaching/addRoute.js","webpack:///../node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js","webpack:///../node_modules/workbox-core/models/messages/messageGenerator.js","webpack:///../node_modules/workbox-core/_private/WorkboxError.js","webpack:///../node_modules/workbox-routing/utils/normalizeHandler.js","webpack:///../node_modules/workbox-routing/Route.js","webpack:///../node_modules/workbox-routing/utils/constants.js","webpack:///../node_modules/workbox-routing/RegExpRoute.js","webpack:///../node_modules/workbox-core/_private/getFriendlyURL.js","webpack:///../node_modules/workbox-routing/Router.js","webpack:///../node_modules/workbox-core/_private/cacheNames.js","webpack:///../node_modules/workbox-precaching/utils/PrecacheInstallReportPlugin.js","webpack:///../node_modules/workbox-precaching/utils/PrecacheCacheKeyPlugin.js","webpack:///../node_modules/workbox-core/_private/Deferred.js","webpack:///../node_modules/workbox-core/models/quotaErrorCallbacks.js","webpack:///../node_modules/workbox-strategies/Strategy.js","webpack:///../node_modules/workbox-precaching/PrecacheStrategy.js","webpack:///../node_modules/workbox-precaching/PrecacheController.js","webpack:///../node_modules/workbox-precaching/utils/getOrCreatePrecacheController.js","webpack:///../node_modules/workbox-strategies/plugins/cacheOkAndOpaquePlugin.js","webpack:///../node_modules/workbox-routing/setCatchHandler.js","webpack:///../node_modules/preact-cli/sw/index.js","webpack:///../node_modules/workbox-precaching/PrecacheRoute.js","webpack:///../node_modules/preact-cli/sw/utils.js","webpack:///../node_modules/workbox-strategies/NetworkFirst.js","webpack:///../node_modules/workbox-core/cacheNames.js","webpack:///../node_modules/workbox-cacheable-response/CacheableResponse.js","webpack:///../node_modules/workbox-cacheable-response/CacheableResponsePlugin.js","webpack:///../node_modules/preact-cli/sw/constants.js","webpack:///../node_modules/workbox-precaching/_version.js","webpack:///../node_modules/workbox-routing/_version.js","webpack:///../node_modules/workbox-strategies/_version.js","webpack:///../node_modules/workbox-core/_version.js"],"names":["__webpack_require__","moduleId","installedModules","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","self","_","e","registerRoute","capture","handler","method","route","captureUrl","URL","location","href","Route","_ref","url","RegExp","RegExpRoute","WorkboxError","moduleName","funcName","paramName","getOrCreateDefaultRouter","waitUntil","event","asyncFn","returnPromise","createCacheKey","entry","urlObject","cacheKey","revision","cacheKeyURL","originalURL","searchParams","set","REVISION_SEARCH_PARAM","_copyResponse","response","modifier","origin","clonedResponse","clone","responseInit","headers","Headers","status","statusText","modifiedResponseInit","body","undefined","supportStatus","testResponse","Response","error","canConstructResponseFromBodyStream","blob","apply","arguments","stripParams","fullURL","ignoreParams","_step","strippedURL","_iterator","_createForOfIteratorHelper","done","delete","err","f","_cacheMatchIgnoreParams","cache","request","matchOptions","strippedRequestURL","match","_step2","keysOptions","_extends","ignoreSearch","_iterator2","keys","_executeQuotaErrorCallbacks","quotaErrorCallbacks","callback","timeout","ms","Promise","resolve","setTimeout","toRequest","input","Request","generateURLVariations","length","_ref$ignoreURLParamet","ignoreURLParametersMatching","_ref$directoryIndex","directoryIndex","_ref$cleanURLs","cleanURLs","urlManipulation","hash","urlWithoutIgnoredParams","_loop","_arr","_i","some","regExp","test","_toConsumableArray","removeIgnoredSearchParams","pathname","endsWith","directoryURL","cleanURL","urlToAttempt","getCacheKeyForURL","getOrCreatePrecacheController","precacheAndRoute","entries","options","precache","precacheController","PrecacheRoute","addRoute","defaultRouter","messageGenerator","code","msg","_len","args","Array","_key","concat","JSON","stringify","_Error","errorCode","details","_this","message","_super","_inherits","_wrapNativeSuper","Error","normalizeHandler","_typeof","handle","_classCallCheck","this","catchHandler","_Route","result","exec","index","slice","_createSuper","getFriendlyURL","String","replace","Router","_routes","Map","_defaultHandlerMap","addEventListener","responsePromise","handleRequest","respondWith","_this2","data","type","requestPromises","all","payload","urlsToCache","map","_construct","ports","then","postMessage","_this3","protocol","startsWith","sameOrigin","_this$findMatchingRou","findMatchingRoute","params","has","reject","_catchHandler","catch","_ref2","catchErr","_x","_ref3","matchResult","isArray","constructor","push","routeIndex","indexOf","splice","addFetchListener","addCacheListener","_cacheNameDetails","googleAnalytics","prefix","runtime","suffix","registration","scope","_createCacheName","cacheName","filter","join","cacheNames","updateDetails","fn","_Object$keys","eachCacheNameDetail","getGoogleAnalyticsName","userCacheName","getPrecacheName","getPrefix","getRuntimeName","getSuffix","PrecacheInstallReportPlugin","_createClass","updatedURLs","notUpdatedURLs","handlerWillStart","_asyncToGenerator","state","originalRequest","cachedResponseWillBeUsed","_ref4","cachedResponse","_x2","PrecacheCacheKeyPlugin","cacheKeyWillBeUsed","_precacheController","Deferred","promise","Set","StrategyHandler","strategy","_cacheKeys","_strategy","_handlerDeferred","_extendLifetimePromises","_plugins","plugins","_pluginStateMap","_ensureResponseSafeToCache2","_doneWaiting","_runCallbacks","_getCacheKey","_cachePut","_cacheMatch","_fetchAndCachePut","_fetch","fetch","toString","FetchEvent","preloadResponse","possiblePreloadResponse","hasCallback","iterateCallbacks","cb","thrownErrorMessage","pluginFilteredRequest","fetchResponse","fetchOptions","_step3","_iterator3","runCallbacks","responseClone","cachePut","_x3","_this$_strategy","effectiveRequest","getCacheKey","multiMatchOptions","caches","_step4","_iterator4","_x4","responseToCache","_ensureResponseSafeToCache","_this$_strategy2","open","hasCacheUpdateCallback","oldResponse","cacheMatchIgnoreParams","put","executeQuotaErrorCallbacks","_step5","_iterator5","newResponse","_x5","_x6","_step6","_iterator6","_x7","_x8","_step7","_iterator7","param","_step8","_iterator8","_x9","_x10","_step9","_iterator9","plugin","statefulParam","shift","_step10","pluginsUsed","_iterator10","_x11","Strategy","_awaitComplete2","_getResponse2","_slicedToArray","handleAll","responseDone","_getResponse","_awaitComplete","_handle","doneWaiting","waitUntilError","destroy","PrecacheStrategy","_Strategy","_fallbackToNetwork","fallbackToNetwork","copyRedirectedCacheableResponsesPlugin","_handleInstall2","_handleFetch2","_handle2","cacheMatch","_handleInstall","_handleFetch","integrityInManifest","integrity","integrityInRequest","noIntegrityConflict","_useDefaultCacheabilityPluginIfNeeded","defaultPluginIndex","cacheWillUpdatePluginCount","_step$value","defaultPrecacheCacheabilityPlugin","cacheWillUpdate","redirected","copyResponse","_cacheWillUpdate","precachingOptions","PrecacheController","_ref$plugins","_ref$fallbackToNetwor","_urlsToCacheKeys","_urlsToCacheModes","_cacheKeysToIntegrities","install","activate","_matchPrecache","addToCacheList","_installAndActiveListenersAdded","urlsToWarnAbout","_createCacheKey","cacheMode","firstEntry","secondEntry","warningMessage","console","warn","installReportPlugin","_step2$value","credentials","currentlyCachedRequests","expectedCacheKeys","values","deletedURLs","urlsToCacheKeys","getURLsToCacheKeys","getIntegrityForCacheKey","isNav","cacheOkAndOpaquePlugin","NetworkFirst","unshift","_networkTimeoutSeconds","networkTimeoutSeconds","_getNetworkPromise2","timeoutId","logs","promises","_this$_getTimeoutProm","_getTimeoutPromise","id","networkPromise","_getNetworkPromise","race","timeoutPromise","onNetworkTimeout","fetchAndCachePut","fetchError","clearTimeout","_cacheNames","CacheableResponse","config","_statuses","statuses","_headers","cacheable","includes","headerName","CacheableResponsePlugin","_cacheableResponse","isResponseCacheable","PRECACHING_OPTIONS","setCatchHandler","__WB_MANIFEST"],"mappings":"aAIE,SAAS,EAAoB,GAG5B,GAAG,EAAiB,GACnB,OAAO,EAAiB,GAAU,QAGnC,IAAI,EAAS,EAAiB,GAAY,CACzC,EAAG,EACH,GAAG,EACH,QAAS,CAAC,GAUX,OANA,EAAQ,GAAU,KAAK,EAAO,QAAS,EAAQ,EAAO,QAAS,GAG/D,EAAO,GAAI,EAGJ,EAAO,OACf,CAxBA,IAAI,EAAmB,CAAC,EA4BxB,EAAoB,EAAI,EAGxB,EAAoB,EAAI,EAGxB,EAAoB,EAAI,SAAS,EAAS,EAAM,GAC3C,EAAoB,EAAE,EAAS,IAClC,OAAO,eAAe,EAAS,EAAM,CAAE,YAAY,EAAM,IAAK,GAEhE,EAGA,EAAoB,EAAI,SAAS,GACX,oBAAX,QAA0B,OAAO,aAC1C,OAAO,eAAe,EAAS,OAAO,YAAa,CAAE,MAAO,WAE7D,OAAO,eAAe,EAAS,aAAc,CAAE,OAAO,GACvD,EAOA,EAAoB,EAAI,SAAS,EAAO,GAEvC,GADU,EAAP,IAAU,EAAQ,EAAoB,IAC/B,EAAP,EAAU,OAAO,EACpB,GAAW,EAAP,GAA8B,iBAAV,GAAsB,GAAS,EAAM,WAAY,OAAO,EAChF,IAAI,EAAK,OAAO,OAAO,MAGvB,GAFA,EAAoB,EAAE,GACtB,OAAO,eAAe,EAAI,UAAW,CAAE,YAAY,EAAM,MAAO,IACtD,EAAP,GAA4B,iBAAT,EAAmB,IAAI,IAAI,KAAO,EAAO,EAAoB,EAAE,EAAI,EAAK,SAAS,GAAO,OAAO,EAAM,EAAM,EAAE,KAAK,KAAM,IAC9I,OAAO,CACR,EAGA,EAAoB,EAAI,SAAS,GAChC,IAAI,EAAS,GAAU,EAAO,WAC7B,WAAwB,OAAO,EAAgB,OAAG,EAClD,WAA8B,OAAO,CAAQ,EAE9C,OADA,EAAoB,EAAE,EAAQ,IAAK,GAC5B,CACR,EAGA,EAAoB,EAAI,SAAS,EAAQ,GAAY,OAAO,OAAO,UAAU,eAAe,KAAK,EAAQ,EAAW,EAGpH,EAAoB,EAAI,KAIjB,EAAoB,EAAoB,EAAI,yCChFrD,IACI,KAAK,qCAAuC,GAChD,CACA,MAAO,GAAK,o2NC0BZ,SAAS,EAAc,EAAS,EAAS,GACrC,IAAI,EACJ,GAAuB,iBAAZ,EAAsB,CAC7B,IAAM,EAAa,IAAI,IAAI,EAAS,SAAS,MAkC7C,EAAQ,IAAI,IAZU,SAAH,GASf,OATwB,EAAH,IASV,OAAS,EAAW,IACnC,GAEiC,EAAS,EAC9C,MACK,GAAI,aAAmB,OAExB,EAAQ,IAAI,GAAY,EAAS,EAAS,QAEzC,GAAuB,mBAAZ,EAEZ,EAAQ,IAAI,GAAM,EAAS,EAAS,OAEnC,MAAI,aAAmB,IAIxB,MAAM,IAAI,GAAa,yBAA0B,CAC7C,WAAY,kBACZ,SAAU,gBACV,UAAW,YANf,EAAQ,CAQZ,CAGA,OAFsB,KACR,cAAc,GACrB,CACX,CC3EA,SAAS,EAAU,EAAO,GACtB,IAAM,EAAgB,IAEtB,OADA,EAAM,UAAU,GACT,CACX,CCAO,SAAS,EAAe,GAC3B,IAAK,EACD,MAAM,IAAI,GAAa,oCAAqC,CAAE,UAIlE,GAAqB,iBAAV,EAAoB,CAC3B,IAAM,EAAY,IAAI,IAAI,EAAO,SAAS,MAC1C,MAAO,CACH,SAAU,EAAU,KACpB,IAAK,EAAU,KAEvB,CACA,IAAQ,EAAkB,EAAlB,SAAU,EAAQ,EAAR,IAClB,IAAK,EACD,MAAM,IAAI,GAAa,oCAAqC,CAAE,UAIlE,IAAK,EAAU,CACX,IAAM,EAAY,IAAI,IAAI,EAAK,SAAS,MACxC,MAAO,CACH,SAAU,EAAU,KACpB,IAAK,EAAU,KAEvB,CAGA,IAAM,EAAc,IAAI,IAAI,EAAK,SAAS,MACpC,EAAc,IAAI,IAAI,EAAK,SAAS,MAE1C,OADA,EAAY,aAAa,IAAI,GAAuB,GAC7C,CACH,SAAU,EAAY,KACtB,IAAK,EAAY,KAEzB,qpEC1B2B,SAAA,UA0B1B,SA1BD,UAA4B,EAAU,GAClC,IAAI,EAAS,KAMb,GAJI,EAAS,MAET,EADoB,IAAI,IAAI,EAAS,KAChB,QAErB,IAAW,KAAK,SAAS,OACzB,MAAM,IAAI,GAAa,6BAA8B,CAAE,WAE3D,IAAM,EAAiB,EAAS,QAE1B,EAAe,CACjB,QAAS,IAAI,QAAQ,EAAe,SACpC,OAAQ,EAAe,OACvB,WAAY,EAAe,YAGzB,EAAuB,EAAW,EAAS,GAAgB,EAI3D,ECjCV,WACI,QAAsB,IAAlB,GAA6B,CAC7B,IAAM,EAAe,IAAI,SAAS,IAClC,GAAI,SAAU,EACV,IACI,IAAI,SAAS,EAAa,MAC1B,IAAgB,CACpB,CACA,MAAO,GACH,IAAgB,CACpB,CAEJ,IAAgB,CACpB,CACA,OAAO,EACX,CDkBiB,GACP,EAAe,WACT,EAAe,OAC3B,OAAO,IAAI,SAAS,EAAM,EAC9B,EA1B2B,gLA0B1B,EAAA,MAAA,KAAA,UAAA,k3CEhDD,SAAS,EAAY,EAAS,GAC1B,IACgC,EAD1B,EAAc,IAAI,IAAI,GAAS,EAAA,EACjB,GAAY,IAAhC,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAAkC,CAC9B,EAAY,aAAa,OADb,EAAA,MAEhB,CAAC,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CACD,OAAO,EAAY,IACvB,CAaqC,SAAA,UAgBpC,SAhBD,UAAsC,EAAO,EAAS,EAAc,GAChE,IAAM,EAAqB,EAAY,EAAQ,IAAK,GAEpD,GAAI,EAAQ,MAAQ,EAChB,OAAO,EAAM,MAAM,EAAS,GAGhC,IAEgC,EAF1B,EAAc,EAAc,EAAc,CAAC,EAAG,GAAe,CAAE,cAAc,IAC1B,EAAA,QAAjC,EAAM,KAAK,EAAS,IACZ,IAAhC,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAAkC,KAAvB,EAAQ,EAAA,MAEf,GAAI,IADwB,EAAY,EAAS,IAAK,GAElD,OAAO,EAAM,MAAM,EAAU,EAErC,CAAC,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CAEL,EAhBqC,gLAgBpC,EAAA,MAAA,KAAA,UAAA,i8DCzBwC,SAAA,UAcxC,SAdD,YAIK,IACyC,EADzC,EAAA,EACsB,IAAmB,IAA1C,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAA4C,KAAjC,EAAQ,EAAA,YACT,GAIV,CAAC,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CAIL,EAdyC,gLAcxC,EAAA,MAAA,KAAA,UAAA,CChBM,SAAS,GAAQ,GACpB,OAAO,IAAI,SAAQ,SAAC,GAAO,OAAK,WAAW,EAAS,EAAG,GAC3D,onFCDA,SAAS,GAAU,GACf,MAAwB,iBAAV,EAAqB,IAAI,QAAQ,GAAS,CAC5D,4sVCCO,SAAU,GAAsB,GAAG,IAAA,EAAA,UAAA,OAAA,QAAA,IAAA,UAAA,GAAA,UAAA,GAA+H,CAAC,EAAC,EAAA,EAA7H,mCAA2B,IAAA,EAAG,CAAC,QAAS,YAAW,EAAA,EAAA,EAAE,sBAAc,IAAA,EAAG,aAAY,EAAA,EAAA,EAAE,iBAAS,IAAA,GAAO,EAAE,EAAe,EAAf,gBAAe,mBAC/J,IAAM,EAAY,IAAI,IAAI,EAAK,SAAS,MACxC,EAAU,KAAO,SACX,EAAU,KAChB,IAAM,ECHH,SAAmC,GAGtC,IAHmF,IAAlC,EAA2B,UAAA,OAAA,QAAA,IAAA,UAAA,GAAA,UAAA,GAAG,GAAE,EAAA,WAG5E,IAAM,EAAS,EAAA,GACZ,EAA4B,MAAK,SAAC,GAAM,OAAK,EAAO,KAAK,EAAU,KACnE,EAAU,aAAa,OAAO,EAEtC,EAJA,EAAA,EAAA,EAAA,GAA4B,EAAU,aAAa,QAAM,EAAA,EAAA,OAAA,IAAA,IAKzD,OAAO,CACX,CDNoC,CAA0B,EAAW,GAErE,SADM,EAAwB,KAC1B,GAAkB,EAAwB,SAAS,SAAS,KAAM,CAClE,IAAM,EAAe,IAAI,IAAI,EAAwB,MACrD,EAAa,UAAY,QACnB,EAAa,IACvB,CACA,GAAI,EAAW,CACX,IAAM,EAAW,IAAI,IAAI,EAAwB,MACjD,EAAS,UAAY,cACf,EAAS,IACnB,CACA,GAAI,EAAiB,CACjB,IACyC,EADkB,EAAA,GAApC,EAAgB,CAAE,IAAK,KACL,IAAzC,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAA2C,KAAhC,EAAY,EAAA,YACb,EAAa,IACvB,CAAC,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CACL,CACJ,CAtBmK,EAsBlK,gsFEbD,SAAS,GAAkB,GAEvB,OAD2B,KACD,kBAAkB,EAChD,CCPA,SAAS,GAAiB,EAAS,ICInC,SAAkB,GACa,KACR,SAAS,EAChC,CDNI,CAAS,GEAb,SAAkB,GACd,IAAM,EAAqB,KAE3B,EADsB,IAAI,GAAc,EAAoB,GAEhE,CFHI,CAAS,EACb,4vHGlBI,GXDA,GYeS,GAdI,SAAC,GACC,IAAf,IAAI,EAAM,EAAK,EAAA,UAAA,OADQ,EAAI,IAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,EAAA,EAAA,IAAJ,EAAI,EAAA,GAAA,UAAA,GAK3B,OAHI,EAAK,OAAS,IACd,GAAO,OAAJ,OAAW,KAAK,UAAU,KAE1B,CACX,ECGM,GAAY,SAAA,GASd,SAAA,EAAY,EAAW,GAAS,IAAA,EACtB,EAAU,GAAiB,EAAW,GAGrB,OAFvB,EAAA,EAAA,KAAA,KAAM,IACD,KAAO,EACZ,EAAK,QAAU,EAAQ,CAC3B,uRAdc,CAAA,EAAA,GAAA,cAAA,KAAA,qJAcb,SAAA,oFAAA,CAda,CAcb,EAdsB,QCFd,cAAmB,SAAC,GAC7B,OAAI,GAA8B,WAAnB,EAAO,GASX,EAWA,CAAE,OAAQ,EAEzB,GCnBM,GAAK,WAYP,SAAA,EAAY,EAAO,GAAiC,IAAxB,EAAM,UAAA,OAAA,QAAA,IAAA,UAAA,GAAA,UAAA,GChBT,mGDgByB,CAAA,KAAA,GAc9C,KAAK,QAAU,GAAiB,GAChC,KAAK,MAAQ,EACb,KAAK,OAAS,CAClB,WAQC,SAPD,KAAA,EAAA,IAAA,kBAAA,MAKA,SAAgB,GACZ,KAAK,aAAe,GAAiB,EACzC,oFAAC,CAAA,CArCM,GEEL,GAAW,SAAA,GAcb,SAAA,EAAY,EAAQ,EAAS,gGAAQ,CAAA,KAAA,GAgC/B,OAAA,EAAA,KAAA,MAvBY,SAAH,GAAgB,IAAV,EAAG,EAAH,IACP,EAAS,EAAO,KAAK,EAAI,MAE/B,GAAK,IAOD,EAAI,SAAW,SAAS,QAA2B,IAAjB,EAAO,OAY7C,OAAO,EAAO,MAAM,EACxB,GACa,EAAS,EAC1B,uRAhDa,CAAA,EAAA,GAAA,UAAA,EAAA,EAAA,GAgDZ,SAAA,oFAAA,CAhDY,CAAS,ICdpB,GAAiB,SAAC,GAIpB,OAHe,IAAI,IAAI,OAAO,GAAM,SAAS,MAG/B,KAAK,QAAQ,IAAI,OAAO,IAAD,OAAK,SAAS,SAAW,GAClE,ECkBM,GAAM,WAIR,SAAA,iGAAc,CAAA,KAAA,GACV,KAAK,QAAU,IAAI,IACnB,KAAK,mBAAqB,IAAI,GAClC,WAgWC,SA/VD,IAAA,EAAA,IAAA,SAAA,IAKA,WACI,OAAO,KAAK,OAChB,GACA,CAAA,IAAA,mBAAA,MAIA,WAAmB,IAAA,EAAA,KAEf,KAAK,iBAAiB,SAAU,SAAC,GAC7B,IACM,EAAkB,EAAK,cAAc,CAAE,QADzB,EAAZ,QAC8C,UAClD,GACA,EAAM,YAAY,EAE1B,GACJ,GACA,CAAA,IAAA,mBAAA,MAsBA,WAAmB,IAAA,EAAA,KAEf,KAAK,iBAAiB,WAAY,SAAC,GAG/B,GAAI,EAAM,MAA4B,eAApB,EAAM,KAAK,KAAuB,CAMhD,IAAM,EAAkB,QAAQ,IAJZ,EAAM,KAAlB,QAIoC,YAAY,KAAI,SAAC,GACpC,iBAAV,IACP,EAAQ,CAAC,IAEb,IAAM,EAAO,EAAO,QAAO,EAAI,IAC/B,OAAO,EAAK,cAAc,CAAE,UAAS,SAIzC,KACA,EAAM,UAAU,GAEZ,EAAM,OAAS,EAAM,MAAM,IACtB,EAAgB,MAAK,kBAAM,EAAM,MAAM,GAAG,aAAY,EAAK,GAExE,CACJ,GACJ,GACA,CAAA,IAAA,gBAAA,MAYA,SAAA,GAAmC,IAAA,EAAA,KAAnB,EAAO,EAAP,QAAS,EAAK,EAAL,MASf,EAAM,IAAI,IAAI,EAAQ,IAAK,SAAS,MAC1C,GAAK,EAAI,SAAS,WAAW,QAA7B,CAMA,IAAM,EAAa,EAAI,SAAW,SAAS,OAC3C,EAA0B,KAAK,kBAAkB,CAC7C,QACA,UACA,aACA,QAJI,EAAM,EAAN,OAAQ,EAAK,EAAL,MAMZ,EAAU,GAAS,EAAM,QAevB,EAAS,EAAQ,OAQvB,IAPK,GAAW,KAAK,mBAAmB,IAAI,KAKxC,EAAU,KAAK,mBAAmB,IAAI,IAErC,EAAL,CAwBA,IAAI,EACJ,IACI,EAAkB,EAAQ,OAAO,CAAE,MAAK,UAAS,QAAO,UAC5D,CACA,MAAO,GACH,EAAkB,QAAQ,OAAO,EACrC,CAEA,IAAM,EAAe,GAAS,EAAM,aAuCpC,OAtCI,aAA2B,UAC1B,KAAK,eAAiB,KACvB,EAAkB,EAAgB,MAAK,iBAAA,KAAC,UAAO,GAE3C,GAAI,EAUA,IACI,aAAa,EAAa,OAAO,CAAE,MAAK,UAAS,QAAO,UAC5D,CACA,MAAO,GACC,aAAoB,QACpB,EAAM,EAEd,CAEJ,GAAI,EAAK,cAUL,OAAO,EAAK,cAAc,OAAO,CAAE,MAAK,UAAS,UAErD,MAAM,CACV,iLAAC,gBAAA,GAAA,OAAA,EAAA,MAAA,KAAA,UAAA,EAlCsC,KAoCpC,CAhEP,CAtCA,CAuGJ,GACA,CAAA,IAAA,oBAAA,MAeA,SAAA,GAAwD,IAE1B,EAFV,EAAG,EAAH,IAAK,EAAU,EAAV,WAAY,EAAO,EAAP,QAAS,EAAK,EAAL,MACY,koBAAA,CAAvC,KAAK,QAAQ,IAAI,EAAQ,SAAW,IACzB,IAA1B,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAA4B,KAAjB,EAAK,EAAA,MACR,OAAM,EAGJ,EAAc,EAAM,MAAM,CAAE,MAAK,aAAY,UAAS,UAC5D,GAAI,EA6BA,OAjBA,EAAS,GACL,MAAM,QAAQ,IAA6B,IAAlB,EAAO,QAI3B,EAAY,cAAgB,QACG,IAApC,OAAO,KAAK,GAAa,QAIG,kBAAhB,KAPZ,OAAS,GAcN,CAAE,QAAO,SAExB,CACA,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CACA,MAAO,CAAC,CACZ,GACA,CAAA,IAAA,oBAAA,MAcA,SAAkB,GACd,KAAK,mBAAmB,IADK,UAAA,OAAA,QAAA,IAAA,UAAA,GAAA,UAAA,GH1SR,MG2Se,GAAiB,GACzD,GACA,CAAA,IAAA,kBAAA,MAOA,SAAgB,GACZ,KAAK,cAAgB,GAAiB,EAC1C,GACA,CAAA,IAAA,gBAAA,MAKA,SAAc,GAiCL,KAAK,QAAQ,IAAI,EAAM,SACxB,KAAK,QAAQ,IAAI,EAAM,OAAQ,IAInC,KAAK,QAAQ,IAAI,EAAM,QAAQ,KAAK,EACxC,GACA,CAAA,IAAA,kBAAA,MAKA,SAAgB,GACZ,IAAK,KAAK,QAAQ,IAAI,EAAM,QACxB,MAAM,IAAI,GAAa,6CAA8C,CACjE,OAAQ,EAAM,SAGtB,IAAM,EAAa,KAAK,QAAQ,IAAI,EAAM,QAAQ,QAAQ,GAC1D,KAAI,GAAc,GAId,MAAM,IAAI,GAAa,yCAHvB,KAAK,QAAQ,IAAI,EAAM,QAAQ,OAAO,EAAY,EAK1D,qFAAC,CAAA,CAvWO,GRdC,GAA2B,WAOpC,OANK,MACD,GAAgB,IAAI,IAEN,mBACd,GAAc,oBAEX,EACX,ESjBM,GAAoB,CACtB,gBAAiB,kBACjB,SAAU,cACV,OAAQ,UACR,QAAS,UACT,OAAgC,oBAAjB,aAA+B,aAAa,MAAQ,IAEjE,GAAmB,SAAC,GACtB,MAAO,CAAC,GAAkB,OAAQ,EAAW,GAAkB,QAC1D,QAAO,SAAC,GAAK,OAAK,GAAS,EAAM,OAAS,CAAC,IAC3C,KAAK,IACd,EAMa,GAAa,CACtB,cAAe,SAAC,IANQ,SAAC,GACzB,IAAK,IAAL,EAAA,EAAA,EAAkB,OAAO,KAAK,IAAkB,EAAA,EAAA,OAAA,IAC5C,EADU,EAAA,GAGlB,CAGQ,EAAoB,SAAC,GACW,iBAAjB,EAAQ,KACf,GAAkB,GAAO,EAAQ,GAEzC,GACJ,EACA,uBAAwB,SAAC,GACrB,OAAO,GAAiB,GAAiB,GAAkB,gBAC/D,EACA,gBAAiB,SAAC,GACd,OAAO,GAAiB,GAAiB,GAAkB,SAC/D,EACA,UAAW,WACP,OAAO,GAAkB,MAC7B,EACA,eAAgB,SAAC,GACb,OAAO,GAAiB,GAAiB,GAAkB,QAC/D,EACA,UAAW,WACP,OAAO,GAAkB,MAC7B,GtBrCE,cAAwB,mBuBIxB,GAA2B,GAC7B,SAAA,IAAc,IAAA,EAAA,kGAAA,CAAA,KAAA,GACV,KAAK,YAAc,GACnB,KAAK,eAAiB,GACtB,KAAK,iBAAgB,eAAA,EAAA,GAAG,UAAA,GAA+B,IAAb,EAAK,EAAL,MAElC,IACA,EAAM,gBAH0B,EAAP,QAKjC,IAAC,gBAAA,GAAA,OAAA,EAAA,MAAA,KAAA,UAAA,EALoB,GAMrB,KAAK,yBAAwB,eAAA,EAAA,GAAG,UAAA,GAA6C,IAA7B,EAAK,EAAL,MAAO,EAAc,EAAd,eACnD,GAAmB,YADuB,EAAL,MAC3B,MACF,GACA,EAAM,iBACN,EAAM,2BAA2B,QAAS,CAE1C,IAAM,EAAM,EAAM,gBAAgB,IAC9B,EACA,EAAK,eAAe,KAAK,GAGzB,EAAK,YAAY,KAAK,EAE9B,CAEJ,OAAO,CACX,IAAC,gBAAA,GAAA,OAAA,EAAA,MAAA,KAAA,UAAA,EAhB4B,EAiBjC,IC3BE,GAAsB,GACxB,SAAA,EAAA,GAAoC,IAAA,EAAA,KAAtB,EAAkB,EAAlB,gHAAkB,CAAA,KAAA,GAC5B,KAAK,mBAAkB,iBAAA,KAAG,UAAA,GAAgC,IAAvB,EAAO,EAAP,QAAS,EAAM,EAAN,OAGlC,GAAY,aAAuC,EAAS,EAAO,WACrE,EAAK,oBAAoB,kBAAkB,EAAQ,KAEvD,OAAO,EACD,IAAI,QAAQ,EAAU,CAAE,QAAS,EAAQ,UACzC,CACV,iLAAC,gBAAA,GAAA,OAAA,EAAA,MAAA,KAAA,UAAA,EATsB,GAUvB,KAAK,oBAAsB,CAC/B,ICXE,GAAQ,GAIV,SAAA,IAAc,IAAA,EAAA,kGAAA,CAAA,KAAA,GACV,KAAK,QAAU,IAAI,SAAQ,SAAC,EAAS,GACjC,EAAK,QAAU,EACf,EAAK,OAAS,CAClB,GACJ,ICdE,GAAsB,IAAI,IpBiB1B,cAAe,WAiBjB,SAAA,EAAY,EAAU,gGAAS,CAAA,KAAA,GAC3B,KAAK,WAAa,CAAC,EA8CnB,GAAc,KAAM,GACpB,KAAK,MAAQ,EAAQ,MACrB,KAAK,UAAY,EACjB,KAAK,iBAAmB,IAAI,GAC5B,KAAK,wBAA0B,GAG/B,KAAK,SAAQ,GAAO,EAAS,SAC7B,KAAK,gBAAkB,IAAI,IAAM,IACC,EADD,EAAA,GACZ,KAAK,UAAQ,IAAlC,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAAoC,CAChC,KAAK,gBAAgB,IADR,EAAA,MACoB,CAAC,EACtC,CAAC,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CACD,KAAK,MAAM,UAAU,KAAK,iBAAiB,QAC/C,WA0WA,EAvBA,EA/DA,EA3CA,EA3FA,EAvCA,EAhBA,EAkUC,SAxZD,IAAA,EAAA,IAAA,QAAA,MAAA,SAAA,GAAA,SAAA,EAAA,GAAA,OAAA,EAAA,MAAA,KAAA,UAAA,QAAA,EAAA,SAAA,kBAAA,EAAA,UAAA,EAAA,CAAA,iBAAA,EAAA,IAaA,UAAY,GACR,IAAQ,EAAU,KAAV,MACJ,EAAU,GAAU,GACxB,GAAqB,aAAjB,EAAQ,MACR,aAAiB,YACjB,EAAM,gBAAiB,CACvB,IAAM,QAAiC,EAAM,gBAC7C,GAAI,EAKA,OAAO,CAEf,CAIA,IAAM,EAAkB,KAAK,YAAY,gBACnC,EAAQ,QACR,KACN,IAAI,IAC0D,EAD1D,EAAA,GACiB,KAAK,iBAAiB,qBAAmB,IAA1D,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAA4D,KAAjD,EAAE,EAAA,MACT,QAAgB,EAAG,CAAE,QAAS,EAAQ,QAAS,SACnD,CAAC,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CACL,CACA,MAAO,GACH,GAAI,aAAe,MACf,MAAM,IAAI,GAAa,kCAAmC,CACtD,mBAAoB,EAAI,SAGpC,CAIA,IAAM,EAAwB,EAAQ,QACtC,IACI,IAAI,EAEJ,QAAsB,MAAM,EAA0B,aAAjB,EAAQ,UAAsB,EAAY,KAAK,UAAU,cAK7F,IAC8D,EAD9D,EAAA,GACsB,KAAK,iBAAiB,oBAAkB,IAA/D,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAAiE,KAAtD,EAAQ,EAAA,MACf,QAAsB,EAAS,CAC3B,QACA,QAAS,EACT,SAAU,GAElB,CAAC,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CACD,OAAO,CACX,CACA,MAAO,GAeH,MARI,UACM,KAAK,aAAa,eAAgB,CACpC,MAAO,EACP,QACA,gBAAiB,EAAgB,QACjC,QAAS,EAAsB,WAGjC,CACV,CACJ,IAAC,gBAAA,GAAA,OAAA,EAAA,MAAA,KAAA,UAAA,EArFD,KAsFA,CAAA,IAAA,mBAAA,OAAA,EAAA,IAUA,UAAuB,GACnB,IAAM,QAAiB,KAAK,MAAM,GAC5B,EAAgB,EAAS,QAE/B,OADK,KAAK,UAAU,KAAK,SAAS,EAAO,IAClC,CACX,IAAC,SAAA,GAAA,OAAA,EAAA,MAAA,KAAA,UAAA,IACD,CAAA,IAAA,aAAA,OAAA,EAAA,IAYA,UAAiB,GACb,IACI,EADE,EAAU,GAAU,GAE1B,EAAoC,KAAK,UAAjC,EAAS,EAAT,UAAW,EAAY,EAAZ,aACb,QAAyB,KAAK,YAAY,EAAS,QACnD,EAAoB,GAAc,GAAc,CAAC,EAAG,GAAe,CAAE,cAC3E,QAAuB,OAAO,MAAM,EAAkB,GAQrD,IACuE,EADvE,EAAA,GACsB,KAAK,iBAAiB,6BAA2B,IAAxE,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAA0E,KAA/D,EAAQ,EAAA,MACf,SACW,EAAS,CACZ,YACA,eACA,iBACA,QAAS,EACT,MAAO,KAAK,eACT,CACf,CAAC,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CACD,OAAO,CACX,IAAC,SAAA,GAAA,OAAA,EAAA,MAAA,KAAA,UAAA,IACD,CAAA,IAAA,WAAA,OAAA,EAAA,IAeA,UAAe,EAAK,GAChB,IAAM,EAAU,GAAU,SAGpB,GAAQ,GACd,IAAM,QAAyB,KAAK,YAAY,EAAS,SAiBzD,IAAK,EAKD,MAAM,IAAI,GAAa,6BAA8B,CACjD,IAAK,GAAe,EAAiB,OAG7C,IAAM,QAAwB,KAAK,2BAA2B,GAC9D,IAAK,EAKD,OAAO,EAEX,IAAA,EAAoC,KAAK,UAAjC,EAAS,EAAT,UAAW,EAAY,EAAZ,aACb,QAAc,KAAK,OAAO,KAAK,GAC/B,EAAyB,KAAK,YAAY,kBAC1C,EAAc,QHlS5B,SAYqC,EAAA,EAAA,EAAA,GAAA,OAAA,EAAA,MAAC,KAAD,UAAA,CGuRjB,CAIR,EAAO,EAAiB,QAAS,CAAC,mBAAoB,GACpD,KAKN,UACU,EAAM,IAAI,EAAkB,EAAyB,EAAgB,QAAU,EACzF,CACA,MAAO,GACH,GAAI,aAAiB,MAKjB,KAHmB,uBAAf,EAAM,aFvT1B,WAOyC,OAAA,EAAA,MAAC,KAAD,UAAA,CEiTf,IAEJ,CAEd,CAAC,IAC6D,EAD7D,EAAA,GACsB,KAAK,iBAAiB,mBAAiB,IAA9D,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAAgE,KAArD,EAAQ,EAAA,YACT,EAAS,CACX,YACA,cACA,YAAa,EAAgB,QAC7B,QAAS,EACT,MAAO,KAAK,OAEpB,CAAC,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CACD,OAAO,CACX,IAAC,SAAA,EAAA,GAAA,OAAA,EAAA,MAAA,KAAA,UAAA,IACD,CAAA,IAAA,cAAA,OAAA,EAAA,IAWA,UAAkB,EAAS,GACvB,IAAM,EAAM,GAAH,OAAM,EAAQ,IAAG,OAAA,OAAM,GAChC,IAAK,KAAK,WAAW,GAAM,CACvB,IACkE,EAD9D,EAAmB,EAAQ,EAAA,GACR,KAAK,iBAAiB,uBAAqB,IAAlE,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAAoE,KAAzD,EAAQ,EAAA,MACf,EAAmB,SAAgB,EAAS,CACxC,OACA,QAAS,EACT,MAAO,KAAK,MAEZ,OAAQ,KAAK,SAErB,CAAC,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CACD,KAAK,WAAW,GAAO,CAC3B,CACA,OAAO,KAAK,WAAW,EAC3B,IAAC,SAAA,EAAA,GAAA,OAAA,EAAA,MAAA,KAAA,UAAA,IACD,CAAA,IAAA,cAAA,MAOA,SAAY,GAAM,IAC6B,EAD7B,EAAA,GACO,KAAK,UAAU,SAAO,IAA3C,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MACI,GAAI,KADS,EAAA,MAET,OAAO,CAEd,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CACD,OAAO,CACX,GACA,CAAA,IAAA,eAAA,OAAA,EAAA,IAgBA,UAAmB,EAAM,GAAO,IACsB,EADtB,EAAA,GACL,KAAK,iBAAiB,IAAK,IAAlD,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAAoD,KAAzC,EAAQ,EAAA,YAGT,EAAS,EACnB,CAAC,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CACL,IAAC,SAAA,EAAA,GAAA,OAAA,EAAA,MAAA,KAAA,UAAA,IACD,CAAA,IAAA,mBAAA,MASA,UAAkB,GAAM,IACuB,EADvB,EAAA,KAAA,EAAA,GACC,KAAK,UAAU,SAAO,QAAA,EAAA,YAAE,IAAlC,EAAM,EAAA,MACb,GAA4B,mBAAjB,EAAO,GAAsB,CACpC,IAAM,EAAQ,EAAK,gBAAgB,IAAI,SACd,SAAC,GACtB,IAAM,EAAgB,GAAc,GAAc,CAAC,EAAG,GAAQ,CAAE,UAGhE,OAAO,EAAO,GAAM,EACxB,CAEJ,CACJ,EAXA,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,YAAA,GAWC,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CACL,GACA,CAAA,IAAA,YAAA,MAaA,SAAU,GAEN,OADA,KAAK,wBAAwB,KAAK,GAC3B,CACX,GACA,CAAA,IAAA,cAAA,OAAA,EAAA,IAUA,YAEI,IADA,IAAI,EACI,EAAU,KAAK,wBAAwB,eACrC,CAEd,IAAC,kBAAA,EAAA,MAAA,KAAA,UAAA,IACD,CAAA,IAAA,UAAA,MAIA,WACI,KAAK,iBAAiB,QAAQ,KAClC,GACA,CAAA,IAAA,6BAAA,OAAA,EAAA,IAUA,UAAiC,GAC7B,IAE+D,EAF3D,EAAkB,EAClB,GAAc,EAAM,EAAA,GACD,KAAK,iBAAiB,oBAAkB,IAA/D,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAAiE,KAAtD,EAAQ,EAAA,MAQf,GAPA,SACW,EAAS,CACZ,QAAS,KAAK,QACd,SAAU,EACV,MAAO,KAAK,eACT,EACX,GAAc,GACT,EACD,KAER,CAAC,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CAsBD,OArBK,GACG,GAA8C,MAA3B,EAAgB,SACnC,OAAkB,GAmBnB,CACX,IAAC,SAAA,GAAA,OAAA,EAAA,MAAA,KAAA,UAAA,wFAAA,CAAA,CAtegB,IqBVf,GAAQ,WAuBV,SAAA,IAA0B,IAAd,EAAO,UAAA,OAAA,QAAA,IAAA,UAAA,GAAA,UAAA,GAAG,CAAC,+FAAC,CAAA,KAAA,GAQpB,KAAK,UAAY,GAAW,eAAe,EAAQ,WAQnD,KAAK,QAAU,EAAQ,SAAW,GAQlC,KAAK,aAAe,EAAQ,aAQ5B,KAAK,aAAe,EAAQ,YAChC,WAmGC,EAnCA,EAsEA,SArID,IAAA,EAAA,IAAA,SAAA,MAmBA,SAAO,GAEH,OAD8C,GAAvB,KAAK,UAAU,GAAQ,GAA3B,EAEvB,GACA,CAAA,IAAA,YAAA,MAsBA,SAAU,GAEF,aAAmB,aACnB,EAAU,CACN,MAAO,EACP,QAAS,EAAQ,UAGzB,IAAM,EAAQ,EAAQ,MAChB,EAAqC,iBAApB,EAAQ,QACzB,IAAI,QAAQ,EAAQ,SACpB,EAAQ,QAER,EAAU,IAAI,GAAgB,KAAM,CAAE,QAAO,UAAS,OAD7C,WAAY,EAAU,EAAQ,YAAS,IAEhD,EAAe,KAAK,aAAa,EAAS,EAAS,GAGzD,MAAO,CAAC,EAFY,KAAK,eAAe,EAAc,EAAS,EAAS,GAG5E,GAAC,CAAA,IAAA,eAAA,OAAA,EAAA,IACD,UAAmB,EAAS,EAAS,SAC3B,EAAQ,aAAa,mBAAoB,CAAE,QAAO,YACxD,IAAI,OAAW,EACf,IAKI,KAJA,QAAiB,KAAK,QAAQ,EAAS,KAIJ,UAAlB,EAAS,KACtB,MAAM,IAAI,GAAa,cAAe,CAAE,IAAK,EAAQ,KAE7D,CACA,MAAO,GACH,GAAI,aAAiB,MAAO,KAC0C,EAD1C,EAAA,GACD,EAAQ,iBAAiB,oBAAkB,IAAlE,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAAoE,KAAzD,EAAQ,EAAA,MAEf,GADA,QAAiB,EAAS,CAAE,QAAO,QAAO,YAEtC,KAER,CAAC,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CACL,CACA,IAAK,EACD,MAAM,CAOd,CAAC,IACoE,EADpE,EAAA,GACsB,EAAQ,iBAAiB,uBAAqB,IAArE,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAAuE,KAA5D,EAAQ,EAAA,MACf,QAAiB,EAAS,CAAE,QAAO,UAAS,YAChD,CAAC,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CACD,OAAO,CACX,IAAC,SAAA,EAAA,EAAA,GAAA,OAAA,EAAA,MAAA,KAAA,UAAA,KAAA,IAAA,iBAAA,OAAA,EAAA,IACD,UAAqB,EAAc,EAAS,EAAS,GACjD,IAAI,EACA,EACJ,IACI,QAAiB,CACrB,CACA,MAAO,GAGH,CAEJ,UACU,EAAQ,aAAa,oBAAqB,CAC5C,QACA,UACA,mBAEE,EAAQ,aAClB,CACA,MAAO,GACC,aAA0B,QAC1B,EAAQ,EAEhB,CAQA,SAPM,EAAQ,aAAa,qBAAsB,CAC7C,QACA,UACA,WACA,MAAO,IAEX,EAAQ,UACJ,EACA,MAAM,CAEd,IAAC,SAAA,EAAA,EAAA,EAAA,GAAA,OAAA,EAAA,MAAA,KAAA,UAAA,wFAAA,CAAA,CA9LS,GCQR,GAAgB,SAAA,GAkBlB,SAAA,IAA0B,IAAA,EAAd,EAAO,UAAA,OAAA,QAAA,IAAA,UAAA,GAAA,UAAA,GAAG,CAAC,EASwD,mGATvD,CAAA,KAAA,GACpB,EAAQ,UAAY,GAAW,gBAAgB,EAAQ,YACvD,EAAA,EAAA,KAAA,KAAM,IACD,oBAC6B,IAA9B,EAAQ,kBAKZ,EAAK,QAAQ,KAAK,EAAiB,wCAAwC,CAC/E,wRA5BkB,CAAA,EAAA,GAAA,UAiHjB,EAhEA,EApBD,EA7BkB,EAAA,GAAA,GAqLjB,SAxJD,IAAA,EAAA,IAAA,UAAA,OAAA,EAAA,IAOA,UAAc,EAAS,GACnB,IAAM,QAAiB,EAAQ,WAAW,GAC1C,OAAI,IAKA,EAAQ,OAAgC,YAAvB,EAAQ,MAAM,WAClB,KAAK,eAAe,EAAS,SAIjC,KAAK,aAAa,EAAS,GAC5C,IAAC,SAAA,EAAA,GAAA,OAAA,EAAA,MAAA,KAAA,UAAA,KAAA,IAAA,eAAA,OAAA,EAAA,IACD,UAAmB,EAAS,GACxB,IAAI,EACE,EAAU,EAAQ,QAAU,CAAC,EAEnC,IAAI,KAAK,mBAuCL,MAAM,IAAI,GAAa,yBAA0B,CAC7C,UAAW,KAAK,UAChB,IAAK,EAAQ,MAnCjB,IAAM,EAAsB,EAAO,UAC7B,EAAqB,EAAQ,UAC7B,GAAuB,GAAsB,IAAuB,EAkD9E,OA/CI,QAAiB,EAAQ,MAAM,IAAI,QAAQ,EAAS,CAChD,UAA4B,YAAjB,EAAQ,KACb,GAAsB,OACtB,KASN,GACA,GACiB,YAAjB,EAAQ,OACR,KAAK,8CACmB,EAAQ,SAAS,EAAS,EAAS,UA+B5D,CACX,IAAC,SAAA,EAAA,GAAA,OAAA,EAAA,MAAA,KAAA,UAAA,KAAA,IAAA,iBAAA,OAAA,EAAA,IACD,UAAqB,EAAS,GAC1B,KAAK,wCACL,IAAM,QAAiB,EAAQ,MAAM,GAIrC,WADwB,EAAQ,SAAS,EAAS,EAAS,UAIvD,MAAM,IAAI,GAAa,0BAA2B,CAC9C,IAAK,EAAQ,IACb,OAAQ,EAAS,SAGzB,OAAO,CACX,IAAC,SAAA,EAAA,GAAA,OAAA,EAAA,MAAA,KAAA,UAAA,IACD,CAAA,IAAA,wCAAA,MA2BA,WACI,IAEoD,EAFhD,EAAqB,KACrB,EAA6B,EAAE,moBAAA,CACL,KAAK,QAAQ,WAAS,IAApD,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAAsD,KAAA,EAAA,GAAA,EAAA,MAAA,GAAnC,EAAM,EAAA,GAEjB,IAAW,EAAiB,yCAI5B,IAAW,EAAiB,oCAC5B,EAPS,EAAA,IAST,EAAO,iBACP,IAER,CAAC,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CACkC,IAA/B,EACA,KAAK,QAAQ,KAAK,EAAiB,mCAE9B,EAA6B,GAA4B,OAAvB,GAEvC,KAAK,QAAQ,OAAO,EAAoB,EAGhD,uFAAC,CAAA,CArLiB,CAAS,IAuL/B,GAAiB,kCAAoC,CAC3C,gBAAe,SAAA,GAAe,OAAA,IAAA,gBAAZ,EAAQ,EAAR,SACpB,OAAK,GAAY,EAAS,QAAU,IACzB,KAEJ,CAAS,GAJgB,EAKpC,GAEJ,GAAiB,uCAAyC,CAChD,gBAAe,SAAA,GAAe,OAAA,IAAA,gBAAZ,EAAQ,EAAR,SACpB,OAAO,EAAS,iB3BjNxB,SAmB2B,EAAA,GAAA,OAAA,EAAA,MAAC,KAAD,UAAA,C2B8LgB,CAAa,GAAY,CAAS,GADrC,EAEpC,GCzMJ,ICVI,MCUe,GCDM,GCTsB,GJezC,GAAkB,WAWpB,SAAA,IAAyE,IAAA,EAAA,UAAA,OAAA,QAAA,IAAA,UAAA,GAAA,UAAA,GAAJ,CAAC,EAAxD,EAAS,EAAT,UAAS,EAAA,EAAE,eAAO,IAAA,EAAG,GAAE,EAAA,EAAA,EAAE,yBAAiB,IAAA,GAAO,+FAAA,CAAA,KAAA,GAC3D,KAAK,iBAAmB,IAAI,IAC5B,KAAK,kBAAoB,IAAI,IAC7B,KAAK,wBAA0B,IAAI,IACnC,KAAK,UAAY,IAAI,GAAiB,CAClC,UAAW,GAAW,gBAAgB,GACtC,QAAS,GAAF,OAAA,GACA,GAAO,CACV,IAAI,GAAuB,CAAE,mBAAoB,SAErD,sBAGJ,KAAK,QAAU,KAAK,QAAQ,KAAK,MACjC,KAAK,SAAW,KAAK,SAAS,KAAK,KACvC,WAkMA,EA6CC,SA9OD,IAAA,EAAA,IAAA,WAAA,IAIA,WACI,OAAO,KAAK,SAChB,GACA,CAAA,IAAA,WAAA,MAUA,SAAS,GACL,KAAK,eAAe,GACf,KAAK,kCACN,KAAK,iBAAiB,UAAW,KAAK,SACtC,KAAK,iBAAiB,WAAY,KAAK,UACvC,KAAK,iCAAkC,EAE/C,GACA,CAAA,IAAA,iBAAA,MAOA,SAAe,GASX,IAC2B,EADrB,EAAkB,GAAG,EAAA,GACP,GAAO,IAA3B,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAA6B,KAAlB,EAAK,EAAA,MAES,iBAAV,EACP,EAAgB,KAAK,GAEhB,QAA4B,IAAnB,EAAM,UACpB,EAAgB,KAAK,EAAM,KAE/B,IAAA,EAA0B,EAAe,GAAjC,EAAQ,EAAR,SAAU,EAAG,EAAH,IACZ,EAA6B,iBAAV,GAAsB,EAAM,SAAW,SAAW,UAC3E,GAAI,KAAK,iBAAiB,IAAI,IAC1B,KAAK,iBAAiB,IAAI,KAAS,EACnC,MAAM,IAAI,GAAa,wCAAyC,CAC5D,WAAY,KAAK,iBAAiB,IAAI,GACtC,YAAa,IAGrB,GAAqB,iBAAV,GAAsB,EAAM,UAAW,CAC9C,GAAI,KAAK,wBAAwB,IAAI,IACjC,KAAK,wBAAwB,IAAI,KAAc,EAAM,UACrD,MAAM,IAAI,GAAa,4CAA6C,CAChE,QAGR,KAAK,wBAAwB,IAAI,EAAU,EAAM,UACrD,CAGA,GAFA,KAAK,iBAAiB,IAAI,EAAK,GAC/B,KAAK,kBAAkB,IAAI,EAAK,GAC5B,EAAgB,OAAS,EAAG,CAC5B,IAAM,EAAiB,wDAAA,OACV,EAAgB,KAAK,MAAK,kCAAgC,2CAKnE,QAAQ,KAAK,EAKrB,CACJ,CAAC,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CACL,GACA,CAAA,IAAA,UAAA,MAUA,SAAQ,GAAO,IAAA,EAAA,KAGX,OAAO,EAAU,EAAK,IAAE,YACpB,IAAM,EAAsB,IAAI,GAChC,EAAK,SAAS,QAAQ,KAAK,GAE3B,IACmD,EADnD,EAAA,GAC8B,EAAK,kBAAgB,IAAnD,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAAqD,KAAA,EAAA,GAAA,EAAA,MAAA,GAAzC,EAAG,EAAA,GAAE,EAAQ,EAAA,GACf,EAAY,EAAK,wBAAwB,IAAI,GAC7C,EAAY,EAAK,kBAAkB,IAAI,GACvC,EAAU,IAAI,QAAQ,EAAK,CAC7B,YACA,MAAO,EACP,YAAa,sBAEX,QAAQ,IAAI,EAAK,SAAS,UAAU,CACtC,OAAQ,CAAE,YACV,UACA,UAER,CAAC,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CAKD,MAAO,CAAE,YAJ+B,EAAhC,YAIc,eAJkB,EAAnB,eAKzB,IACJ,GACA,CAAA,IAAA,WAAA,MAUA,SAAS,GAAO,IAAA,EAAA,KAGZ,OAAO,EAAU,EAAK,IAAE,YACpB,IAI6C,EAJvC,QAAc,KAAK,OAAO,KAAK,EAAK,SAAS,WAC7C,QAAgC,EAAM,OACtC,EAAoB,IAAI,IAAI,EAAK,iBAAiB,UAClD,EAAc,GAAG,EAAA,GACD,GAAuB,IAA7C,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAA+C,KAApC,EAAO,EAAA,MACT,EAAkB,IAAI,EAAQ,aACzB,EAAM,OAAO,GACnB,EAAY,KAAK,EAAQ,KAEjC,CAAC,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CAID,MAAO,CAAE,cACb,IACJ,GACA,CAAA,IAAA,qBAAA,MAMA,WACI,OAAO,KAAK,gBAChB,GACA,CAAA,IAAA,gBAAA,MAMA,WACI,OAAA,GAAW,KAAK,iBAAiB,OACrC,GACA,CAAA,IAAA,oBAAA,MASA,SAAkB,GACd,IAAM,EAAY,IAAI,IAAI,EAAK,SAAS,MACxC,OAAO,KAAK,iBAAiB,IAAI,EAAU,KAC/C,GACA,CAAA,IAAA,0BAAA,MAKA,SAAwB,GACpB,OAAO,KAAK,wBAAwB,IAAI,EAC5C,GACA,CAAA,IAAA,gBAAA,OAAA,EAAA,IAkBA,UAAoB,GAChB,IAAM,EAAM,aAAmB,QAAU,EAAQ,IAAM,EACjD,EAAW,KAAK,kBAAkB,GACxC,GAAI,EAEA,aADoB,KAAK,OAAO,KAAK,KAAK,SAAS,YACtC,MAAM,EAG3B,IAAC,SAAA,GAAA,OAAA,EAAA,MAAA,KAAA,UAAA,IACD,CAAA,IAAA,0BAAA,MAQA,SAAwB,GAAK,IAAA,EAAA,KACnB,EAAW,KAAK,kBAAkB,GACxC,IAAK,EACD,MAAM,IAAI,GAAa,oBAAqB,CAAE,QAElD,OAAO,SAAC,GAGJ,OAFA,EAAQ,QAAU,IAAI,QAAQ,GAC9B,EAAQ,OAAS,GAAc,CAAE,YAAY,EAAQ,QAC9C,EAAK,SAAS,OAAO,EAChC,CACJ,uFAAC,CAAA,CAzQmB,GCVX,GAAgC,WAIzC,OAHK,KACD,GAAqB,IAAI,IAEtB,EACX,EIEM,GAAa,SAAA,GAiBf,SAAA,EAAY,EAAoB,gGAAS,CAAA,KAAA,GAcnC,OAAA,EAAA,KAAA,MAbY,SAAH,GAAqB,IAEyC,EAFxD,EAAO,EAAP,QACP,EAAkB,EAAmB,qBAAqB,EAAA,GACtC,GAAsB,EAAQ,IAAK,IAAQ,IAArE,IAAA,EAAA,MAAA,EAAA,EAAA,KAAA,MAAuE,KAC7D,EAAW,EAAgB,IADf,EAAA,OAElB,GAAI,EAEA,MAAO,CAAE,WAAU,UADD,EAAmB,wBAAwB,GAGrE,CAAC,OAAA,GAAA,EAAA,EAAA,EAAA,SAAA,EAAA,GAAA,CAKL,GACa,EAAmB,SACpC,wRAjCe,CAAA,EAAA,GAAA,UAAA,EAAA,GAAA,GAiCd,SAAA,sFAAA,CAjCc,CAAS,ICrBf,GAAQ,SAAA,GAAK,MAA2B,aAAvB,EAAM,QAAQ,IAAmB,EJQlD,GAAyB,CAWlC,oBAAiB,UAAA,GAAwB,IAAf,EAAQ,EAAR,SACtB,OAAwB,MAApB,EAAS,QAAsC,IAApB,EAAS,OAC7B,EAEJ,IACX,EALe,oLAKd,kBAAA,GAAA,MAAA,KAAA,UAAA,IKMC,GAAY,SAAA,GAoBd,SAAA,IAA0B,IAAA,EAAd,EAAO,UAAA,OAAA,QAAA,IAAA,UAAA,GAAA,UAAA,GAAG,CAAC,EAiBlB,mGAjBmB,CAAA,KAAA,IACpB,EAAA,EAAA,KAAA,KAAM,IAGI,QAAQ,MAAK,SAAC,GAAC,MAAK,oBAAqB,CAAC,KAChD,EAAK,QAAQ,QAAQ,IAEzB,EAAK,uBAAyB,EAAQ,uBAAyB,EAU9D,CACL,wRAtCc,CAAA,EAAA,GAAA,UAuHd,EAhFA,EAvCc,EAAA,GAAA,GAoKb,SA7HD,IAAA,EAAA,IAAA,UAAA,OAAA,EAAA,IAOA,UAAc,EAAS,GACnB,IAUI,EAVE,EAAO,GASP,EAAW,GAEjB,GAAI,KAAK,uBAAwB,CAC7B,IAAA,EAAwB,KAAK,mBAAmB,CAAE,UAAS,OAAM,YACjE,EADU,EAAF,GAER,EAAS,KAFU,EAAP,QAGhB,CACA,IAAM,EAAiB,KAAK,mBAAmB,CAC3C,YACA,UACA,OACA,YAEJ,EAAS,KAAK,GACd,IAAM,QAAiB,EAAQ,UAAU,IAAC,YAEtC,aAAe,EAAQ,UAAU,QAAQ,KAAK,aAMnC,EACf,GATyC,IAkBzC,IAAK,EACD,MAAM,IAAI,GAAa,cAAe,CAAE,IAAK,EAAQ,MAEzD,OAAO,CACX,IAAC,SAAA,EAAA,GAAA,OAAA,EAAA,MAAA,KAAA,UAAA,IACD,CAAA,IAAA,qBAAA,MASA,SAAA,GAAgD,IACxC,EADwC,EAAA,KAA3B,EAAO,EAAP,QAAe,EAAO,EAAP,QAE1B,EAAiB,IAAI,SAAQ,SAAC,GAChC,IAAM,EAAgB,eAAA,EAAA,IAAG,YAKrB,QAAc,EAAQ,WAAW,GACrC,IAAC,kBANqB,OAAA,EAAA,MAAA,KAAA,UAAA,KAOtB,EAAY,WAAW,EAAgD,IAA9B,EAAK,uBAClD,IACA,MAAO,CACH,QAAS,EACT,GAAI,EAEZ,GACA,CAAA,IAAA,qBAAA,OAAA,EAAA,IAUA,UAAA,GAAiE,IACzD,EACA,EAFmB,EAAS,EAAT,UAAW,EAAO,EAAP,QAAe,EAAO,EAAP,QAGjD,IACI,QAAiB,EAAQ,iBAAiB,EAC9C,CACA,MAAO,GACC,aAAsB,QACtB,EAAQ,EAEhB,CAwBA,OAvBI,GACA,aAAa,IAWb,GAAU,IACV,QAAiB,EAAQ,WAAW,IAUjC,CACX,IAAC,SAAA,GAAA,OAAA,EAAA,MAAA,KAAA,UAAA,wFAAA,CAAA,CApKa,CAAS,ICNrB,GAAa,CACX,sBACA,OAAO,GAAY,wBACvB,EACI,eACA,OAAO,GAAY,iBACvB,EACI,aACA,OAAO,GAAY,WACvB,EACI,cACA,OAAO,GAAY,gBACvB,EACI,aACA,OAAO,GAAY,WACvB,GCnBE,cAAiB,WAenB,SAAA,IAAyB,IAAb,EAAM,UAAA,OAAA,QAAA,IAAA,UAAA,GAAA,UAAA,GAAG,CAAC,+FAAC,CAAA,KAAA,GA0BnB,KAAK,UAAY,EAAO,SACxB,KAAK,SAAW,EAAO,OAC3B,WAqDC,SApDD,KAAA,EAAA,IAAA,sBAAA,MASA,SAAoB,GAAU,IAAA,EAAA,KAStB,GAAY,EAiChB,OAhCI,KAAK,YACL,EAAY,KAAK,UAAU,SAAS,EAAS,SAE7C,KAAK,UAAY,IACjB,EAAY,OAAO,KAAK,KAAK,UAAU,MAAK,SAAC,GACzC,OAAO,EAAS,QAAQ,IAAI,KAAgB,EAAK,SAAS,EAC9D,KA0BG,CACX,sFAAC,CAAA,CAhGkB,ICJjB,GAAuB,IAezB,SAAA,EAAY,GAAQ,IAAA,EAAA,kGAAA,CAAA,KAAA,GAOhB,KAAK,gBAAe,eAAA,qMAAA,EAAG,UAAA,GAAwB,IAAf,EAAQ,EAAR,SAC5B,OAAI,EAAK,mBAAmB,oBAAoB,GACrC,EAEJ,IACX,IAAC,gBAAA,GAAA,OAAA,EAAA,MAAA,KAAA,UAAA,EALmB,GAMpB,KAAK,mBAAqB,IAAI,GAAkB,EACpD,ICzCS,GAAqB,CAAC,EPclC,GAAc,SAAA,GAAQ,OAAO,GAAP,EAAL,MAAwB,GOZX,IAAI,GAAa,CAE/C,UAAW,GAAW,SACtB,sBAAuB,EACvB,QAAS,CACR,IAAI,GAAwB,CAC3B,SAAU,CAAC,WRMW,GCER,SAAA,GACf,OAAI,GADmB,EAAL,OAEV,OAAO,MACb,GAAkB,cAAgB,GAAkB,gBAG/C,SAAS,OACjB,EDRyB,KACR,gBAAgB,ICVjC,GAJO,4vCAAK,cAIoB,IAAqB,kCQRtD,IACI,KAAK,6BAA+B,GACxC,CACA,MAAO,GAAK,gCCHZ,IACI,KAAK,0BAA4B,GACrC,CACA,MAAO,GAAK,gCCHZ,IACI,KAAK,6BAA+B,GACxC,CACA,MAAO,GAAK,gCCHZ,IACI,KAAK,uBAAyB,GAClC,CACA,MAAO,GAAK","file":"sw-esm.js","sourceRoot":"","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"./\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"9/Ks\");\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:cacheable-response:6.5.3'] && _();\n}\ncatch (e) { }\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Route } from './Route.js';\nimport { RegExpRoute } from './RegExpRoute.js';\nimport { getOrCreateDefaultRouter } from './utils/getOrCreateDefaultRouter.js';\nimport './_version.js';\n/**\n * Easily register a RegExp, string, or function with a caching\n * strategy to a singleton Router instance.\n *\n * This method will generate a Route for you if needed and\n * call {@link workbox-routing.Router#registerRoute}.\n *\n * @param {RegExp|string|workbox-routing.Route~matchCallback|workbox-routing.Route} capture\n * If the capture param is a `Route`, all other arguments will be ignored.\n * @param {workbox-routing~handlerCallback} [handler] A callback\n * function that returns a Promise resulting in a Response. This parameter\n * is required if `capture` is not a `Route` object.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n * @return {workbox-routing.Route} The generated `Route`.\n *\n * @memberof workbox-routing\n */\nfunction registerRoute(capture, handler, method) {\n let route;\n if (typeof capture === 'string') {\n const captureUrl = new URL(capture, location.href);\n if (process.env.NODE_ENV !== 'production') {\n if (!(capture.startsWith('/') || capture.startsWith('http'))) {\n throw new WorkboxError('invalid-string', {\n moduleName: 'workbox-routing',\n funcName: 'registerRoute',\n paramName: 'capture',\n });\n }\n // We want to check if Express-style wildcards are in the pathname only.\n // TODO: Remove this log message in v4.\n const valueToCheck = capture.startsWith('http')\n ? captureUrl.pathname\n : capture;\n // See https://github.com/pillarjs/path-to-regexp#parameters\n const wildcards = '[*:?+]';\n if (new RegExp(`${wildcards}`).exec(valueToCheck)) {\n logger.debug(`The '$capture' parameter contains an Express-style wildcard ` +\n `character (${wildcards}). Strings are now always interpreted as ` +\n `exact matches; use a RegExp for partial or wildcard matches.`);\n }\n }\n const matchCallback = ({ url }) => {\n if (process.env.NODE_ENV !== 'production') {\n if (url.pathname === captureUrl.pathname &&\n url.origin !== captureUrl.origin) {\n logger.debug(`${capture} only partially matches the cross-origin URL ` +\n `${url.toString()}. This route will only handle cross-origin requests ` +\n `if they match the entire URL.`);\n }\n }\n return url.href === captureUrl.href;\n };\n // If `capture` is a string then `handler` and `method` must be present.\n route = new Route(matchCallback, handler, method);\n }\n else if (capture instanceof RegExp) {\n // If `capture` is a `RegExp` then `handler` and `method` must be present.\n route = new RegExpRoute(capture, handler, method);\n }\n else if (typeof capture === 'function') {\n // If `capture` is a function then `handler` and `method` must be present.\n route = new Route(capture, handler, method);\n }\n else if (capture instanceof Route) {\n route = capture;\n }\n else {\n throw new WorkboxError('unsupported-route-type', {\n moduleName: 'workbox-routing',\n funcName: 'registerRoute',\n paramName: 'capture',\n });\n }\n const defaultRouter = getOrCreateDefaultRouter();\n defaultRouter.registerRoute(route);\n return route;\n}\nexport { registerRoute };\n","/*\n Copyright 2020 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A utility method that makes it easier to use `event.waitUntil` with\n * async functions and return the result.\n *\n * @param {ExtendableEvent} event\n * @param {Function} asyncFn\n * @return {Function}\n * @private\n */\nfunction waitUntil(event, asyncFn) {\n const returnPromise = asyncFn();\n event.waitUntil(returnPromise);\n return returnPromise;\n}\nexport { waitUntil };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport '../_version.js';\n// Name of the search parameter used to store revision info.\nconst REVISION_SEARCH_PARAM = '__WB_REVISION__';\n/**\n * Converts a manifest entry into a versioned URL suitable for precaching.\n *\n * @param {Object|string} entry\n * @return {string} A URL with versioning info.\n *\n * @private\n * @memberof workbox-precaching\n */\nexport function createCacheKey(entry) {\n if (!entry) {\n throw new WorkboxError('add-to-cache-list-unexpected-type', { entry });\n }\n // If a precache manifest entry is a string, it's assumed to be a versioned\n // URL, like '/app.abcd1234.js'. Return as-is.\n if (typeof entry === 'string') {\n const urlObject = new URL(entry, location.href);\n return {\n cacheKey: urlObject.href,\n url: urlObject.href,\n };\n }\n const { revision, url } = entry;\n if (!url) {\n throw new WorkboxError('add-to-cache-list-unexpected-type', { entry });\n }\n // If there's just a URL and no revision, then it's also assumed to be a\n // versioned URL.\n if (!revision) {\n const urlObject = new URL(url, location.href);\n return {\n cacheKey: urlObject.href,\n url: urlObject.href,\n };\n }\n // Otherwise, construct a properly versioned URL using the custom Workbox\n // search parameter along with the revision info.\n const cacheKeyURL = new URL(url, location.href);\n const originalURL = new URL(url, location.href);\n cacheKeyURL.searchParams.set(REVISION_SEARCH_PARAM, revision);\n return {\n cacheKey: cacheKeyURL.href,\n url: originalURL.href,\n };\n}\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { canConstructResponseFromBodyStream } from './_private/canConstructResponseFromBodyStream.js';\nimport { WorkboxError } from './_private/WorkboxError.js';\nimport './_version.js';\n/**\n * Allows developers to copy a response and modify its `headers`, `status`,\n * or `statusText` values (the values settable via a\n * [`ResponseInit`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Response/Response#Syntax}\n * object in the constructor).\n * To modify these values, pass a function as the second argument. That\n * function will be invoked with a single object with the response properties\n * `{headers, status, statusText}`. The return value of this function will\n * be used as the `ResponseInit` for the new `Response`. To change the values\n * either modify the passed parameter(s) and return it, or return a totally\n * new object.\n *\n * This method is intentionally limited to same-origin responses, regardless of\n * whether CORS was used or not.\n *\n * @param {Response} response\n * @param {Function} modifier\n * @memberof workbox-core\n */\nasync function copyResponse(response, modifier) {\n let origin = null;\n // If response.url isn't set, assume it's cross-origin and keep origin null.\n if (response.url) {\n const responseURL = new URL(response.url);\n origin = responseURL.origin;\n }\n if (origin !== self.location.origin) {\n throw new WorkboxError('cross-origin-copy-response', { origin });\n }\n const clonedResponse = response.clone();\n // Create a fresh `ResponseInit` object by cloning the headers.\n const responseInit = {\n headers: new Headers(clonedResponse.headers),\n status: clonedResponse.status,\n statusText: clonedResponse.statusText,\n };\n // Apply any user modifications.\n const modifiedResponseInit = modifier ? modifier(responseInit) : responseInit;\n // Create the new response from the body stream and `ResponseInit`\n // modifications. Note: not all browsers support the Response.body stream,\n // so fall back to reading the entire body into memory as a blob.\n const body = canConstructResponseFromBodyStream()\n ? clonedResponse.body\n : await clonedResponse.blob();\n return new Response(body, modifiedResponseInit);\n}\nexport { copyResponse };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nlet supportStatus;\n/**\n * A utility function that determines whether the current browser supports\n * constructing a new `Response` from a `response.body` stream.\n *\n * @return {boolean} `true`, if the current browser can successfully\n * construct a `Response` from a `response.body` stream, `false` otherwise.\n *\n * @private\n */\nfunction canConstructResponseFromBodyStream() {\n if (supportStatus === undefined) {\n const testResponse = new Response('');\n if ('body' in testResponse) {\n try {\n new Response(testResponse.body);\n supportStatus = true;\n }\n catch (error) {\n supportStatus = false;\n }\n }\n supportStatus = false;\n }\n return supportStatus;\n}\nexport { canConstructResponseFromBodyStream };\n","/*\n Copyright 2020 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nfunction stripParams(fullURL, ignoreParams) {\n const strippedURL = new URL(fullURL);\n for (const param of ignoreParams) {\n strippedURL.searchParams.delete(param);\n }\n return strippedURL.href;\n}\n/**\n * Matches an item in the cache, ignoring specific URL params. This is similar\n * to the `ignoreSearch` option, but it allows you to ignore just specific\n * params (while continuing to match on the others).\n *\n * @private\n * @param {Cache} cache\n * @param {Request} request\n * @param {Object} matchOptions\n * @param {Array<string>} ignoreParams\n * @return {Promise<Response|undefined>}\n */\nasync function cacheMatchIgnoreParams(cache, request, ignoreParams, matchOptions) {\n const strippedRequestURL = stripParams(request.url, ignoreParams);\n // If the request doesn't include any ignored params, match as normal.\n if (request.url === strippedRequestURL) {\n return cache.match(request, matchOptions);\n }\n // Otherwise, match by comparing keys\n const keysOptions = Object.assign(Object.assign({}, matchOptions), { ignoreSearch: true });\n const cacheKeys = await cache.keys(request, keysOptions);\n for (const cacheKey of cacheKeys) {\n const strippedCacheKeyURL = stripParams(cacheKey.url, ignoreParams);\n if (strippedRequestURL === strippedCacheKeyURL) {\n return cache.match(cacheKey, matchOptions);\n }\n }\n return;\n}\nexport { cacheMatchIgnoreParams };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from '../_private/logger.js';\nimport { quotaErrorCallbacks } from '../models/quotaErrorCallbacks.js';\nimport '../_version.js';\n/**\n * Runs all of the callback functions, one at a time sequentially, in the order\n * in which they were registered.\n *\n * @memberof workbox-core\n * @private\n */\nasync function executeQuotaErrorCallbacks() {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`About to run ${quotaErrorCallbacks.size} ` +\n `callbacks to clean up caches.`);\n }\n for (const callback of quotaErrorCallbacks) {\n await callback();\n if (process.env.NODE_ENV !== 'production') {\n logger.log(callback, 'is complete.');\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.log('Finished running callbacks.');\n }\n}\nexport { executeQuotaErrorCallbacks };\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * Returns a promise that resolves and the passed number of milliseconds.\n * This utility is an async/await-friendly version of `setTimeout`.\n *\n * @param {number} ms\n * @return {Promise}\n * @private\n */\nexport function timeout(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheMatchIgnoreParams } from 'workbox-core/_private/cacheMatchIgnoreParams.js';\nimport { Deferred } from 'workbox-core/_private/Deferred.js';\nimport { executeQuotaErrorCallbacks } from 'workbox-core/_private/executeQuotaErrorCallbacks.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { timeout } from 'workbox-core/_private/timeout.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport './_version.js';\nfunction toRequest(input) {\n return typeof input === 'string' ? new Request(input) : input;\n}\n/**\n * A class created every time a Strategy instance instance calls\n * {@link workbox-strategies.Strategy~handle} or\n * {@link workbox-strategies.Strategy~handleAll} that wraps all fetch and\n * cache actions around plugin callbacks and keeps track of when the strategy\n * is \"done\" (i.e. all added `event.waitUntil()` promises have resolved).\n *\n * @memberof workbox-strategies\n */\nclass StrategyHandler {\n /**\n * Creates a new instance associated with the passed strategy and event\n * that's handling the request.\n *\n * The constructor also initializes the state that will be passed to each of\n * the plugins handling this request.\n *\n * @param {workbox-strategies.Strategy} strategy\n * @param {Object} options\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params] The return value from the\n * {@link workbox-routing~matchCallback} (if applicable).\n */\n constructor(strategy, options) {\n this._cacheKeys = {};\n /**\n * The request the strategy is performing (passed to the strategy's\n * `handle()` or `handleAll()` method).\n * @name request\n * @instance\n * @type {Request}\n * @memberof workbox-strategies.StrategyHandler\n */\n /**\n * The event associated with this request.\n * @name event\n * @instance\n * @type {ExtendableEvent}\n * @memberof workbox-strategies.StrategyHandler\n */\n /**\n * A `URL` instance of `request.url` (if passed to the strategy's\n * `handle()` or `handleAll()` method).\n * Note: the `url` param will be present if the strategy was invoked\n * from a workbox `Route` object.\n * @name url\n * @instance\n * @type {URL|undefined}\n * @memberof workbox-strategies.StrategyHandler\n */\n /**\n * A `param` value (if passed to the strategy's\n * `handle()` or `handleAll()` method).\n * Note: the `param` param will be present if the strategy was invoked\n * from a workbox `Route` object and the\n * {@link workbox-routing~matchCallback} returned\n * a truthy value (it will be that value).\n * @name params\n * @instance\n * @type {*|undefined}\n * @memberof workbox-strategies.StrategyHandler\n */\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(options.event, ExtendableEvent, {\n moduleName: 'workbox-strategies',\n className: 'StrategyHandler',\n funcName: 'constructor',\n paramName: 'options.event',\n });\n }\n Object.assign(this, options);\n this.event = options.event;\n this._strategy = strategy;\n this._handlerDeferred = new Deferred();\n this._extendLifetimePromises = [];\n // Copy the plugins list (since it's mutable on the strategy),\n // so any mutations don't affect this handler instance.\n this._plugins = [...strategy.plugins];\n this._pluginStateMap = new Map();\n for (const plugin of this._plugins) {\n this._pluginStateMap.set(plugin, {});\n }\n this.event.waitUntil(this._handlerDeferred.promise);\n }\n /**\n * Fetches a given request (and invokes any applicable plugin callback\n * methods) using the `fetchOptions` (for non-navigation requests) and\n * `plugins` defined on the `Strategy` object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - `requestWillFetch()`\n * - `fetchDidSucceed()`\n * - `fetchDidFail()`\n *\n * @param {Request|string} input The URL or request to fetch.\n * @return {Promise<Response>}\n */\n async fetch(input) {\n const { event } = this;\n let request = toRequest(input);\n if (request.mode === 'navigate' &&\n event instanceof FetchEvent &&\n event.preloadResponse) {\n const possiblePreloadResponse = (await event.preloadResponse);\n if (possiblePreloadResponse) {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`Using a preloaded navigation response for ` +\n `'${getFriendlyURL(request.url)}'`);\n }\n return possiblePreloadResponse;\n }\n }\n // If there is a fetchDidFail plugin, we need to save a clone of the\n // original request before it's either modified by a requestWillFetch\n // plugin or before the original request's body is consumed via fetch().\n const originalRequest = this.hasCallback('fetchDidFail')\n ? request.clone()\n : null;\n try {\n for (const cb of this.iterateCallbacks('requestWillFetch')) {\n request = await cb({ request: request.clone(), event });\n }\n }\n catch (err) {\n if (err instanceof Error) {\n throw new WorkboxError('plugin-error-request-will-fetch', {\n thrownErrorMessage: err.message,\n });\n }\n }\n // The request can be altered by plugins with `requestWillFetch` making\n // the original request (most likely from a `fetch` event) different\n // from the Request we make. Pass both to `fetchDidFail` to aid debugging.\n const pluginFilteredRequest = request.clone();\n try {\n let fetchResponse;\n // See https://github.com/GoogleChrome/workbox/issues/1796\n fetchResponse = await fetch(request, request.mode === 'navigate' ? undefined : this._strategy.fetchOptions);\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Network request for ` +\n `'${getFriendlyURL(request.url)}' returned a response with ` +\n `status '${fetchResponse.status}'.`);\n }\n for (const callback of this.iterateCallbacks('fetchDidSucceed')) {\n fetchResponse = await callback({\n event,\n request: pluginFilteredRequest,\n response: fetchResponse,\n });\n }\n return fetchResponse;\n }\n catch (error) {\n if (process.env.NODE_ENV !== 'production') {\n logger.log(`Network request for ` +\n `'${getFriendlyURL(request.url)}' threw an error.`, error);\n }\n // `originalRequest` will only exist if a `fetchDidFail` callback\n // is being used (see above).\n if (originalRequest) {\n await this.runCallbacks('fetchDidFail', {\n error: error,\n event,\n originalRequest: originalRequest.clone(),\n request: pluginFilteredRequest.clone(),\n });\n }\n throw error;\n }\n }\n /**\n * Calls `this.fetch()` and (in the background) runs `this.cachePut()` on\n * the response generated by `this.fetch()`.\n *\n * The call to `this.cachePut()` automatically invokes `this.waitUntil()`,\n * so you do not have to manually call `waitUntil()` on the event.\n *\n * @param {Request|string} input The request or URL to fetch and cache.\n * @return {Promise<Response>}\n */\n async fetchAndCachePut(input) {\n const response = await this.fetch(input);\n const responseClone = response.clone();\n void this.waitUntil(this.cachePut(input, responseClone));\n return response;\n }\n /**\n * Matches a request from the cache (and invokes any applicable plugin\n * callback methods) using the `cacheName`, `matchOptions`, and `plugins`\n * defined on the strategy object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - cacheKeyWillByUsed()\n * - cachedResponseWillByUsed()\n *\n * @param {Request|string} key The Request or URL to use as the cache key.\n * @return {Promise<Response|undefined>} A matching response, if found.\n */\n async cacheMatch(key) {\n const request = toRequest(key);\n let cachedResponse;\n const { cacheName, matchOptions } = this._strategy;\n const effectiveRequest = await this.getCacheKey(request, 'read');\n const multiMatchOptions = Object.assign(Object.assign({}, matchOptions), { cacheName });\n cachedResponse = await caches.match(effectiveRequest, multiMatchOptions);\n if (process.env.NODE_ENV !== 'production') {\n if (cachedResponse) {\n logger.debug(`Found a cached response in '${cacheName}'.`);\n }\n else {\n logger.debug(`No cached response found in '${cacheName}'.`);\n }\n }\n for (const callback of this.iterateCallbacks('cachedResponseWillBeUsed')) {\n cachedResponse =\n (await callback({\n cacheName,\n matchOptions,\n cachedResponse,\n request: effectiveRequest,\n event: this.event,\n })) || undefined;\n }\n return cachedResponse;\n }\n /**\n * Puts a request/response pair in the cache (and invokes any applicable\n * plugin callback methods) using the `cacheName` and `plugins` defined on\n * the strategy object.\n *\n * The following plugin lifecycle methods are invoked when using this method:\n * - cacheKeyWillByUsed()\n * - cacheWillUpdate()\n * - cacheDidUpdate()\n *\n * @param {Request|string} key The request or URL to use as the cache key.\n * @param {Response} response The response to cache.\n * @return {Promise<boolean>} `false` if a cacheWillUpdate caused the response\n * not be cached, and `true` otherwise.\n */\n async cachePut(key, response) {\n const request = toRequest(key);\n // Run in the next task to avoid blocking other cache reads.\n // https://github.com/w3c/ServiceWorker/issues/1397\n await timeout(0);\n const effectiveRequest = await this.getCacheKey(request, 'write');\n if (process.env.NODE_ENV !== 'production') {\n if (effectiveRequest.method && effectiveRequest.method !== 'GET') {\n throw new WorkboxError('attempt-to-cache-non-get-request', {\n url: getFriendlyURL(effectiveRequest.url),\n method: effectiveRequest.method,\n });\n }\n // See https://github.com/GoogleChrome/workbox/issues/2818\n const vary = response.headers.get('Vary');\n if (vary) {\n logger.debug(`The response for ${getFriendlyURL(effectiveRequest.url)} ` +\n `has a 'Vary: ${vary}' header. ` +\n `Consider setting the {ignoreVary: true} option on your strategy ` +\n `to ensure cache matching and deletion works as expected.`);\n }\n }\n if (!response) {\n if (process.env.NODE_ENV !== 'production') {\n logger.error(`Cannot cache non-existent response for ` +\n `'${getFriendlyURL(effectiveRequest.url)}'.`);\n }\n throw new WorkboxError('cache-put-with-no-response', {\n url: getFriendlyURL(effectiveRequest.url),\n });\n }\n const responseToCache = await this._ensureResponseSafeToCache(response);\n if (!responseToCache) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Response '${getFriendlyURL(effectiveRequest.url)}' ` +\n `will not be cached.`, responseToCache);\n }\n return false;\n }\n const { cacheName, matchOptions } = this._strategy;\n const cache = await self.caches.open(cacheName);\n const hasCacheUpdateCallback = this.hasCallback('cacheDidUpdate');\n const oldResponse = hasCacheUpdateCallback\n ? await cacheMatchIgnoreParams(\n // TODO(philipwalton): the `__WB_REVISION__` param is a precaching\n // feature. Consider into ways to only add this behavior if using\n // precaching.\n cache, effectiveRequest.clone(), ['__WB_REVISION__'], matchOptions)\n : null;\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Updating the '${cacheName}' cache with a new Response ` +\n `for ${getFriendlyURL(effectiveRequest.url)}.`);\n }\n try {\n await cache.put(effectiveRequest, hasCacheUpdateCallback ? responseToCache.clone() : responseToCache);\n }\n catch (error) {\n if (error instanceof Error) {\n // See https://developer.mozilla.org/en-US/docs/Web/API/DOMException#exception-QuotaExceededError\n if (error.name === 'QuotaExceededError') {\n await executeQuotaErrorCallbacks();\n }\n throw error;\n }\n }\n for (const callback of this.iterateCallbacks('cacheDidUpdate')) {\n await callback({\n cacheName,\n oldResponse,\n newResponse: responseToCache.clone(),\n request: effectiveRequest,\n event: this.event,\n });\n }\n return true;\n }\n /**\n * Checks the list of plugins for the `cacheKeyWillBeUsed` callback, and\n * executes any of those callbacks found in sequence. The final `Request`\n * object returned by the last plugin is treated as the cache key for cache\n * reads and/or writes. If no `cacheKeyWillBeUsed` plugin callbacks have\n * been registered, the passed request is returned unmodified\n *\n * @param {Request} request\n * @param {string} mode\n * @return {Promise<Request>}\n */\n async getCacheKey(request, mode) {\n const key = `${request.url} | ${mode}`;\n if (!this._cacheKeys[key]) {\n let effectiveRequest = request;\n for (const callback of this.iterateCallbacks('cacheKeyWillBeUsed')) {\n effectiveRequest = toRequest(await callback({\n mode,\n request: effectiveRequest,\n event: this.event,\n // params has a type any can't change right now.\n params: this.params, // eslint-disable-line\n }));\n }\n this._cacheKeys[key] = effectiveRequest;\n }\n return this._cacheKeys[key];\n }\n /**\n * Returns true if the strategy has at least one plugin with the given\n * callback.\n *\n * @param {string} name The name of the callback to check for.\n * @return {boolean}\n */\n hasCallback(name) {\n for (const plugin of this._strategy.plugins) {\n if (name in plugin) {\n return true;\n }\n }\n return false;\n }\n /**\n * Runs all plugin callbacks matching the given name, in order, passing the\n * given param object (merged ith the current plugin state) as the only\n * argument.\n *\n * Note: since this method runs all plugins, it's not suitable for cases\n * where the return value of a callback needs to be applied prior to calling\n * the next callback. See\n * {@link workbox-strategies.StrategyHandler#iterateCallbacks}\n * below for how to handle that case.\n *\n * @param {string} name The name of the callback to run within each plugin.\n * @param {Object} param The object to pass as the first (and only) param\n * when executing each callback. This object will be merged with the\n * current plugin state prior to callback execution.\n */\n async runCallbacks(name, param) {\n for (const callback of this.iterateCallbacks(name)) {\n // TODO(philipwalton): not sure why `any` is needed. It seems like\n // this should work with `as WorkboxPluginCallbackParam[C]`.\n await callback(param);\n }\n }\n /**\n * Accepts a callback and returns an iterable of matching plugin callbacks,\n * where each callback is wrapped with the current handler state (i.e. when\n * you call each callback, whatever object parameter you pass it will\n * be merged with the plugin's current state).\n *\n * @param {string} name The name fo the callback to run\n * @return {Array<Function>}\n */\n *iterateCallbacks(name) {\n for (const plugin of this._strategy.plugins) {\n if (typeof plugin[name] === 'function') {\n const state = this._pluginStateMap.get(plugin);\n const statefulCallback = (param) => {\n const statefulParam = Object.assign(Object.assign({}, param), { state });\n // TODO(philipwalton): not sure why `any` is needed. It seems like\n // this should work with `as WorkboxPluginCallbackParam[C]`.\n return plugin[name](statefulParam);\n };\n yield statefulCallback;\n }\n }\n }\n /**\n * Adds a promise to the\n * [extend lifetime promises]{@link https://w3c.github.io/ServiceWorker/#extendableevent-extend-lifetime-promises}\n * of the event event associated with the request being handled (usually a\n * `FetchEvent`).\n *\n * Note: you can await\n * {@link workbox-strategies.StrategyHandler~doneWaiting}\n * to know when all added promises have settled.\n *\n * @param {Promise} promise A promise to add to the extend lifetime promises\n * of the event that triggered the request.\n */\n waitUntil(promise) {\n this._extendLifetimePromises.push(promise);\n return promise;\n }\n /**\n * Returns a promise that resolves once all promises passed to\n * {@link workbox-strategies.StrategyHandler~waitUntil}\n * have settled.\n *\n * Note: any work done after `doneWaiting()` settles should be manually\n * passed to an event's `waitUntil()` method (not this handler's\n * `waitUntil()` method), otherwise the service worker thread my be killed\n * prior to your work completing.\n */\n async doneWaiting() {\n let promise;\n while ((promise = this._extendLifetimePromises.shift())) {\n await promise;\n }\n }\n /**\n * Stops running the strategy and immediately resolves any pending\n * `waitUntil()` promises.\n */\n destroy() {\n this._handlerDeferred.resolve(null);\n }\n /**\n * This method will call cacheWillUpdate on the available plugins (or use\n * status === 200) to determine if the Response is safe and valid to cache.\n *\n * @param {Request} options.request\n * @param {Response} options.response\n * @return {Promise<Response|undefined>}\n *\n * @private\n */\n async _ensureResponseSafeToCache(response) {\n let responseToCache = response;\n let pluginsUsed = false;\n for (const callback of this.iterateCallbacks('cacheWillUpdate')) {\n responseToCache =\n (await callback({\n request: this.request,\n response: responseToCache,\n event: this.event,\n })) || undefined;\n pluginsUsed = true;\n if (!responseToCache) {\n break;\n }\n }\n if (!pluginsUsed) {\n if (responseToCache && responseToCache.status !== 200) {\n responseToCache = undefined;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (responseToCache) {\n if (responseToCache.status !== 200) {\n if (responseToCache.status === 0) {\n logger.warn(`The response for '${this.request.url}' ` +\n `is an opaque response. The caching strategy that you're ` +\n `using will not cache opaque responses by default.`);\n }\n else {\n logger.debug(`The response for '${this.request.url}' ` +\n `returned a status code of '${response.status}' and won't ` +\n `be cached as a result.`);\n }\n }\n }\n }\n }\n return responseToCache;\n }\n}\nexport { StrategyHandler };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { removeIgnoredSearchParams } from './removeIgnoredSearchParams.js';\nimport '../_version.js';\n/**\n * Generator function that yields possible variations on the original URL to\n * check, one at a time.\n *\n * @param {string} url\n * @param {Object} options\n *\n * @private\n * @memberof workbox-precaching\n */\nexport function* generateURLVariations(url, { ignoreURLParametersMatching = [/^utm_/, /^fbclid$/], directoryIndex = 'index.html', cleanURLs = true, urlManipulation, } = {}) {\n const urlObject = new URL(url, location.href);\n urlObject.hash = '';\n yield urlObject.href;\n const urlWithoutIgnoredParams = removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching);\n yield urlWithoutIgnoredParams.href;\n if (directoryIndex && urlWithoutIgnoredParams.pathname.endsWith('/')) {\n const directoryURL = new URL(urlWithoutIgnoredParams.href);\n directoryURL.pathname += directoryIndex;\n yield directoryURL.href;\n }\n if (cleanURLs) {\n const cleanURL = new URL(urlWithoutIgnoredParams.href);\n cleanURL.pathname += '.html';\n yield cleanURL.href;\n }\n if (urlManipulation) {\n const additionalURLs = urlManipulation({ url: urlObject });\n for (const urlToAttempt of additionalURLs) {\n yield urlToAttempt.href;\n }\n }\n}\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * Removes any URL search parameters that should be ignored.\n *\n * @param {URL} urlObject The original URL.\n * @param {Array<RegExp>} ignoreURLParametersMatching RegExps to test against\n * each search parameter name. Matches mean that the search parameter should be\n * ignored.\n * @return {URL} The URL with any ignored search parameters removed.\n *\n * @private\n * @memberof workbox-precaching\n */\nexport function removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching = []) {\n // Convert the iterable into an array at the start of the loop to make sure\n // deletion doesn't mess up iteration.\n for (const paramName of [...urlObject.searchParams.keys()]) {\n if (ignoreURLParametersMatching.some((regExp) => regExp.test(paramName))) {\n urlObject.searchParams.delete(paramName);\n }\n }\n return urlObject;\n}\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport './_version.js';\n/**\n * Takes in a URL, and returns the corresponding URL that could be used to\n * lookup the entry in the precache.\n *\n * If a relative URL is provided, the location of the service worker file will\n * be used as the base.\n *\n * For precached entries without revision information, the cache key will be the\n * same as the original URL.\n *\n * For precached entries with revision information, the cache key will be the\n * original URL with the addition of a query parameter used for keeping track of\n * the revision info.\n *\n * @param {string} url The URL whose cache key to look up.\n * @return {string} The cache key that corresponds to that URL.\n *\n * @memberof workbox-precaching\n */\nfunction getCacheKeyForURL(url) {\n const precacheController = getOrCreatePrecacheController();\n return precacheController.getCacheKeyForURL(url);\n}\nexport { getCacheKeyForURL };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { addRoute } from './addRoute.js';\nimport { precache } from './precache.js';\nimport './_version.js';\n/**\n * This method will add entries to the precache list and add a route to\n * respond to fetch events.\n *\n * This is a convenience method that will call\n * {@link workbox-precaching.precache} and\n * {@link workbox-precaching.addRoute} in a single call.\n *\n * @param {Array<Object|string>} entries Array of entries to precache.\n * @param {Object} [options] See the\n * {@link workbox-precaching.PrecacheRoute} options.\n *\n * @memberof workbox-precaching\n */\nfunction precacheAndRoute(entries, options) {\n precache(entries);\n addRoute(options);\n}\nexport { precacheAndRoute };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport './_version.js';\n/**\n * Adds items to the precache list, removing any duplicates and\n * stores the files in the\n * {@link workbox-core.cacheNames|\"precache cache\"} when the service\n * worker installs.\n *\n * This method can be called multiple times.\n *\n * Please note: This method **will not** serve any of the cached files for you.\n * It only precaches files. To respond to a network request you call\n * {@link workbox-precaching.addRoute}.\n *\n * If you have a single array of files to precache, you can just call\n * {@link workbox-precaching.precacheAndRoute}.\n *\n * @param {Array<Object|string>} [entries=[]] Array of entries to precache.\n *\n * @memberof workbox-precaching\n */\nfunction precache(entries) {\n const precacheController = getOrCreatePrecacheController();\n precacheController.precache(entries);\n}\nexport { precache };\n","/*\n Copyright 2019 Google LLC\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { registerRoute } from 'workbox-routing/registerRoute.js';\nimport { getOrCreatePrecacheController } from './utils/getOrCreatePrecacheController.js';\nimport { PrecacheRoute } from './PrecacheRoute.js';\nimport './_version.js';\n/**\n * Add a `fetch` listener to the service worker that will\n * respond to\n * [network requests]{@link https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#Custom_responses_to_requests}\n * with precached assets.\n *\n * Requests for assets that aren't precached, the `FetchEvent` will not be\n * responded to, allowing the event to fall through to other `fetch` event\n * listeners.\n *\n * @param {Object} [options] See the {@link workbox-precaching.PrecacheRoute}\n * options.\n *\n * @memberof workbox-precaching\n */\nfunction addRoute(options) {\n const precacheController = getOrCreatePrecacheController();\n const precacheRoute = new PrecacheRoute(precacheController, options);\n registerRoute(precacheRoute);\n}\nexport { addRoute };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { Router } from '../Router.js';\nimport '../_version.js';\nlet defaultRouter;\n/**\n * Creates a new, singleton Router instance if one does not exist. If one\n * does already exist, that instance is returned.\n *\n * @private\n * @return {Router}\n */\nexport const getOrCreateDefaultRouter = () => {\n if (!defaultRouter) {\n defaultRouter = new Router();\n // The helpers that use the default Router assume these listeners exist.\n defaultRouter.addFetchListener();\n defaultRouter.addCacheListener();\n }\n return defaultRouter;\n};\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { messages } from './messages.js';\nimport '../../_version.js';\nconst fallback = (code, ...args) => {\n let msg = code;\n if (args.length > 0) {\n msg += ` :: ${JSON.stringify(args)}`;\n }\n return msg;\n};\nconst generatorFunction = (code, details = {}) => {\n const message = messages[code];\n if (!message) {\n throw new Error(`Unable to find message for code '${code}'.`);\n }\n return message(details);\n};\nexport const messageGenerator = process.env.NODE_ENV === 'production' ? fallback : generatorFunction;\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { messageGenerator } from '../models/messages/messageGenerator.js';\nimport '../_version.js';\n/**\n * Workbox errors should be thrown with this class.\n * This allows use to ensure the type easily in tests,\n * helps developers identify errors from workbox\n * easily and allows use to optimise error\n * messages correctly.\n *\n * @private\n */\nclass WorkboxError extends Error {\n /**\n *\n * @param {string} errorCode The error code that\n * identifies this particular error.\n * @param {Object=} details Any relevant arguments\n * that will help developers identify issues should\n * be added as a key on the context object.\n */\n constructor(errorCode, details) {\n const message = messageGenerator(errorCode, details);\n super(message);\n this.name = errorCode;\n this.details = details;\n }\n}\nexport { WorkboxError };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport '../_version.js';\n/**\n * @param {function()|Object} handler Either a function, or an object with a\n * 'handle' method.\n * @return {Object} An object with a handle method.\n *\n * @private\n */\nexport const normalizeHandler = (handler) => {\n if (handler && typeof handler === 'object') {\n if (process.env.NODE_ENV !== 'production') {\n assert.hasMethod(handler, 'handle', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'handler',\n });\n }\n return handler;\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(handler, 'function', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'handler',\n });\n }\n return { handle: handler };\n }\n};\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { defaultMethod, validMethods } from './utils/constants.js';\nimport { normalizeHandler } from './utils/normalizeHandler.js';\nimport './_version.js';\n/**\n * A `Route` consists of a pair of callback functions, \"match\" and \"handler\".\n * The \"match\" callback determine if a route should be used to \"handle\" a\n * request by returning a non-falsy value if it can. The \"handler\" callback\n * is called when there is a match and should return a Promise that resolves\n * to a `Response`.\n *\n * @memberof workbox-routing\n */\nclass Route {\n /**\n * Constructor for Route class.\n *\n * @param {workbox-routing~matchCallback} match\n * A callback function that determines whether the route matches a given\n * `fetch` event by returning a non-falsy value.\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resolving to a Response.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n */\n constructor(match, handler, method = defaultMethod) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(match, 'function', {\n moduleName: 'workbox-routing',\n className: 'Route',\n funcName: 'constructor',\n paramName: 'match',\n });\n if (method) {\n assert.isOneOf(method, validMethods, { paramName: 'method' });\n }\n }\n // These values are referenced directly by Router so cannot be\n // altered by minificaton.\n this.handler = normalizeHandler(handler);\n this.match = match;\n this.method = method;\n }\n /**\n *\n * @param {workbox-routing-handlerCallback} handler A callback\n * function that returns a Promise resolving to a Response\n */\n setCatchHandler(handler) {\n this.catchHandler = normalizeHandler(handler);\n }\n}\nexport { Route };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * The default HTTP method, 'GET', used when there's no specific method\n * configured for a route.\n *\n * @type {string}\n *\n * @private\n */\nexport const defaultMethod = 'GET';\n/**\n * The list of valid HTTP methods associated with requests that could be routed.\n *\n * @type {Array<string>}\n *\n * @private\n */\nexport const validMethods = [\n 'DELETE',\n 'GET',\n 'HEAD',\n 'PATCH',\n 'POST',\n 'PUT',\n];\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { Route } from './Route.js';\nimport './_version.js';\n/**\n * RegExpRoute makes it easy to create a regular expression based\n * {@link workbox-routing.Route}.\n *\n * For same-origin requests the RegExp only needs to match part of the URL. For\n * requests against third-party servers, you must define a RegExp that matches\n * the start of the URL.\n *\n * @memberof workbox-routing\n * @extends workbox-routing.Route\n */\nclass RegExpRoute extends Route {\n /**\n * If the regular expression contains\n * [capture groups]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references},\n * the captured values will be passed to the\n * {@link workbox-routing~handlerCallback} `params`\n * argument.\n *\n * @param {RegExp} regExp The regular expression to match against URLs.\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n * @param {string} [method='GET'] The HTTP method to match the Route\n * against.\n */\n constructor(regExp, handler, method) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(regExp, RegExp, {\n moduleName: 'workbox-routing',\n className: 'RegExpRoute',\n funcName: 'constructor',\n paramName: 'pattern',\n });\n }\n const match = ({ url }) => {\n const result = regExp.exec(url.href);\n // Return immediately if there's no match.\n if (!result) {\n return;\n }\n // Require that the match start at the first character in the URL string\n // if it's a cross-origin request.\n // See https://github.com/GoogleChrome/workbox/issues/281 for the context\n // behind this behavior.\n if (url.origin !== location.origin && result.index !== 0) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`The regular expression '${regExp.toString()}' only partially matched ` +\n `against the cross-origin URL '${url.toString()}'. RegExpRoute's will only ` +\n `handle cross-origin requests if they match the entire URL.`);\n }\n return;\n }\n // If the route matches, but there aren't any capture groups defined, then\n // this will return [], which is truthy and therefore sufficient to\n // indicate a match.\n // If there are capture groups, then it will return their values.\n return result.slice(1);\n };\n super(match, handler, method);\n }\n}\nexport { RegExpRoute };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst getFriendlyURL = (url) => {\n const urlObj = new URL(String(url), location.href);\n // See https://github.com/GoogleChrome/workbox/issues/2323\n // We want to include everything, except for the origin if it's same-origin.\n return urlObj.href.replace(new RegExp(`^${location.origin}`), '');\n};\nexport { getFriendlyURL };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { defaultMethod } from './utils/constants.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { normalizeHandler } from './utils/normalizeHandler.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport './_version.js';\n/**\n * The Router can be used to process a `FetchEvent` using one or more\n * {@link workbox-routing.Route}, responding with a `Response` if\n * a matching route exists.\n *\n * If no route matches a given a request, the Router will use a \"default\"\n * handler if one is defined.\n *\n * Should the matching Route throw an error, the Router will use a \"catch\"\n * handler if one is defined to gracefully deal with issues and respond with a\n * Request.\n *\n * If a request matches multiple routes, the **earliest** registered route will\n * be used to respond to the request.\n *\n * @memberof workbox-routing\n */\nclass Router {\n /**\n * Initializes a new Router.\n */\n constructor() {\n this._routes = new Map();\n this._defaultHandlerMap = new Map();\n }\n /**\n * @return {Map<string, Array<workbox-routing.Route>>} routes A `Map` of HTTP\n * method name ('GET', etc.) to an array of all the corresponding `Route`\n * instances that are registered.\n */\n get routes() {\n return this._routes;\n }\n /**\n * Adds a fetch event listener to respond to events when a route matches\n * the event's request.\n */\n addFetchListener() {\n // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n self.addEventListener('fetch', ((event) => {\n const { request } = event;\n const responsePromise = this.handleRequest({ request, event });\n if (responsePromise) {\n event.respondWith(responsePromise);\n }\n }));\n }\n /**\n * Adds a message event listener for URLs to cache from the window.\n * This is useful to cache resources loaded on the page prior to when the\n * service worker started controlling it.\n *\n * The format of the message data sent from the window should be as follows.\n * Where the `urlsToCache` array may consist of URL strings or an array of\n * URL string + `requestInit` object (the same as you'd pass to `fetch()`).\n *\n * ```\n * {\n * type: 'CACHE_URLS',\n * payload: {\n * urlsToCache: [\n * './script1.js',\n * './script2.js',\n * ['./script3.js', {mode: 'no-cors'}],\n * ],\n * },\n * }\n * ```\n */\n addCacheListener() {\n // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705\n self.addEventListener('message', ((event) => {\n // event.data is type 'any'\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (event.data && event.data.type === 'CACHE_URLS') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const { payload } = event.data;\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Caching URLs from the window`, payload.urlsToCache);\n }\n const requestPromises = Promise.all(payload.urlsToCache.map((entry) => {\n if (typeof entry === 'string') {\n entry = [entry];\n }\n const request = new Request(...entry);\n return this.handleRequest({ request, event });\n // TODO(philipwalton): TypeScript errors without this typecast for\n // some reason (probably a bug). The real type here should work but\n // doesn't: `Array<Promise<Response> | undefined>`.\n })); // TypeScript\n event.waitUntil(requestPromises);\n // If a MessageChannel was used, reply to the message on success.\n if (event.ports && event.ports[0]) {\n void requestPromises.then(() => event.ports[0].postMessage(true));\n }\n }\n }));\n }\n /**\n * Apply the routing rules to a FetchEvent object to get a Response from an\n * appropriate Route's handler.\n *\n * @param {Object} options\n * @param {Request} options.request The request to handle.\n * @param {ExtendableEvent} options.event The event that triggered the\n * request.\n * @return {Promise<Response>|undefined} A promise is returned if a\n * registered route can handle the request. If there is no matching\n * route and there's no `defaultHandler`, `undefined` is returned.\n */\n handleRequest({ request, event, }) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'handleRequest',\n paramName: 'options.request',\n });\n }\n const url = new URL(request.url, location.href);\n if (!url.protocol.startsWith('http')) {\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Workbox Router only supports URLs that start with 'http'.`);\n }\n return;\n }\n const sameOrigin = url.origin === location.origin;\n const { params, route } = this.findMatchingRoute({\n event,\n request,\n sameOrigin,\n url,\n });\n let handler = route && route.handler;\n const debugMessages = [];\n if (process.env.NODE_ENV !== 'production') {\n if (handler) {\n debugMessages.push([`Found a route to handle this request:`, route]);\n if (params) {\n debugMessages.push([\n `Passing the following params to the route's handler:`,\n params,\n ]);\n }\n }\n }\n // If we don't have a handler because there was no matching route, then\n // fall back to defaultHandler if that's defined.\n const method = request.method;\n if (!handler && this._defaultHandlerMap.has(method)) {\n if (process.env.NODE_ENV !== 'production') {\n debugMessages.push(`Failed to find a matching route. Falling ` +\n `back to the default handler for ${method}.`);\n }\n handler = this._defaultHandlerMap.get(method);\n }\n if (!handler) {\n if (process.env.NODE_ENV !== 'production') {\n // No handler so Workbox will do nothing. If logs is set of debug\n // i.e. verbose, we should print out this information.\n logger.debug(`No route found for: ${getFriendlyURL(url)}`);\n }\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // We have a handler, meaning Workbox is going to handle the route.\n // print the routing details to the console.\n logger.groupCollapsed(`Router is responding to: ${getFriendlyURL(url)}`);\n debugMessages.forEach((msg) => {\n if (Array.isArray(msg)) {\n logger.log(...msg);\n }\n else {\n logger.log(msg);\n }\n });\n logger.groupEnd();\n }\n // Wrap in try and catch in case the handle method throws a synchronous\n // error. It should still callback to the catch handler.\n let responsePromise;\n try {\n responsePromise = handler.handle({ url, request, event, params });\n }\n catch (err) {\n responsePromise = Promise.reject(err);\n }\n // Get route's catch handler, if it exists\n const catchHandler = route && route.catchHandler;\n if (responsePromise instanceof Promise &&\n (this._catchHandler || catchHandler)) {\n responsePromise = responsePromise.catch(async (err) => {\n // If there's a route catch handler, process that first\n if (catchHandler) {\n if (process.env.NODE_ENV !== 'production') {\n // Still include URL here as it will be async from the console group\n // and may not make sense without the URL\n logger.groupCollapsed(`Error thrown when responding to: ` +\n ` ${getFriendlyURL(url)}. Falling back to route's Catch Handler.`);\n logger.error(`Error thrown by:`, route);\n logger.error(err);\n logger.groupEnd();\n }\n try {\n return await catchHandler.handle({ url, request, event, params });\n }\n catch (catchErr) {\n if (catchErr instanceof Error) {\n err = catchErr;\n }\n }\n }\n if (this._catchHandler) {\n if (process.env.NODE_ENV !== 'production') {\n // Still include URL here as it will be async from the console group\n // and may not make sense without the URL\n logger.groupCollapsed(`Error thrown when responding to: ` +\n ` ${getFriendlyURL(url)}. Falling back to global Catch Handler.`);\n logger.error(`Error thrown by:`, route);\n logger.error(err);\n logger.groupEnd();\n }\n return this._catchHandler.handle({ url, request, event });\n }\n throw err;\n });\n }\n return responsePromise;\n }\n /**\n * Checks a request and URL (and optionally an event) against the list of\n * registered routes, and if there's a match, returns the corresponding\n * route along with any params generated by the match.\n *\n * @param {Object} options\n * @param {URL} options.url\n * @param {boolean} options.sameOrigin The result of comparing `url.origin`\n * against the current origin.\n * @param {Request} options.request The request to match.\n * @param {Event} options.event The corresponding event.\n * @return {Object} An object with `route` and `params` properties.\n * They are populated if a matching route was found or `undefined`\n * otherwise.\n */\n findMatchingRoute({ url, sameOrigin, request, event, }) {\n const routes = this._routes.get(request.method) || [];\n for (const route of routes) {\n let params;\n // route.match returns type any, not possible to change right now.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const matchResult = route.match({ url, sameOrigin, request, event });\n if (matchResult) {\n if (process.env.NODE_ENV !== 'production') {\n // Warn developers that using an async matchCallback is almost always\n // not the right thing to do.\n if (matchResult instanceof Promise) {\n logger.warn(`While routing ${getFriendlyURL(url)}, an async ` +\n `matchCallback function was used. Please convert the ` +\n `following route to use a synchronous matchCallback function:`, route);\n }\n }\n // See https://github.com/GoogleChrome/workbox/issues/2079\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n params = matchResult;\n if (Array.isArray(params) && params.length === 0) {\n // Instead of passing an empty array in as params, use undefined.\n params = undefined;\n }\n else if (matchResult.constructor === Object && // eslint-disable-line\n Object.keys(matchResult).length === 0) {\n // Instead of passing an empty object in as params, use undefined.\n params = undefined;\n }\n else if (typeof matchResult === 'boolean') {\n // For the boolean value true (rather than just something truth-y),\n // don't set params.\n // See https://github.com/GoogleChrome/workbox/pull/2134#issuecomment-513924353\n params = undefined;\n }\n // Return early if have a match.\n return { route, params };\n }\n }\n // If no match was found above, return and empty object.\n return {};\n }\n /**\n * Define a default `handler` that's called when no routes explicitly\n * match the incoming request.\n *\n * Each HTTP method ('GET', 'POST', etc.) gets its own default handler.\n *\n * Without a default handler, unmatched requests will go against the\n * network as if there were no service worker present.\n *\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n * @param {string} [method='GET'] The HTTP method to associate with this\n * default handler. Each method has its own default.\n */\n setDefaultHandler(handler, method = defaultMethod) {\n this._defaultHandlerMap.set(method, normalizeHandler(handler));\n }\n /**\n * If a Route throws an error while handling a request, this `handler`\n * will be called and given a chance to provide a response.\n *\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n */\n setCatchHandler(handler) {\n this._catchHandler = normalizeHandler(handler);\n }\n /**\n * Registers a route with the router.\n *\n * @param {workbox-routing.Route} route The route to register.\n */\n registerRoute(route) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isType(route, 'object', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.hasMethod(route, 'match', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.isType(route.handler, 'object', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route',\n });\n assert.hasMethod(route.handler, 'handle', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route.handler',\n });\n assert.isType(route.method, 'string', {\n moduleName: 'workbox-routing',\n className: 'Router',\n funcName: 'registerRoute',\n paramName: 'route.method',\n });\n }\n if (!this._routes.has(route.method)) {\n this._routes.set(route.method, []);\n }\n // Give precedence to all of the earlier routes by adding this additional\n // route to the end of the array.\n this._routes.get(route.method).push(route);\n }\n /**\n * Unregisters a route with the router.\n *\n * @param {workbox-routing.Route} route The route to unregister.\n */\n unregisterRoute(route) {\n if (!this._routes.has(route.method)) {\n throw new WorkboxError('unregister-route-but-not-found-with-method', {\n method: route.method,\n });\n }\n const routeIndex = this._routes.get(route.method).indexOf(route);\n if (routeIndex > -1) {\n this._routes.get(route.method).splice(routeIndex, 1);\n }\n else {\n throw new WorkboxError('unregister-route-route-not-registered');\n }\n }\n}\nexport { Router };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nconst _cacheNameDetails = {\n googleAnalytics: 'googleAnalytics',\n precache: 'precache-v2',\n prefix: 'workbox',\n runtime: 'runtime',\n suffix: typeof registration !== 'undefined' ? registration.scope : '',\n};\nconst _createCacheName = (cacheName) => {\n return [_cacheNameDetails.prefix, cacheName, _cacheNameDetails.suffix]\n .filter((value) => value && value.length > 0)\n .join('-');\n};\nconst eachCacheNameDetail = (fn) => {\n for (const key of Object.keys(_cacheNameDetails)) {\n fn(key);\n }\n};\nexport const cacheNames = {\n updateDetails: (details) => {\n eachCacheNameDetail((key) => {\n if (typeof details[key] === 'string') {\n _cacheNameDetails[key] = details[key];\n }\n });\n },\n getGoogleAnalyticsName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.googleAnalytics);\n },\n getPrecacheName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.precache);\n },\n getPrefix: () => {\n return _cacheNameDetails.prefix;\n },\n getRuntimeName: (userCacheName) => {\n return userCacheName || _createCacheName(_cacheNameDetails.runtime);\n },\n getSuffix: () => {\n return _cacheNameDetails.suffix;\n },\n};\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A plugin, designed to be used with PrecacheController, to determine the\n * of assets that were updated (or not updated) during the install event.\n *\n * @private\n */\nclass PrecacheInstallReportPlugin {\n constructor() {\n this.updatedURLs = [];\n this.notUpdatedURLs = [];\n this.handlerWillStart = async ({ request, state, }) => {\n // TODO: `state` should never be undefined...\n if (state) {\n state.originalRequest = request;\n }\n };\n this.cachedResponseWillBeUsed = async ({ event, state, cachedResponse, }) => {\n if (event.type === 'install') {\n if (state &&\n state.originalRequest &&\n state.originalRequest instanceof Request) {\n // TODO: `state` should never be undefined...\n const url = state.originalRequest.url;\n if (cachedResponse) {\n this.notUpdatedURLs.push(url);\n }\n else {\n this.updatedURLs.push(url);\n }\n }\n }\n return cachedResponse;\n };\n }\n}\nexport { PrecacheInstallReportPlugin };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * A plugin, designed to be used with PrecacheController, to translate URLs into\n * the corresponding cache key, based on the current revision info.\n *\n * @private\n */\nclass PrecacheCacheKeyPlugin {\n constructor({ precacheController }) {\n this.cacheKeyWillBeUsed = async ({ request, params, }) => {\n // Params is type any, can't change right now.\n /* eslint-disable */\n const cacheKey = (params === null || params === void 0 ? void 0 : params.cacheKey) ||\n this._precacheController.getCacheKeyForURL(request.url);\n /* eslint-enable */\n return cacheKey\n ? new Request(cacheKey, { headers: request.headers })\n : request;\n };\n this._precacheController = precacheController;\n }\n}\nexport { PrecacheCacheKeyPlugin };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n/**\n * The Deferred class composes Promises in a way that allows for them to be\n * resolved or rejected from outside the constructor. In most cases promises\n * should be used directly, but Deferreds can be necessary when the logic to\n * resolve a promise must be separate.\n *\n * @private\n */\nclass Deferred {\n /**\n * Creates a promise and exposes its resolve and reject functions as methods.\n */\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\nexport { Deferred };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\n// Callbacks to be executed whenever there's a quota error.\n// Can't change Function type right now.\n// eslint-disable-next-line @typescript-eslint/ban-types\nconst quotaErrorCallbacks = new Set();\nexport { quotaErrorCallbacks };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { StrategyHandler } from './StrategyHandler.js';\nimport './_version.js';\n/**\n * An abstract base class that all other strategy classes must extend from:\n *\n * @memberof workbox-strategies\n */\nclass Strategy {\n /**\n * Creates a new instance of the strategy and sets all documented option\n * properties as public instance properties.\n *\n * Note: if a custom strategy class extends the base Strategy class and does\n * not need more than these properties, it does not need to define its own\n * constructor.\n *\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * {@link workbox-core.cacheNames}.\n * @param {Array<Object>} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)\n * `fetch()` requests made by this strategy.\n * @param {Object} [options.matchOptions] The\n * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n */\n constructor(options = {}) {\n /**\n * Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * {@link workbox-core.cacheNames}.\n *\n * @type {string}\n */\n this.cacheName = cacheNames.getRuntimeName(options.cacheName);\n /**\n * The list\n * [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * used by this strategy.\n *\n * @type {Array<Object>}\n */\n this.plugins = options.plugins || [];\n /**\n * Values passed along to the\n * [`init`]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters}\n * of all fetch() requests made by this strategy.\n *\n * @type {Object}\n */\n this.fetchOptions = options.fetchOptions;\n /**\n * The\n * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n *\n * @type {Object}\n */\n this.matchOptions = options.matchOptions;\n }\n /**\n * Perform a request strategy and returns a `Promise` that will resolve with\n * a `Response`, invoking all relevant plugin callbacks.\n *\n * When a strategy instance is registered with a Workbox\n * {@link workbox-routing.Route}, this method is automatically\n * called when the route matches.\n *\n * Alternatively, this method can be used in a standalone `FetchEvent`\n * listener by passing it to `event.respondWith()`.\n *\n * @param {FetchEvent|Object} options A `FetchEvent` or an object with the\n * properties listed below.\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params]\n */\n handle(options) {\n const [responseDone] = this.handleAll(options);\n return responseDone;\n }\n /**\n * Similar to {@link workbox-strategies.Strategy~handle}, but\n * instead of just returning a `Promise` that resolves to a `Response` it\n * it will return an tuple of `[response, done]` promises, where the former\n * (`response`) is equivalent to what `handle()` returns, and the latter is a\n * Promise that will resolve once any promises that were added to\n * `event.waitUntil()` as part of performing the strategy have completed.\n *\n * You can await the `done` promise to ensure any extra work performed by\n * the strategy (usually caching responses) completes successfully.\n *\n * @param {FetchEvent|Object} options A `FetchEvent` or an object with the\n * properties listed below.\n * @param {Request|string} options.request A request to run this strategy for.\n * @param {ExtendableEvent} options.event The event associated with the\n * request.\n * @param {URL} [options.url]\n * @param {*} [options.params]\n * @return {Array<Promise>} A tuple of [response, done]\n * promises that can be used to determine when the response resolves as\n * well as when the handler has completed all its work.\n */\n handleAll(options) {\n // Allow for flexible options to be passed.\n if (options instanceof FetchEvent) {\n options = {\n event: options,\n request: options.request,\n };\n }\n const event = options.event;\n const request = typeof options.request === 'string'\n ? new Request(options.request)\n : options.request;\n const params = 'params' in options ? options.params : undefined;\n const handler = new StrategyHandler(this, { event, request, params });\n const responseDone = this._getResponse(handler, request, event);\n const handlerDone = this._awaitComplete(responseDone, handler, request, event);\n // Return an array of promises, suitable for use with Promise.all().\n return [responseDone, handlerDone];\n }\n async _getResponse(handler, request, event) {\n await handler.runCallbacks('handlerWillStart', { event, request });\n let response = undefined;\n try {\n response = await this._handle(request, handler);\n // The \"official\" Strategy subclasses all throw this error automatically,\n // but in case a third-party Strategy doesn't, ensure that we have a\n // consistent failure when there's no response or an error response.\n if (!response || response.type === 'error') {\n throw new WorkboxError('no-response', { url: request.url });\n }\n }\n catch (error) {\n if (error instanceof Error) {\n for (const callback of handler.iterateCallbacks('handlerDidError')) {\n response = await callback({ error, event, request });\n if (response) {\n break;\n }\n }\n }\n if (!response) {\n throw error;\n }\n else if (process.env.NODE_ENV !== 'production') {\n logger.log(`While responding to '${getFriendlyURL(request.url)}', ` +\n `an ${error instanceof Error ? error.toString() : ''} error occurred. Using a fallback response provided by ` +\n `a handlerDidError plugin.`);\n }\n }\n for (const callback of handler.iterateCallbacks('handlerWillRespond')) {\n response = await callback({ event, request, response });\n }\n return response;\n }\n async _awaitComplete(responseDone, handler, request, event) {\n let response;\n let error;\n try {\n response = await responseDone;\n }\n catch (error) {\n // Ignore errors, as response errors should be caught via the `response`\n // promise above. The `done` promise will only throw for errors in\n // promises passed to `handler.waitUntil()`.\n }\n try {\n await handler.runCallbacks('handlerDidRespond', {\n event,\n request,\n response,\n });\n await handler.doneWaiting();\n }\n catch (waitUntilError) {\n if (waitUntilError instanceof Error) {\n error = waitUntilError;\n }\n }\n await handler.runCallbacks('handlerDidComplete', {\n event,\n request,\n response,\n error: error,\n });\n handler.destroy();\n if (error) {\n throw error;\n }\n }\n}\nexport { Strategy };\n/**\n * Classes extending the `Strategy` based class should implement this method,\n * and leverage the {@link workbox-strategies.StrategyHandler}\n * arg to perform all fetching and cache logic, which will ensure all relevant\n * cache, cache options, fetch options and plugins are used (per the current\n * strategy instance).\n *\n * @name _handle\n * @instance\n * @abstract\n * @function\n * @param {Request} request\n * @param {workbox-strategies.StrategyHandler} handler\n * @return {Promise<Response>}\n *\n * @memberof workbox-strategies.Strategy\n */\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { copyResponse } from 'workbox-core/copyResponse.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { Strategy } from 'workbox-strategies/Strategy.js';\nimport './_version.js';\n/**\n * A {@link workbox-strategies.Strategy} implementation\n * specifically designed to work with\n * {@link workbox-precaching.PrecacheController}\n * to both cache and fetch precached assets.\n *\n * Note: an instance of this class is created automatically when creating a\n * `PrecacheController`; it's generally not necessary to create this yourself.\n *\n * @extends workbox-strategies.Strategy\n * @memberof workbox-precaching\n */\nclass PrecacheStrategy extends Strategy {\n /**\n *\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to the cache names provided by\n * {@link workbox-core.cacheNames}.\n * @param {Array<Object>} [options.plugins] {@link https://developers.google.com/web/tools/workbox/guides/using-plugins|Plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters|init}\n * of all fetch() requests made by this strategy.\n * @param {Object} [options.matchOptions] The\n * {@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions|CacheQueryOptions}\n * for any `cache.match()` or `cache.put()` calls made by this strategy.\n * @param {boolean} [options.fallbackToNetwork=true] Whether to attempt to\n * get the response from the network if there's a precache miss.\n */\n constructor(options = {}) {\n options.cacheName = cacheNames.getPrecacheName(options.cacheName);\n super(options);\n this._fallbackToNetwork =\n options.fallbackToNetwork === false ? false : true;\n // Redirected responses cannot be used to satisfy a navigation request, so\n // any redirected response must be \"copied\" rather than cloned, so the new\n // response doesn't contain the `redirected` flag. See:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=669363&desc=2#c1\n this.plugins.push(PrecacheStrategy.copyRedirectedCacheableResponsesPlugin);\n }\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise<Response>}\n */\n async _handle(request, handler) {\n const response = await handler.cacheMatch(request);\n if (response) {\n return response;\n }\n // If this is an `install` event for an entry that isn't already cached,\n // then populate the cache.\n if (handler.event && handler.event.type === 'install') {\n return await this._handleInstall(request, handler);\n }\n // Getting here means something went wrong. An entry that should have been\n // precached wasn't found in the cache.\n return await this._handleFetch(request, handler);\n }\n async _handleFetch(request, handler) {\n let response;\n const params = (handler.params || {});\n // Fall back to the network if we're configured to do so.\n if (this._fallbackToNetwork) {\n if (process.env.NODE_ENV !== 'production') {\n logger.warn(`The precached response for ` +\n `${getFriendlyURL(request.url)} in ${this.cacheName} was not ` +\n `found. Falling back to the network.`);\n }\n const integrityInManifest = params.integrity;\n const integrityInRequest = request.integrity;\n const noIntegrityConflict = !integrityInRequest || integrityInRequest === integrityInManifest;\n // Do not add integrity if the original request is no-cors\n // See https://github.com/GoogleChrome/workbox/issues/3096\n response = await handler.fetch(new Request(request, {\n integrity: request.mode !== 'no-cors'\n ? integrityInRequest || integrityInManifest\n : undefined,\n }));\n // It's only \"safe\" to repair the cache if we're using SRI to guarantee\n // that the response matches the precache manifest's expectations,\n // and there's either a) no integrity property in the incoming request\n // or b) there is an integrity, and it matches the precache manifest.\n // See https://github.com/GoogleChrome/workbox/issues/2858\n // Also if the original request users no-cors we don't use integrity.\n // See https://github.com/GoogleChrome/workbox/issues/3096\n if (integrityInManifest &&\n noIntegrityConflict &&\n request.mode !== 'no-cors') {\n this._useDefaultCacheabilityPluginIfNeeded();\n const wasCached = await handler.cachePut(request, response.clone());\n if (process.env.NODE_ENV !== 'production') {\n if (wasCached) {\n logger.log(`A response for ${getFriendlyURL(request.url)} ` +\n `was used to \"repair\" the precache.`);\n }\n }\n }\n }\n else {\n // This shouldn't normally happen, but there are edge cases:\n // https://github.com/GoogleChrome/workbox/issues/1441\n throw new WorkboxError('missing-precache-entry', {\n cacheName: this.cacheName,\n url: request.url,\n });\n }\n if (process.env.NODE_ENV !== 'production') {\n const cacheKey = params.cacheKey || (await handler.getCacheKey(request, 'read'));\n // Workbox is going to handle the route.\n // print the routing details to the console.\n logger.groupCollapsed(`Precaching is responding to: ` + getFriendlyURL(request.url));\n logger.log(`Serving the precached url: ${getFriendlyURL(cacheKey instanceof Request ? cacheKey.url : cacheKey)}`);\n logger.groupCollapsed(`View request details here.`);\n logger.log(request);\n logger.groupEnd();\n logger.groupCollapsed(`View response details here.`);\n logger.log(response);\n logger.groupEnd();\n logger.groupEnd();\n }\n return response;\n }\n async _handleInstall(request, handler) {\n this._useDefaultCacheabilityPluginIfNeeded();\n const response = await handler.fetch(request);\n // Make sure we defer cachePut() until after we know the response\n // should be cached; see https://github.com/GoogleChrome/workbox/issues/2737\n const wasCached = await handler.cachePut(request, response.clone());\n if (!wasCached) {\n // Throwing here will lead to the `install` handler failing, which\n // we want to do if *any* of the responses aren't safe to cache.\n throw new WorkboxError('bad-precaching-response', {\n url: request.url,\n status: response.status,\n });\n }\n return response;\n }\n /**\n * This method is complex, as there a number of things to account for:\n *\n * The `plugins` array can be set at construction, and/or it might be added to\n * to at any time before the strategy is used.\n *\n * At the time the strategy is used (i.e. during an `install` event), there\n * needs to be at least one plugin that implements `cacheWillUpdate` in the\n * array, other than `copyRedirectedCacheableResponsesPlugin`.\n *\n * - If this method is called and there are no suitable `cacheWillUpdate`\n * plugins, we need to add `defaultPrecacheCacheabilityPlugin`.\n *\n * - If this method is called and there is exactly one `cacheWillUpdate`, then\n * we don't have to do anything (this might be a previously added\n * `defaultPrecacheCacheabilityPlugin`, or it might be a custom plugin).\n *\n * - If this method is called and there is more than one `cacheWillUpdate`,\n * then we need to check if one is `defaultPrecacheCacheabilityPlugin`. If so,\n * we need to remove it. (This situation is unlikely, but it could happen if\n * the strategy is used multiple times, the first without a `cacheWillUpdate`,\n * and then later on after manually adding a custom `cacheWillUpdate`.)\n *\n * See https://github.com/GoogleChrome/workbox/issues/2737 for more context.\n *\n * @private\n */\n _useDefaultCacheabilityPluginIfNeeded() {\n let defaultPluginIndex = null;\n let cacheWillUpdatePluginCount = 0;\n for (const [index, plugin] of this.plugins.entries()) {\n // Ignore the copy redirected plugin when determining what to do.\n if (plugin === PrecacheStrategy.copyRedirectedCacheableResponsesPlugin) {\n continue;\n }\n // Save the default plugin's index, in case it needs to be removed.\n if (plugin === PrecacheStrategy.defaultPrecacheCacheabilityPlugin) {\n defaultPluginIndex = index;\n }\n if (plugin.cacheWillUpdate) {\n cacheWillUpdatePluginCount++;\n }\n }\n if (cacheWillUpdatePluginCount === 0) {\n this.plugins.push(PrecacheStrategy.defaultPrecacheCacheabilityPlugin);\n }\n else if (cacheWillUpdatePluginCount > 1 && defaultPluginIndex !== null) {\n // Only remove the default plugin; multiple custom plugins are allowed.\n this.plugins.splice(defaultPluginIndex, 1);\n }\n // Nothing needs to be done if cacheWillUpdatePluginCount is 1\n }\n}\nPrecacheStrategy.defaultPrecacheCacheabilityPlugin = {\n async cacheWillUpdate({ response }) {\n if (!response || response.status >= 400) {\n return null;\n }\n return response;\n },\n};\nPrecacheStrategy.copyRedirectedCacheableResponsesPlugin = {\n async cacheWillUpdate({ response }) {\n return response.redirected ? await copyResponse(response) : response;\n },\n};\nexport { PrecacheStrategy };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { cacheNames } from 'workbox-core/_private/cacheNames.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { waitUntil } from 'workbox-core/_private/waitUntil.js';\nimport { createCacheKey } from './utils/createCacheKey.js';\nimport { PrecacheInstallReportPlugin } from './utils/PrecacheInstallReportPlugin.js';\nimport { PrecacheCacheKeyPlugin } from './utils/PrecacheCacheKeyPlugin.js';\nimport { printCleanupDetails } from './utils/printCleanupDetails.js';\nimport { printInstallDetails } from './utils/printInstallDetails.js';\nimport { PrecacheStrategy } from './PrecacheStrategy.js';\nimport './_version.js';\n/**\n * Performs efficient precaching of assets.\n *\n * @memberof workbox-precaching\n */\nclass PrecacheController {\n /**\n * Create a new PrecacheController.\n *\n * @param {Object} [options]\n * @param {string} [options.cacheName] The cache to use for precaching.\n * @param {string} [options.plugins] Plugins to use when precaching as well\n * as responding to fetch events for precached assets.\n * @param {boolean} [options.fallbackToNetwork=true] Whether to attempt to\n * get the response from the network if there's a precache miss.\n */\n constructor({ cacheName, plugins = [], fallbackToNetwork = true, } = {}) {\n this._urlsToCacheKeys = new Map();\n this._urlsToCacheModes = new Map();\n this._cacheKeysToIntegrities = new Map();\n this._strategy = new PrecacheStrategy({\n cacheName: cacheNames.getPrecacheName(cacheName),\n plugins: [\n ...plugins,\n new PrecacheCacheKeyPlugin({ precacheController: this }),\n ],\n fallbackToNetwork,\n });\n // Bind the install and activate methods to the instance.\n this.install = this.install.bind(this);\n this.activate = this.activate.bind(this);\n }\n /**\n * @type {workbox-precaching.PrecacheStrategy} The strategy created by this controller and\n * used to cache assets and respond to fetch events.\n */\n get strategy() {\n return this._strategy;\n }\n /**\n * Adds items to the precache list, removing any duplicates and\n * stores the files in the\n * {@link workbox-core.cacheNames|\"precache cache\"} when the service\n * worker installs.\n *\n * This method can be called multiple times.\n *\n * @param {Array<Object|string>} [entries=[]] Array of entries to precache.\n */\n precache(entries) {\n this.addToCacheList(entries);\n if (!this._installAndActiveListenersAdded) {\n self.addEventListener('install', this.install);\n self.addEventListener('activate', this.activate);\n this._installAndActiveListenersAdded = true;\n }\n }\n /**\n * This method will add items to the precache list, removing duplicates\n * and ensuring the information is valid.\n *\n * @param {Array<workbox-precaching.PrecacheController.PrecacheEntry|string>} entries\n * Array of entries to precache.\n */\n addToCacheList(entries) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isArray(entries, {\n moduleName: 'workbox-precaching',\n className: 'PrecacheController',\n funcName: 'addToCacheList',\n paramName: 'entries',\n });\n }\n const urlsToWarnAbout = [];\n for (const entry of entries) {\n // See https://github.com/GoogleChrome/workbox/issues/2259\n if (typeof entry === 'string') {\n urlsToWarnAbout.push(entry);\n }\n else if (entry && entry.revision === undefined) {\n urlsToWarnAbout.push(entry.url);\n }\n const { cacheKey, url } = createCacheKey(entry);\n const cacheMode = typeof entry !== 'string' && entry.revision ? 'reload' : 'default';\n if (this._urlsToCacheKeys.has(url) &&\n this._urlsToCacheKeys.get(url) !== cacheKey) {\n throw new WorkboxError('add-to-cache-list-conflicting-entries', {\n firstEntry: this._urlsToCacheKeys.get(url),\n secondEntry: cacheKey,\n });\n }\n if (typeof entry !== 'string' && entry.integrity) {\n if (this._cacheKeysToIntegrities.has(cacheKey) &&\n this._cacheKeysToIntegrities.get(cacheKey) !== entry.integrity) {\n throw new WorkboxError('add-to-cache-list-conflicting-integrities', {\n url,\n });\n }\n this._cacheKeysToIntegrities.set(cacheKey, entry.integrity);\n }\n this._urlsToCacheKeys.set(url, cacheKey);\n this._urlsToCacheModes.set(url, cacheMode);\n if (urlsToWarnAbout.length > 0) {\n const warningMessage = `Workbox is precaching URLs without revision ` +\n `info: ${urlsToWarnAbout.join(', ')}\\nThis is generally NOT safe. ` +\n `Learn more at https://bit.ly/wb-precache`;\n if (process.env.NODE_ENV === 'production') {\n // Use console directly to display this warning without bloating\n // bundle sizes by pulling in all of the logger codebase in prod.\n console.warn(warningMessage);\n }\n else {\n logger.warn(warningMessage);\n }\n }\n }\n }\n /**\n * Precaches new and updated assets. Call this method from the service worker\n * install event.\n *\n * Note: this method calls `event.waitUntil()` for you, so you do not need\n * to call it yourself in your event handlers.\n *\n * @param {ExtendableEvent} event\n * @return {Promise<workbox-precaching.InstallResult>}\n */\n install(event) {\n // waitUntil returns Promise<any>\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return waitUntil(event, async () => {\n const installReportPlugin = new PrecacheInstallReportPlugin();\n this.strategy.plugins.push(installReportPlugin);\n // Cache entries one at a time.\n // See https://github.com/GoogleChrome/workbox/issues/2528\n for (const [url, cacheKey] of this._urlsToCacheKeys) {\n const integrity = this._cacheKeysToIntegrities.get(cacheKey);\n const cacheMode = this._urlsToCacheModes.get(url);\n const request = new Request(url, {\n integrity,\n cache: cacheMode,\n credentials: 'same-origin',\n });\n await Promise.all(this.strategy.handleAll({\n params: { cacheKey },\n request,\n event,\n }));\n }\n const { updatedURLs, notUpdatedURLs } = installReportPlugin;\n if (process.env.NODE_ENV !== 'production') {\n printInstallDetails(updatedURLs, notUpdatedURLs);\n }\n return { updatedURLs, notUpdatedURLs };\n });\n }\n /**\n * Deletes assets that are no longer present in the current precache manifest.\n * Call this method from the service worker activate event.\n *\n * Note: this method calls `event.waitUntil()` for you, so you do not need\n * to call it yourself in your event handlers.\n *\n * @param {ExtendableEvent} event\n * @return {Promise<workbox-precaching.CleanupResult>}\n */\n activate(event) {\n // waitUntil returns Promise<any>\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return waitUntil(event, async () => {\n const cache = await self.caches.open(this.strategy.cacheName);\n const currentlyCachedRequests = await cache.keys();\n const expectedCacheKeys = new Set(this._urlsToCacheKeys.values());\n const deletedURLs = [];\n for (const request of currentlyCachedRequests) {\n if (!expectedCacheKeys.has(request.url)) {\n await cache.delete(request);\n deletedURLs.push(request.url);\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n printCleanupDetails(deletedURLs);\n }\n return { deletedURLs };\n });\n }\n /**\n * Returns a mapping of a precached URL to the corresponding cache key, taking\n * into account the revision information for the URL.\n *\n * @return {Map<string, string>} A URL to cache key mapping.\n */\n getURLsToCacheKeys() {\n return this._urlsToCacheKeys;\n }\n /**\n * Returns a list of all the URLs that have been precached by the current\n * service worker.\n *\n * @return {Array<string>} The precached URLs.\n */\n getCachedURLs() {\n return [...this._urlsToCacheKeys.keys()];\n }\n /**\n * Returns the cache key used for storing a given URL. If that URL is\n * unversioned, like `/index.html', then the cache key will be the original\n * URL with a search parameter appended to it.\n *\n * @param {string} url A URL whose cache key you want to look up.\n * @return {string} The versioned URL that corresponds to a cache key\n * for the original URL, or undefined if that URL isn't precached.\n */\n getCacheKeyForURL(url) {\n const urlObject = new URL(url, location.href);\n return this._urlsToCacheKeys.get(urlObject.href);\n }\n /**\n * @param {string} url A cache key whose SRI you want to look up.\n * @return {string} The subresource integrity associated with the cache key,\n * or undefined if it's not set.\n */\n getIntegrityForCacheKey(cacheKey) {\n return this._cacheKeysToIntegrities.get(cacheKey);\n }\n /**\n * This acts as a drop-in replacement for\n * [`cache.match()`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/match)\n * with the following differences:\n *\n * - It knows what the name of the precache is, and only checks in that cache.\n * - It allows you to pass in an \"original\" URL without versioning parameters,\n * and it will automatically look up the correct cache key for the currently\n * active revision of that URL.\n *\n * E.g., `matchPrecache('index.html')` will find the correct precached\n * response for the currently active service worker, even if the actual cache\n * key is `'/index.html?__WB_REVISION__=1234abcd'`.\n *\n * @param {string|Request} request The key (without revisioning parameters)\n * to look up in the precache.\n * @return {Promise<Response|undefined>}\n */\n async matchPrecache(request) {\n const url = request instanceof Request ? request.url : request;\n const cacheKey = this.getCacheKeyForURL(url);\n if (cacheKey) {\n const cache = await self.caches.open(this.strategy.cacheName);\n return cache.match(cacheKey);\n }\n return undefined;\n }\n /**\n * Returns a function that looks up `url` in the precache (taking into\n * account revision information), and returns the corresponding `Response`.\n *\n * @param {string} url The precached URL which will be used to lookup the\n * `Response`.\n * @return {workbox-routing~handlerCallback}\n */\n createHandlerBoundToURL(url) {\n const cacheKey = this.getCacheKeyForURL(url);\n if (!cacheKey) {\n throw new WorkboxError('non-precached-url', { url });\n }\n return (options) => {\n options.request = new Request(url);\n options.params = Object.assign({ cacheKey }, options.params);\n return this.strategy.handle(options);\n };\n }\n}\nexport { PrecacheController };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { PrecacheController } from '../PrecacheController.js';\nimport '../_version.js';\nlet precacheController;\n/**\n * @return {PrecacheController}\n * @private\n */\nexport const getOrCreatePrecacheController = () => {\n if (!precacheController) {\n precacheController = new PrecacheController();\n }\n return precacheController;\n};\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport '../_version.js';\nexport const cacheOkAndOpaquePlugin = {\n /**\n * Returns a valid response (to allow caching) if the status is 200 (OK) or\n * 0 (opaque).\n *\n * @param {Object} options\n * @param {Response} options.response\n * @return {Response|null}\n *\n * @private\n */\n cacheWillUpdate: async ({ response }) => {\n if (response.status === 200 || response.status === 0) {\n return response;\n }\n return null;\n },\n};\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { getOrCreateDefaultRouter } from './utils/getOrCreateDefaultRouter.js';\nimport './_version.js';\n/**\n * If a Route throws an error while handling a request, this `handler`\n * will be called and given a chance to provide a response.\n *\n * @param {workbox-routing~handlerCallback} handler A callback\n * function that returns a Promise resulting in a Response.\n *\n * @memberof workbox-routing\n */\nfunction setCatchHandler(handler) {\n const defaultRouter = getOrCreateDefaultRouter();\n defaultRouter.setCatchHandler(handler);\n}\nexport { setCatchHandler };\n","import { registerRoute, setCatchHandler } from 'workbox-routing';\nimport { precacheAndRoute, getCacheKeyForURL } from 'workbox-precaching';\nimport { isNav } from './utils';\nimport { NETWORK_HANDLER, PRECACHING_OPTIONS } from './constants';\n\nexport function getFiles() {\n\treturn self.__WB_MANIFEST;\n}\n\nexport function setupPrecaching(precacheFiles, precachingOptions) {\n\tprecacheAndRoute(precacheFiles, precachingOptions || PRECACHING_OPTIONS);\n}\n\nexport function setupRouting() {\n\t/**\n\t * Adding this before `precacheAndRoute` lets us handle all\n\t * the navigation requests even if they are in precache.\n\t */\n\tregisterRoute(({ event }) => isNav(event), NETWORK_HANDLER);\n\n\tsetCatchHandler(({ event }) => {\n\t\tif (isNav(event)) {\n\t\t\treturn caches.match(\n\t\t\t\tgetCacheKeyForURL('/200.html') || getCacheKeyForURL('/index.html')\n\t\t\t);\n\t\t}\n\t\treturn Response.error();\n\t});\n}\n\nexport { PRECACHING_OPTIONS };\n","/*\n Copyright 2020 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { Route } from 'workbox-routing/Route.js';\nimport { generateURLVariations } from './utils/generateURLVariations.js';\nimport './_version.js';\n/**\n * A subclass of {@link workbox-routing.Route} that takes a\n * {@link workbox-precaching.PrecacheController}\n * instance and uses it to match incoming requests and handle fetching\n * responses from the precache.\n *\n * @memberof workbox-precaching\n * @extends workbox-routing.Route\n */\nclass PrecacheRoute extends Route {\n /**\n * @param {PrecacheController} precacheController A `PrecacheController`\n * instance used to both match requests and respond to fetch events.\n * @param {Object} [options] Options to control how requests are matched\n * against the list of precached URLs.\n * @param {string} [options.directoryIndex=index.html] The `directoryIndex` will\n * check cache entries for a URLs ending with '/' to see if there is a hit when\n * appending the `directoryIndex` value.\n * @param {Array<RegExp>} [options.ignoreURLParametersMatching=[/^utm_/, /^fbclid$/]] An\n * array of regex's to remove search params when looking for a cache match.\n * @param {boolean} [options.cleanURLs=true] The `cleanURLs` option will\n * check the cache for the URL with a `.html` added to the end of the end.\n * @param {workbox-precaching~urlManipulation} [options.urlManipulation]\n * This is a function that should take a URL and return an array of\n * alternative URLs that should be checked for precache matches.\n */\n constructor(precacheController, options) {\n const match = ({ request, }) => {\n const urlsToCacheKeys = precacheController.getURLsToCacheKeys();\n for (const possibleURL of generateURLVariations(request.url, options)) {\n const cacheKey = urlsToCacheKeys.get(possibleURL);\n if (cacheKey) {\n const integrity = precacheController.getIntegrityForCacheKey(cacheKey);\n return { cacheKey, integrity };\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n logger.debug(`Precaching did not find a match for ` + getFriendlyURL(request.url));\n }\n return;\n };\n super(match, precacheController.strategy);\n }\n}\nexport { PrecacheRoute };\n","export const isNav = event => event.request.mode === 'navigate';\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { cacheOkAndOpaquePlugin } from './plugins/cacheOkAndOpaquePlugin.js';\nimport { Strategy } from './Strategy.js';\nimport { messages } from './utils/messages.js';\nimport './_version.js';\n/**\n * An implementation of a\n * [network first](https://developer.chrome.com/docs/workbox/caching-strategies-overview/#network-first-falling-back-to-cache)\n * request strategy.\n *\n * By default, this strategy will cache responses with a 200 status code as\n * well as [opaque responses](https://developer.chrome.com/docs/workbox/caching-resources-during-runtime/#opaque-responses).\n * Opaque responses are are cross-origin requests where the response doesn't\n * support [CORS](https://enable-cors.org/).\n *\n * If the network request fails, and there is no cache match, this will throw\n * a `WorkboxError` exception.\n *\n * @extends workbox-strategies.Strategy\n * @memberof workbox-strategies\n */\nclass NetworkFirst extends Strategy {\n /**\n * @param {Object} [options]\n * @param {string} [options.cacheName] Cache name to store and retrieve\n * requests. Defaults to cache names provided by\n * {@link workbox-core.cacheNames}.\n * @param {Array<Object>} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins}\n * to use in conjunction with this caching strategy.\n * @param {Object} [options.fetchOptions] Values passed along to the\n * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters)\n * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796)\n * `fetch()` requests made by this strategy.\n * @param {Object} [options.matchOptions] [`CacheQueryOptions`](https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions)\n * @param {number} [options.networkTimeoutSeconds] If set, any network requests\n * that fail to respond within the timeout will fallback to the cache.\n *\n * This option can be used to combat\n * \"[lie-fi]{@link https://developers.google.com/web/fundamentals/performance/poor-connectivity/#lie-fi}\"\n * scenarios.\n */\n constructor(options = {}) {\n super(options);\n // If this instance contains no plugins with a 'cacheWillUpdate' callback,\n // prepend the `cacheOkAndOpaquePlugin` plugin to the plugins list.\n if (!this.plugins.some((p) => 'cacheWillUpdate' in p)) {\n this.plugins.unshift(cacheOkAndOpaquePlugin);\n }\n this._networkTimeoutSeconds = options.networkTimeoutSeconds || 0;\n if (process.env.NODE_ENV !== 'production') {\n if (this._networkTimeoutSeconds) {\n assert.isType(this._networkTimeoutSeconds, 'number', {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: 'constructor',\n paramName: 'networkTimeoutSeconds',\n });\n }\n }\n }\n /**\n * @private\n * @param {Request|string} request A request to run this strategy for.\n * @param {workbox-strategies.StrategyHandler} handler The event that\n * triggered the request.\n * @return {Promise<Response>}\n */\n async _handle(request, handler) {\n const logs = [];\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(request, Request, {\n moduleName: 'workbox-strategies',\n className: this.constructor.name,\n funcName: 'handle',\n paramName: 'makeRequest',\n });\n }\n const promises = [];\n let timeoutId;\n if (this._networkTimeoutSeconds) {\n const { id, promise } = this._getTimeoutPromise({ request, logs, handler });\n timeoutId = id;\n promises.push(promise);\n }\n const networkPromise = this._getNetworkPromise({\n timeoutId,\n request,\n logs,\n handler,\n });\n promises.push(networkPromise);\n const response = await handler.waitUntil((async () => {\n // Promise.race() will resolve as soon as the first promise resolves.\n return ((await handler.waitUntil(Promise.race(promises))) ||\n // If Promise.race() resolved with null, it might be due to a network\n // timeout + a cache miss. If that were to happen, we'd rather wait until\n // the networkPromise resolves instead of returning null.\n // Note that it's fine to await an already-resolved promise, so we don't\n // have to check to see if it's still \"in flight\".\n (await networkPromise));\n })());\n if (process.env.NODE_ENV !== 'production') {\n logger.groupCollapsed(messages.strategyStart(this.constructor.name, request));\n for (const log of logs) {\n logger.log(log);\n }\n messages.printFinalResponse(response);\n logger.groupEnd();\n }\n if (!response) {\n throw new WorkboxError('no-response', { url: request.url });\n }\n return response;\n }\n /**\n * @param {Object} options\n * @param {Request} options.request\n * @param {Array} options.logs A reference to the logs array\n * @param {Event} options.event\n * @return {Promise<Response>}\n *\n * @private\n */\n _getTimeoutPromise({ request, logs, handler, }) {\n let timeoutId;\n const timeoutPromise = new Promise((resolve) => {\n const onNetworkTimeout = async () => {\n if (process.env.NODE_ENV !== 'production') {\n logs.push(`Timing out the network response at ` +\n `${this._networkTimeoutSeconds} seconds.`);\n }\n resolve(await handler.cacheMatch(request));\n };\n timeoutId = setTimeout(onNetworkTimeout, this._networkTimeoutSeconds * 1000);\n });\n return {\n promise: timeoutPromise,\n id: timeoutId,\n };\n }\n /**\n * @param {Object} options\n * @param {number|undefined} options.timeoutId\n * @param {Request} options.request\n * @param {Array} options.logs A reference to the logs Array.\n * @param {Event} options.event\n * @return {Promise<Response>}\n *\n * @private\n */\n async _getNetworkPromise({ timeoutId, request, logs, handler, }) {\n let error;\n let response;\n try {\n response = await handler.fetchAndCachePut(request);\n }\n catch (fetchError) {\n if (fetchError instanceof Error) {\n error = fetchError;\n }\n }\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n if (process.env.NODE_ENV !== 'production') {\n if (response) {\n logs.push(`Got response from network.`);\n }\n else {\n logs.push(`Unable to get a response from the network. Will respond ` +\n `with a cached response.`);\n }\n }\n if (error || !response) {\n response = await handler.cacheMatch(request);\n if (process.env.NODE_ENV !== 'production') {\n if (response) {\n logs.push(`Found a cached response in the '${this.cacheName}'` + ` cache.`);\n }\n else {\n logs.push(`No response found in the '${this.cacheName}' cache.`);\n }\n }\n }\n return response;\n }\n}\nexport { NetworkFirst };\n","/*\n Copyright 2019 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { cacheNames as _cacheNames } from './_private/cacheNames.js';\nimport './_version.js';\n/**\n * Get the current cache names and prefix/suffix used by Workbox.\n *\n * `cacheNames.precache` is used for precached assets,\n * `cacheNames.googleAnalytics` is used by `workbox-google-analytics` to\n * store `analytics.js`, and `cacheNames.runtime` is used for everything else.\n *\n * `cacheNames.prefix` can be used to retrieve just the current prefix value.\n * `cacheNames.suffix` can be used to retrieve just the current suffix value.\n *\n * @return {Object} An object with `precache`, `runtime`, `prefix`, and\n * `googleAnalytics` properties.\n *\n * @memberof workbox-core\n */\nconst cacheNames = {\n get googleAnalytics() {\n return _cacheNames.getGoogleAnalyticsName();\n },\n get precache() {\n return _cacheNames.getPrecacheName();\n },\n get prefix() {\n return _cacheNames.getPrefix();\n },\n get runtime() {\n return _cacheNames.getRuntimeName();\n },\n get suffix() {\n return _cacheNames.getSuffix();\n },\n};\nexport { cacheNames };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { assert } from 'workbox-core/_private/assert.js';\nimport { WorkboxError } from 'workbox-core/_private/WorkboxError.js';\nimport { getFriendlyURL } from 'workbox-core/_private/getFriendlyURL.js';\nimport { logger } from 'workbox-core/_private/logger.js';\nimport './_version.js';\n/**\n * This class allows you to set up rules determining what\n * status codes and/or headers need to be present in order for a\n * [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response)\n * to be considered cacheable.\n *\n * @memberof workbox-cacheable-response\n */\nclass CacheableResponse {\n /**\n * To construct a new CacheableResponse instance you must provide at least\n * one of the `config` properties.\n *\n * If both `statuses` and `headers` are specified, then both conditions must\n * be met for the `Response` to be considered cacheable.\n *\n * @param {Object} config\n * @param {Array<number>} [config.statuses] One or more status codes that a\n * `Response` can have and be considered cacheable.\n * @param {Object<string,string>} [config.headers] A mapping of header names\n * and expected values that a `Response` can have and be considered cacheable.\n * If multiple headers are provided, only one needs to be present.\n */\n constructor(config = {}) {\n if (process.env.NODE_ENV !== 'production') {\n if (!(config.statuses || config.headers)) {\n throw new WorkboxError('statuses-or-headers-required', {\n moduleName: 'workbox-cacheable-response',\n className: 'CacheableResponse',\n funcName: 'constructor',\n });\n }\n if (config.statuses) {\n assert.isArray(config.statuses, {\n moduleName: 'workbox-cacheable-response',\n className: 'CacheableResponse',\n funcName: 'constructor',\n paramName: 'config.statuses',\n });\n }\n if (config.headers) {\n assert.isType(config.headers, 'object', {\n moduleName: 'workbox-cacheable-response',\n className: 'CacheableResponse',\n funcName: 'constructor',\n paramName: 'config.headers',\n });\n }\n }\n this._statuses = config.statuses;\n this._headers = config.headers;\n }\n /**\n * Checks a response to see whether it's cacheable or not, based on this\n * object's configuration.\n *\n * @param {Response} response The response whose cacheability is being\n * checked.\n * @return {boolean} `true` if the `Response` is cacheable, and `false`\n * otherwise.\n */\n isResponseCacheable(response) {\n if (process.env.NODE_ENV !== 'production') {\n assert.isInstance(response, Response, {\n moduleName: 'workbox-cacheable-response',\n className: 'CacheableResponse',\n funcName: 'isResponseCacheable',\n paramName: 'response',\n });\n }\n let cacheable = true;\n if (this._statuses) {\n cacheable = this._statuses.includes(response.status);\n }\n if (this._headers && cacheable) {\n cacheable = Object.keys(this._headers).some((headerName) => {\n return response.headers.get(headerName) === this._headers[headerName];\n });\n }\n if (process.env.NODE_ENV !== 'production') {\n if (!cacheable) {\n logger.groupCollapsed(`The request for ` +\n `'${getFriendlyURL(response.url)}' returned a response that does ` +\n `not meet the criteria for being cached.`);\n logger.groupCollapsed(`View cacheability criteria here.`);\n logger.log(`Cacheable statuses: ` + JSON.stringify(this._statuses));\n logger.log(`Cacheable headers: ` + JSON.stringify(this._headers, null, 2));\n logger.groupEnd();\n const logFriendlyHeaders = {};\n response.headers.forEach((value, key) => {\n logFriendlyHeaders[key] = value;\n });\n logger.groupCollapsed(`View response status and headers here.`);\n logger.log(`Response status: ${response.status}`);\n logger.log(`Response headers: ` + JSON.stringify(logFriendlyHeaders, null, 2));\n logger.groupEnd();\n logger.groupCollapsed(`View full response details here.`);\n logger.log(response.headers);\n logger.log(response);\n logger.groupEnd();\n logger.groupEnd();\n }\n }\n return cacheable;\n }\n}\nexport { CacheableResponse };\n","/*\n Copyright 2018 Google LLC\n\n Use of this source code is governed by an MIT-style\n license that can be found in the LICENSE file or at\n https://opensource.org/licenses/MIT.\n*/\nimport { CacheableResponse, } from './CacheableResponse.js';\nimport './_version.js';\n/**\n * A class implementing the `cacheWillUpdate` lifecycle callback. This makes it\n * easier to add in cacheability checks to requests made via Workbox's built-in\n * strategies.\n *\n * @memberof workbox-cacheable-response\n */\nclass CacheableResponsePlugin {\n /**\n * To construct a new CacheableResponsePlugin instance you must provide at\n * least one of the `config` properties.\n *\n * If both `statuses` and `headers` are specified, then both conditions must\n * be met for the `Response` to be considered cacheable.\n *\n * @param {Object} config\n * @param {Array<number>} [config.statuses] One or more status codes that a\n * `Response` can have and be considered cacheable.\n * @param {Object<string,string>} [config.headers] A mapping of header names\n * and expected values that a `Response` can have and be considered cacheable.\n * If multiple headers are provided, only one needs to be present.\n */\n constructor(config) {\n /**\n * @param {Object} options\n * @param {Response} options.response\n * @return {Response|null}\n * @private\n */\n this.cacheWillUpdate = async ({ response }) => {\n if (this._cacheableResponse.isResponseCacheable(response)) {\n return response;\n }\n return null;\n };\n this._cacheableResponse = new CacheableResponse(config);\n }\n}\nexport { CacheableResponsePlugin };\n","import { NetworkFirst } from 'workbox-strategies';\nimport { cacheNames } from 'workbox-core';\nimport { CacheableResponsePlugin } from 'workbox-cacheable-response';\n\nexport const PRECACHING_OPTIONS = {};\n\nexport const NETWORK_HANDLER = new NetworkFirst({\n\t// this cache is plunged with every new service worker deploy so we dont need to care about purging the cache.\n\tcacheName: cacheNames.precache,\n\tnetworkTimeoutSeconds: 5, // if u dont start getting headers within 5 sec fallback to cache.\n\tplugins: [\n\t\tnew CacheableResponsePlugin({\n\t\t\tstatuses: [200], // only cache valid responses, not opaque responses e.g. wifi portal.\n\t\t}),\n\t],\n});\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:6.5.3'] && _();\n}\ncatch (e) { }\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:routing:6.5.3'] && _();\n}\ncatch (e) { }\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:6.5.3'] && _();\n}\ncatch (e) { }\n","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:core:6.5.3'] && _();\n}\ncatch (e) { }\n"]}