--- /home/fdroid/fdroiddata/tmp/net.activitywatch.android_42.apk +++ /home/fdroid/fdroiddata/tmp/sigcp_net.activitywatch.android_42.apk ├── zipinfo -v {} │ @@ -227,15 +227,15 @@ │ version of encoding software: 0.0 │ minimum file system compatibility required: MS-DOS, OS/2 or NT FAT │ minimum software version required to extract: 0.0 │ compression method: none (stored) │ file security status: not encrypted │ extended local header: no │ file last modified on (DOS date/time): 1981 Jan 1 01:01:02 │ - 32-bit CRC value (hex): bdf261a1 │ + 32-bit CRC value (hex): cb55b49b │ compressed size: 29725672 bytes │ uncompressed size: 29725672 bytes │ length of filename: 29 characters │ length of extra field: 0 bytes │ length of file comment: 0 characters │ disk number on which file begins: disk 1 │ apparent file type: binary │ @@ -257,15 +257,15 @@ │ version of encoding software: 0.0 │ minimum file system compatibility required: MS-DOS, OS/2 or NT FAT │ minimum software version required to extract: 0.0 │ compression method: none (stored) │ file security status: not encrypted │ extended local header: no │ file last modified on (DOS date/time): 1981 Jan 1 01:01:02 │ - 32-bit CRC value (hex): 48dfafe2 │ + 32-bit CRC value (hex): 1b1a093b │ compressed size: 37951184 bytes │ uncompressed size: 37951184 bytes │ length of filename: 27 characters │ length of extra field: 0 bytes │ length of file comment: 0 characters │ disk number on which file begins: disk 1 │ apparent file type: binary │ @@ -287,15 +287,15 @@ │ version of encoding software: 0.0 │ minimum file system compatibility required: MS-DOS, OS/2 or NT FAT │ minimum software version required to extract: 0.0 │ compression method: none (stored) │ file security status: not encrypted │ extended local header: no │ file last modified on (DOS date/time): 1981 Jan 1 01:01:02 │ - 32-bit CRC value (hex): edf701a2 │ + 32-bit CRC value (hex): 56ec0a12 │ compressed size: 26652804 bytes │ uncompressed size: 26652804 bytes │ length of filename: 31 characters │ length of extra field: 0 bytes │ length of file comment: 0 characters │ disk number on which file begins: disk 1 │ apparent file type: binary │ @@ -317,15 +317,15 @@ │ version of encoding software: 0.0 │ minimum file system compatibility required: MS-DOS, OS/2 or NT FAT │ minimum software version required to extract: 0.0 │ compression method: none (stored) │ file security status: not encrypted │ extended local header: no │ file last modified on (DOS date/time): 1981 Jan 1 01:01:02 │ - 32-bit CRC value (hex): 469d4b0b │ + 32-bit CRC value (hex): 62a3989f │ compressed size: 32114720 bytes │ uncompressed size: 32114720 bytes │ length of filename: 29 characters │ length of extra field: 0 bytes │ length of file comment: 0 characters │ disk number on which file begins: disk 1 │ apparent file type: binary │ @@ -347,15 +347,15 @@ │ version of encoding software: 0.0 │ minimum file system compatibility required: MS-DOS, OS/2 or NT FAT │ minimum software version required to extract: 0.0 │ compression method: none (stored) │ file security status: not encrypted │ extended local header: no │ file last modified on (DOS date/time): 1981 Jan 1 01:01:02 │ - 32-bit CRC value (hex): f03c2a17 │ + 32-bit CRC value (hex): e61d4bfa │ compressed size: 30940232 bytes │ uncompressed size: 30940232 bytes │ length of filename: 23 characters │ length of extra field: 0 bytes │ length of file comment: 0 characters │ disk number on which file begins: disk 1 │ apparent file type: binary │ @@ -377,15 +377,15 @@ │ version of encoding software: 0.0 │ minimum file system compatibility required: MS-DOS, OS/2 or NT FAT │ minimum software version required to extract: 0.0 │ compression method: none (stored) │ file security status: not encrypted │ extended local header: no │ file last modified on (DOS date/time): 1981 Jan 1 01:01:02 │ - 32-bit CRC value (hex): 5b112393 │ + 32-bit CRC value (hex): 5612bfe2 │ compressed size: 39369036 bytes │ uncompressed size: 39369036 bytes │ length of filename: 21 characters │ length of extra field: 0 bytes │ length of file comment: 0 characters │ disk number on which file begins: disk 1 │ apparent file type: binary │ @@ -407,15 +407,15 @@ │ version of encoding software: 0.0 │ minimum file system compatibility required: MS-DOS, OS/2 or NT FAT │ minimum software version required to extract: 0.0 │ compression method: none (stored) │ file security status: not encrypted │ extended local header: no │ file last modified on (DOS date/time): 1981 Jan 1 01:01:02 │ - 32-bit CRC value (hex): 722ea299 │ + 32-bit CRC value (hex): 5478f088 │ compressed size: 30505808 bytes │ uncompressed size: 30505808 bytes │ length of filename: 26 characters │ length of extra field: 0 bytes │ length of file comment: 0 characters │ disk number on which file begins: disk 1 │ apparent file type: binary │ @@ -437,15 +437,15 @@ │ version of encoding software: 0.0 │ minimum file system compatibility required: MS-DOS, OS/2 or NT FAT │ minimum software version required to extract: 0.0 │ compression method: none (stored) │ file security status: not encrypted │ extended local header: no │ file last modified on (DOS date/time): 1981 Jan 1 01:01:02 │ - 32-bit CRC value (hex): fd0b47bd │ + 32-bit CRC value (hex): 59474f17 │ compressed size: 39653584 bytes │ uncompressed size: 39653584 bytes │ length of filename: 24 characters │ length of extra field: 0 bytes │ length of file comment: 0 characters │ disk number on which file begins: disk 1 │ apparent file type: binary ├── lib/x86_64/libaw_sync.so │ ├── strings --all --bytes=8 {} │ │ @@ -16951,15 +16951,15 @@ │ │ d="m 400,452.3622 33,-37" │ │ id="path4386" │ │ inkscape:connector-curvature="0" │ │ sodipodi:nodetypes="cc" /> │ │ manifest.json{"name":"ActivityWatch","short_name":"ActivityWatch","theme_color":"#4DBA87","icons":[{"src":"logo.png","sizes":"512x512","type":"image/png"}],"start_url":".","display":"standalone","background_color":"#000000"}service-worker.jsif(!self.define){let s,l={};const n=(n,r)=>(n=new URL(n+".js",r).href,l[n]||new Promise(l=>{if("document"in self){const s=document.createElement("script");s.src=n,s.onload=l,document.head.appendChild(s)}else s=n,importScripts(n),l()}).then(()=>{let s=l[n];if(!s)throw new Error(`Module ${n} didn │ │ t register its module`);return s}));self.define=(r,i)=>{const u=s||("document"in self?document.currentScript.src:"")||location.href;if(l[u])return;let e={};const c=s=>n(s,u),o={module:{uri:u},exports:e,require:c};l[u]=Promise.all(r.map(s=>o[s]||c(s))).then(s=>(i(...s),e))}}define(["./workbox-711a2045"],function(s){"use strict";s.setCacheNameDetails({prefix:"aw-webui"}),self.addEventListener("message",s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()}),s.precacheAndRoute([{url:"/css/1523.3af55662.css",revision:null},{url:"/css/1588.bd0bb219.css",revision:null},{url:"/css/1814.63a247f6.css",revision:null},{url:"/css/185.be8e4b9a.css",revision:null},{url:"/css/2233.e1bcf8fb.css",revision:null},{url:"/css/2352.af75f974.css",revision:null},{url:"/css/265.a9f5afc4.css",revision:null},{url:"/css/2921.0e21fe03.css",revision:null},{url:"/css/2970.0e21fe03.css",revision:null},{url:"/css/3510.cd69135e.css",revision:null},{url:"/css/3593.0e21fe03.css",revision:null},{url:"/css/4067.dcf2e439.css",revision:null},{url:"/css/428.fdf3fbd9.css",revision:null},{url:"/css/4528.ec40e91d.css",revision:null},{url:"/css/495.0e21fe03.css",revision:null},{url:"/css/5480.8f4f9eec.css",revision:null},{url:"/css/579.0a541622.css",revision:null},{url:"/css/5812.38cfb433.css",revision:null},{url:"/css/5966.c7b9176f.css",revision:null},{url:"/css/6218.0e21fe03.css",revision:null},{url:"/css/6531.22cc2d8b.css",revision:null},{url:"/css/663.692259ab.css",revision:null},{url:"/css/6652.0e21fe03.css",revision:null},{url:"/css/6741.67d99f8a.css",revision:null},{url:"/css/7496.0e21fe03.css",revision:null},{url:"/css/7561.280efd83.css",revision:null},{url:"/css/8081.e565b3f9.css",revision:null},{url:"/css/8123.25aa2d67.css",revision:null},{url:"/css/8327.64666c05.css",revision:null},{url:"/css/8596.36d78776.css",revision:null},{url:"/css/8599.3a3e658b.css",revision:null},{url:"/css/8665.f93fd221.css",revision:null},{url:"/css/8932.0e21fe03.css",revision:null},{url:"/css/8948.643cd595.css",revision:null},{url:"/css/9305.3e60e51d.css",revision:null},{url:"/css/9399.af65a5d7.css",revision:null},{url:"/css/chunk-vendors.5a33e728.css",revision:null},{url:"/css/index.08a8e1ac.css",revision:null},{url:"/dark.css",revision:"8bc8c75d670bba7c6ca0122c39beb964"},{url:"/fonts/varela-round-latin-400.72c5f1d4.woff2",revision:null},{url:"/fonts/varela-round-latin-400.ff576336.woff",revision:null},{url:"/index.html",revision:"7243701e68bb304ba443f64fa51fdf2c"},{url:"/js/1064.703d75f1.js",revision:null},{url:"/js/1172.0f4182b3.js",revision:null},{url:"/js/1523.12118690.js",revision:null},{url:"/js/1588.aa9f3f15.js",revision:null},{url:"/js/1814.d46e9bc8.js",revision:null},{url:"/js/185.62497fc3.js",revision:null},{url:"/js/2230.3215567d.js",revision:null},{url:"/js/2233.c2115b33.js",revision:null},{url:"/js/2352.1ad93c6c.js",revision:null},{url:"/js/2374.dc0764c4.js",revision:null},{url:"/js/2535.5fc7abe0.js",revision:null},{url:"/js/265.f78fd35d.js",revision:null},{url:"/js/2921.f2fbc226.js",revision:null},{url:"/js/2970.077864a1.js",revision:null},{url:"/js/2972.abaf9c34.js",revision:null},{url:"/js/3377.b843e352.js",revision:null},{url:"/js/3510.d0330312.js",revision:null},{url:"/js/3593.becd60e0.js",revision:null},{url:"/js/3837.aa23cf66.js",revision:null},{url:"/js/4033.1ef6ffc4.js",revision:null},{url:"/js/4067.341ed2f6.js",revision:null},{url:"/js/428.eac37ee4.js",revision:null},{url:"/js/4513.debf088d.js",revision:null},{url:"/js/4516.7aacfe2f.js",revision:null},{url:"/js/4528.d729566f.js",revision:null},{url:"/js/495.a6e46481.js",revision:null},{url:"/js/5013.56cf47a8.js",revision:null},{url:"/js/5034.3fc015f7.js",revision:null},{url:"/js/5480.a2d6d5cf.js",revision:null},{url:"/js/5649.f2a750a0.js",revision:null},{url:"/js/579.b909463e.js",revision:null},{url:"/js/5793.6b12a4f9.js",revision:null},{url:"/js/5803.4b20c165.js",revision:null},{url:"/js/5812.6233be92.js",revision:null},{url:"/js/5966.66ce7a50.js",revision:null},{url:"/js/6218.e53707fb.js",revision:null},{url:"/js/6514.43b09bcb.js",revision:null},{url:"/js/6531.e78f2219.js",revision:null},{url:"/js/663.97e7e4d3.js",revision:null},{url:"/js/6652.0a490cb9.js",revision:null},{url:"/js/6741.5fd675ba.js",revision:null},{url:"/js/7496.11fb35e2.js",revision:null},{url:"/js/7561.e7ca49b3.js",revision:null},{url:"/js/7634.34f19064.js",revision:null},{url:"/js/8081.a2aa8edc.js",revision:null},{url:"/js/8123.809ec791.js",revision:null},{url:"/js/8191.6a088066.js",revision:null},{url:"/js/8327.685ff366.js",revision:null},{url:"/js/8376.f63b6151.js",revision:null},{url:"/js/8596.0548d980.js",revision:null},{url:"/js/8599.46e04f48.js",revision:null},{url:"/js/8665.151a2c8a.js",revision:null},{url:"/js/8880.21fa7092.js",revision:null},{url:"/js/8932.31ef541c.js",revision:null},{url:"/js/8948.dd3c8695.js",revision:null},{url:"/js/901.21266bcc.js",revision:null},{url:"/js/9305.bd0d368f.js",revision:null},{url:"/js/9399.4c9cf5be.js",revision:null},{url:"/js/9565.078d08a2.js",revision:null},{url:"/js/980.0cf8e040.js",revision:null},{url:"/js/chunk-vendors.4b5dc043.js",revision:null},{url:"/js/index.df4f8794.js",revision:null},{url:"/logo.png",revision:"3cbfce2efacc0dd8d09018233de4afa9"},{url:"/logo.svg",revision:"17fa81a8fc448f2c53f30514400a7c5c"},{url:"/manifest.json",revision:"f6c821dd0bf011176cfb914f2508764c"}],{})}); │ │ //# sourceMappingURL=service-worker.js.map │ │ -service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/f63145c24d48a4d85c5c0b1874c25749/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}}); │ │ +service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/9c2e57c370725548057d828ec0f51d15/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}}); │ │ //# sourceMappingURL=workbox-711a2045.js.map │ │ workbox-711a2045.js.map{"version":3,"file":"workbox-711a2045.js","sources":["node_modules/workbox-webpack-plugin/node_modules/workbox-core/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/messages/messageGenerator.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/WorkboxError.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheNames.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/constants.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/normalizeHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Route.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/RegExpRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Router.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/waitUntil.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/createCacheKey.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheInstallReportPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheCacheKeyPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/canConstructResponseFromBodyStream.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/copyResponse.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheMatchIgnoreParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/Deferred.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/quotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/StrategyHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/timeout.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/getFriendlyURL.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/Strategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheStrategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/getOrCreatePrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/generateURLVariations.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/removeIgnoredSearchParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/addRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/registerRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precache.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:core:6.5.4'] && _();\n}\ncatch (e) { }\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:routing:6.5.4'] && _();\n}\ncatch (e) { }\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}\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 '../_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 { 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 { 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>} 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 | 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|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 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 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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:6.5.4'] && _();\n}\ncatch (e) { }\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 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 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 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 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} ignoreParams\n * @return {Promise}\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:6.5.4'] && _();\n}\ncatch (e) { }\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}\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}\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} 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} `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}\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}\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}\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 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 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 { 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 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} [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}\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} 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}\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} [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}\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} [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} 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}\n */\n install(event) {\n // waitUntil returns Promise\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}\n */\n activate(event) {\n // waitUntil returns Promise\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} 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} 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}\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 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} [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","/*\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} 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 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 { 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 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} 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} [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\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 './_private/assert.js';\nimport { cacheNames } from './_private/cacheNames.js';\nimport { WorkboxError } from './_private/WorkboxError.js';\nimport './_version.js';\n/**\n * Modifies the default cache names used by the Workbox packages.\n * Cache names are generated as `--`.\n *\n * @param {Object} details\n * @param {Object} [details.prefix] The string to add to the beginning of\n * the precache and runtime cache names.\n * @param {Object} [details.suffix] The string to add to the end of\n * the precache and runtime cache names.\n * @param {Object} [details.precache] The cache name to use for precache\n * caching.\n * @param {Object} [details.runtime] The cache name to use for runtime caching.\n * @param {Object} [details.googleAnalytics] The cache name to use for\n * `workbox-google-analytics` caching.\n *\n * @memberof workbox-core\n */\nfunction setCacheNameDetails(details) {\n if (process.env.NODE_ENV !== 'production') {\n Object.keys(details).forEach((key) => {\n assert.isType(details[key], 'string', {\n moduleName: 'workbox-core',\n funcName: 'setCacheNameDetails',\n paramName: `details.${key}`,\n });\n });\n if ('precache' in details && details['precache'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'precache',\n value: details['precache'],\n });\n }\n if ('runtime' in details && details['runtime'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'runtime',\n value: details['runtime'],\n });\n }\n if ('googleAnalytics' in details &&\n details['googleAnalytics'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'googleAnalytics',\n value: details['googleAnalytics'],\n });\n }\n }\n cacheNames.updateDetails(details);\n}\nexport { setCacheNameDetails };\n"],"names":["self","_","e","messageGenerator","fallback","code","args","msg","length","JSON","stringify","WorkboxError","Error","constructor","errorCode","details","super","this","name","_cacheNameDetails","googleAnalytics","precache","prefix","runtime","suffix","registration","scope","_createCacheName","cacheName","filter","value","join","cacheNames","fn","key","Object","keys","eachCacheNameDetail","userCacheName","normalizeHandler","handler","handle","Route","match","method","setCatchHandler","catchHandler","RegExpRoute","regExp","url","result","exec","href","origin","location","index","slice","Router","_routes","Map","_defaultHandlerMap","routes","addFetchListener","addEventListener","event","request","responsePromise","handleRequest","respondWith","addCacheListener","data","type","payload","requestPromises","Promise","all","urlsToCache","map","entry","Request","waitUntil","ports","then","postMessage","URL","protocol","startsWith","sameOrigin","params","route","findMatchingRoute","has","get","err","reject","_catchHandler","catch","async","catchErr","matchResult","Array","isArray","undefined","setDefaultHandler","set","registerRoute","push","unregisterRoute","routeIndex","indexOf","splice","defaultRouter","asyncFn","returnPromise","createCacheKey","urlObject","cacheKey","revision","cacheKeyURL","originalURL","searchParams","PrecacheInstallReportPlugin","updatedURLs","notUpdatedURLs","handlerWillStart","state","originalRequest","cachedResponseWillBeUsed","cachedResponse","PrecacheCacheKeyPlugin","precacheController","cacheKeyWillBeUsed","_precacheController","getCacheKeyForURL","headers","supportStatus","copyResponse","response","modifier","clonedResponse","clone","responseInit","Headers","status","statusText","modifiedResponseInit","body","testResponse","Response","error","canConstructResponseFromBodyStream","blob","stripParams","fullURL","ignoreParams","strippedURL","param","delete","Deferred","promise","resolve","quotaErrorCallbacks","Set","toRequest","input","StrategyHandler","strategy","options","_cacheKeys","assign","_strategy","_handlerDeferred","_extendLifetimePromises","_plugins","plugins","_pluginStateMap","plugin","fetch","mode","FetchEvent","preloadResponse","possiblePreloadResponse","hasCallback","cb","iterateCallbacks","thrownErrorMessage","message","pluginFilteredRequest","fetchResponse","fetchOptions","callback","runCallbacks","fetchAndCachePut","responseClone","cachePut","cacheMatch","matchOptions","effectiveRequest","getCacheKey","multiMatchOptions","caches","ms","setTimeout","String","replace","RegExp","responseToCache","_ensureResponseSafeToCache","cache","open","hasCacheUpdateCallback","oldResponse","strippedRequestURL","keysOptions","ignoreSearch","cacheKeys","cacheMatchIgnoreParams","put","executeQuotaErrorCallbacks","newResponse","statefulCallback","statefulParam","doneWaiting","shift","destroy","pluginsUsed","Strategy","responseDone","handleAll","_getResponse","_awaitComplete","_handle","waitUntilError","PrecacheStrategy","_fallbackToNetwork","fallbackToNetwork","copyRedirectedCacheableResponsesPlugin","_handleInstall","_handleFetch","integrityInManifest","integrity","integrityInRequest","noIntegrityConflict","_useDefaultCacheabilityPluginIfNeeded","defaultPluginIndex","cacheWillUpdatePluginCount","entries","defaultPrecacheCacheabilityPlugin","cacheWillUpdate","redirected","PrecacheController","_urlsToCacheKeys","_urlsToCacheModes","_cacheKeysToIntegrities","install","bind","activate","addToCacheList","_installAndActiveListenersAdded","urlsToWarnAbout","cacheMode","firstEntry","secondEntry","warningMessage","console","warn","installReportPlugin","credentials","currentlyCachedRequests","expectedCacheKeys","values","deletedURLs","getURLsToCacheKeys","getCachedURLs","getIntegrityForCacheKey","matchPrecache","createHandlerBoundToURL","getOrCreatePrecacheController","PrecacheRoute","urlsToCacheKeys","possibleURL","ignoreURLParametersMatching","directoryIndex","cleanURLs","urlManipulation","hash","urlWithoutIgnoredParams","paramName","some","test","removeIgnoredSearchParams","pathname","endsWith","directoryURL","cleanURL","additionalURLs","urlToAttempt","generateURLVariations","addRoute","capture","captureUrl","matchCallback","moduleName","funcName"],"mappings":"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"}&rocket::state::Staterocket::state::Staterocket::serde::json::Jsonaw_models::info::Infoserver_infofontsstatic/api/0/info/api/0/buckets/api/0/query/api/0/import/api/0/export/api/0/settingsjsapplicationoctet-streamapplication/octet-streamcssdefaultFailed to get db pathFailed to get Java stringCouldn't create java string/apikey_fairingNoSuchBucketBucketAlreadyExistsNoSuchKeyMpscErrorInternalErrorUninitializedOldDbVersionErrorindexBadCharBadEndUtf8Errorvalid_up_toerror_lena Display implementation returned an error unexpectedlyUnexpectedParseEoiCharacterBoundaryParsingErrorEmptyQueryVariableNotDefinedMathErrorInvalidTypeInvalidFunctionParametersTimeIntervalErrorBucketNotFoundRegexCompileErrorWrongJValueTypeInvalidCtorReturnInvalidArgListMethodNotFoundsigFieldNotFoundJavaExceptionJNIEnvMethodNotFoundNullPtrNullDerefTryLockJavaVMMethodNotFoundFieldAlreadySetThrowFailedParseFailedJniCallutf-8()failed to write whole buffer │ │ FieldSet corrupted (this is a bug)poll_completewritinginvalid framereclaimedwasn't expecting a frame to reclaimnot reclaiming frame for cancelled streamremoving dangling stream from pending_senddata framestream capacity is 0sending data frameassertion failed: dst.remaining_mut() >= len │ │ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZX^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^dbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbIP addressactivitywatch-testingactivitywatchcalled `Result::unwrap()` on an `Err` valueassertion failed: DEFAULT_MAX_FRAME_SIZE as usize <= val && val <= MAX_MAX_FRAME_SIZE as usizeassertion failed: !stream_id.is_zero()rocket_http::listenerCannot convert indexed str to str without base string!assertion failed: val <= frame::MAX_MAX_FRAME_SIZE as usizesqlite.dbsqlite-testing.dbconfig.tomlconfig-testing.tomlpeewee-sqlite-testingsqlite-testingconfig-testing-testing.db-testing.toml-testing.json_testing_device_id/data/user/0/net.activitywatch.android/filesLocal time out of range for `NaiveDateTime`stream_idflagspad_lenRecvErrorErrorUnexpectedFrameTypePayloadTooBigReleaseCapacityTooBigOverflowedStreamIdMissingUriSchemeAndAuthorityPollResetAfterSendResponseSendPingWhilePendingSendSettingsWhilePendingPeerDisabledServerPushpolled after completeBooleanDoubleFloatIntShorta Display implementation returned an error unexpectedlydrain channelsignal received, starting graceful shutdownParseCharErrorNotEofPrimitiveObjectArrayMethodEmptyStringTooManyCharsIncompleteBodyTypeSignatureret()description() is deprecated; use Displaybytes remaining on stream │ │ workersmax_blockingforcerocket-worker-threadcreate tokio runtimeFieldSet corrupted (this is a bug)end of chunkedunexpected EOF during chunk size lineInvalid chunk size line: missing size digitinvalid chunk size: overflowInvalid chunk end LFInvalid chunk body CRInvalid chunk body LF │ │ incoming chunked header: │ │ Invalid chunk size LFread_trailerread_size_lwsInvalid chunk size linear white spaceread_extensioninvalid chunk extension contains newlinechunk extensions over limitInvalid trailer end LFRead chunk hex sizeInvalid chunk size line: Invalid SizeCannot start a runtime from within a runtime. This happens because a function (like `block_on`) attempted to block the current thread while the thread is being used to drive asynchronous tasks.0 or 1true or falseShutdown requested. Waiting for pending I/O...rocket::serverServer shutdown nominally.all branches are disabled and there is no else branchShutdown failed: server executing after timeouts.Graceful shutdown completed successfully.Shutdown failed: outstanding background I/O.failed to park threadFailed to `Enter::block_on` │ ├── readelf --wide --decompress --string-dump=.rodata {} │ │ @@ -16882,15 +16882,15 @@ │ │ id="path4386"\n │ │ inkscape:connector-curvature="0"\n │ │ sodipodi:nodetypes="cc" />\n │ │ \n │ │ \n │ │ manifest.json{"name":"ActivityWatch","short_name":"ActivityWatch","theme_color":"#4DBA87","icons":[{"src":"logo.png","sizes":"512x512","type":"image/png"}],"start_url":".","display":"standalone","background_color":"#000000"}service-worker.jsif(!self.define){let s,l={};const n=(n,r)=>(n=new URL(n+".js",r).href,l[n]||new Promise(l=>{if("document"in self){const s=document.createElement("script");s.src=n,s.onload=l,document.head.appendChild(s)}else s=n,importScripts(n),l()}).then(()=>{let s=l[n];if(!s)throw new Error(`Module ${n} didn�t register its module`);return s}));self.define=(r,i)=>{const u=s||("document"in self?document.currentScript.src:"")||location.href;if(l[u])return;let e={};const c=s=>n(s,u),o={module:{uri:u},exports:e,require:c};l[u]=Promise.all(r.map(s=>o[s]||c(s))).then(s=>(i(...s),e))}}define(["./workbox-711a2045"],function(s){"use strict";s.setCacheNameDetails({prefix:"aw-webui"}),self.addEventListener("message",s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()}),s.precacheAndRoute([{url:"/css/1523.3af55662.css",revision:null},{url:"/css/1588.bd0bb219.css",revision:null},{url:"/css/1814.63a247f6.css",revision:null},{url:"/css/185.be8e4b9a.css",revision:null},{url:"/css/2233.e1bcf8fb.css",revision:null},{url:"/css/2352.af75f974.css",revision:null},{url:"/css/265.a9f5afc4.css",revision:null},{url:"/css/2921.0e21fe03.css",revision:null},{url:"/css/2970.0e21fe03.css",revision:null},{url:"/css/3510.cd69135e.css",revision:null},{url:"/css/3593.0e21fe03.css",revision:null},{url:"/css/4067.dcf2e439.css",revision:null},{url:"/css/428.fdf3fbd9.css",revision:null},{url:"/css/4528.ec40e91d.css",revision:null},{url:"/css/495.0e21fe03.css",revision:null},{url:"/css/5480.8f4f9eec.css",revision:null},{url:"/css/579.0a541622.css",revision:null},{url:"/css/5812.38cfb433.css",revision:null},{url:"/css/5966.c7b9176f.css",revision:null},{url:"/css/6218.0e21fe03.css",revision:null},{url:"/css/6531.22cc2d8b.css",revision:null},{url:"/css/663.692259ab.css",revision:null},{url:"/css/6652.0e21fe03.css",revision:null},{url:"/css/6741.67d99f8a.css",revision:null},{url:"/css/7496.0e21fe03.css",revision:null},{url:"/css/7561.280efd83.css",revision:null},{url:"/css/8081.e565b3f9.css",revision:null},{url:"/css/8123.25aa2d67.css",revision:null},{url:"/css/8327.64666c05.css",revision:null},{url:"/css/8596.36d78776.css",revision:null},{url:"/css/8599.3a3e658b.css",revision:null},{url:"/css/8665.f93fd221.css",revision:null},{url:"/css/8932.0e21fe03.css",revision:null},{url:"/css/8948.643cd595.css",revision:null},{url:"/css/9305.3e60e51d.css",revision:null},{url:"/css/9399.af65a5d7.css",revision:null},{url:"/css/chunk-vendors.5a33e728.css",revision:null},{url:"/css/index.08a8e1ac.css",revision:null},{url:"/dark.css",revision:"8bc8c75d670bba7c6ca0122c39beb964"},{url:"/fonts/varela-round-latin-400.72c5f1d4.woff2",revision:null},{url:"/fonts/varela-round-latin-400.ff576336.woff",revision:null},{url:"/index.html",revision:"7243701e68bb304ba443f64fa51fdf2c"},{url:"/js/1064.703d75f1.js",revision:null},{url:"/js/1172.0f4182b3.js",revision:null},{url:"/js/1523.12118690.js",revision:null},{url:"/js/1588.aa9f3f15.js",revision:null},{url:"/js/1814.d46e9bc8.js",revision:null},{url:"/js/185.62497fc3.js",revision:null},{url:"/js/2230.3215567d.js",revision:null},{url:"/js/2233.c2115b33.js",revision:null},{url:"/js/2352.1ad93c6c.js",revision:null},{url:"/js/2374.dc0764c4.js",revision:null},{url:"/js/2535.5fc7abe0.js",revision:null},{url:"/js/265.f78fd35d.js",revision:null},{url:"/js/2921.f2fbc226.js",revision:null},{url:"/js/2970.077864a1.js",revision:null},{url:"/js/2972.abaf9c34.js",revision:null},{url:"/js/3377.b843e352.js",revision:null},{url:"/js/3510.d0330312.js",revision:null},{url:"/js/3593.becd60e0.js",revision:null},{url:"/js/3837.aa23cf66.js",revision:null},{url:"/js/4033.1ef6ffc4.js",revision:null},{url:"/js/4067.341ed2f6.js",revision:null},{url:"/js/428.eac37ee4.js",revision:null},{url:"/js/4513.debf088d.js",revision:null},{url:"/js/4516.7aacfe2f.js",revision:null},{url:"/js/4528.d729566f.js",revision:null},{url:"/js/495.a6e46481.js",revision:null},{url:"/js/5013.56cf47a8.js",revision:null},{url:"/js/5034.3fc015f7.js",revision:null},{url:"/js/5480.a2d6d5cf.js",revision:null},{url:"/js/5649.f2a750a0.js",revision:null},{url:"/js/579.b909463e.js",revision:null},{url:"/js/5793.6b12a4f9.js",revision:null},{url:"/js/5803.4b20c165.js",revision:null},{url:"/js/5812.6233be92.js",revision:null},{url:"/js/5966.66ce7a50.js",revision:null},{url:"/js/6218.e53707fb.js",revision:null},{url:"/js/6514.43b09bcb.js",revision:null},{url:"/js/6531.e78f2219.js",revision:null},{url:"/js/663.97e7e4d3.js",revision:null},{url:"/js/6652.0a490cb9.js",revision:null},{url:"/js/6741.5fd675ba.js",revision:null},{url:"/js/7496.11fb35e2.js",revision:null},{url:"/js/7561.e7ca49b3.js",revision:null},{url:"/js/7634.34f19064.js",revision:null},{url:"/js/8081.a2aa8edc.js",revision:null},{url:"/js/8123.809ec791.js",revision:null},{url:"/js/8191.6a088066.js",revision:null},{url:"/js/8327.685ff366.js",revision:null},{url:"/js/8376.f63b6151.js",revision:null},{url:"/js/8596.0548d980.js",revision:null},{url:"/js/8599.46e04f48.js",revision:null},{url:"/js/8665.151a2c8a.js",revision:null},{url:"/js/8880.21fa7092.js",revision:null},{url:"/js/8932.31ef541c.js",revision:null},{url:"/js/8948.dd3c8695.js",revision:null},{url:"/js/901.21266bcc.js",revision:null},{url:"/js/9305.bd0d368f.js",revision:null},{url:"/js/9399.4c9cf5be.js",revision:null},{url:"/js/9565.078d08a2.js",revision:null},{url:"/js/980.0cf8e040.js",revision:null},{url:"/js/chunk-vendors.4b5dc043.js",revision:null},{url:"/js/index.df4f8794.js",revision:null},{url:"/logo.png",revision:"3cbfce2efacc0dd8d09018233de4afa9"},{url:"/logo.svg",revision:"17fa81a8fc448f2c53f30514400a7c5c"},{url:"/manifest.json",revision:"f6c821dd0bf011176cfb914f2508764c"}],{})});\n │ │ //# sourceMappingURL=service-worker.js.map\n │ │ - service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/f63145c24d48a4d85c5c0b1874c25749/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}});\n │ │ + service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/9c2e57c370725548057d828ec0f51d15/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}});\n │ │ //# sourceMappingURL=workbox-711a2045.js.map\n │ │ workbox-711a2045.js.map{"version":3,"file":"workbox-711a2045.js","sources":["node_modules/workbox-webpack-plugin/node_modules/workbox-core/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/messages/messageGenerator.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/WorkboxError.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheNames.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/constants.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/normalizeHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Route.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/RegExpRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Router.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/waitUntil.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/createCacheKey.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheInstallReportPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheCacheKeyPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/canConstructResponseFromBodyStream.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/copyResponse.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheMatchIgnoreParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/Deferred.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/quotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/StrategyHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/timeout.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/getFriendlyURL.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/Strategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheStrategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/getOrCreatePrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/generateURLVariations.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/removeIgnoredSearchParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/addRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/registerRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precache.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:core:6.5.4'] && _();\n}\ncatch (e) { }\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:routing:6.5.4'] && _();\n}\ncatch (e) { }\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}\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 '../_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 { 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 { 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>} 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 | 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|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 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 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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:6.5.4'] && _();\n}\ncatch (e) { }\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 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 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 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 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} ignoreParams\n * @return {Promise}\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:6.5.4'] && _();\n}\ncatch (e) { }\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}\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}\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} 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} `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}\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}\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}\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 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 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 { 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 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} [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}\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} 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}\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} [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}\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} [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} 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}\n */\n install(event) {\n // waitUntil returns Promise\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}\n */\n activate(event) {\n // waitUntil returns Promise\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} 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} 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}\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 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} [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","/*\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} 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 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 { 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 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} 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} [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\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 './_private/assert.js';\nimport { cacheNames } from './_private/cacheNames.js';\nimport { WorkboxError } from './_private/WorkboxError.js';\nimport './_version.js';\n/**\n * Modifies the default cache names used by the Workbox packages.\n * Cache names are generated as `--`.\n *\n * @param {Object} details\n * @param {Object} [details.prefix] The string to add to the beginning of\n * the precache and runtime cache names.\n * @param {Object} [details.suffix] The string to add to the end of\n * the precache and runtime cache names.\n * @param {Object} [details.precache] The cache name to use for precache\n * caching.\n * @param {Object} [details.runtime] The cache name to use for runtime caching.\n * @param {Object} [details.googleAnalytics] The cache name to use for\n * `workbox-google-analytics` caching.\n *\n * @memberof workbox-core\n */\nfunction setCacheNameDetails(details) {\n if (process.env.NODE_ENV !== 'production') {\n Object.keys(details).forEach((key) => {\n assert.isType(details[key], 'string', {\n moduleName: 'workbox-core',\n funcName: 'setCacheNameDetails',\n paramName: `details.${key}`,\n });\n });\n if ('precache' in details && details['precache'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'precache',\n value: details['precache'],\n });\n }\n if ('runtime' in details && details['runtime'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'runtime',\n value: details['runtime'],\n });\n }\n if ('googleAnalytics' in details &&\n details['googleAnalytics'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'googleAnalytics',\n value: details['googleAnalytics'],\n });\n }\n }\n cacheNames.updateDetails(details);\n}\nexport { setCacheNameDetails };\n"],"names":["self","_","e","messageGenerator","fallback","code","args","msg","length","JSON","stringify","WorkboxError","Error","constructor","errorCode","details","super","this","name","_cacheNameDetails","googleAnalytics","precache","prefix","runtime","suffix","registration","scope","_createCacheName","cacheName","filter","value","join","cacheNames","fn","key","Object","keys","eachCacheNameDetail","userCacheName","normalizeHandler","handler","handle","Route","match","method","setCatchHandler","catchHandler","RegExpRoute","regExp","url","result","exec","href","origin","location","index","slice","Router","_routes","Map","_defaultHandlerMap","routes","addFetchListener","addEventListener","event","request","responsePromise","handleRequest","respondWith","addCacheListener","data","type","payload","requestPromises","Promise","all","urlsToCache","map","entry","Request","waitUntil","ports","then","postMessage","URL","protocol","startsWith","sameOrigin","params","route","findMatchingRoute","has","get","err","reject","_catchHandler","catch","async","catchErr","matchResult","Array","isArray","undefined","setDefaultHandler","set","registerRoute","push","unregisterRoute","routeIndex","indexOf","splice","defaultRouter","asyncFn","returnPromise","createCacheKey","urlObject","cacheKey","revision","cacheKeyURL","originalURL","searchParams","PrecacheInstallReportPlugin","updatedURLs","notUpdatedURLs","handlerWillStart","state","originalRequest","cachedResponseWillBeUsed","cachedResponse","PrecacheCacheKeyPlugin","precacheController","cacheKeyWillBeUsed","_precacheController","getCacheKeyForURL","headers","supportStatus","copyResponse","response","modifier","clonedResponse","clone","responseInit","Headers","status","statusText","modifiedResponseInit","body","testResponse","Response","error","canConstructResponseFromBodyStream","blob","stripParams","fullURL","ignoreParams","strippedURL","param","delete","Deferred","promise","resolve","quotaErrorCallbacks","Set","toRequest","input","StrategyHandler","strategy","options","_cacheKeys","assign","_strategy","_handlerDeferred","_extendLifetimePromises","_plugins","plugins","_pluginStateMap","plugin","fetch","mode","FetchEvent","preloadResponse","possiblePreloadResponse","hasCallback","cb","iterateCallbacks","thrownErrorMessage","message","pluginFilteredRequest","fetchResponse","fetchOptions","callback","runCallbacks","fetchAndCachePut","responseClone","cachePut","cacheMatch","matchOptions","effectiveRequest","getCacheKey","multiMatchOptions","caches","ms","setTimeout","String","replace","RegExp","responseToCache","_ensureResponseSafeToCache","cache","open","hasCacheUpdateCallback","oldResponse","strippedRequestURL","keysOptions","ignoreSearch","cacheKeys","cacheMatchIgnoreParams","put","executeQuotaErrorCallbacks","newResponse","statefulCallback","statefulParam","doneWaiting","shift","destroy","pluginsUsed","Strategy","responseDone","handleAll","_getResponse","_awaitComplete","_handle","waitUntilError","PrecacheStrategy","_fallbackToNetwork","fallbackToNetwork","copyRedirectedCacheableResponsesPlugin","_handleInstall","_handleFetch","integrityInManifest","integrity","integrityInRequest","noIntegrityConflict","_useDefaultCacheabilityPluginIfNeeded","defaultPluginIndex","cacheWillUpdatePluginCount","entries","defaultPrecacheCacheabilityPlugin","cacheWillUpdate","redirected","PrecacheController","_urlsToCacheKeys","_urlsToCacheModes","_cacheKeysToIntegrities","install","bind","activate","addToCacheList","_installAndActiveListenersAdded","urlsToWarnAbout","cacheMode","firstEntry","secondEntry","warningMessage","console","warn","installReportPlugin","credentials","currentlyCachedRequests","expectedCacheKeys","values","deletedURLs","getURLsToCacheKeys","getCachedURLs","getIntegrityForCacheKey","matchPrecache","createHandlerBoundToURL","getOrCreatePrecacheController","PrecacheRoute","urlsToCacheKeys","possibleURL","ignoreURLParametersMatching","directoryIndex","cleanURLs","urlManipulation","hash","urlWithoutIgnoredParams","paramName","some","test","removeIgnoredSearchParams","pathname","endsWith","directoryURL","cleanURL","additionalURLs","urlToAttempt","generateURLVariations","addRoute","capture","captureUrl","matchCallback","moduleName","funcName"],"mappings":"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"}&rocket::state::Staterocket::state::Staterocket::serde::json::Jsonaw_models::info::Infoserver_infofontsstatic/api/0/info/api/0/buckets/api/0/query/api/0/import/api/0/export/api/0/settingsjsapplicationoctet-streamapplication/octet-streamcssdefaultFailed to get db pathFailed to get Java stringCouldn't create java string/apikey_fairingNoSuchBucketBucketAlreadyExistsNoSuchKeyMpscErrorInternalErrorUninitializedOldDbVersionErrorindexBadCharBadEndUtf8Errorvalid_up_toerror_lena Display implementation returned an error unexpectedlyUnexpectedParseEoiCharacterBoundaryParsingErrorEmptyQueryVariableNotDefinedMathErrorInvalidTypeInvalidFunctionParametersTimeIntervalErrorBucketNotFoundRegexCompileErrorWrongJValueTypeInvalidCtorReturnInvalidArgListMethodNotFoundsigFieldNotFoundJavaExceptionJNIEnvMethodNotFoundNullPtrNullDerefTryLockJavaVMMethodNotFoundFieldAlreadySetThrowFailedParseFailedJniCallutf-8()failed to write whole buffer │ │ [132ad58] X���g���j����0E │ │ [132ad68] V1E │ │ [132ad6d] 9E │ │ [132ad70] 1E │ │ [132ad75] 0E │ ├── readelf --wide --decompress --hex-dump=.data.rel.ro {} │ │ @@ -3149,16 +3149,16 @@ │ │ 0x024cac80 90b2a76a 00000000 c13eb6f9 c6406082 ...j.....>...@`. │ │ 0x024cac90 1ef9c8b9 8176ee34 5814a08a 4be39b2f .....v.4X...K../ │ │ 0x024caca0 c8aa813e 5920010c ffffffff ffffffff ...>Y .......... │ │ 0x024cacb0 00000000 00000000 24160000 00000000 ........$....... │ │ 0x024cacc0 00000000 00000000 15000000 00000000 ................ │ │ 0x024cacd0 01000000 00000000 90b2a76a 00000000 ...........j.... │ │ 0x024cace0 01000000 00000000 90b2a76a 00000000 ...........j.... │ │ - 0x024cacf0 9fd9d1aa cd69402e b9807f2e 5e76840e .....i@.....^v.. │ │ - 0x024cad00 6cc383df 114e991e d6d9be5c 1b14e320 l....N.....\... │ │ + 0x024cacf0 7bdaacc7 25b19654 5d35edf0 4bb99faa {...%..T]5..K... │ │ + 0x024cad00 6c0b7966 91d2735c 9333a2bb 8eb8a198 l.yf..s\.3...... │ │ 0x024cad10 ffffffff ffffffff 00000000 00000000 ................ │ │ 0x024cad20 c6320000 00000000 00000000 00000000 .2.............. │ │ 0x024cad30 13000000 00000000 01000000 00000000 ................ │ │ 0x024cad40 90b2a76a 00000000 01000000 00000000 ...j............ │ │ 0x024cad50 90b2a76a 00000000 20303f36 731bff3a ...j.... 0?6s..: │ │ 0x024cad60 555ee80b a80b28e1 c477ab33 4de8aa7d U^....(..w.3M..} │ │ 0x024cad70 f618f6fc ef7b58e0 ffffffff ffffffff .....{X......... ├── lib/x86_64/libaw_server.so │ ├── strings --all --bytes=8 {} │ │ @@ -7425,15 +7425,15 @@ │ │ d="m 400,452.3622 33,-37" │ │ id="path4386" │ │ inkscape:connector-curvature="0" │ │ sodipodi:nodetypes="cc" /> │ │ manifest.json{"name":"ActivityWatch","short_name":"ActivityWatch","theme_color":"#4DBA87","icons":[{"src":"logo.png","sizes":"512x512","type":"image/png"}],"start_url":".","display":"standalone","background_color":"#000000"}service-worker.jsif(!self.define){let s,l={};const n=(n,r)=>(n=new URL(n+".js",r).href,l[n]||new Promise(l=>{if("document"in self){const s=document.createElement("script");s.src=n,s.onload=l,document.head.appendChild(s)}else s=n,importScripts(n),l()}).then(()=>{let s=l[n];if(!s)throw new Error(`Module ${n} didn │ │ t register its module`);return s}));self.define=(r,i)=>{const u=s||("document"in self?document.currentScript.src:"")||location.href;if(l[u])return;let e={};const c=s=>n(s,u),o={module:{uri:u},exports:e,require:c};l[u]=Promise.all(r.map(s=>o[s]||c(s))).then(s=>(i(...s),e))}}define(["./workbox-711a2045"],function(s){"use strict";s.setCacheNameDetails({prefix:"aw-webui"}),self.addEventListener("message",s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()}),s.precacheAndRoute([{url:"/css/1523.3af55662.css",revision:null},{url:"/css/1588.bd0bb219.css",revision:null},{url:"/css/1814.63a247f6.css",revision:null},{url:"/css/185.be8e4b9a.css",revision:null},{url:"/css/2233.e1bcf8fb.css",revision:null},{url:"/css/2352.af75f974.css",revision:null},{url:"/css/265.a9f5afc4.css",revision:null},{url:"/css/2921.0e21fe03.css",revision:null},{url:"/css/2970.0e21fe03.css",revision:null},{url:"/css/3510.cd69135e.css",revision:null},{url:"/css/3593.0e21fe03.css",revision:null},{url:"/css/4067.dcf2e439.css",revision:null},{url:"/css/428.fdf3fbd9.css",revision:null},{url:"/css/4528.ec40e91d.css",revision:null},{url:"/css/495.0e21fe03.css",revision:null},{url:"/css/5480.8f4f9eec.css",revision:null},{url:"/css/579.0a541622.css",revision:null},{url:"/css/5812.38cfb433.css",revision:null},{url:"/css/5966.c7b9176f.css",revision:null},{url:"/css/6218.0e21fe03.css",revision:null},{url:"/css/6531.22cc2d8b.css",revision:null},{url:"/css/663.692259ab.css",revision:null},{url:"/css/6652.0e21fe03.css",revision:null},{url:"/css/6741.67d99f8a.css",revision:null},{url:"/css/7496.0e21fe03.css",revision:null},{url:"/css/7561.280efd83.css",revision:null},{url:"/css/8081.e565b3f9.css",revision:null},{url:"/css/8123.25aa2d67.css",revision:null},{url:"/css/8327.64666c05.css",revision:null},{url:"/css/8596.36d78776.css",revision:null},{url:"/css/8599.3a3e658b.css",revision:null},{url:"/css/8665.f93fd221.css",revision:null},{url:"/css/8932.0e21fe03.css",revision:null},{url:"/css/8948.643cd595.css",revision:null},{url:"/css/9305.3e60e51d.css",revision:null},{url:"/css/9399.af65a5d7.css",revision:null},{url:"/css/chunk-vendors.5a33e728.css",revision:null},{url:"/css/index.08a8e1ac.css",revision:null},{url:"/dark.css",revision:"8bc8c75d670bba7c6ca0122c39beb964"},{url:"/fonts/varela-round-latin-400.72c5f1d4.woff2",revision:null},{url:"/fonts/varela-round-latin-400.ff576336.woff",revision:null},{url:"/index.html",revision:"7243701e68bb304ba443f64fa51fdf2c"},{url:"/js/1064.703d75f1.js",revision:null},{url:"/js/1172.0f4182b3.js",revision:null},{url:"/js/1523.12118690.js",revision:null},{url:"/js/1588.aa9f3f15.js",revision:null},{url:"/js/1814.d46e9bc8.js",revision:null},{url:"/js/185.62497fc3.js",revision:null},{url:"/js/2230.3215567d.js",revision:null},{url:"/js/2233.c2115b33.js",revision:null},{url:"/js/2352.1ad93c6c.js",revision:null},{url:"/js/2374.dc0764c4.js",revision:null},{url:"/js/2535.5fc7abe0.js",revision:null},{url:"/js/265.f78fd35d.js",revision:null},{url:"/js/2921.f2fbc226.js",revision:null},{url:"/js/2970.077864a1.js",revision:null},{url:"/js/2972.abaf9c34.js",revision:null},{url:"/js/3377.b843e352.js",revision:null},{url:"/js/3510.d0330312.js",revision:null},{url:"/js/3593.becd60e0.js",revision:null},{url:"/js/3837.aa23cf66.js",revision:null},{url:"/js/4033.1ef6ffc4.js",revision:null},{url:"/js/4067.341ed2f6.js",revision:null},{url:"/js/428.eac37ee4.js",revision:null},{url:"/js/4513.debf088d.js",revision:null},{url:"/js/4516.7aacfe2f.js",revision:null},{url:"/js/4528.d729566f.js",revision:null},{url:"/js/495.a6e46481.js",revision:null},{url:"/js/5013.56cf47a8.js",revision:null},{url:"/js/5034.3fc015f7.js",revision:null},{url:"/js/5480.a2d6d5cf.js",revision:null},{url:"/js/5649.f2a750a0.js",revision:null},{url:"/js/579.b909463e.js",revision:null},{url:"/js/5793.6b12a4f9.js",revision:null},{url:"/js/5803.4b20c165.js",revision:null},{url:"/js/5812.6233be92.js",revision:null},{url:"/js/5966.66ce7a50.js",revision:null},{url:"/js/6218.e53707fb.js",revision:null},{url:"/js/6514.43b09bcb.js",revision:null},{url:"/js/6531.e78f2219.js",revision:null},{url:"/js/663.97e7e4d3.js",revision:null},{url:"/js/6652.0a490cb9.js",revision:null},{url:"/js/6741.5fd675ba.js",revision:null},{url:"/js/7496.11fb35e2.js",revision:null},{url:"/js/7561.e7ca49b3.js",revision:null},{url:"/js/7634.34f19064.js",revision:null},{url:"/js/8081.a2aa8edc.js",revision:null},{url:"/js/8123.809ec791.js",revision:null},{url:"/js/8191.6a088066.js",revision:null},{url:"/js/8327.685ff366.js",revision:null},{url:"/js/8376.f63b6151.js",revision:null},{url:"/js/8596.0548d980.js",revision:null},{url:"/js/8599.46e04f48.js",revision:null},{url:"/js/8665.151a2c8a.js",revision:null},{url:"/js/8880.21fa7092.js",revision:null},{url:"/js/8932.31ef541c.js",revision:null},{url:"/js/8948.dd3c8695.js",revision:null},{url:"/js/901.21266bcc.js",revision:null},{url:"/js/9305.bd0d368f.js",revision:null},{url:"/js/9399.4c9cf5be.js",revision:null},{url:"/js/9565.078d08a2.js",revision:null},{url:"/js/980.0cf8e040.js",revision:null},{url:"/js/chunk-vendors.4b5dc043.js",revision:null},{url:"/js/index.df4f8794.js",revision:null},{url:"/logo.png",revision:"3cbfce2efacc0dd8d09018233de4afa9"},{url:"/logo.svg",revision:"17fa81a8fc448f2c53f30514400a7c5c"},{url:"/manifest.json",revision:"f6c821dd0bf011176cfb914f2508764c"}],{})}); │ │ //# sourceMappingURL=service-worker.js.map │ │ -service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/f63145c24d48a4d85c5c0b1874c25749/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}}); │ │ +service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/9c2e57c370725548057d828ec0f51d15/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}}); │ │ //# sourceMappingURL=workbox-711a2045.js.map │ │ workbox-711a2045.js.map{"version":3,"file":"workbox-711a2045.js","sources":["node_modules/workbox-webpack-plugin/node_modules/workbox-core/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/messages/messageGenerator.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/WorkboxError.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheNames.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/constants.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/normalizeHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Route.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/RegExpRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Router.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/waitUntil.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/createCacheKey.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheInstallReportPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheCacheKeyPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/canConstructResponseFromBodyStream.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/copyResponse.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheMatchIgnoreParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/Deferred.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/quotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/StrategyHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/timeout.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/getFriendlyURL.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/Strategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheStrategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/getOrCreatePrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/generateURLVariations.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/removeIgnoredSearchParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/addRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/registerRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precache.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:core:6.5.4'] && _();\n}\ncatch (e) { }\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:routing:6.5.4'] && _();\n}\ncatch (e) { }\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}\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 '../_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 { 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 { 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>} 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 | 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|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 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 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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:6.5.4'] && _();\n}\ncatch (e) { }\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 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 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 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 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} ignoreParams\n * @return {Promise}\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:6.5.4'] && _();\n}\ncatch (e) { }\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}\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}\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} 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} `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}\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}\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}\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 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 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 { 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 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} [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}\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} 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}\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} [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}\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} [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} 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}\n */\n install(event) {\n // waitUntil returns Promise\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}\n */\n activate(event) {\n // waitUntil returns Promise\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} 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} 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}\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 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} [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","/*\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} 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 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 { 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 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} 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} [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\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 './_private/assert.js';\nimport { cacheNames } from './_private/cacheNames.js';\nimport { WorkboxError } from './_private/WorkboxError.js';\nimport './_version.js';\n/**\n * Modifies the default cache names used by the Workbox packages.\n * Cache names are generated as `--`.\n *\n * @param {Object} details\n * @param {Object} [details.prefix] The string to add to the beginning of\n * the precache and runtime cache names.\n * @param {Object} [details.suffix] The string to add to the end of\n * the precache and runtime cache names.\n * @param {Object} [details.precache] The cache name to use for precache\n * caching.\n * @param {Object} [details.runtime] The cache name to use for runtime caching.\n * @param {Object} [details.googleAnalytics] The cache name to use for\n * `workbox-google-analytics` caching.\n *\n * @memberof workbox-core\n */\nfunction setCacheNameDetails(details) {\n if (process.env.NODE_ENV !== 'production') {\n Object.keys(details).forEach((key) => {\n assert.isType(details[key], 'string', {\n moduleName: 'workbox-core',\n funcName: 'setCacheNameDetails',\n paramName: `details.${key}`,\n });\n });\n if ('precache' in details && details['precache'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'precache',\n value: details['precache'],\n });\n }\n if ('runtime' in details && details['runtime'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'runtime',\n value: details['runtime'],\n });\n }\n if ('googleAnalytics' in details &&\n details['googleAnalytics'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'googleAnalytics',\n value: details['googleAnalytics'],\n });\n }\n }\n cacheNames.updateDetails(details);\n}\nexport { setCacheNameDetails };\n"],"names":["self","_","e","messageGenerator","fallback","code","args","msg","length","JSON","stringify","WorkboxError","Error","constructor","errorCode","details","super","this","name","_cacheNameDetails","googleAnalytics","precache","prefix","runtime","suffix","registration","scope","_createCacheName","cacheName","filter","value","join","cacheNames","fn","key","Object","keys","eachCacheNameDetail","userCacheName","normalizeHandler","handler","handle","Route","match","method","setCatchHandler","catchHandler","RegExpRoute","regExp","url","result","exec","href","origin","location","index","slice","Router","_routes","Map","_defaultHandlerMap","routes","addFetchListener","addEventListener","event","request","responsePromise","handleRequest","respondWith","addCacheListener","data","type","payload","requestPromises","Promise","all","urlsToCache","map","entry","Request","waitUntil","ports","then","postMessage","URL","protocol","startsWith","sameOrigin","params","route","findMatchingRoute","has","get","err","reject","_catchHandler","catch","async","catchErr","matchResult","Array","isArray","undefined","setDefaultHandler","set","registerRoute","push","unregisterRoute","routeIndex","indexOf","splice","defaultRouter","asyncFn","returnPromise","createCacheKey","urlObject","cacheKey","revision","cacheKeyURL","originalURL","searchParams","PrecacheInstallReportPlugin","updatedURLs","notUpdatedURLs","handlerWillStart","state","originalRequest","cachedResponseWillBeUsed","cachedResponse","PrecacheCacheKeyPlugin","precacheController","cacheKeyWillBeUsed","_precacheController","getCacheKeyForURL","headers","supportStatus","copyResponse","response","modifier","clonedResponse","clone","responseInit","Headers","status","statusText","modifiedResponseInit","body","testResponse","Response","error","canConstructResponseFromBodyStream","blob","stripParams","fullURL","ignoreParams","strippedURL","param","delete","Deferred","promise","resolve","quotaErrorCallbacks","Set","toRequest","input","StrategyHandler","strategy","options","_cacheKeys","assign","_strategy","_handlerDeferred","_extendLifetimePromises","_plugins","plugins","_pluginStateMap","plugin","fetch","mode","FetchEvent","preloadResponse","possiblePreloadResponse","hasCallback","cb","iterateCallbacks","thrownErrorMessage","message","pluginFilteredRequest","fetchResponse","fetchOptions","callback","runCallbacks","fetchAndCachePut","responseClone","cachePut","cacheMatch","matchOptions","effectiveRequest","getCacheKey","multiMatchOptions","caches","ms","setTimeout","String","replace","RegExp","responseToCache","_ensureResponseSafeToCache","cache","open","hasCacheUpdateCallback","oldResponse","strippedRequestURL","keysOptions","ignoreSearch","cacheKeys","cacheMatchIgnoreParams","put","executeQuotaErrorCallbacks","newResponse","statefulCallback","statefulParam","doneWaiting","shift","destroy","pluginsUsed","Strategy","responseDone","handleAll","_getResponse","_awaitComplete","_handle","waitUntilError","PrecacheStrategy","_fallbackToNetwork","fallbackToNetwork","copyRedirectedCacheableResponsesPlugin","_handleInstall","_handleFetch","integrityInManifest","integrity","integrityInRequest","noIntegrityConflict","_useDefaultCacheabilityPluginIfNeeded","defaultPluginIndex","cacheWillUpdatePluginCount","entries","defaultPrecacheCacheabilityPlugin","cacheWillUpdate","redirected","PrecacheController","_urlsToCacheKeys","_urlsToCacheModes","_cacheKeysToIntegrities","install","bind","activate","addToCacheList","_installAndActiveListenersAdded","urlsToWarnAbout","cacheMode","firstEntry","secondEntry","warningMessage","console","warn","installReportPlugin","credentials","currentlyCachedRequests","expectedCacheKeys","values","deletedURLs","getURLsToCacheKeys","getCachedURLs","getIntegrityForCacheKey","matchPrecache","createHandlerBoundToURL","getOrCreatePrecacheController","PrecacheRoute","urlsToCacheKeys","possibleURL","ignoreURLParametersMatching","directoryIndex","cleanURLs","urlManipulation","hash","urlWithoutIgnoredParams","paramName","some","test","removeIgnoredSearchParams","pathname","endsWith","directoryURL","cleanURL","additionalURLs","urlToAttempt","generateURLVariations","addRoute","capture","captureUrl","matchCallback","moduleName","funcName"],"mappings":"4CAEA,IACIA,KAAK,uBAAyBC,GAClC,CACA,MAAOC,GAAG,CCIV,MAcaC,EAdIC,CAACC,KAASC,KACvB,IAAIC,EAAMF,EAIV,OAHIC,EAAKE,OAAS,IACdD,GAAO,OAAOE,KAAKC,UAAUJ,MAE1BC,GCIX,MAAMI,UAAqBC,MASvBC,WAAAA,CAAYC,EAAWC,GAEnBC,MADgBb,EAAiBW,EAAWC,IAE5CE,KAAKC,KAAOJ,EACZG,KAAKF,QAAUA,CACnB,ECxBJ,MAAMI,EAAoB,CACtBC,gBAAiB,kBACjBC,SAAU,cACVC,OAAQ,UACRC,QAAS,UACTC,OAAgC,oBAAjBC,aAA+BA,aAAaC,MAAQ,IAEjEC,EAAoBC,GACf,CAACT,EAAkBG,OAAQM,EAAWT,EAAkBK,QAC1DK,OAAQC,GAAUA,GAASA,EAAMtB,OAAS,GAC1CuB,KAAK,KAODC,EACOjB,IANSkB,KACzB,IAAK,MAAMC,KAAOC,OAAOC,KAAKjB,GAC1Bc,EAAGC,IAKHG,CAAqBH,IACW,iBAAjBnB,EAAQmB,KACff,EAAkBe,GAAOnB,EAAQmB,OAJpCF,EAWSM,GACPA,GAAiBX,EAAiBR,EAAkBE,UAZtDW,EAiBQM,GACNA,GAAiBX,EAAiBR,EAAkBI,SCzCnE,IACIvB,KAAK,0BAA4BC,GACrC,CACA,MAAOC,GAAG,CCWH,MCAMqC,EAAoBC,GACzBA,GAA8B,iBAAZA,EASXA,EAWA,CAAEC,OAAQD,GCjBzB,MAAME,EAYF7B,WAAAA,CAAY8B,EAAOH,EAASI,EFhBH,OE8BrB3B,KAAKuB,QAAUD,EAAiBC,GAChCvB,KAAK0B,MAAQA,EACb1B,KAAK2B,OAASA,CAClB,CAMAC,eAAAA,CAAgBL,GACZvB,KAAK6B,aAAeP,EAAiBC,EACzC,ECnCJ,MAAMO,UAAoBL,EActB7B,WAAAA,CAAYmC,EAAQR,EAASI,GAiCzB5B,MAxBc2B,EAAGM,UACb,MAAMC,EAASF,EAAOG,KAAKF,EAAIG,MAE/B,GAAKF,IAODD,EAAII,SAAWC,SAASD,QAA2B,IAAjBH,EAAOK,OAY7C,OAAOL,EAAOM,MAAM,IAEXhB,EAASI,EAC1B,ECvCJ,MAAMa,EAIF5C,WAAAA,GACII,KAAKyC,EAAU,IAAIC,IACnB1C,KAAK2C,EAAqB,IAAID,GAClC,CAMA,UAAIE,GACA,OAAO5C,KAAKyC,CAChB,CAKAI,gBAAAA,GAEI9D,KAAK+D,iBAAiB,QAAWC,IAC7B,MAAMC,QAAEA,GAAYD,EACdE,EAAkBjD,KAAKkD,cAAc,CAAEF,UAASD,UAClDE,GACAF,EAAMI,YAAYF,IAG9B,CAuBAG,gBAAAA,GAEIrE,KAAK+D,iBAAiB,UAAaC,IAG/B,GAAIA,EAAMM,MAA4B,eAApBN,EAAMM,KAAKC,KAAuB,CAEhD,MAAMC,QAAEA,GAAYR,EAAMM,KAIpBG,EAAkBC,QAAQC,IAAIH,EAAQI,YAAYC,IAAKC,IACpC,iBAAVA,IACPA,EAAQ,CAACA,IAEb,MAAMb,EAAU,IAAIc,WAAWD,GAC/B,OAAO7D,KAAKkD,cAAc,CAAEF,UAASD,aAKzCA,EAAMgB,UAAUP,GAEZT,EAAMiB,OAASjB,EAAMiB,MAAM,IACtBR,EAAgBS,KAAK,IAAMlB,EAAMiB,MAAM,GAAGE,aAAY,GAEnE,GAER,CAaAhB,aAAAA,EAAcF,QAAEA,EAAOD,MAAEA,IASrB,MAAMf,EAAM,IAAImC,IAAInB,EAAQhB,IAAKK,SAASF,MAC1C,IAAKH,EAAIoC,SAASC,WAAW,QAIzB,OAEJ,MAAMC,EAAatC,EAAII,SAAWC,SAASD,QACrCmC,OAAEA,EAAMC,MAAEA,GAAUxE,KAAKyE,kBAAkB,CAC7C1B,QACAC,UACAsB,aACAtC,QAEJ,IAAIT,EAAUiD,GAASA,EAAMjD,QAe7B,MAAMI,EAASqB,EAAQrB,OAQvB,IAPKJ,GAAWvB,KAAK2C,EAAmB+B,IAAI/C,KAKxCJ,EAAUvB,KAAK2C,EAAmBgC,IAAIhD,KAErCJ,EAMD,OAkBJ,IAAI0B,EACJ,IACIA,EAAkB1B,EAAQC,OAAO,CAAEQ,MAAKgB,UAASD,QAAOwB,UAC3D,CACD,MAAOK,GACH3B,EAAkBQ,QAAQoB,OAAOD,EACrC,CAEA,MAAM/C,EAAe2C,GAASA,EAAM3C,aAuCpC,OAtCIoB,aAA2BQ,UAC1BzD,KAAK8E,GAAiBjD,KACvBoB,EAAkBA,EAAgB8B,MAAMC,UAEpC,GAAInD,EAUA,IACI,aAAaA,EAAaL,OAAO,CAAEQ,MAAKgB,UAASD,QAAOwB,UAC3D,CACD,MAAOU,GACCA,aAAoBtF,QACpBiF,EAAMK,EAEd,CAEJ,GAAIjF,KAAK8E,EAUL,OAAO9E,KAAK8E,EAActD,OAAO,CAAEQ,MAAKgB,UAASD,UAErD,MAAM6B,KAGP3B,CACX,CAgBAwB,iBAAAA,EAAkBzC,IAAEA,EAAGsC,WAAEA,EAAUtB,QAAEA,EAAOD,MAAEA,IAC1C,MAAMH,EAAS5C,KAAKyC,EAAQkC,IAAI3B,EAAQrB,SAAW,GACnD,IAAK,MAAM6C,KAAS5B,EAAQ,CACxB,IAAI2B,EAGJ,MAAMW,EAAcV,EAAM9C,MAAM,CAAEM,MAAKsC,aAAYtB,UAASD,UAC5D,GAAImC,EA6BA,OAjBAX,EAASW,GACLC,MAAMC,QAAQb,IAA6B,IAAlBA,EAAOhF,QAI3B2F,EAAYtF,cAAgBsB,QACG,IAApCA,OAAOC,KAAK+D,GAAa3F,QAIG,kBAAhB2F,KAPZX,OAASc,GAcN,CAAEb,QAAOD,SAExB,CAEA,MAAO,EACX,CAeAe,iBAAAA,CAAkB/D,EAASI,EJ1SF,OI2SrB3B,KAAK2C,EAAmB4C,IAAI5D,EAAQL,EAAiBC,GACzD,CAQAK,eAAAA,CAAgBL,GACZvB,KAAK8E,EAAgBxD,EAAiBC,EAC1C,CAMAiE,aAAAA,CAAchB,GAiCLxE,KAAKyC,EAAQiC,IAAIF,EAAM7C,SACxB3B,KAAKyC,EAAQ8C,IAAIf,EAAM7C,OAAQ,IAInC3B,KAAKyC,EAAQkC,IAAIH,EAAM7C,QAAQ8D,KAAKjB,EACxC,CAMAkB,eAAAA,CAAgBlB,GACZ,IAAKxE,KAAKyC,EAAQiC,IAAIF,EAAM7C,QACxB,MAAM,IAAIjC,EAAa,6CAA8C,CACjEiC,OAAQ6C,EAAM7C,SAGtB,MAAMgE,EAAa3F,KAAKyC,EAAQkC,IAAIH,EAAM7C,QAAQiE,QAAQpB,GAC1D,KAAImB,GAAc,GAId,MAAM,IAAIjG,EAAa,yCAHvBM,KAAKyC,EAAQkC,IAAIH,EAAM7C,QAAQkE,OAAOF,EAAY,EAK1D,EC7XJ,IAAIG,ECOJ,SAAS/B,EAAUhB,EAAOgD,GACtB,MAAMC,EAAgBD,IAEtB,OADAhD,EAAMgB,UAAUiC,GACTA,CACX,CClBA,IACIjH,KAAK,6BAA+BC,GACxC,CACA,MAAOC,GAAG,CCeH,SAASgH,EAAepC,GAC3B,IAAKA,EACD,MAAM,IAAInE,EAAa,oCAAqC,CAAEmE,UAIlE,GAAqB,iBAAVA,EAAoB,CAC3B,MAAMqC,EAAY,IAAI/B,IAAIN,EAAOxB,SAASF,MAC1C,MAAO,CACHgE,SAAUD,EAAU/D,KACpBH,IAAKkE,EAAU/D,KAEvB,CACA,MAAMiE,SAAEA,EAAQpE,IAAEA,GAAQ6B,EAC1B,IAAK7B,EACD,MAAM,IAAItC,EAAa,oCAAqC,CAAEmE,UAIlE,IAAKuC,EAAU,CACX,MAAMF,EAAY,IAAI/B,IAAInC,EAAKK,SAASF,MACxC,MAAO,CACHgE,SAAUD,EAAU/D,KACpBH,IAAKkE,EAAU/D,KAEvB,CAGA,MAAMkE,EAAc,IAAIlC,IAAInC,EAAKK,SAASF,MACpCmE,EAAc,IAAInC,IAAInC,EAAKK,SAASF,MAE1C,OADAkE,EAAYE,aAAahB,IAxCC,kBAwC0Ba,GAC7C,CACHD,SAAUE,EAAYlE,KACtBH,IAAKsE,EAAYnE,KAEzB,CCzCA,MAAMqE,EACF5G,WAAAA,GACII,KAAKyG,YAAc,GACnBzG,KAAK0G,eAAiB,GACtB1G,KAAK2G,iBAAmB3B,OAAShC,UAAS4D,YAElCA,IACAA,EAAMC,gBAAkB7D,IAGhChD,KAAK8G,yBAA2B9B,OAASjC,QAAO6D,QAAOG,qBACnD,GAAmB,YAAfhE,EAAMO,MACFsD,GACAA,EAAMC,iBACND,EAAMC,2BAA2B/C,QAAS,CAE1C,MAAM9B,EAAM4E,EAAMC,gBAAgB7E,IAC9B+E,EACA/G,KAAK0G,eAAejB,KAAKzD,GAGzBhC,KAAKyG,YAAYhB,KAAKzD,EAE9B,CAEJ,OAAO+E,EAEf,EC3BJ,MAAMC,EACFpH,WAAAA,EAAYqH,mBAAEA,IACVjH,KAAKkH,mBAAqBlC,OAAShC,UAASuB,aAGxC,MAAM4B,GAAY5B,aAA4C,EAAIA,EAAO4B,WACrEnG,KAAKmH,EAAoBC,kBAAkBpE,EAAQhB,KAEvD,OAAOmE,EACD,IAAIrC,QAAQqC,EAAU,CAAEkB,QAASrE,EAAQqE,UACzCrE,GAEVhD,KAAKmH,EAAsBF,CAC/B,ECnBJ,IAAIK,ECqBJtC,eAAeuC,EAAaC,EAAUC,GAClC,IAAIrF,EAAS,KAEb,GAAIoF,EAASxF,IAAK,CAEdI,EADoB,IAAI+B,IAAIqD,EAASxF,KAChBI,MACzB,CACA,GAAIA,IAAWrD,KAAKsD,SAASD,OACzB,MAAM,IAAI1C,EAAa,6BAA8B,CAAE0C,WAE3D,MAAMsF,EAAiBF,EAASG,QAE1BC,EAAe,CACjBP,QAAS,IAAIQ,QAAQH,EAAeL,SACpCS,OAAQJ,EAAeI,OACvBC,WAAYL,EAAeK,YAGzBC,EAAuBP,EAAWA,EAASG,GAAgBA,EAI3DK,EDjCV,WACI,QAAsB5C,IAAlBiC,EAA6B,CAC7B,MAAMY,EAAe,IAAIC,SAAS,IAClC,GAAI,SAAUD,EACV,IACI,IAAIC,SAASD,EAAaD,MAC1BX,GAAgB,CACnB,CACD,MAAOc,GACHd,GAAgB,CACpB,CAEJA,GAAgB,CACpB,CACA,OAAOA,CACX,CCkBiBe,GACPX,EAAeO,WACTP,EAAeY,OAC3B,OAAO,IAAIH,SAASF,EAAMD,EAC9B,CChDA,SAASO,EAAYC,EAASC,GAC1B,MAAMC,EAAc,IAAIvE,IAAIqE,GAC5B,IAAK,MAAMG,KAASF,EAChBC,EAAYnC,aAAaqC,OAAOD,GAEpC,OAAOD,EAAYvG,IACvB,CCGA,MAAM0G,EAIFjJ,WAAAA,GACII,KAAK8I,QAAU,IAAIrF,QAAQ,CAACsF,EAASlE,KACjC7E,KAAK+I,QAAUA,EACf/I,KAAK6E,OAASA,GAEtB,ECdJ,MAAMmE,EAAsB,IAAIC,ICThC,IACIlK,KAAK,6BAA+BC,GACxC,CACA,MAAOC,GAAG,CCWV,SAASiK,EAAUC,GACf,MAAwB,iBAAVA,EAAqB,IAAIrF,QAAQqF,GAASA,CAC5D,CAUA,MAAMC,EAiBFxJ,WAAAA,CAAYyJ,EAAUC,GAClBtJ,KAAKuJ,EAAa,GA8ClBrI,OAAOsI,OAAOxJ,KAAMsJ,GACpBtJ,KAAK+C,MAAQuG,EAAQvG,MACrB/C,KAAKyJ,EAAYJ,EACjBrJ,KAAK0J,EAAmB,IAAIb,EAC5B7I,KAAK2J,EAA0B,GAG/B3J,KAAK4J,EAAW,IAAIP,EAASQ,SAC7B7J,KAAK8J,EAAkB,IAAIpH,IAC3B,IAAK,MAAMqH,KAAU/J,KAAK4J,EACtB5J,KAAK8J,EAAgBvE,IAAIwE,EAAQ,CAAE,GAEvC/J,KAAK+C,MAAMgB,UAAU/D,KAAK0J,EAAiBZ,QAC/C,CAcA,WAAMkB,CAAMb,GACR,MAAMpG,MAAEA,GAAU/C,KAClB,IAAIgD,EAAUkG,EAAUC,GACxB,GAAqB,aAAjBnG,EAAQiH,MACRlH,aAAiBmH,YACjBnH,EAAMoH,gBAAiB,CACvB,MAAMC,QAAiCrH,EAAMoH,gBAC7C,GAAIC,EAKA,OAAOA,CAEf,CAIA,MAAMvD,EAAkB7G,KAAKqK,YAAY,gBACnCrH,EAAQ2E,QACR,KACN,IACI,IAAK,MAAM2C,KAAMtK,KAAKuK,iBAAiB,oBACnCvH,QAAgBsH,EAAG,CAAEtH,QAASA,EAAQ2E,QAAS5E,SAEtD,CACD,MAAO6B,GACH,GAAIA,aAAejF,MACf,MAAM,IAAID,EAAa,kCAAmC,CACtD8K,mBAAoB5F,EAAI6F,SAGpC,CAIA,MAAMC,EAAwB1H,EAAQ2E,QACtC,IACI,IAAIgD,EAEJA,QAAsBX,MAAMhH,EAA0B,aAAjBA,EAAQiH,UAAsB5E,EAAYrF,KAAKyJ,EAAUmB,cAM9F,IAAK,MAAMC,KAAY7K,KAAKuK,iBAAiB,mBACzCI,QAAsBE,EAAS,CAC3B9H,QACAC,QAAS0H,EACTlD,SAAUmD,IAGlB,OAAOA,CACV,CACD,MAAOvC,GAeH,MARIvB,SACM7G,KAAK8K,aAAa,eAAgB,CACpC1C,MAAOA,EACPrF,QACA8D,gBAAiBA,EAAgBc,QACjC3E,QAAS0H,EAAsB/C,UAGjCS,CACV,CACJ,CAWA,sBAAM2C,CAAiB5B,GACnB,MAAM3B,QAAiBxH,KAAKgK,MAAMb,GAC5B6B,EAAgBxD,EAASG,QAE/B,OADK3H,KAAK+D,UAAU/D,KAAKiL,SAAS9B,EAAO6B,IAClCxD,CACX,CAaA,gBAAM0D,CAAWjK,GACb,MAAM+B,EAAUkG,EAAUjI,GAC1B,IAAI8F,EACJ,MAAMpG,UAAEA,EAASwK,aAAEA,GAAiBnL,KAAKyJ,EACnC2B,QAAyBpL,KAAKqL,YAAYrI,EAAS,QACnDsI,EAAoBpK,OAAOsI,OAAOtI,OAAOsI,OAAO,CAAA,EAAI2B,GAAe,CAAExK,cAC3EoG,QAAuBwE,OAAO7J,MAAM0J,EAAkBE,GAStD,IAAK,MAAMT,KAAY7K,KAAKuK,iBAAiB,4BACzCxD,QACW8D,EAAS,CACZlK,YACAwK,eACApE,iBACA/D,QAASoI,EACTrI,MAAO/C,KAAK+C,cACTsC,EAEf,OAAO0B,CACX,CAgBA,cAAMkE,CAAShK,EAAKuG,GAChB,MAAMxE,EAAUkG,EAAUjI,GCxP3B,IAAiBuK,UD2PF,EC1PX,IAAI/H,QAASsF,GAAY0C,WAAW1C,EAASyC,KD2PhD,MAAMJ,QAAyBpL,KAAKqL,YAAYrI,EAAS,SAiBzD,IAAKwE,EAKD,MAAM,IAAI9H,EAAa,6BAA8B,CACjDsC,KE1RQA,EF0RYoJ,EAAiBpJ,IEzRlC,IAAImC,IAAIuH,OAAO1J,GAAMK,SAASF,MAG/BA,KAAKwJ,QAAQ,IAAIC,OAAO,IAAIvJ,SAASD,UAAW,OAJ1CJ,MF6RhB,MAAM6J,QAAwB7L,KAAK8L,EAA2BtE,GAC9D,IAAKqE,EAKD,OAAO,EAEX,MAAMlL,UAAEA,EAASwK,aAAEA,GAAiBnL,KAAKyJ,EACnCsC,QAAchN,KAAKwM,OAAOS,KAAKrL,GAC/BsL,EAAyBjM,KAAKqK,YAAY,kBAC1C6B,EAAcD,QJtR5BjH,eAAsC+G,EAAO/I,EAASyF,EAAc0C,GAChE,MAAMgB,EAAqB5D,EAAYvF,EAAQhB,IAAKyG,GAEpD,GAAIzF,EAAQhB,MAAQmK,EAChB,OAAOJ,EAAMrK,MAAMsB,EAASmI,GAGhC,MAAMiB,EAAclL,OAAOsI,OAAOtI,OAAOsI,OAAO,CAAA,EAAI2B,GAAe,CAAEkB,cAAc,IAC7EC,QAAkBP,EAAM5K,KAAK6B,EAASoJ,GAC5C,IAAK,MAAMjG,KAAYmG,EAEnB,GAAIH,IADwB5D,EAAYpC,EAASnE,IAAKyG,GAElD,OAAOsD,EAAMrK,MAAMyE,EAAUgF,EAIzC,CIuQoBoB,CAIRR,EAAOX,EAAiBzD,QAAS,CAAC,mBAAoBwD,GACpD,KAKN,UACUY,EAAMS,IAAIpB,EAAkBa,EAAyBJ,EAAgBlE,QAAUkE,EACxF,CACD,MAAOzD,GACH,GAAIA,aAAiBzI,MAKjB,KAHmB,uBAAfyI,EAAMnI,YGhT1B+E,iBAKI,IAAK,MAAM6F,KAAY7B,QACb6B,GAQd,CHmS0B4B,GAEJrE,CAEd,CACA,IAAK,MAAMyC,KAAY7K,KAAKuK,iBAAiB,wBACnCM,EAAS,CACXlK,YACAuL,cACAQ,YAAab,EAAgBlE,QAC7B3E,QAASoI,EACTrI,MAAO/C,KAAK+C,QAGpB,OAAO,CACX,CAYA,iBAAMsI,CAAYrI,EAASiH,GACvB,MAAMhJ,EAAM,GAAG+B,EAAQhB,SAASiI,IAChC,IAAKjK,KAAKuJ,EAAWtI,GAAM,CACvB,IAAImK,EAAmBpI,EACvB,IAAK,MAAM6H,KAAY7K,KAAKuK,iBAAiB,sBACzCa,EAAmBlC,QAAgB2B,EAAS,CACxCZ,OACAjH,QAASoI,EACTrI,MAAO/C,KAAK+C,MAEZwB,OAAQvE,KAAKuE,UAGrBvE,KAAKuJ,EAAWtI,GAAOmK,CAC3B,CACA,OAAOpL,KAAKuJ,EAAWtI,EAC3B,CAQAoJ,WAAAA,CAAYpK,GACR,IAAK,MAAM8J,KAAU/J,KAAKyJ,EAAUI,QAChC,GAAI5J,KAAQ8J,EACR,OAAO,EAGf,OAAO,CACX,CAiBA,kBAAMe,CAAa7K,EAAM0I,GACrB,IAAK,MAAMkC,KAAY7K,KAAKuK,iBAAiBtK,SAGnC4K,EAASlC,EAEvB,CAUA,iBAAC4B,CAAiBtK,GACd,IAAK,MAAM8J,KAAU/J,KAAKyJ,EAAUI,QAChC,GAA4B,mBAAjBE,EAAO9J,GAAsB,CACpC,MAAM2G,EAAQ5G,KAAK8J,EAAgBnF,IAAIoF,GACjC4C,EAAoBhE,IACtB,MAAMiE,EAAgB1L,OAAOsI,OAAOtI,OAAOsI,OAAO,CAAA,EAAIb,GAAQ,CAAE/B,UAGhE,OAAOmD,EAAO9J,GAAM2M,UAElBD,CACV,CAER,CAcA5I,SAAAA,CAAU+E,GAEN,OADA9I,KAAK2J,EAAwBlE,KAAKqD,GAC3BA,CACX,CAWA,iBAAM+D,GACF,IAAI/D,EACJ,KAAQA,EAAU9I,KAAK2J,EAAwBmD,eACrChE,CAEd,CAKAiE,OAAAA,GACI/M,KAAK0J,EAAiBX,QAAQ,KAClC,CAWA,OAAM+C,CAA2BtE,GAC7B,IAAIqE,EAAkBrE,EAClBwF,GAAc,EAClB,IAAK,MAAMnC,KAAY7K,KAAKuK,iBAAiB,mBAQzC,GAPAsB,QACWhB,EAAS,CACZ7H,QAAShD,KAAKgD,QACdwE,SAAUqE,EACV9I,MAAO/C,KAAK+C,cACTsC,EACX2H,GAAc,GACTnB,EACD,MAwBR,OArBKmB,GACGnB,GAA8C,MAA3BA,EAAgB/D,SACnC+D,OAAkBxG,GAmBnBwG,CACX,EIhfJ,MAAMoB,EAuBFrN,WAAAA,CAAY0J,EAAU,IAQlBtJ,KAAKW,UAAYI,EAA0BuI,EAAQ3I,WAQnDX,KAAK6J,QAAUP,EAAQO,SAAW,GAQlC7J,KAAK4K,aAAetB,EAAQsB,aAQ5B5K,KAAKmL,aAAe7B,EAAQ6B,YAChC,CAoBA3J,MAAAA,CAAO8H,GACH,MAAO4D,GAAgBlN,KAAKmN,UAAU7D,GACtC,OAAO4D,CACX,CAuBAC,SAAAA,CAAU7D,GAEFA,aAAmBY,aACnBZ,EAAU,CACNvG,MAAOuG,EACPtG,QAASsG,EAAQtG,UAGzB,MAAMD,EAAQuG,EAAQvG,MAChBC,EAAqC,iBAApBsG,EAAQtG,QACzB,IAAIc,QAAQwF,EAAQtG,SACpBsG,EAAQtG,QACRuB,EAAS,WAAY+E,EAAUA,EAAQ/E,YAASc,EAChD9D,EAAU,IAAI6H,EAAgBpJ,KAAM,CAAE+C,QAAOC,UAASuB,WACtD2I,EAAelN,KAAKoN,EAAa7L,EAASyB,EAASD,GAGzD,MAAO,CAACmK,EAFYlN,KAAKqN,EAAeH,EAAc3L,EAASyB,EAASD,GAG5E,CACA,OAAMqK,CAAa7L,EAASyB,EAASD,GAEjC,IAAIyE,QADEjG,EAAQuJ,aAAa,mBAAoB,CAAE/H,QAAOC,YAExD,IAKI,GAJAwE,QAAiBxH,KAAKsN,EAAQtK,EAASzB,IAIlCiG,GAA8B,UAAlBA,EAASlE,KACtB,MAAM,IAAI5D,EAAa,cAAe,CAAEsC,IAAKgB,EAAQhB,KAE5D,CACD,MAAOoG,GACH,GAAIA,aAAiBzI,MACjB,IAAK,MAAMkL,KAAYtJ,EAAQgJ,iBAAiB,mBAE5C,GADA/C,QAAiBqD,EAAS,CAAEzC,QAAOrF,QAAOC,YACtCwE,EACA,MAIZ,IAAKA,EACD,MAAMY,CAOd,CACA,IAAK,MAAMyC,KAAYtJ,EAAQgJ,iBAAiB,sBAC5C/C,QAAiBqD,EAAS,CAAE9H,QAAOC,UAASwE,aAEhD,OAAOA,CACX,CACA,OAAM6F,CAAeH,EAAc3L,EAASyB,EAASD,GACjD,IAAIyE,EACAY,EACJ,IACIZ,QAAiB0F,CACpB,CACD,MAAO9E,GAGH,CAEJ,UACU7G,EAAQuJ,aAAa,oBAAqB,CAC5C/H,QACAC,UACAwE,mBAEEjG,EAAQsL,aACjB,CACD,MAAOU,GACCA,aAA0B5N,QAC1ByI,EAAQmF,EAEhB,CAQA,SAPMhM,EAAQuJ,aAAa,qBAAsB,CAC7C/H,QACAC,UACAwE,WACAY,MAAOA,IAEX7G,EAAQwL,UACJ3E,EACA,MAAMA,CAEd,ECtLJ,MAAMoF,UAAyBP,EAkB3BrN,WAAAA,CAAY0J,EAAU,IAClBA,EAAQ3I,UAAYI,EAA2BuI,EAAQ3I,WACvDZ,MAAMuJ,GACNtJ,KAAKyN,GAC6B,IAA9BnE,EAAQoE,kBAKZ1N,KAAK6J,QAAQpE,KAAK+H,EAAiBG,uCACvC,CAQA,OAAML,CAAQtK,EAASzB,GACnB,MAAMiG,QAAiBjG,EAAQ2J,WAAWlI,GAC1C,OAAIwE,IAKAjG,EAAQwB,OAAgC,YAAvBxB,EAAQwB,MAAMO,WAClBtD,KAAK4N,EAAe5K,EAASzB,SAIjCvB,KAAK6N,EAAa7K,EAASzB,GAC5C,CACA,OAAMsM,CAAa7K,EAASzB,GACxB,IAAIiG,EACJ,MAAMjD,EAAUhD,EAAQgD,QAAU,GAElC,IAAIvE,KAAKyN,EAuCL,MAAM,IAAI/N,EAAa,yBAA0B,CAC7CiB,UAAWX,KAAKW,UAChBqB,IAAKgB,EAAQhB,MAzCQ,CAMzB,MAAM8L,EAAsBvJ,EAAOwJ,UAC7BC,EAAqBhL,EAAQ+K,UAC7BE,GAAuBD,GAAsBA,IAAuBF,EAG1EtG,QAAiBjG,EAAQyI,MAAM,IAAIlG,QAAQd,EAAS,CAChD+K,UAA4B,YAAjB/K,EAAQiH,KACb+D,GAAsBF,OACtBzI,KASNyI,GACAG,GACiB,YAAjBjL,EAAQiH,OACRjK,KAAKkO,UACmB3M,EAAQ0J,SAASjI,EAASwE,EAASG,SAQnE,CAuBA,OAAOH,CACX,CACA,OAAMoG,CAAe5K,EAASzB,GAC1BvB,KAAKkO,IACL,MAAM1G,QAAiBjG,EAAQyI,MAAMhH,GAIrC,UADwBzB,EAAQ0J,SAASjI,EAASwE,EAASG,SAIvD,MAAM,IAAIjI,EAAa,0BAA2B,CAC9CsC,IAAKgB,EAAQhB,IACb8F,OAAQN,EAASM,SAGzB,OAAON,CACX,CA4BA0G,CAAAA,GACI,IAAIC,EAAqB,KACrBC,EAA6B,EACjC,IAAK,MAAO9L,EAAOyH,KAAW/J,KAAK6J,QAAQwE,UAEnCtE,IAAWyD,EAAiBG,yCAI5B5D,IAAWyD,EAAiBc,oCAC5BH,EAAqB7L,GAErByH,EAAOwE,iBACPH,KAG2B,IAA/BA,EACApO,KAAK6J,QAAQpE,KAAK+H,EAAiBc,mCAE9BF,EAA6B,GAA4B,OAAvBD,GAEvCnO,KAAK6J,QAAQhE,OAAOsI,EAAoB,EAGhD,EAEJX,EAAiBc,kCAAoC,CACjDtJ,gBAAqBuJ,OAAC/G,SAAEA,MACfA,GAAYA,EAASM,QAAU,IACzB,KAEJN,GAGfgG,EAAiBG,uCAAyC,CACtD3I,gBAAqBuJ,OAAC/G,SAAEA,KACbA,EAASgH,iBAAmBjH,EAAaC,GAAYA,GCnMpE,MAAMiH,EAWF7O,WAAAA,EAAYe,UAAEA,EAASkJ,QAAEA,EAAU,GAAE6D,kBAAEA,GAAoB,GAAU,IACjE1N,KAAK0O,EAAmB,IAAIhM,IAC5B1C,KAAK2O,EAAoB,IAAIjM,IAC7B1C,KAAK4O,EAA0B,IAAIlM,IACnC1C,KAAKyJ,EAAY,IAAI+D,EAAiB,CAClC7M,UAAWI,EAA2BJ,GACtCkJ,QAAS,IACFA,EACH,IAAI7C,EAAuB,CAAEC,mBAAoBjH,QAErD0N,sBAGJ1N,KAAK6O,QAAU7O,KAAK6O,QAAQC,KAAK9O,MACjCA,KAAK+O,SAAW/O,KAAK+O,SAASD,KAAK9O,KACvC,CAKA,YAAIqJ,GACA,OAAOrJ,KAAKyJ,CAChB,CAWArJ,QAAAA,CAASiO,GACLrO,KAAKgP,eAAeX,GACfrO,KAAKiP,IACNlQ,KAAK+D,iBAAiB,UAAW9C,KAAK6O,SACtC9P,KAAK+D,iBAAiB,WAAY9C,KAAK+O,UACvC/O,KAAKiP,GAAkC,EAE/C,CAQAD,cAAAA,CAAeX,GASX,MAAMa,EAAkB,GACxB,IAAK,MAAMrL,KAASwK,EAAS,CAEJ,iBAAVxK,EACPqL,EAAgBzJ,KAAK5B,GAEhBA,QAA4BwB,IAAnBxB,EAAMuC,UACpB8I,EAAgBzJ,KAAK5B,EAAM7B,KAE/B,MAAMmE,SAAEA,EAAQnE,IAAEA,GAAQiE,EAAepC,GACnCsL,EAA6B,iBAAVtL,GAAsBA,EAAMuC,SAAW,SAAW,UAC3E,GAAIpG,KAAK0O,EAAiBhK,IAAI1C,IAC1BhC,KAAK0O,EAAiB/J,IAAI3C,KAASmE,EACnC,MAAM,IAAIzG,EAAa,wCAAyC,CAC5D0P,WAAYpP,KAAK0O,EAAiB/J,IAAI3C,GACtCqN,YAAalJ,IAGrB,GAAqB,iBAAVtC,GAAsBA,EAAMkK,UAAW,CAC9C,GAAI/N,KAAK4O,EAAwBlK,IAAIyB,IACjCnG,KAAK4O,EAAwBjK,IAAIwB,KAActC,EAAMkK,UACrD,MAAM,IAAIrO,EAAa,4CAA6C,CAChEsC,QAGRhC,KAAK4O,EAAwBrJ,IAAIY,EAAUtC,EAAMkK,UACrD,CAGA,GAFA/N,KAAK0O,EAAiBnJ,IAAIvD,EAAKmE,GAC/BnG,KAAK2O,EAAkBpJ,IAAIvD,EAAKmN,GAC5BD,EAAgB3P,OAAS,EAAG,CAC5B,MAAM+P,EACF,qDAASJ,EAAgBpO,KAAK,8EAK9ByO,QAAQC,KAAKF,EAKrB,CACJ,CACJ,CAWAT,OAAAA,CAAQ9L,GAGJ,OAAOgB,EAAUhB,EAAOiC,UACpB,MAAMyK,EAAsB,IAAIjJ,EAChCxG,KAAKqJ,SAASQ,QAAQpE,KAAKgK,GAG3B,IAAK,MAAOzN,EAAKmE,KAAanG,KAAK0O,EAAkB,CACjD,MAAMX,EAAY/N,KAAK4O,EAAwBjK,IAAIwB,GAC7CgJ,EAAYnP,KAAK2O,EAAkBhK,IAAI3C,GACvCgB,EAAU,IAAIc,QAAQ9B,EAAK,CAC7B+L,YACAhC,MAAOoD,EACPO,YAAa,sBAEXjM,QAAQC,IAAI1D,KAAKqJ,SAAS8D,UAAU,CACtC5I,OAAQ,CAAE4B,YACVnD,UACAD,UAER,CACA,MAAM0D,YAAEA,EAAWC,eAAEA,GAAmB+I,EAIxC,MAAO,CAAEhJ,cAAaC,mBAE9B,CAWAqI,QAAAA,CAAShM,GAGL,OAAOgB,EAAUhB,EAAOiC,UACpB,MAAM+G,QAAchN,KAAKwM,OAAOS,KAAKhM,KAAKqJ,SAAS1I,WAC7CgP,QAAgC5D,EAAM5K,OACtCyO,EAAoB,IAAI3G,IAAIjJ,KAAK0O,EAAiBmB,UAClDC,EAAc,GACpB,IAAK,MAAM9M,KAAW2M,EACbC,EAAkBlL,IAAI1B,EAAQhB,aACzB+J,EAAMnD,OAAO5F,GACnB8M,EAAYrK,KAAKzC,EAAQhB,MAMjC,MAAO,CAAE8N,gBAEjB,CAOAC,kBAAAA,GACI,OAAO/P,KAAK0O,CAChB,CAOAsB,aAAAA,GACI,MAAO,IAAIhQ,KAAK0O,EAAiBvN,OACrC,CAUAiG,iBAAAA,CAAkBpF,GACd,MAAMkE,EAAY,IAAI/B,IAAInC,EAAKK,SAASF,MACxC,OAAOnC,KAAK0O,EAAiB/J,IAAIuB,EAAU/D,KAC/C,CAMA8N,uBAAAA,CAAwB9J,GACpB,OAAOnG,KAAK4O,EAAwBjK,IAAIwB,EAC5C,CAmBA,mBAAM+J,CAAclN,GAChB,MAAMhB,EAAMgB,aAAmBc,QAAUd,EAAQhB,IAAMgB,EACjDmD,EAAWnG,KAAKoH,kBAAkBpF,GACxC,GAAImE,EAAU,CAEV,aADoBpH,KAAKwM,OAAOS,KAAKhM,KAAKqJ,SAAS1I,YACtCe,MAAMyE,EACvB,CAEJ,CASAgK,uBAAAA,CAAwBnO,GACpB,MAAMmE,EAAWnG,KAAKoH,kBAAkBpF,GACxC,IAAKmE,EACD,MAAM,IAAIzG,EAAa,oBAAqB,CAAEsC,QAElD,OAAQsH,IACJA,EAAQtG,QAAU,IAAIc,QAAQ9B,GAC9BsH,EAAQ/E,OAASrD,OAAOsI,OAAO,CAAErD,YAAYmD,EAAQ/E,QAC9CvE,KAAKqJ,SAAS7H,OAAO8H,GAEpC,ECxRJ,IAAIrC,EAKG,MAAMmJ,EAAgCA,KACpCnJ,IACDA,EAAqB,IAAIwH,GAEtBxH,GCGX,MAAMoJ,UAAsB5O,EAiBxB7B,WAAAA,CAAYqH,EAAoBqC,GAe5BvJ,MAdc2B,EAAGsB,cACb,MAAMsN,EAAkBrJ,EAAmB8I,qBAC3C,IAAK,MAAMQ,KCtBhB,UAAgCvO,GAAKwO,4BAAEA,EAA8B,CAAC,QAAS,YAAWC,eAAEA,EAAiB,aAAYC,UAAEA,GAAY,EAAIC,gBAAEA,GAAqB,IACrK,MAAMzK,EAAY,IAAI/B,IAAInC,EAAKK,SAASF,MACxC+D,EAAU0K,KAAO,SACX1K,EAAU/D,KAChB,MAAM0O,ECHH,SAAmC3K,EAAWsK,EAA8B,IAG/E,IAAK,MAAMM,IAAa,IAAI5K,EAAUK,aAAapF,QAC3CqP,EAA4BO,KAAMhP,GAAWA,EAAOiP,KAAKF,KACzD5K,EAAUK,aAAaqC,OAAOkI,GAGtC,OAAO5K,CACX,CDNoC+K,CAA0B/K,EAAWsK,GAErE,SADMK,EAAwB1O,KAC1BsO,GAAkBI,EAAwBK,SAASC,SAAS,KAAM,CAClE,MAAMC,EAAe,IAAIjN,IAAI0M,EAAwB1O,MACrDiP,EAAaF,UAAYT,QACnBW,EAAajP,IACvB,CACA,GAAIuO,EAAW,CACX,MAAMW,EAAW,IAAIlN,IAAI0M,EAAwB1O,MACjDkP,EAASH,UAAY,cACfG,EAASlP,IACnB,CACA,GAAIwO,EAAiB,CACjB,MAAMW,EAAiBX,EAAgB,CAAE3O,IAAKkE,IAC9C,IAAK,MAAMqL,KAAgBD,QACjBC,EAAapP,IAE3B,CACJ,CDAsCqP,CAAsBxO,EAAQhB,IAAKsH,GAAU,CACnE,MAAMnD,EAAWmK,EAAgB3L,IAAI4L,GACrC,GAAIpK,EAAU,CAEV,MAAO,CAAEA,WAAU4H,UADD9G,EAAmBgJ,wBAAwB9J,GAEjE,CACJ,GAMSc,EAAmBoC,SACpC,EG7BJ,SAASoI,EAASnI,GACd,MAAMrC,EAAqBmJ,KCK/B,SAAuBsB,EAASnQ,EAASI,GACrC,IAAI6C,EACJ,GAAuB,iBAAZkN,EAAsB,CAC7B,MAAMC,EAAa,IAAIxN,IAAIuN,EAASrP,SAASF,MAkC7CqC,EAAQ,IAAI/C,EAZUmQ,EAAG5P,SASdA,EAAIG,OAASwP,EAAWxP,KAGFZ,EAASI,EAC9C,MACK,GAAI+P,aAAmB9F,OAExBpH,EAAQ,IAAI1C,EAAY4P,EAASnQ,EAASI,QAEzC,GAAuB,mBAAZ+P,EAEZlN,EAAQ,IAAI/C,EAAMiQ,EAASnQ,EAASI,OAEnC,MAAI+P,aAAmBjQ,GAIxB,MAAM,IAAI/B,EAAa,yBAA0B,CAC7CmS,WAAY,kBACZC,SAAU,gBACVhB,UAAW,YANftM,EAAQkN,CAQZ,ExBrEK5L,IACDA,EAAgB,IAAItD,EAEpBsD,EAAcjD,mBACdiD,EAAc1C,oBAEX0C,GwBiEON,cAAchB,EAEhC,CD/DIgB,CADsB,IAAI6K,EAAcpJ,EAAoBqC,GAEhE,oBELA,SAA0B+E,EAAS/E,ICInC,SAAkB+E,GACa+B,IACRhQ,SAASiO,EAChC,CDNIjO,CAASiO,GACToD,EAASnI,EACb,wBECA,SAA6BxJ,GA6BzBiB,EAAyBjB,EAC7B"}&rocket::state::Staterocket::state::Staterocket::serde::json::Jsonaw_models::info::Infoserver_infofontsstatic/api/0/info/api/0/buckets/api/0/query/api/0/import/api/0/export/api/0/settingsjsapplicationoctet-streamapplication/octet-streamcssdefaultFailed to get db pathFailed to get Java stringCouldn't create java string/apikey_fairingNoSuchBucketBucketAlreadyExistsNoSuchKeyMpscErrorInternalErrorUninitializedOldDbVersionErrorindexBadCharBadEndUtf8Errorvalid_up_toerror_lena Display implementation returned an error unexpectedlyUnexpectedParseEoiCharacterBoundaryParsingErrorEmptyQueryVariableNotDefinedMathErrorInvalidTypeInvalidFunctionParametersTimeIntervalErrorBucketNotFoundRegexCompileErrorWrongJValueTypeInvalidCtorReturnInvalidArgListMethodNotFoundsigFieldNotFoundJavaExceptionJNIEnvMethodNotFoundNullPtrNullDerefTryLockJavaVMMethodNotFoundFieldAlreadySetThrowFailedParseFailedJniCallutf-8()failed to write whole buffer │ │ FieldSet corrupted (this is a bug)poll_completewritinginvalid framereclaimedwasn't expecting a frame to reclaimnot reclaiming frame for cancelled streamremoving dangling stream from pending_senddata framestream capacity is 0sending data frameassertion failed: dst.remaining_mut() >= len │ │ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHJHLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJLJPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPRPVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTVTXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVXVZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZX^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\^\`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^`^dbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbIP addressactivitywatch-testingactivitywatchcalled `Result::unwrap()` on an `Err` valueassertion failed: DEFAULT_MAX_FRAME_SIZE as usize <= val && val <= MAX_MAX_FRAME_SIZE as usizeassertion failed: !stream_id.is_zero()rocket_http::listenerCannot convert indexed str to str without base string!assertion failed: val <= frame::MAX_MAX_FRAME_SIZE as usizesqlite.dbsqlite-testing.dbconfig.tomlconfig-testing.tomlpeewee-sqlite-testingsqlite-testingconfig-testing-testing.db-testing.toml-testing.json_testing_device_id/data/user/0/net.activitywatch.android/filesLocal time out of range for `NaiveDateTime`stream_idflagspad_lenRecvErrorParseFloatErrorErrorUnexpectedFrameTypePayloadTooBigReleaseCapacityTooBigOverflowedStreamIdMissingUriSchemeAndAuthorityPollResetAfterSendResponseSendPingWhilePendingSendSettingsWhilePendingPeerDisabledServerPushpolled after completeEmptyInvalidBooleanDoubleFloatIntShorta Display implementation returned an error unexpectedlydrain channelsignal received, starting graceful shutdownParseIntErrorNotEofPrimitiveObjectArrayMethodInvalidDigitPosOverflowNegOverflowNotAPowerOfTwoIncompleteBodyTypeSignatureret()description() is deprecated; use Displaybytes remaining on stream │ │ workersmax_blockingforcerocket-worker-threadcreate tokio runtimeFieldSet corrupted (this is a bug)end of chunkedunexpected EOF during chunk size lineInvalid chunk size line: missing size digitinvalid chunk size: overflowInvalid chunk end LFInvalid chunk body CRInvalid chunk body LF │ │ incoming chunked header: │ │ Invalid chunk size LFread_trailerread_size_lwsInvalid chunk size linear white spaceread_extensioninvalid chunk extension contains newlinechunk extensions over limitInvalid trailer end LFRead chunk hex sizeInvalid chunk size line: Invalid SizeCannot start a runtime from within a runtime. This happens because a function (like `block_on`) attempted to block the current thread while the thread is being used to drive asynchronous tasks.0 or 1true or falseShutdown requested. Waiting for pending I/O...rocket::serverServer shutdown nominally.all branches are disabled and there is no else branchShutdown failed: server executing after timeouts.Graceful shutdown completed successfully.Shutdown failed: outstanding background I/O.failed to park threadFailed to `Enter::block_on` │ ├── readelf --wide --decompress --string-dump=.rodata {} │ │ @@ -6211,15 +6211,15 @@ │ │ id="path4386"\n │ │ inkscape:connector-curvature="0"\n │ │ sodipodi:nodetypes="cc" />\n │ │ \n │ │ \n │ │ manifest.json{"name":"ActivityWatch","short_name":"ActivityWatch","theme_color":"#4DBA87","icons":[{"src":"logo.png","sizes":"512x512","type":"image/png"}],"start_url":".","display":"standalone","background_color":"#000000"}service-worker.jsif(!self.define){let s,l={};const n=(n,r)=>(n=new URL(n+".js",r).href,l[n]||new Promise(l=>{if("document"in self){const s=document.createElement("script");s.src=n,s.onload=l,document.head.appendChild(s)}else s=n,importScripts(n),l()}).then(()=>{let s=l[n];if(!s)throw new Error(`Module ${n} didn�t register its module`);return s}));self.define=(r,i)=>{const u=s||("document"in self?document.currentScript.src:"")||location.href;if(l[u])return;let e={};const c=s=>n(s,u),o={module:{uri:u},exports:e,require:c};l[u]=Promise.all(r.map(s=>o[s]||c(s))).then(s=>(i(...s),e))}}define(["./workbox-711a2045"],function(s){"use strict";s.setCacheNameDetails({prefix:"aw-webui"}),self.addEventListener("message",s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()}),s.precacheAndRoute([{url:"/css/1523.3af55662.css",revision:null},{url:"/css/1588.bd0bb219.css",revision:null},{url:"/css/1814.63a247f6.css",revision:null},{url:"/css/185.be8e4b9a.css",revision:null},{url:"/css/2233.e1bcf8fb.css",revision:null},{url:"/css/2352.af75f974.css",revision:null},{url:"/css/265.a9f5afc4.css",revision:null},{url:"/css/2921.0e21fe03.css",revision:null},{url:"/css/2970.0e21fe03.css",revision:null},{url:"/css/3510.cd69135e.css",revision:null},{url:"/css/3593.0e21fe03.css",revision:null},{url:"/css/4067.dcf2e439.css",revision:null},{url:"/css/428.fdf3fbd9.css",revision:null},{url:"/css/4528.ec40e91d.css",revision:null},{url:"/css/495.0e21fe03.css",revision:null},{url:"/css/5480.8f4f9eec.css",revision:null},{url:"/css/579.0a541622.css",revision:null},{url:"/css/5812.38cfb433.css",revision:null},{url:"/css/5966.c7b9176f.css",revision:null},{url:"/css/6218.0e21fe03.css",revision:null},{url:"/css/6531.22cc2d8b.css",revision:null},{url:"/css/663.692259ab.css",revision:null},{url:"/css/6652.0e21fe03.css",revision:null},{url:"/css/6741.67d99f8a.css",revision:null},{url:"/css/7496.0e21fe03.css",revision:null},{url:"/css/7561.280efd83.css",revision:null},{url:"/css/8081.e565b3f9.css",revision:null},{url:"/css/8123.25aa2d67.css",revision:null},{url:"/css/8327.64666c05.css",revision:null},{url:"/css/8596.36d78776.css",revision:null},{url:"/css/8599.3a3e658b.css",revision:null},{url:"/css/8665.f93fd221.css",revision:null},{url:"/css/8932.0e21fe03.css",revision:null},{url:"/css/8948.643cd595.css",revision:null},{url:"/css/9305.3e60e51d.css",revision:null},{url:"/css/9399.af65a5d7.css",revision:null},{url:"/css/chunk-vendors.5a33e728.css",revision:null},{url:"/css/index.08a8e1ac.css",revision:null},{url:"/dark.css",revision:"8bc8c75d670bba7c6ca0122c39beb964"},{url:"/fonts/varela-round-latin-400.72c5f1d4.woff2",revision:null},{url:"/fonts/varela-round-latin-400.ff576336.woff",revision:null},{url:"/index.html",revision:"7243701e68bb304ba443f64fa51fdf2c"},{url:"/js/1064.703d75f1.js",revision:null},{url:"/js/1172.0f4182b3.js",revision:null},{url:"/js/1523.12118690.js",revision:null},{url:"/js/1588.aa9f3f15.js",revision:null},{url:"/js/1814.d46e9bc8.js",revision:null},{url:"/js/185.62497fc3.js",revision:null},{url:"/js/2230.3215567d.js",revision:null},{url:"/js/2233.c2115b33.js",revision:null},{url:"/js/2352.1ad93c6c.js",revision:null},{url:"/js/2374.dc0764c4.js",revision:null},{url:"/js/2535.5fc7abe0.js",revision:null},{url:"/js/265.f78fd35d.js",revision:null},{url:"/js/2921.f2fbc226.js",revision:null},{url:"/js/2970.077864a1.js",revision:null},{url:"/js/2972.abaf9c34.js",revision:null},{url:"/js/3377.b843e352.js",revision:null},{url:"/js/3510.d0330312.js",revision:null},{url:"/js/3593.becd60e0.js",revision:null},{url:"/js/3837.aa23cf66.js",revision:null},{url:"/js/4033.1ef6ffc4.js",revision:null},{url:"/js/4067.341ed2f6.js",revision:null},{url:"/js/428.eac37ee4.js",revision:null},{url:"/js/4513.debf088d.js",revision:null},{url:"/js/4516.7aacfe2f.js",revision:null},{url:"/js/4528.d729566f.js",revision:null},{url:"/js/495.a6e46481.js",revision:null},{url:"/js/5013.56cf47a8.js",revision:null},{url:"/js/5034.3fc015f7.js",revision:null},{url:"/js/5480.a2d6d5cf.js",revision:null},{url:"/js/5649.f2a750a0.js",revision:null},{url:"/js/579.b909463e.js",revision:null},{url:"/js/5793.6b12a4f9.js",revision:null},{url:"/js/5803.4b20c165.js",revision:null},{url:"/js/5812.6233be92.js",revision:null},{url:"/js/5966.66ce7a50.js",revision:null},{url:"/js/6218.e53707fb.js",revision:null},{url:"/js/6514.43b09bcb.js",revision:null},{url:"/js/6531.e78f2219.js",revision:null},{url:"/js/663.97e7e4d3.js",revision:null},{url:"/js/6652.0a490cb9.js",revision:null},{url:"/js/6741.5fd675ba.js",revision:null},{url:"/js/7496.11fb35e2.js",revision:null},{url:"/js/7561.e7ca49b3.js",revision:null},{url:"/js/7634.34f19064.js",revision:null},{url:"/js/8081.a2aa8edc.js",revision:null},{url:"/js/8123.809ec791.js",revision:null},{url:"/js/8191.6a088066.js",revision:null},{url:"/js/8327.685ff366.js",revision:null},{url:"/js/8376.f63b6151.js",revision:null},{url:"/js/8596.0548d980.js",revision:null},{url:"/js/8599.46e04f48.js",revision:null},{url:"/js/8665.151a2c8a.js",revision:null},{url:"/js/8880.21fa7092.js",revision:null},{url:"/js/8932.31ef541c.js",revision:null},{url:"/js/8948.dd3c8695.js",revision:null},{url:"/js/901.21266bcc.js",revision:null},{url:"/js/9305.bd0d368f.js",revision:null},{url:"/js/9399.4c9cf5be.js",revision:null},{url:"/js/9565.078d08a2.js",revision:null},{url:"/js/980.0cf8e040.js",revision:null},{url:"/js/chunk-vendors.4b5dc043.js",revision:null},{url:"/js/index.df4f8794.js",revision:null},{url:"/logo.png",revision:"3cbfce2efacc0dd8d09018233de4afa9"},{url:"/logo.svg",revision:"17fa81a8fc448f2c53f30514400a7c5c"},{url:"/manifest.json",revision:"f6c821dd0bf011176cfb914f2508764c"}],{})});\n │ │ //# sourceMappingURL=service-worker.js.map\n │ │ - service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/f63145c24d48a4d85c5c0b1874c25749/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}});\n │ │ + service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/9c2e57c370725548057d828ec0f51d15/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}});\n │ │ //# sourceMappingURL=workbox-711a2045.js.map\n │ │ workbox-711a2045.js.map{"version":3,"file":"workbox-711a2045.js","sources":["node_modules/workbox-webpack-plugin/node_modules/workbox-core/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/messages/messageGenerator.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/WorkboxError.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheNames.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/constants.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/normalizeHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Route.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/RegExpRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Router.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/waitUntil.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/createCacheKey.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheInstallReportPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheCacheKeyPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/canConstructResponseFromBodyStream.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/copyResponse.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheMatchIgnoreParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/Deferred.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/quotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/StrategyHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/timeout.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/getFriendlyURL.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/Strategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheStrategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/getOrCreatePrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/generateURLVariations.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/removeIgnoredSearchParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/addRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/registerRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precache.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:core:6.5.4'] && _();\n}\ncatch (e) { }\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:routing:6.5.4'] && _();\n}\ncatch (e) { }\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}\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 '../_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 { 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 { 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>} 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 | 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|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 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 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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:6.5.4'] && _();\n}\ncatch (e) { }\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 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 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 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 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} ignoreParams\n * @return {Promise}\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:6.5.4'] && _();\n}\ncatch (e) { }\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}\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}\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} 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} `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}\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}\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}\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 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 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 { 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 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} [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}\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} 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}\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} [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}\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} [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} 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}\n */\n install(event) {\n // waitUntil returns Promise\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}\n */\n activate(event) {\n // waitUntil returns Promise\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} 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} 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}\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 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} [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","/*\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} 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 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 { 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 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} 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} [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\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 './_private/assert.js';\nimport { cacheNames } from './_private/cacheNames.js';\nimport { WorkboxError } from './_private/WorkboxError.js';\nimport './_version.js';\n/**\n * Modifies the default cache names used by the Workbox packages.\n * Cache names are generated as `--`.\n *\n * @param {Object} details\n * @param {Object} [details.prefix] The string to add to the beginning of\n * the precache and runtime cache names.\n * @param {Object} [details.suffix] The string to add to the end of\n * the precache and runtime cache names.\n * @param {Object} [details.precache] The cache name to use for precache\n * caching.\n * @param {Object} [details.runtime] The cache name to use for runtime caching.\n * @param {Object} [details.googleAnalytics] The cache name to use for\n * `workbox-google-analytics` caching.\n *\n * @memberof workbox-core\n */\nfunction setCacheNameDetails(details) {\n if (process.env.NODE_ENV !== 'production') {\n Object.keys(details).forEach((key) => {\n assert.isType(details[key], 'string', {\n moduleName: 'workbox-core',\n funcName: 'setCacheNameDetails',\n paramName: `details.${key}`,\n });\n });\n if ('precache' in details && details['precache'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'precache',\n value: details['precache'],\n });\n }\n if ('runtime' in details && details['runtime'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'runtime',\n value: details['runtime'],\n });\n }\n if ('googleAnalytics' in details &&\n details['googleAnalytics'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'googleAnalytics',\n value: details['googleAnalytics'],\n });\n }\n }\n cacheNames.updateDetails(details);\n}\nexport { setCacheNameDetails };\n"],"names":["self","_","e","messageGenerator","fallback","code","args","msg","length","JSON","stringify","WorkboxError","Error","constructor","errorCode","details","super","this","name","_cacheNameDetails","googleAnalytics","precache","prefix","runtime","suffix","registration","scope","_createCacheName","cacheName","filter","value","join","cacheNames","fn","key","Object","keys","eachCacheNameDetail","userCacheName","normalizeHandler","handler","handle","Route","match","method","setCatchHandler","catchHandler","RegExpRoute","regExp","url","result","exec","href","origin","location","index","slice","Router","_routes","Map","_defaultHandlerMap","routes","addFetchListener","addEventListener","event","request","responsePromise","handleRequest","respondWith","addCacheListener","data","type","payload","requestPromises","Promise","all","urlsToCache","map","entry","Request","waitUntil","ports","then","postMessage","URL","protocol","startsWith","sameOrigin","params","route","findMatchingRoute","has","get","err","reject","_catchHandler","catch","async","catchErr","matchResult","Array","isArray","undefined","setDefaultHandler","set","registerRoute","push","unregisterRoute","routeIndex","indexOf","splice","defaultRouter","asyncFn","returnPromise","createCacheKey","urlObject","cacheKey","revision","cacheKeyURL","originalURL","searchParams","PrecacheInstallReportPlugin","updatedURLs","notUpdatedURLs","handlerWillStart","state","originalRequest","cachedResponseWillBeUsed","cachedResponse","PrecacheCacheKeyPlugin","precacheController","cacheKeyWillBeUsed","_precacheController","getCacheKeyForURL","headers","supportStatus","copyResponse","response","modifier","clonedResponse","clone","responseInit","Headers","status","statusText","modifiedResponseInit","body","testResponse","Response","error","canConstructResponseFromBodyStream","blob","stripParams","fullURL","ignoreParams","strippedURL","param","delete","Deferred","promise","resolve","quotaErrorCallbacks","Set","toRequest","input","StrategyHandler","strategy","options","_cacheKeys","assign","_strategy","_handlerDeferred","_extendLifetimePromises","_plugins","plugins","_pluginStateMap","plugin","fetch","mode","FetchEvent","preloadResponse","possiblePreloadResponse","hasCallback","cb","iterateCallbacks","thrownErrorMessage","message","pluginFilteredRequest","fetchResponse","fetchOptions","callback","runCallbacks","fetchAndCachePut","responseClone","cachePut","cacheMatch","matchOptions","effectiveRequest","getCacheKey","multiMatchOptions","caches","ms","setTimeout","String","replace","RegExp","responseToCache","_ensureResponseSafeToCache","cache","open","hasCacheUpdateCallback","oldResponse","strippedRequestURL","keysOptions","ignoreSearch","cacheKeys","cacheMatchIgnoreParams","put","executeQuotaErrorCallbacks","newResponse","statefulCallback","statefulParam","doneWaiting","shift","destroy","pluginsUsed","Strategy","responseDone","handleAll","_getResponse","_awaitComplete","_handle","waitUntilError","PrecacheStrategy","_fallbackToNetwork","fallbackToNetwork","copyRedirectedCacheableResponsesPlugin","_handleInstall","_handleFetch","integrityInManifest","integrity","integrityInRequest","noIntegrityConflict","_useDefaultCacheabilityPluginIfNeeded","defaultPluginIndex","cacheWillUpdatePluginCount","entries","defaultPrecacheCacheabilityPlugin","cacheWillUpdate","redirected","PrecacheController","_urlsToCacheKeys","_urlsToCacheModes","_cacheKeysToIntegrities","install","bind","activate","addToCacheList","_installAndActiveListenersAdded","urlsToWarnAbout","cacheMode","firstEntry","secondEntry","warningMessage","console","warn","installReportPlugin","credentials","currentlyCachedRequests","expectedCacheKeys","values","deletedURLs","getURLsToCacheKeys","getCachedURLs","getIntegrityForCacheKey","matchPrecache","createHandlerBoundToURL","getOrCreatePrecacheController","PrecacheRoute","urlsToCacheKeys","possibleURL","ignoreURLParametersMatching","directoryIndex","cleanURLs","urlManipulation","hash","urlWithoutIgnoredParams","paramName","some","test","removeIgnoredSearchParams","pathname","endsWith","directoryURL","cleanURL","additionalURLs","urlToAttempt","generateURLVariations","addRoute","capture","captureUrl","matchCallback","moduleName","funcName"],"mappings":"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"}&rocket::state::Staterocket::state::Staterocket::serde::json::Jsonaw_models::info::Infoserver_infofontsstatic/api/0/info/api/0/buckets/api/0/query/api/0/import/api/0/export/api/0/settingsjsapplicationoctet-streamapplication/octet-streamcssdefaultFailed to get db pathFailed to get Java stringCouldn't create java string/apikey_fairingNoSuchBucketBucketAlreadyExistsNoSuchKeyMpscErrorInternalErrorUninitializedOldDbVersionErrorindexBadCharBadEndUtf8Errorvalid_up_toerror_lena Display implementation returned an error unexpectedlyUnexpectedParseEoiCharacterBoundaryParsingErrorEmptyQueryVariableNotDefinedMathErrorInvalidTypeInvalidFunctionParametersTimeIntervalErrorBucketNotFoundRegexCompileErrorWrongJValueTypeInvalidCtorReturnInvalidArgListMethodNotFoundsigFieldNotFoundJavaExceptionJNIEnvMethodNotFoundNullPtrNullDerefTryLockJavaVMMethodNotFoundFieldAlreadySetThrowFailedParseFailedJniCallutf-8()failed to write whole buffer │ │ [12ecc68] X���g���j�����* │ │ [12ecc7a] * │ │ [12ecc7c] r�* │ │ [12ecc82] * │ │ [12ecc84] T�* │ ├── readelf --wide --decompress --hex-dump=.data.rel.ro {} │ │ @@ -2842,16 +2842,16 @@ │ │ 0x01cad250 90b2a76a 00000000 c13eb6f9 c6406082 ...j.....>...@`. │ │ 0x01cad260 1ef9c8b9 8176ee34 5814a08a 4be39b2f .....v.4X...K../ │ │ 0x01cad270 c8aa813e 5920010c ffffffff ffffffff ...>Y .......... │ │ 0x01cad280 00000000 00000000 24160000 00000000 ........$....... │ │ 0x01cad290 00000000 00000000 15000000 00000000 ................ │ │ 0x01cad2a0 01000000 00000000 90b2a76a 00000000 ...........j.... │ │ 0x01cad2b0 01000000 00000000 90b2a76a 00000000 ...........j.... │ │ - 0x01cad2c0 9fd9d1aa cd69402e b9807f2e 5e76840e .....i@.....^v.. │ │ - 0x01cad2d0 6cc383df 114e991e d6d9be5c 1b14e320 l....N.....\... │ │ + 0x01cad2c0 7bdaacc7 25b19654 5d35edf0 4bb99faa {...%..T]5..K... │ │ + 0x01cad2d0 6c0b7966 91d2735c 9333a2bb 8eb8a198 l.yf..s\.3...... │ │ 0x01cad2e0 ffffffff ffffffff 00000000 00000000 ................ │ │ 0x01cad2f0 c6320000 00000000 00000000 00000000 .2.............. │ │ 0x01cad300 13000000 00000000 01000000 00000000 ................ │ │ 0x01cad310 90b2a76a 00000000 01000000 00000000 ...j............ │ │ 0x01cad320 90b2a76a 00000000 20303f36 731bff3a ...j.... 0?6s..: │ │ 0x01cad330 555ee80b a80b28e1 c477ab33 4de8aa7d U^....(..w.3M..} │ │ 0x01cad340 f618f6fc ef7b58e0 ffffffff ffffffff .....{X......... ├── lib/x86/libaw_sync.so │ ├── strings --all --bytes=8 {} │ │ @@ -16910,15 +16910,15 @@ │ │ d="m 400,452.3622 33,-37" │ │ id="path4386" │ │ inkscape:connector-curvature="0" │ │ sodipodi:nodetypes="cc" /> │ │ manifest.json{"name":"ActivityWatch","short_name":"ActivityWatch","theme_color":"#4DBA87","icons":[{"src":"logo.png","sizes":"512x512","type":"image/png"}],"start_url":".","display":"standalone","background_color":"#000000"}service-worker.jsif(!self.define){let s,l={};const n=(n,r)=>(n=new URL(n+".js",r).href,l[n]||new Promise(l=>{if("document"in self){const s=document.createElement("script");s.src=n,s.onload=l,document.head.appendChild(s)}else s=n,importScripts(n),l()}).then(()=>{let s=l[n];if(!s)throw new Error(`Module ${n} didn │ │ t register its module`);return s}));self.define=(r,i)=>{const u=s||("document"in self?document.currentScript.src:"")||location.href;if(l[u])return;let e={};const c=s=>n(s,u),o={module:{uri:u},exports:e,require:c};l[u]=Promise.all(r.map(s=>o[s]||c(s))).then(s=>(i(...s),e))}}define(["./workbox-711a2045"],function(s){"use strict";s.setCacheNameDetails({prefix:"aw-webui"}),self.addEventListener("message",s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()}),s.precacheAndRoute([{url:"/css/1523.3af55662.css",revision:null},{url:"/css/1588.bd0bb219.css",revision:null},{url:"/css/1814.63a247f6.css",revision:null},{url:"/css/185.be8e4b9a.css",revision:null},{url:"/css/2233.e1bcf8fb.css",revision:null},{url:"/css/2352.af75f974.css",revision:null},{url:"/css/265.a9f5afc4.css",revision:null},{url:"/css/2921.0e21fe03.css",revision:null},{url:"/css/2970.0e21fe03.css",revision:null},{url:"/css/3510.cd69135e.css",revision:null},{url:"/css/3593.0e21fe03.css",revision:null},{url:"/css/4067.dcf2e439.css",revision:null},{url:"/css/428.fdf3fbd9.css",revision:null},{url:"/css/4528.ec40e91d.css",revision:null},{url:"/css/495.0e21fe03.css",revision:null},{url:"/css/5480.8f4f9eec.css",revision:null},{url:"/css/579.0a541622.css",revision:null},{url:"/css/5812.38cfb433.css",revision:null},{url:"/css/5966.c7b9176f.css",revision:null},{url:"/css/6218.0e21fe03.css",revision:null},{url:"/css/6531.22cc2d8b.css",revision:null},{url:"/css/663.692259ab.css",revision:null},{url:"/css/6652.0e21fe03.css",revision:null},{url:"/css/6741.67d99f8a.css",revision:null},{url:"/css/7496.0e21fe03.css",revision:null},{url:"/css/7561.280efd83.css",revision:null},{url:"/css/8081.e565b3f9.css",revision:null},{url:"/css/8123.25aa2d67.css",revision:null},{url:"/css/8327.64666c05.css",revision:null},{url:"/css/8596.36d78776.css",revision:null},{url:"/css/8599.3a3e658b.css",revision:null},{url:"/css/8665.f93fd221.css",revision:null},{url:"/css/8932.0e21fe03.css",revision:null},{url:"/css/8948.643cd595.css",revision:null},{url:"/css/9305.3e60e51d.css",revision:null},{url:"/css/9399.af65a5d7.css",revision:null},{url:"/css/chunk-vendors.5a33e728.css",revision:null},{url:"/css/index.08a8e1ac.css",revision:null},{url:"/dark.css",revision:"8bc8c75d670bba7c6ca0122c39beb964"},{url:"/fonts/varela-round-latin-400.72c5f1d4.woff2",revision:null},{url:"/fonts/varela-round-latin-400.ff576336.woff",revision:null},{url:"/index.html",revision:"7243701e68bb304ba443f64fa51fdf2c"},{url:"/js/1064.703d75f1.js",revision:null},{url:"/js/1172.0f4182b3.js",revision:null},{url:"/js/1523.12118690.js",revision:null},{url:"/js/1588.aa9f3f15.js",revision:null},{url:"/js/1814.d46e9bc8.js",revision:null},{url:"/js/185.62497fc3.js",revision:null},{url:"/js/2230.3215567d.js",revision:null},{url:"/js/2233.c2115b33.js",revision:null},{url:"/js/2352.1ad93c6c.js",revision:null},{url:"/js/2374.dc0764c4.js",revision:null},{url:"/js/2535.5fc7abe0.js",revision:null},{url:"/js/265.f78fd35d.js",revision:null},{url:"/js/2921.f2fbc226.js",revision:null},{url:"/js/2970.077864a1.js",revision:null},{url:"/js/2972.abaf9c34.js",revision:null},{url:"/js/3377.b843e352.js",revision:null},{url:"/js/3510.d0330312.js",revision:null},{url:"/js/3593.becd60e0.js",revision:null},{url:"/js/3837.aa23cf66.js",revision:null},{url:"/js/4033.1ef6ffc4.js",revision:null},{url:"/js/4067.341ed2f6.js",revision:null},{url:"/js/428.eac37ee4.js",revision:null},{url:"/js/4513.debf088d.js",revision:null},{url:"/js/4516.7aacfe2f.js",revision:null},{url:"/js/4528.d729566f.js",revision:null},{url:"/js/495.a6e46481.js",revision:null},{url:"/js/5013.56cf47a8.js",revision:null},{url:"/js/5034.3fc015f7.js",revision:null},{url:"/js/5480.a2d6d5cf.js",revision:null},{url:"/js/5649.f2a750a0.js",revision:null},{url:"/js/579.b909463e.js",revision:null},{url:"/js/5793.6b12a4f9.js",revision:null},{url:"/js/5803.4b20c165.js",revision:null},{url:"/js/5812.6233be92.js",revision:null},{url:"/js/5966.66ce7a50.js",revision:null},{url:"/js/6218.e53707fb.js",revision:null},{url:"/js/6514.43b09bcb.js",revision:null},{url:"/js/6531.e78f2219.js",revision:null},{url:"/js/663.97e7e4d3.js",revision:null},{url:"/js/6652.0a490cb9.js",revision:null},{url:"/js/6741.5fd675ba.js",revision:null},{url:"/js/7496.11fb35e2.js",revision:null},{url:"/js/7561.e7ca49b3.js",revision:null},{url:"/js/7634.34f19064.js",revision:null},{url:"/js/8081.a2aa8edc.js",revision:null},{url:"/js/8123.809ec791.js",revision:null},{url:"/js/8191.6a088066.js",revision:null},{url:"/js/8327.685ff366.js",revision:null},{url:"/js/8376.f63b6151.js",revision:null},{url:"/js/8596.0548d980.js",revision:null},{url:"/js/8599.46e04f48.js",revision:null},{url:"/js/8665.151a2c8a.js",revision:null},{url:"/js/8880.21fa7092.js",revision:null},{url:"/js/8932.31ef541c.js",revision:null},{url:"/js/8948.dd3c8695.js",revision:null},{url:"/js/901.21266bcc.js",revision:null},{url:"/js/9305.bd0d368f.js",revision:null},{url:"/js/9399.4c9cf5be.js",revision:null},{url:"/js/9565.078d08a2.js",revision:null},{url:"/js/980.0cf8e040.js",revision:null},{url:"/js/chunk-vendors.4b5dc043.js",revision:null},{url:"/js/index.df4f8794.js",revision:null},{url:"/logo.png",revision:"3cbfce2efacc0dd8d09018233de4afa9"},{url:"/logo.svg",revision:"17fa81a8fc448f2c53f30514400a7c5c"},{url:"/manifest.json",revision:"f6c821dd0bf011176cfb914f2508764c"}],{})}); │ │ //# sourceMappingURL=service-worker.js.map │ │ -service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/f63145c24d48a4d85c5c0b1874c25749/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}}); │ │ +service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/9c2e57c370725548057d828ec0f51d15/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}}); │ │ //# sourceMappingURL=workbox-711a2045.js.map │ │ workbox-711a2045.js.map{"version":3,"file":"workbox-711a2045.js","sources":["node_modules/workbox-webpack-plugin/node_modules/workbox-core/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/messages/messageGenerator.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/WorkboxError.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheNames.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/constants.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/normalizeHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Route.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/RegExpRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Router.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/waitUntil.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/createCacheKey.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheInstallReportPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheCacheKeyPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/canConstructResponseFromBodyStream.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/copyResponse.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheMatchIgnoreParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/Deferred.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/quotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/StrategyHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/timeout.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/getFriendlyURL.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/Strategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheStrategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/getOrCreatePrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/generateURLVariations.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/removeIgnoredSearchParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/addRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/registerRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precache.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:core:6.5.4'] && _();\n}\ncatch (e) { }\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:routing:6.5.4'] && _();\n}\ncatch (e) { }\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}\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 '../_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 { 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 { 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>} 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 | 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|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 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 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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:6.5.4'] && _();\n}\ncatch (e) { }\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 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 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 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 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} ignoreParams\n * @return {Promise}\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:6.5.4'] && _();\n}\ncatch (e) { }\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}\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}\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} 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} `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}\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}\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}\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 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 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 { 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 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} [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}\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} 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}\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} [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}\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} [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} 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}\n */\n install(event) {\n // waitUntil returns Promise\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}\n */\n activate(event) {\n // waitUntil returns Promise\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} 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} 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}\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 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} [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","/*\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} 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 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 { 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 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} 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} [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\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 './_private/assert.js';\nimport { cacheNames } from './_private/cacheNames.js';\nimport { WorkboxError } from './_private/WorkboxError.js';\nimport './_version.js';\n/**\n * Modifies the default cache names used by the Workbox packages.\n * Cache names are generated as `--`.\n *\n * @param {Object} details\n * @param {Object} [details.prefix] The string to add to the beginning of\n * the precache and runtime cache names.\n * @param {Object} [details.suffix] The string to add to the end of\n * the precache and runtime cache names.\n * @param {Object} [details.precache] The cache name to use for precache\n * caching.\n * @param {Object} [details.runtime] The cache name to use for runtime caching.\n * @param {Object} [details.googleAnalytics] The cache name to use for\n * `workbox-google-analytics` caching.\n *\n * @memberof workbox-core\n */\nfunction setCacheNameDetails(details) {\n if (process.env.NODE_ENV !== 'production') {\n Object.keys(details).forEach((key) => {\n assert.isType(details[key], 'string', {\n moduleName: 'workbox-core',\n funcName: 'setCacheNameDetails',\n paramName: `details.${key}`,\n });\n });\n if ('precache' in details && details['precache'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'precache',\n value: details['precache'],\n });\n }\n if ('runtime' in details && details['runtime'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'runtime',\n value: details['runtime'],\n });\n }\n if ('googleAnalytics' in details &&\n details['googleAnalytics'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'googleAnalytics',\n value: details['googleAnalytics'],\n });\n }\n }\n cacheNames.updateDetails(details);\n}\nexport { setCacheNameDetails };\n"],"names":["self","_","e","messageGenerator","fallback","code","args","msg","length","JSON","stringify","WorkboxError","Error","constructor","errorCode","details","super","this","name","_cacheNameDetails","googleAnalytics","precache","prefix","runtime","suffix","registration","scope","_createCacheName","cacheName","filter","value","join","cacheNames","fn","key","Object","keys","eachCacheNameDetail","userCacheName","normalizeHandler","handler","handle","Route","match","method","setCatchHandler","catchHandler","RegExpRoute","regExp","url","result","exec","href","origin","location","index","slice","Router","_routes","Map","_defaultHandlerMap","routes","addFetchListener","addEventListener","event","request","responsePromise","handleRequest","respondWith","addCacheListener","data","type","payload","requestPromises","Promise","all","urlsToCache","map","entry","Request","waitUntil","ports","then","postMessage","URL","protocol","startsWith","sameOrigin","params","route","findMatchingRoute","has","get","err","reject","_catchHandler","catch","async","catchErr","matchResult","Array","isArray","undefined","setDefaultHandler","set","registerRoute","push","unregisterRoute","routeIndex","indexOf","splice","defaultRouter","asyncFn","returnPromise","createCacheKey","urlObject","cacheKey","revision","cacheKeyURL","originalURL","searchParams","PrecacheInstallReportPlugin","updatedURLs","notUpdatedURLs","handlerWillStart","state","originalRequest","cachedResponseWillBeUsed","cachedResponse","PrecacheCacheKeyPlugin","precacheController","cacheKeyWillBeUsed","_precacheController","getCacheKeyForURL","headers","supportStatus","copyResponse","response","modifier","clonedResponse","clone","responseInit","Headers","status","statusText","modifiedResponseInit","body","testResponse","Response","error","canConstructResponseFromBodyStream","blob","stripParams","fullURL","ignoreParams","strippedURL","param","delete","Deferred","promise","resolve","quotaErrorCallbacks","Set","toRequest","input","StrategyHandler","strategy","options","_cacheKeys","assign","_strategy","_handlerDeferred","_extendLifetimePromises","_plugins","plugins","_pluginStateMap","plugin","fetch","mode","FetchEvent","preloadResponse","possiblePreloadResponse","hasCallback","cb","iterateCallbacks","thrownErrorMessage","message","pluginFilteredRequest","fetchResponse","fetchOptions","callback","runCallbacks","fetchAndCachePut","responseClone","cachePut","cacheMatch","matchOptions","effectiveRequest","getCacheKey","multiMatchOptions","caches","ms","setTimeout","String","replace","RegExp","responseToCache","_ensureResponseSafeToCache","cache","open","hasCacheUpdateCallback","oldResponse","strippedRequestURL","keysOptions","ignoreSearch","cacheKeys","cacheMatchIgnoreParams","put","executeQuotaErrorCallbacks","newResponse","statefulCallback","statefulParam","doneWaiting","shift","destroy","pluginsUsed","Strategy","responseDone","handleAll","_getResponse","_awaitComplete","_handle","waitUntilError","PrecacheStrategy","_fallbackToNetwork","fallbackToNetwork","copyRedirectedCacheableResponsesPlugin","_handleInstall","_handleFetch","integrityInManifest","integrity","integrityInRequest","noIntegrityConflict","_useDefaultCacheabilityPluginIfNeeded","defaultPluginIndex","cacheWillUpdatePluginCount","entries","defaultPrecacheCacheabilityPlugin","cacheWillUpdate","redirected","PrecacheController","_urlsToCacheKeys","_urlsToCacheModes","_cacheKeysToIntegrities","install","bind","activate","addToCacheList","_installAndActiveListenersAdded","urlsToWarnAbout","cacheMode","firstEntry","secondEntry","warningMessage","console","warn","installReportPlugin","credentials","currentlyCachedRequests","expectedCacheKeys","values","deletedURLs","getURLsToCacheKeys","getCachedURLs","getIntegrityForCacheKey","matchPrecache","createHandlerBoundToURL","getOrCreatePrecacheController","PrecacheRoute","urlsToCacheKeys","possibleURL","ignoreURLParametersMatching","directoryIndex","cleanURLs","urlManipulation","hash","urlWithoutIgnoredParams","paramName","some","test","removeIgnoredSearchParams","pathname","endsWith","directoryURL","cleanURL","additionalURLs","urlToAttempt","generateURLVariations","addRoute","capture","captureUrl","matchCallback","moduleName","funcName"],"mappings":"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"}&rocket::state::Staterocket::state::Staterocket::serde::json::Jsonaw_models::info::Infoserver_infofontsstatic/api/0/info/api/0/buckets/api/0/query/api/0/import/api/0/export/api/0/settingsjsapplicationoctet-streamapplication/octet-streamcssAccess-Control-Request-Method/extension_cors_fairingheartbeataw-watcher-web-ShieldWindowUpdatestream_idsize_incrementStateinnerExtensionCorsScopeApiKeyCheckHostCheckErrorindexUnexpectedFrameTypePayloadTooBigReleaseCapacityTooBigOverflowedStreamIdMissingUriSchemeAndAuthorityPollResetAfterSendResponseSendPingWhilePendingSendSettingsWhilePendingPeerDisabledServerPushBadCharBadEnda Display implementation returned an error unexpectedlylayoutdependencyackpayloadReseterror_codeIpSocketAddrParseErrorutf-8() │ │ /assertion failed: self.mutex.compare_exchange(1, 0, Ordering::AcqRel, Ordering::Relaxed).is_ok()FieldSet corrupted (this is a bug)Serverconnection closing after flushcodec closedmutex poisonedrecv DATArecv HEADERSrecv PRIORITYrecv PUSH_PROMISErecv SETTINGSrecv PINGreceived unexpected shutdown pingrecv GOAWAYrecv WINDOW_UPDATErecv RST_STREAMConnection::poll; connection error -> already going awaystream errorConnection::poll; IO errorClosingCloseda Display implementation returned an error unexpectedlyErrorParseCharErrorEmptyStringTooManyChars()-?E │ │ rocket::fs::serverAborting early to prevent inevitable handler error.rocket::fs::server::_invalid directory: refusing to continueinvalid file: refusing to continueaw_server::endpoints::ServerStateQuery function was unevaluated and was attempted to be serialized, panic!fewer elements in arrayversiontestingprofiledevice_ididtimestamptimeperiodsquerybucketsstruct Event with 4 elementsstruct Query with 2 elementsstruct BucketsExport with 1 elementclientcreatedeventslast_updatedstruct Bucket with 8 elementsthere should be an errornormaldebugoff}aw_server::endpoints::settings::_aw_server::endpoints::settingsRequest guard `& State < ServerState >` is forwarding.Internal invariant broken: dyn param not found.Please report this to the Rocket issue tracker.https://github.com/rwf2/Rocket/issuesData guard `Json < serde_json :: Value >` is forwarding.rocket::statecalled `Result::unwrap()` on an `Err` valueaw-server/src/endpoints/settings.rs&rocket::state::Staterocket::state::Statecore::result::Result>, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Json>std::collections::hash::map::HashMapalloc::string::Stringserde_json::value::Valueaw_server::endpoints::util::HttpErrorJsonsettings_get/applicationrocket::serde::json::Jsoncore::result::Resultrocket_http::status::Statussetting_set/core::result::Result<(), aw_server::endpoints::util::HttpErrorJson>()setting_deleteinternal error: entered unreachable codecore::result::Result, aw_server::endpoints::util::HttpErrorJson>setting_get0.14.0settings.settings.%Too long keyinvalid seek to a negative or overflowing positionan empty stream (vacuous)a multipart form fieldrocket::data::data_stream::_rocket::data::data_streama sequenceParseFloatErrorLayoutalignEmptyInvalidUtf8Errorvalid_up_toerror_lenFieldSet corrupted (this is a bug)send stream capacity unexpectedly closedParseBoolError00010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899IoParse │ │ FieldSet corrupted (this is a bug) │ │ aw_server::endpoints::ServerState │ │ received request: │ ├── readelf --wide --decompress --string-dump=.rodata {} │ │ @@ -16932,15 +16932,15 @@ │ │ id="path4386"\n │ │ inkscape:connector-curvature="0"\n │ │ sodipodi:nodetypes="cc" />\n │ │ \n │ │ \n │ │ manifest.json{"name":"ActivityWatch","short_name":"ActivityWatch","theme_color":"#4DBA87","icons":[{"src":"logo.png","sizes":"512x512","type":"image/png"}],"start_url":".","display":"standalone","background_color":"#000000"}service-worker.jsif(!self.define){let s,l={};const n=(n,r)=>(n=new URL(n+".js",r).href,l[n]||new Promise(l=>{if("document"in self){const s=document.createElement("script");s.src=n,s.onload=l,document.head.appendChild(s)}else s=n,importScripts(n),l()}).then(()=>{let s=l[n];if(!s)throw new Error(`Module ${n} didn�t register its module`);return s}));self.define=(r,i)=>{const u=s||("document"in self?document.currentScript.src:"")||location.href;if(l[u])return;let e={};const c=s=>n(s,u),o={module:{uri:u},exports:e,require:c};l[u]=Promise.all(r.map(s=>o[s]||c(s))).then(s=>(i(...s),e))}}define(["./workbox-711a2045"],function(s){"use strict";s.setCacheNameDetails({prefix:"aw-webui"}),self.addEventListener("message",s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()}),s.precacheAndRoute([{url:"/css/1523.3af55662.css",revision:null},{url:"/css/1588.bd0bb219.css",revision:null},{url:"/css/1814.63a247f6.css",revision:null},{url:"/css/185.be8e4b9a.css",revision:null},{url:"/css/2233.e1bcf8fb.css",revision:null},{url:"/css/2352.af75f974.css",revision:null},{url:"/css/265.a9f5afc4.css",revision:null},{url:"/css/2921.0e21fe03.css",revision:null},{url:"/css/2970.0e21fe03.css",revision:null},{url:"/css/3510.cd69135e.css",revision:null},{url:"/css/3593.0e21fe03.css",revision:null},{url:"/css/4067.dcf2e439.css",revision:null},{url:"/css/428.fdf3fbd9.css",revision:null},{url:"/css/4528.ec40e91d.css",revision:null},{url:"/css/495.0e21fe03.css",revision:null},{url:"/css/5480.8f4f9eec.css",revision:null},{url:"/css/579.0a541622.css",revision:null},{url:"/css/5812.38cfb433.css",revision:null},{url:"/css/5966.c7b9176f.css",revision:null},{url:"/css/6218.0e21fe03.css",revision:null},{url:"/css/6531.22cc2d8b.css",revision:null},{url:"/css/663.692259ab.css",revision:null},{url:"/css/6652.0e21fe03.css",revision:null},{url:"/css/6741.67d99f8a.css",revision:null},{url:"/css/7496.0e21fe03.css",revision:null},{url:"/css/7561.280efd83.css",revision:null},{url:"/css/8081.e565b3f9.css",revision:null},{url:"/css/8123.25aa2d67.css",revision:null},{url:"/css/8327.64666c05.css",revision:null},{url:"/css/8596.36d78776.css",revision:null},{url:"/css/8599.3a3e658b.css",revision:null},{url:"/css/8665.f93fd221.css",revision:null},{url:"/css/8932.0e21fe03.css",revision:null},{url:"/css/8948.643cd595.css",revision:null},{url:"/css/9305.3e60e51d.css",revision:null},{url:"/css/9399.af65a5d7.css",revision:null},{url:"/css/chunk-vendors.5a33e728.css",revision:null},{url:"/css/index.08a8e1ac.css",revision:null},{url:"/dark.css",revision:"8bc8c75d670bba7c6ca0122c39beb964"},{url:"/fonts/varela-round-latin-400.72c5f1d4.woff2",revision:null},{url:"/fonts/varela-round-latin-400.ff576336.woff",revision:null},{url:"/index.html",revision:"7243701e68bb304ba443f64fa51fdf2c"},{url:"/js/1064.703d75f1.js",revision:null},{url:"/js/1172.0f4182b3.js",revision:null},{url:"/js/1523.12118690.js",revision:null},{url:"/js/1588.aa9f3f15.js",revision:null},{url:"/js/1814.d46e9bc8.js",revision:null},{url:"/js/185.62497fc3.js",revision:null},{url:"/js/2230.3215567d.js",revision:null},{url:"/js/2233.c2115b33.js",revision:null},{url:"/js/2352.1ad93c6c.js",revision:null},{url:"/js/2374.dc0764c4.js",revision:null},{url:"/js/2535.5fc7abe0.js",revision:null},{url:"/js/265.f78fd35d.js",revision:null},{url:"/js/2921.f2fbc226.js",revision:null},{url:"/js/2970.077864a1.js",revision:null},{url:"/js/2972.abaf9c34.js",revision:null},{url:"/js/3377.b843e352.js",revision:null},{url:"/js/3510.d0330312.js",revision:null},{url:"/js/3593.becd60e0.js",revision:null},{url:"/js/3837.aa23cf66.js",revision:null},{url:"/js/4033.1ef6ffc4.js",revision:null},{url:"/js/4067.341ed2f6.js",revision:null},{url:"/js/428.eac37ee4.js",revision:null},{url:"/js/4513.debf088d.js",revision:null},{url:"/js/4516.7aacfe2f.js",revision:null},{url:"/js/4528.d729566f.js",revision:null},{url:"/js/495.a6e46481.js",revision:null},{url:"/js/5013.56cf47a8.js",revision:null},{url:"/js/5034.3fc015f7.js",revision:null},{url:"/js/5480.a2d6d5cf.js",revision:null},{url:"/js/5649.f2a750a0.js",revision:null},{url:"/js/579.b909463e.js",revision:null},{url:"/js/5793.6b12a4f9.js",revision:null},{url:"/js/5803.4b20c165.js",revision:null},{url:"/js/5812.6233be92.js",revision:null},{url:"/js/5966.66ce7a50.js",revision:null},{url:"/js/6218.e53707fb.js",revision:null},{url:"/js/6514.43b09bcb.js",revision:null},{url:"/js/6531.e78f2219.js",revision:null},{url:"/js/663.97e7e4d3.js",revision:null},{url:"/js/6652.0a490cb9.js",revision:null},{url:"/js/6741.5fd675ba.js",revision:null},{url:"/js/7496.11fb35e2.js",revision:null},{url:"/js/7561.e7ca49b3.js",revision:null},{url:"/js/7634.34f19064.js",revision:null},{url:"/js/8081.a2aa8edc.js",revision:null},{url:"/js/8123.809ec791.js",revision:null},{url:"/js/8191.6a088066.js",revision:null},{url:"/js/8327.685ff366.js",revision:null},{url:"/js/8376.f63b6151.js",revision:null},{url:"/js/8596.0548d980.js",revision:null},{url:"/js/8599.46e04f48.js",revision:null},{url:"/js/8665.151a2c8a.js",revision:null},{url:"/js/8880.21fa7092.js",revision:null},{url:"/js/8932.31ef541c.js",revision:null},{url:"/js/8948.dd3c8695.js",revision:null},{url:"/js/901.21266bcc.js",revision:null},{url:"/js/9305.bd0d368f.js",revision:null},{url:"/js/9399.4c9cf5be.js",revision:null},{url:"/js/9565.078d08a2.js",revision:null},{url:"/js/980.0cf8e040.js",revision:null},{url:"/js/chunk-vendors.4b5dc043.js",revision:null},{url:"/js/index.df4f8794.js",revision:null},{url:"/logo.png",revision:"3cbfce2efacc0dd8d09018233de4afa9"},{url:"/logo.svg",revision:"17fa81a8fc448f2c53f30514400a7c5c"},{url:"/manifest.json",revision:"f6c821dd0bf011176cfb914f2508764c"}],{})});\n │ │ //# sourceMappingURL=service-worker.js.map\n │ │ - service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/f63145c24d48a4d85c5c0b1874c25749/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}});\n │ │ + service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/9c2e57c370725548057d828ec0f51d15/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}});\n │ │ //# sourceMappingURL=workbox-711a2045.js.map\n │ │ workbox-711a2045.js.map{"version":3,"file":"workbox-711a2045.js","sources":["node_modules/workbox-webpack-plugin/node_modules/workbox-core/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/messages/messageGenerator.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/WorkboxError.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheNames.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/constants.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/normalizeHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Route.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/RegExpRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Router.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/waitUntil.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/createCacheKey.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheInstallReportPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheCacheKeyPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/canConstructResponseFromBodyStream.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/copyResponse.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheMatchIgnoreParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/Deferred.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/quotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/StrategyHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/timeout.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/getFriendlyURL.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/Strategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheStrategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/getOrCreatePrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/generateURLVariations.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/removeIgnoredSearchParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/addRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/registerRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precache.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:core:6.5.4'] && _();\n}\ncatch (e) { }\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:routing:6.5.4'] && _();\n}\ncatch (e) { }\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}\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 '../_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 { 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 { 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>} 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 | 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|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 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 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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:6.5.4'] && _();\n}\ncatch (e) { }\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 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 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 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 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} ignoreParams\n * @return {Promise}\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:6.5.4'] && _();\n}\ncatch (e) { }\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}\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}\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} 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} `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}\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}\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}\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 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 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 { 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 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} [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}\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} 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}\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} [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}\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} [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} 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}\n */\n install(event) {\n // waitUntil returns Promise\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}\n */\n activate(event) {\n // waitUntil returns Promise\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} 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} 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}\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 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} [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","/*\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} 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 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 { 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 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} 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} [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\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 './_private/assert.js';\nimport { cacheNames } from './_private/cacheNames.js';\nimport { WorkboxError } from './_private/WorkboxError.js';\nimport './_version.js';\n/**\n * Modifies the default cache names used by the Workbox packages.\n * Cache names are generated as `--`.\n *\n * @param {Object} details\n * @param {Object} [details.prefix] The string to add to the beginning of\n * the precache and runtime cache names.\n * @param {Object} [details.suffix] The string to add to the end of\n * the precache and runtime cache names.\n * @param {Object} [details.precache] The cache name to use for precache\n * caching.\n * @param {Object} [details.runtime] The cache name to use for runtime caching.\n * @param {Object} [details.googleAnalytics] The cache name to use for\n * `workbox-google-analytics` caching.\n *\n * @memberof workbox-core\n */\nfunction setCacheNameDetails(details) {\n if (process.env.NODE_ENV !== 'production') {\n Object.keys(details).forEach((key) => {\n assert.isType(details[key], 'string', {\n moduleName: 'workbox-core',\n funcName: 'setCacheNameDetails',\n paramName: `details.${key}`,\n });\n });\n if ('precache' in details && details['precache'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'precache',\n value: details['precache'],\n });\n }\n if ('runtime' in details && details['runtime'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'runtime',\n value: details['runtime'],\n });\n }\n if ('googleAnalytics' in details &&\n details['googleAnalytics'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'googleAnalytics',\n value: details['googleAnalytics'],\n });\n }\n }\n cacheNames.updateDetails(details);\n}\nexport { setCacheNameDetails };\n"],"names":["self","_","e","messageGenerator","fallback","code","args","msg","length","JSON","stringify","WorkboxError","Error","constructor","errorCode","details","super","this","name","_cacheNameDetails","googleAnalytics","precache","prefix","runtime","suffix","registration","scope","_createCacheName","cacheName","filter","value","join","cacheNames","fn","key","Object","keys","eachCacheNameDetail","userCacheName","normalizeHandler","handler","handle","Route","match","method","setCatchHandler","catchHandler","RegExpRoute","regExp","url","result","exec","href","origin","location","index","slice","Router","_routes","Map","_defaultHandlerMap","routes","addFetchListener","addEventListener","event","request","responsePromise","handleRequest","respondWith","addCacheListener","data","type","payload","requestPromises","Promise","all","urlsToCache","map","entry","Request","waitUntil","ports","then","postMessage","URL","protocol","startsWith","sameOrigin","params","route","findMatchingRoute","has","get","err","reject","_catchHandler","catch","async","catchErr","matchResult","Array","isArray","undefined","setDefaultHandler","set","registerRoute","push","unregisterRoute","routeIndex","indexOf","splice","defaultRouter","asyncFn","returnPromise","createCacheKey","urlObject","cacheKey","revision","cacheKeyURL","originalURL","searchParams","PrecacheInstallReportPlugin","updatedURLs","notUpdatedURLs","handlerWillStart","state","originalRequest","cachedResponseWillBeUsed","cachedResponse","PrecacheCacheKeyPlugin","precacheController","cacheKeyWillBeUsed","_precacheController","getCacheKeyForURL","headers","supportStatus","copyResponse","response","modifier","clonedResponse","clone","responseInit","Headers","status","statusText","modifiedResponseInit","body","testResponse","Response","error","canConstructResponseFromBodyStream","blob","stripParams","fullURL","ignoreParams","strippedURL","param","delete","Deferred","promise","resolve","quotaErrorCallbacks","Set","toRequest","input","StrategyHandler","strategy","options","_cacheKeys","assign","_strategy","_handlerDeferred","_extendLifetimePromises","_plugins","plugins","_pluginStateMap","plugin","fetch","mode","FetchEvent","preloadResponse","possiblePreloadResponse","hasCallback","cb","iterateCallbacks","thrownErrorMessage","message","pluginFilteredRequest","fetchResponse","fetchOptions","callback","runCallbacks","fetchAndCachePut","responseClone","cachePut","cacheMatch","matchOptions","effectiveRequest","getCacheKey","multiMatchOptions","caches","ms","setTimeout","String","replace","RegExp","responseToCache","_ensureResponseSafeToCache","cache","open","hasCacheUpdateCallback","oldResponse","strippedRequestURL","keysOptions","ignoreSearch","cacheKeys","cacheMatchIgnoreParams","put","executeQuotaErrorCallbacks","newResponse","statefulCallback","statefulParam","doneWaiting","shift","destroy","pluginsUsed","Strategy","responseDone","handleAll","_getResponse","_awaitComplete","_handle","waitUntilError","PrecacheStrategy","_fallbackToNetwork","fallbackToNetwork","copyRedirectedCacheableResponsesPlugin","_handleInstall","_handleFetch","integrityInManifest","integrity","integrityInRequest","noIntegrityConflict","_useDefaultCacheabilityPluginIfNeeded","defaultPluginIndex","cacheWillUpdatePluginCount","entries","defaultPrecacheCacheabilityPlugin","cacheWillUpdate","redirected","PrecacheController","_urlsToCacheKeys","_urlsToCacheModes","_cacheKeysToIntegrities","install","bind","activate","addToCacheList","_installAndActiveListenersAdded","urlsToWarnAbout","cacheMode","firstEntry","secondEntry","warningMessage","console","warn","installReportPlugin","credentials","currentlyCachedRequests","expectedCacheKeys","values","deletedURLs","getURLsToCacheKeys","getCachedURLs","getIntegrityForCacheKey","matchPrecache","createHandlerBoundToURL","getOrCreatePrecacheController","PrecacheRoute","urlsToCacheKeys","possibleURL","ignoreURLParametersMatching","directoryIndex","cleanURLs","urlManipulation","hash","urlWithoutIgnoredParams","paramName","some","test","removeIgnoredSearchParams","pathname","endsWith","directoryURL","cleanURL","additionalURLs","urlToAttempt","generateURLVariations","addRoute","capture","captureUrl","matchCallback","moduleName","funcName"],"mappings":"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"}&rocket::state::Staterocket::state::Staterocket::serde::json::Jsonaw_models::info::Infoserver_infofontsstatic/api/0/info/api/0/buckets/api/0/query/api/0/import/api/0/export/api/0/settingsjsapplicationoctet-streamapplication/octet-streamcssAccess-Control-Request-Method/extension_cors_fairingheartbeataw-watcher-web-ShieldWindowUpdatestream_idsize_incrementStateinnerExtensionCorsScopeApiKeyCheckHostCheckErrorindexUnexpectedFrameTypePayloadTooBigReleaseCapacityTooBigOverflowedStreamIdMissingUriSchemeAndAuthorityPollResetAfterSendResponseSendPingWhilePendingSendSettingsWhilePendingPeerDisabledServerPushBadCharBadEnda Display implementation returned an error unexpectedlylayoutdependencyackpayloadReseterror_codeIpSocketAddrParseErrorutf-8() │ │ [1326d3e] C�^L�C���C� │ │ [1326d4a] C���C���C�^X�C�p�C���C�M�C���C�M�C�M�C���C�E�C�x�C�x�C�x�C���C�R�C���C���C���C�:�C�A�C�`�C���C�r^FD��^FD�r^FD�!^GD�r^FD�r^FD�r^FD�r^FD�z^FD��^FD�r^FD�r^FD�r^FD�r^FD�r^FD�r^FD�^H^GD��^GD�r^FD�r^FD�~^GD�^E^HD�r^FD�G^HD�r^FD��^GD��.D�t0D�-/D��/D��0D��5D� 4D��4D�x1D��6D��7D�^O=D��=D�_=D�h=D�9=D�^L>D��>D��?D��>D� ?D�^U@D��CD��BD�LCD��AD��DD��ED��JD�^PKD��JD��JD��JD��KD�3LD��MD��LD� │ │ [1326ea5] MD��MD�^LRD�`PD�8QD��OD�\n │ │ SD�^_TD��UD�>VD�^RVD�^[VD��UD��VD�CWD��XD��WD�^PXD��XD�!\D�uZD�M[D��YD�^F^D�^[_D��aD�^ObD��aD��aD��aD��bD��iD�^ZkD��iD�ZjD�0kD�sqD��oD��pD��nD�grD�\sD��uD�%vD��uD�^HvD��uD��vD�}zD�%|D��zD�T{D�;|D�\�D��^�D���D�r~D�h�D�`�D���D��D��D�^L�D��D�y�D�S�D��D���D� �D��D�A�D���D�m�D��D�(�D�=�D�{�D��D��D��D���D�i�D�@�D���D�P�D���D�:�D�I�D�W�D�U�D�f�D�r^KE��^KE�O^KE��\n │ │ E�O^KE��^KE��^KE�/assertion failed: self.mutex.compare_exchange(1, 0, Ordering::AcqRel, Ordering::Relaxed).is_ok()FieldSet corrupted (this is a bug)Serverconnection closing after flushcodec closedmutex poisonedrecv DATArecv HEADERSrecv PRIORITYrecv PUSH_PROMISErecv SETTINGSrecv PINGreceived unexpected shutdown pingrecv GOAWAYrecv WINDOW_UPDATErecv RST_STREAMConnection::poll; connection error -> already going awaystream errorConnection::poll; IO errorClosingCloseda Display implementation returned an error unexpectedlyErrorParseCharErrorEmptyStringTooManyChars()-?E��?E�q?E��?E�e?E��?E��?E�,@E��lE��lE�\pE�\pE��lE�\pE�\pE�\pE�\pE�\pE�\pE�\pE�\pE�\pE�\pE�\pE�\pE�\pE�\pE�\pE�\pE�\pE�\pE��lE�\pE��oE�\pE�\pE�\pE�\pE�\pE�\pE�\pE�\pE�\pE�\pE�^FpE��lE�\pE�\pE�\pE�\pE�\pE�\pE�\pE�\pE�\pE�\pE�znE�\pE�\pE�\pE�\pE�\pE�\pE�\pE�^AoE�\pE�\pE�\pE�\pE�\pE�^NnE�\pE�\pE�\pE�\pE�\pE�\pE�koE�)yE�YzE��yE�^AzE�JyE��zE�^N�E�8�E�^G�E�8�E�8�E�8�E�z�E�^T�E�i�E��E���E��E��E��E�r�E���E�9�E���E�U�E���E�A�E���E���E��E���E��E���E���E���E���E���E���E���E���E���E���E���E���E���E���E���E���E���E���E���E���E���E���E���E���E���E���E���E���E���E���E���E���E���E���E���E���E���E���E���E�w�E�^[�E���E�\n │ ├── readelf --wide --decompress --hex-dump=.data.rel.ro {} │ │ @@ -1495,17 +1495,17 @@ │ │ 0x025019a0 a10f4001 d3000000 74104001 11000000 ..@.....t.@..... │ │ 0x025019b0 01000000 90b2a76a 00000000 01000000 .......j........ │ │ 0x025019c0 90b2a76a 00000000 c13eb6f9 c6406082 ...j.....>...@`. │ │ 0x025019d0 1ef9c8b9 8176ee34 5814a08a 4be39b2f .....v.4X...K../ │ │ 0x025019e0 c8aa813e 5920010c ffffffff 85104001 ...>Y ........@. │ │ 0x025019f0 24160000 a9264001 15000000 01000000 $....&@......... │ │ 0x02501a00 90b2a76a 00000000 01000000 90b2a76a ...j...........j │ │ - 0x02501a10 00000000 9fd9d1aa cd69402e b9807f2e .........i@..... │ │ - 0x02501a20 5e76840e 6cc383df 114e991e d6d9be5c ^v..l....N.....\ │ │ - 0x02501a30 1b14e320 ffffffff be264001 c6320000 ... .....&@..2.. │ │ + 0x02501a10 00000000 7bdaacc7 25b19654 5d35edf0 ....{...%..T]5.. │ │ + 0x02501a20 4bb99faa 6c0b7966 91d2735c 9333a2bb K...l.yf..s\.3.. │ │ + 0x02501a30 8eb8a198 ffffffff be264001 c6320000 .........&@..2.. │ │ 0x02501a40 84594001 13000000 01000000 90b2a76a .Y@............j │ │ 0x02501a50 00000000 01000000 90b2a76a 00000000 ...........j.... │ │ 0x02501a60 20303f36 731bff3a 555ee80b a80b28e1 0?6s..:U^....(. │ │ 0x02501a70 c477ab33 4de8aa7d f618f6fc ef7b58e0 .w.3M..}.....{X. │ │ 0x02501a80 ffffffff 97594001 42380000 d9914001 .....Y@.B8....@. │ │ 0x02501a90 17000000 01000000 90b2a76a 00000000 ...........j.... │ │ 0x02501aa0 01000000 90b2a76a 00000000 11991510 .......j........ ├── lib/x86/libaw_server.so │ ├── strings --all --bytes=8 {} │ │ @@ -7403,15 +7403,15 @@ │ │ d="m 400,452.3622 33,-37" │ │ id="path4386" │ │ inkscape:connector-curvature="0" │ │ sodipodi:nodetypes="cc" /> │ │ manifest.json{"name":"ActivityWatch","short_name":"ActivityWatch","theme_color":"#4DBA87","icons":[{"src":"logo.png","sizes":"512x512","type":"image/png"}],"start_url":".","display":"standalone","background_color":"#000000"}service-worker.jsif(!self.define){let s,l={};const n=(n,r)=>(n=new URL(n+".js",r).href,l[n]||new Promise(l=>{if("document"in self){const s=document.createElement("script");s.src=n,s.onload=l,document.head.appendChild(s)}else s=n,importScripts(n),l()}).then(()=>{let s=l[n];if(!s)throw new Error(`Module ${n} didn │ │ t register its module`);return s}));self.define=(r,i)=>{const u=s||("document"in self?document.currentScript.src:"")||location.href;if(l[u])return;let e={};const c=s=>n(s,u),o={module:{uri:u},exports:e,require:c};l[u]=Promise.all(r.map(s=>o[s]||c(s))).then(s=>(i(...s),e))}}define(["./workbox-711a2045"],function(s){"use strict";s.setCacheNameDetails({prefix:"aw-webui"}),self.addEventListener("message",s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()}),s.precacheAndRoute([{url:"/css/1523.3af55662.css",revision:null},{url:"/css/1588.bd0bb219.css",revision:null},{url:"/css/1814.63a247f6.css",revision:null},{url:"/css/185.be8e4b9a.css",revision:null},{url:"/css/2233.e1bcf8fb.css",revision:null},{url:"/css/2352.af75f974.css",revision:null},{url:"/css/265.a9f5afc4.css",revision:null},{url:"/css/2921.0e21fe03.css",revision:null},{url:"/css/2970.0e21fe03.css",revision:null},{url:"/css/3510.cd69135e.css",revision:null},{url:"/css/3593.0e21fe03.css",revision:null},{url:"/css/4067.dcf2e439.css",revision:null},{url:"/css/428.fdf3fbd9.css",revision:null},{url:"/css/4528.ec40e91d.css",revision:null},{url:"/css/495.0e21fe03.css",revision:null},{url:"/css/5480.8f4f9eec.css",revision:null},{url:"/css/579.0a541622.css",revision:null},{url:"/css/5812.38cfb433.css",revision:null},{url:"/css/5966.c7b9176f.css",revision:null},{url:"/css/6218.0e21fe03.css",revision:null},{url:"/css/6531.22cc2d8b.css",revision:null},{url:"/css/663.692259ab.css",revision:null},{url:"/css/6652.0e21fe03.css",revision:null},{url:"/css/6741.67d99f8a.css",revision:null},{url:"/css/7496.0e21fe03.css",revision:null},{url:"/css/7561.280efd83.css",revision:null},{url:"/css/8081.e565b3f9.css",revision:null},{url:"/css/8123.25aa2d67.css",revision:null},{url:"/css/8327.64666c05.css",revision:null},{url:"/css/8596.36d78776.css",revision:null},{url:"/css/8599.3a3e658b.css",revision:null},{url:"/css/8665.f93fd221.css",revision:null},{url:"/css/8932.0e21fe03.css",revision:null},{url:"/css/8948.643cd595.css",revision:null},{url:"/css/9305.3e60e51d.css",revision:null},{url:"/css/9399.af65a5d7.css",revision:null},{url:"/css/chunk-vendors.5a33e728.css",revision:null},{url:"/css/index.08a8e1ac.css",revision:null},{url:"/dark.css",revision:"8bc8c75d670bba7c6ca0122c39beb964"},{url:"/fonts/varela-round-latin-400.72c5f1d4.woff2",revision:null},{url:"/fonts/varela-round-latin-400.ff576336.woff",revision:null},{url:"/index.html",revision:"7243701e68bb304ba443f64fa51fdf2c"},{url:"/js/1064.703d75f1.js",revision:null},{url:"/js/1172.0f4182b3.js",revision:null},{url:"/js/1523.12118690.js",revision:null},{url:"/js/1588.aa9f3f15.js",revision:null},{url:"/js/1814.d46e9bc8.js",revision:null},{url:"/js/185.62497fc3.js",revision:null},{url:"/js/2230.3215567d.js",revision:null},{url:"/js/2233.c2115b33.js",revision:null},{url:"/js/2352.1ad93c6c.js",revision:null},{url:"/js/2374.dc0764c4.js",revision:null},{url:"/js/2535.5fc7abe0.js",revision:null},{url:"/js/265.f78fd35d.js",revision:null},{url:"/js/2921.f2fbc226.js",revision:null},{url:"/js/2970.077864a1.js",revision:null},{url:"/js/2972.abaf9c34.js",revision:null},{url:"/js/3377.b843e352.js",revision:null},{url:"/js/3510.d0330312.js",revision:null},{url:"/js/3593.becd60e0.js",revision:null},{url:"/js/3837.aa23cf66.js",revision:null},{url:"/js/4033.1ef6ffc4.js",revision:null},{url:"/js/4067.341ed2f6.js",revision:null},{url:"/js/428.eac37ee4.js",revision:null},{url:"/js/4513.debf088d.js",revision:null},{url:"/js/4516.7aacfe2f.js",revision:null},{url:"/js/4528.d729566f.js",revision:null},{url:"/js/495.a6e46481.js",revision:null},{url:"/js/5013.56cf47a8.js",revision:null},{url:"/js/5034.3fc015f7.js",revision:null},{url:"/js/5480.a2d6d5cf.js",revision:null},{url:"/js/5649.f2a750a0.js",revision:null},{url:"/js/579.b909463e.js",revision:null},{url:"/js/5793.6b12a4f9.js",revision:null},{url:"/js/5803.4b20c165.js",revision:null},{url:"/js/5812.6233be92.js",revision:null},{url:"/js/5966.66ce7a50.js",revision:null},{url:"/js/6218.e53707fb.js",revision:null},{url:"/js/6514.43b09bcb.js",revision:null},{url:"/js/6531.e78f2219.js",revision:null},{url:"/js/663.97e7e4d3.js",revision:null},{url:"/js/6652.0a490cb9.js",revision:null},{url:"/js/6741.5fd675ba.js",revision:null},{url:"/js/7496.11fb35e2.js",revision:null},{url:"/js/7561.e7ca49b3.js",revision:null},{url:"/js/7634.34f19064.js",revision:null},{url:"/js/8081.a2aa8edc.js",revision:null},{url:"/js/8123.809ec791.js",revision:null},{url:"/js/8191.6a088066.js",revision:null},{url:"/js/8327.685ff366.js",revision:null},{url:"/js/8376.f63b6151.js",revision:null},{url:"/js/8596.0548d980.js",revision:null},{url:"/js/8599.46e04f48.js",revision:null},{url:"/js/8665.151a2c8a.js",revision:null},{url:"/js/8880.21fa7092.js",revision:null},{url:"/js/8932.31ef541c.js",revision:null},{url:"/js/8948.dd3c8695.js",revision:null},{url:"/js/901.21266bcc.js",revision:null},{url:"/js/9305.bd0d368f.js",revision:null},{url:"/js/9399.4c9cf5be.js",revision:null},{url:"/js/9565.078d08a2.js",revision:null},{url:"/js/980.0cf8e040.js",revision:null},{url:"/js/chunk-vendors.4b5dc043.js",revision:null},{url:"/js/index.df4f8794.js",revision:null},{url:"/logo.png",revision:"3cbfce2efacc0dd8d09018233de4afa9"},{url:"/logo.svg",revision:"17fa81a8fc448f2c53f30514400a7c5c"},{url:"/manifest.json",revision:"f6c821dd0bf011176cfb914f2508764c"}],{})}); │ │ //# sourceMappingURL=service-worker.js.map │ │ -service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/f63145c24d48a4d85c5c0b1874c25749/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}}); │ │ +service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/9c2e57c370725548057d828ec0f51d15/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}}); │ │ //# sourceMappingURL=workbox-711a2045.js.map │ │ workbox-711a2045.js.map{"version":3,"file":"workbox-711a2045.js","sources":["node_modules/workbox-webpack-plugin/node_modules/workbox-core/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/messages/messageGenerator.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/WorkboxError.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheNames.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/constants.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/normalizeHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Route.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/RegExpRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Router.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/waitUntil.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/createCacheKey.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheInstallReportPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheCacheKeyPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/canConstructResponseFromBodyStream.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/copyResponse.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheMatchIgnoreParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/Deferred.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/quotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/StrategyHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/timeout.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/getFriendlyURL.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/Strategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheStrategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/getOrCreatePrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/generateURLVariations.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/removeIgnoredSearchParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/addRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/registerRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precache.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:core:6.5.4'] && _();\n}\ncatch (e) { }\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:routing:6.5.4'] && _();\n}\ncatch (e) { }\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}\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 '../_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 { 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 { 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>} 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 | 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|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 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 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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:6.5.4'] && _();\n}\ncatch (e) { }\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 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 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 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 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} ignoreParams\n * @return {Promise}\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:6.5.4'] && _();\n}\ncatch (e) { }\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}\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}\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} 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} `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}\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}\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}\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 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 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 { 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 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} [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}\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} 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}\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} [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}\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} [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} 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}\n */\n install(event) {\n // waitUntil returns Promise\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}\n */\n activate(event) {\n // waitUntil returns Promise\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} 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} 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}\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 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} [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","/*\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} 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 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 { 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 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} 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} [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\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 './_private/assert.js';\nimport { cacheNames } from './_private/cacheNames.js';\nimport { WorkboxError } from './_private/WorkboxError.js';\nimport './_version.js';\n/**\n * Modifies the default cache names used by the Workbox packages.\n * Cache names are generated as `--`.\n *\n * @param {Object} details\n * @param {Object} [details.prefix] The string to add to the beginning of\n * the precache and runtime cache names.\n * @param {Object} [details.suffix] The string to add to the end of\n * the precache and runtime cache names.\n * @param {Object} [details.precache] The cache name to use for precache\n * caching.\n * @param {Object} [details.runtime] The cache name to use for runtime caching.\n * @param {Object} [details.googleAnalytics] The cache name to use for\n * `workbox-google-analytics` caching.\n *\n * @memberof workbox-core\n */\nfunction setCacheNameDetails(details) {\n if (process.env.NODE_ENV !== 'production') {\n Object.keys(details).forEach((key) => {\n assert.isType(details[key], 'string', {\n moduleName: 'workbox-core',\n funcName: 'setCacheNameDetails',\n paramName: `details.${key}`,\n });\n });\n if ('precache' in details && details['precache'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'precache',\n value: details['precache'],\n });\n }\n if ('runtime' in details && details['runtime'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'runtime',\n value: details['runtime'],\n });\n }\n if ('googleAnalytics' in details &&\n details['googleAnalytics'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'googleAnalytics',\n value: details['googleAnalytics'],\n });\n }\n }\n cacheNames.updateDetails(details);\n}\nexport { setCacheNameDetails };\n"],"names":["self","_","e","messageGenerator","fallback","code","args","msg","length","JSON","stringify","WorkboxError","Error","constructor","errorCode","details","super","this","name","_cacheNameDetails","googleAnalytics","precache","prefix","runtime","suffix","registration","scope","_createCacheName","cacheName","filter","value","join","cacheNames","fn","key","Object","keys","eachCacheNameDetail","userCacheName","normalizeHandler","handler","handle","Route","match","method","setCatchHandler","catchHandler","RegExpRoute","regExp","url","result","exec","href","origin","location","index","slice","Router","_routes","Map","_defaultHandlerMap","routes","addFetchListener","addEventListener","event","request","responsePromise","handleRequest","respondWith","addCacheListener","data","type","payload","requestPromises","Promise","all","urlsToCache","map","entry","Request","waitUntil","ports","then","postMessage","URL","protocol","startsWith","sameOrigin","params","route","findMatchingRoute","has","get","err","reject","_catchHandler","catch","async","catchErr","matchResult","Array","isArray","undefined","setDefaultHandler","set","registerRoute","push","unregisterRoute","routeIndex","indexOf","splice","defaultRouter","asyncFn","returnPromise","createCacheKey","urlObject","cacheKey","revision","cacheKeyURL","originalURL","searchParams","PrecacheInstallReportPlugin","updatedURLs","notUpdatedURLs","handlerWillStart","state","originalRequest","cachedResponseWillBeUsed","cachedResponse","PrecacheCacheKeyPlugin","precacheController","cacheKeyWillBeUsed","_precacheController","getCacheKeyForURL","headers","supportStatus","copyResponse","response","modifier","clonedResponse","clone","responseInit","Headers","status","statusText","modifiedResponseInit","body","testResponse","Response","error","canConstructResponseFromBodyStream","blob","stripParams","fullURL","ignoreParams","strippedURL","param","delete","Deferred","promise","resolve","quotaErrorCallbacks","Set","toRequest","input","StrategyHandler","strategy","options","_cacheKeys","assign","_strategy","_handlerDeferred","_extendLifetimePromises","_plugins","plugins","_pluginStateMap","plugin","fetch","mode","FetchEvent","preloadResponse","possiblePreloadResponse","hasCallback","cb","iterateCallbacks","thrownErrorMessage","message","pluginFilteredRequest","fetchResponse","fetchOptions","callback","runCallbacks","fetchAndCachePut","responseClone","cachePut","cacheMatch","matchOptions","effectiveRequest","getCacheKey","multiMatchOptions","caches","ms","setTimeout","String","replace","RegExp","responseToCache","_ensureResponseSafeToCache","cache","open","hasCacheUpdateCallback","oldResponse","strippedRequestURL","keysOptions","ignoreSearch","cacheKeys","cacheMatchIgnoreParams","put","executeQuotaErrorCallbacks","newResponse","statefulCallback","statefulParam","doneWaiting","shift","destroy","pluginsUsed","Strategy","responseDone","handleAll","_getResponse","_awaitComplete","_handle","waitUntilError","PrecacheStrategy","_fallbackToNetwork","fallbackToNetwork","copyRedirectedCacheableResponsesPlugin","_handleInstall","_handleFetch","integrityInManifest","integrity","integrityInRequest","noIntegrityConflict","_useDefaultCacheabilityPluginIfNeeded","defaultPluginIndex","cacheWillUpdatePluginCount","entries","defaultPrecacheCacheabilityPlugin","cacheWillUpdate","redirected","PrecacheController","_urlsToCacheKeys","_urlsToCacheModes","_cacheKeysToIntegrities","install","bind","activate","addToCacheList","_installAndActiveListenersAdded","urlsToWarnAbout","cacheMode","firstEntry","secondEntry","warningMessage","console","warn","installReportPlugin","credentials","currentlyCachedRequests","expectedCacheKeys","values","deletedURLs","getURLsToCacheKeys","getCachedURLs","getIntegrityForCacheKey","matchPrecache","createHandlerBoundToURL","getOrCreatePrecacheController","PrecacheRoute","urlsToCacheKeys","possibleURL","ignoreURLParametersMatching","directoryIndex","cleanURLs","urlManipulation","hash","urlWithoutIgnoredParams","paramName","some","test","removeIgnoredSearchParams","pathname","endsWith","directoryURL","cleanURL","additionalURLs","urlToAttempt","generateURLVariations","addRoute","capture","captureUrl","matchCallback","moduleName","funcName"],"mappings":"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"}&rocket::state::Staterocket::state::Staterocket::serde::json::Jsonaw_models::info::Infoserver_infofontsstatic/api/0/info/api/0/buckets/api/0/query/api/0/import/api/0/export/api/0/settingsjsapplicationoctet-streamapplication/octet-streamcssAccess-Control-Request-Method/extension_cors_fairingheartbeataw-watcher-web-ShieldWindowUpdatestream_idsize_incrementStateinnerExtensionCorsScopeApiKeyCheckHostCheckErrorindexUnexpectedFrameTypePayloadTooBigReleaseCapacityTooBigOverflowedStreamIdMissingUriSchemeAndAuthorityPollResetAfterSendResponseSendPingWhilePendingSendSettingsWhilePendingPeerDisabledServerPushBadCharBadEnda Display implementation returned an error unexpectedlylayoutdependencyackpayloadReseterror_codeEmptyHostIdnaErrorInvalidPortInvalidIpv4AddressInvalidIpv6AddressInvalidDomainCharacterRelativeUrlWithoutBaseSetHostOnCannotBeABaseUrlutf-8() │ │ /assertion failed: self.mutex.compare_exchange(1, 0, Ordering::AcqRel, Ordering::Relaxed).is_ok()FieldSet corrupted (this is a bug)Serverconnection closing after flushcodec closedmutex poisonedrecv DATArecv HEADERSrecv PRIORITYrecv PUSH_PROMISErecv SETTINGSrecv PINGreceived unexpected shutdown pingrecv GOAWAYrecv WINDOW_UPDATErecv RST_STREAMConnection::poll; connection error -> already going awaystream errorConnection::poll; IO errorClosingCloseda Display implementation returned an error unexpectedlyErrorParseCharErrorEmptyStringTooManyChars() │ │ rocket::fs::serverAborting early to prevent inevitable handler error.rocket::fs::server::_invalid directory: refusing to continueinvalid file: refusing to continueaw_server::endpoints::ServerStateQuery function was unevaluated and was attempted to be serialized, panic!fewer elements in arrayversiontestingprofiledevice_ididtimestamptimeperiodsquerybucketsstruct Event with 4 elementsstruct Query with 2 elementsstruct BucketsExport with 1 elementclientcreatedeventslast_updatedstruct Bucket with 8 elementsthere should be an errornormaldebugoff}aw_server::endpoints::settings::_aw_server::endpoints::settingsRequest guard `& State < ServerState >` is forwarding.Internal invariant broken: dyn param not found.Please report this to the Rocket issue tracker.https://github.com/rwf2/Rocket/issuesData guard `Json < serde_json :: Value >` is forwarding.rocket::statecalled `Result::unwrap()` on an `Err` valueaw-server/src/endpoints/settings.rs&rocket::state::Staterocket::state::Statecore::result::Result>, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Json>std::collections::hash::map::HashMapalloc::string::Stringserde_json::value::Valueaw_server::endpoints::util::HttpErrorJsonsettings_get/applicationrocket::serde::json::Jsoncore::result::Resultrocket_http::status::Statussetting_set/core::result::Result<(), aw_server::endpoints::util::HttpErrorJson>()setting_deleteinternal error: entered unreachable codecore::result::Result, aw_server::endpoints::util::HttpErrorJson>setting_get0.14.0settings.settings.%Too long keyinvalid seek to a negative or overflowing positionan empty stream (vacuous)a multipart form fieldrocket::data::data_stream::_rocket::data::data_streama sequenceParseFloatErrorLayoutalignEmptyInvalidUtf8Errorvalid_up_toerror_lenFieldSet corrupted (this is a bug)send stream capacity unexpectedly closedParseBoolError00010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899IoParse │ │ FieldSet corrupted (this is a bug) │ │ aw_server::endpoints::ServerState │ │ received request: │ ├── readelf --wide --decompress --string-dump=.rodata {} │ │ @@ -6166,15 +6166,15 @@ │ │ id="path4386"\n │ │ inkscape:connector-curvature="0"\n │ │ sodipodi:nodetypes="cc" />\n │ │ \n │ │ \n │ │ manifest.json{"name":"ActivityWatch","short_name":"ActivityWatch","theme_color":"#4DBA87","icons":[{"src":"logo.png","sizes":"512x512","type":"image/png"}],"start_url":".","display":"standalone","background_color":"#000000"}service-worker.jsif(!self.define){let s,l={};const n=(n,r)=>(n=new URL(n+".js",r).href,l[n]||new Promise(l=>{if("document"in self){const s=document.createElement("script");s.src=n,s.onload=l,document.head.appendChild(s)}else s=n,importScripts(n),l()}).then(()=>{let s=l[n];if(!s)throw new Error(`Module ${n} didn�t register its module`);return s}));self.define=(r,i)=>{const u=s||("document"in self?document.currentScript.src:"")||location.href;if(l[u])return;let e={};const c=s=>n(s,u),o={module:{uri:u},exports:e,require:c};l[u]=Promise.all(r.map(s=>o[s]||c(s))).then(s=>(i(...s),e))}}define(["./workbox-711a2045"],function(s){"use strict";s.setCacheNameDetails({prefix:"aw-webui"}),self.addEventListener("message",s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()}),s.precacheAndRoute([{url:"/css/1523.3af55662.css",revision:null},{url:"/css/1588.bd0bb219.css",revision:null},{url:"/css/1814.63a247f6.css",revision:null},{url:"/css/185.be8e4b9a.css",revision:null},{url:"/css/2233.e1bcf8fb.css",revision:null},{url:"/css/2352.af75f974.css",revision:null},{url:"/css/265.a9f5afc4.css",revision:null},{url:"/css/2921.0e21fe03.css",revision:null},{url:"/css/2970.0e21fe03.css",revision:null},{url:"/css/3510.cd69135e.css",revision:null},{url:"/css/3593.0e21fe03.css",revision:null},{url:"/css/4067.dcf2e439.css",revision:null},{url:"/css/428.fdf3fbd9.css",revision:null},{url:"/css/4528.ec40e91d.css",revision:null},{url:"/css/495.0e21fe03.css",revision:null},{url:"/css/5480.8f4f9eec.css",revision:null},{url:"/css/579.0a541622.css",revision:null},{url:"/css/5812.38cfb433.css",revision:null},{url:"/css/5966.c7b9176f.css",revision:null},{url:"/css/6218.0e21fe03.css",revision:null},{url:"/css/6531.22cc2d8b.css",revision:null},{url:"/css/663.692259ab.css",revision:null},{url:"/css/6652.0e21fe03.css",revision:null},{url:"/css/6741.67d99f8a.css",revision:null},{url:"/css/7496.0e21fe03.css",revision:null},{url:"/css/7561.280efd83.css",revision:null},{url:"/css/8081.e565b3f9.css",revision:null},{url:"/css/8123.25aa2d67.css",revision:null},{url:"/css/8327.64666c05.css",revision:null},{url:"/css/8596.36d78776.css",revision:null},{url:"/css/8599.3a3e658b.css",revision:null},{url:"/css/8665.f93fd221.css",revision:null},{url:"/css/8932.0e21fe03.css",revision:null},{url:"/css/8948.643cd595.css",revision:null},{url:"/css/9305.3e60e51d.css",revision:null},{url:"/css/9399.af65a5d7.css",revision:null},{url:"/css/chunk-vendors.5a33e728.css",revision:null},{url:"/css/index.08a8e1ac.css",revision:null},{url:"/dark.css",revision:"8bc8c75d670bba7c6ca0122c39beb964"},{url:"/fonts/varela-round-latin-400.72c5f1d4.woff2",revision:null},{url:"/fonts/varela-round-latin-400.ff576336.woff",revision:null},{url:"/index.html",revision:"7243701e68bb304ba443f64fa51fdf2c"},{url:"/js/1064.703d75f1.js",revision:null},{url:"/js/1172.0f4182b3.js",revision:null},{url:"/js/1523.12118690.js",revision:null},{url:"/js/1588.aa9f3f15.js",revision:null},{url:"/js/1814.d46e9bc8.js",revision:null},{url:"/js/185.62497fc3.js",revision:null},{url:"/js/2230.3215567d.js",revision:null},{url:"/js/2233.c2115b33.js",revision:null},{url:"/js/2352.1ad93c6c.js",revision:null},{url:"/js/2374.dc0764c4.js",revision:null},{url:"/js/2535.5fc7abe0.js",revision:null},{url:"/js/265.f78fd35d.js",revision:null},{url:"/js/2921.f2fbc226.js",revision:null},{url:"/js/2970.077864a1.js",revision:null},{url:"/js/2972.abaf9c34.js",revision:null},{url:"/js/3377.b843e352.js",revision:null},{url:"/js/3510.d0330312.js",revision:null},{url:"/js/3593.becd60e0.js",revision:null},{url:"/js/3837.aa23cf66.js",revision:null},{url:"/js/4033.1ef6ffc4.js",revision:null},{url:"/js/4067.341ed2f6.js",revision:null},{url:"/js/428.eac37ee4.js",revision:null},{url:"/js/4513.debf088d.js",revision:null},{url:"/js/4516.7aacfe2f.js",revision:null},{url:"/js/4528.d729566f.js",revision:null},{url:"/js/495.a6e46481.js",revision:null},{url:"/js/5013.56cf47a8.js",revision:null},{url:"/js/5034.3fc015f7.js",revision:null},{url:"/js/5480.a2d6d5cf.js",revision:null},{url:"/js/5649.f2a750a0.js",revision:null},{url:"/js/579.b909463e.js",revision:null},{url:"/js/5793.6b12a4f9.js",revision:null},{url:"/js/5803.4b20c165.js",revision:null},{url:"/js/5812.6233be92.js",revision:null},{url:"/js/5966.66ce7a50.js",revision:null},{url:"/js/6218.e53707fb.js",revision:null},{url:"/js/6514.43b09bcb.js",revision:null},{url:"/js/6531.e78f2219.js",revision:null},{url:"/js/663.97e7e4d3.js",revision:null},{url:"/js/6652.0a490cb9.js",revision:null},{url:"/js/6741.5fd675ba.js",revision:null},{url:"/js/7496.11fb35e2.js",revision:null},{url:"/js/7561.e7ca49b3.js",revision:null},{url:"/js/7634.34f19064.js",revision:null},{url:"/js/8081.a2aa8edc.js",revision:null},{url:"/js/8123.809ec791.js",revision:null},{url:"/js/8191.6a088066.js",revision:null},{url:"/js/8327.685ff366.js",revision:null},{url:"/js/8376.f63b6151.js",revision:null},{url:"/js/8596.0548d980.js",revision:null},{url:"/js/8599.46e04f48.js",revision:null},{url:"/js/8665.151a2c8a.js",revision:null},{url:"/js/8880.21fa7092.js",revision:null},{url:"/js/8932.31ef541c.js",revision:null},{url:"/js/8948.dd3c8695.js",revision:null},{url:"/js/901.21266bcc.js",revision:null},{url:"/js/9305.bd0d368f.js",revision:null},{url:"/js/9399.4c9cf5be.js",revision:null},{url:"/js/9565.078d08a2.js",revision:null},{url:"/js/980.0cf8e040.js",revision:null},{url:"/js/chunk-vendors.4b5dc043.js",revision:null},{url:"/js/index.df4f8794.js",revision:null},{url:"/logo.png",revision:"3cbfce2efacc0dd8d09018233de4afa9"},{url:"/logo.svg",revision:"17fa81a8fc448f2c53f30514400a7c5c"},{url:"/manifest.json",revision:"f6c821dd0bf011176cfb914f2508764c"}],{})});\n │ │ //# sourceMappingURL=service-worker.js.map\n │ │ - service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/f63145c24d48a4d85c5c0b1874c25749/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}});\n │ │ + service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/9c2e57c370725548057d828ec0f51d15/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}});\n │ │ //# sourceMappingURL=workbox-711a2045.js.map\n │ │ workbox-711a2045.js.map{"version":3,"file":"workbox-711a2045.js","sources":["node_modules/workbox-webpack-plugin/node_modules/workbox-core/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/messages/messageGenerator.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/WorkboxError.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheNames.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/constants.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/normalizeHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Route.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/RegExpRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Router.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/waitUntil.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/createCacheKey.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheInstallReportPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheCacheKeyPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/canConstructResponseFromBodyStream.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/copyResponse.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheMatchIgnoreParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/Deferred.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/quotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/StrategyHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/timeout.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/getFriendlyURL.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/Strategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheStrategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/getOrCreatePrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/generateURLVariations.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/removeIgnoredSearchParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/addRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/registerRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precache.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:core:6.5.4'] && _();\n}\ncatch (e) { }\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:routing:6.5.4'] && _();\n}\ncatch (e) { }\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}\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 '../_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 { 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 { 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>} 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 | 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|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 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 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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:6.5.4'] && _();\n}\ncatch (e) { }\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 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 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 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 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} ignoreParams\n * @return {Promise}\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:6.5.4'] && _();\n}\ncatch (e) { }\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}\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}\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} 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} `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}\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}\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}\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 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 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 { 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 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} [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}\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} 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}\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} [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}\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} [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} 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}\n */\n install(event) {\n // waitUntil returns Promise\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}\n */\n activate(event) {\n // waitUntil returns Promise\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} 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} 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}\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 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} [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","/*\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} 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 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 { 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 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} 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} [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\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 './_private/assert.js';\nimport { cacheNames } from './_private/cacheNames.js';\nimport { WorkboxError } from './_private/WorkboxError.js';\nimport './_version.js';\n/**\n * Modifies the default cache names used by the Workbox packages.\n * Cache names are generated as `--`.\n *\n * @param {Object} details\n * @param {Object} [details.prefix] The string to add to the beginning of\n * the precache and runtime cache names.\n * @param {Object} [details.suffix] The string to add to the end of\n * the precache and runtime cache names.\n * @param {Object} [details.precache] The cache name to use for precache\n * caching.\n * @param {Object} [details.runtime] The cache name to use for runtime caching.\n * @param {Object} [details.googleAnalytics] The cache name to use for\n * `workbox-google-analytics` caching.\n *\n * @memberof workbox-core\n */\nfunction setCacheNameDetails(details) {\n if (process.env.NODE_ENV !== 'production') {\n Object.keys(details).forEach((key) => {\n assert.isType(details[key], 'string', {\n moduleName: 'workbox-core',\n funcName: 'setCacheNameDetails',\n paramName: `details.${key}`,\n });\n });\n if ('precache' in details && details['precache'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'precache',\n value: details['precache'],\n });\n }\n if ('runtime' in details && details['runtime'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'runtime',\n value: details['runtime'],\n });\n }\n if ('googleAnalytics' in details &&\n details['googleAnalytics'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'googleAnalytics',\n value: details['googleAnalytics'],\n });\n }\n }\n cacheNames.updateDetails(details);\n}\nexport { setCacheNameDetails };\n"],"names":["self","_","e","messageGenerator","fallback","code","args","msg","length","JSON","stringify","WorkboxError","Error","constructor","errorCode","details","super","this","name","_cacheNameDetails","googleAnalytics","precache","prefix","runtime","suffix","registration","scope","_createCacheName","cacheName","filter","value","join","cacheNames","fn","key","Object","keys","eachCacheNameDetail","userCacheName","normalizeHandler","handler","handle","Route","match","method","setCatchHandler","catchHandler","RegExpRoute","regExp","url","result","exec","href","origin","location","index","slice","Router","_routes","Map","_defaultHandlerMap","routes","addFetchListener","addEventListener","event","request","responsePromise","handleRequest","respondWith","addCacheListener","data","type","payload","requestPromises","Promise","all","urlsToCache","map","entry","Request","waitUntil","ports","then","postMessage","URL","protocol","startsWith","sameOrigin","params","route","findMatchingRoute","has","get","err","reject","_catchHandler","catch","async","catchErr","matchResult","Array","isArray","undefined","setDefaultHandler","set","registerRoute","push","unregisterRoute","routeIndex","indexOf","splice","defaultRouter","asyncFn","returnPromise","createCacheKey","urlObject","cacheKey","revision","cacheKeyURL","originalURL","searchParams","PrecacheInstallReportPlugin","updatedURLs","notUpdatedURLs","handlerWillStart","state","originalRequest","cachedResponseWillBeUsed","cachedResponse","PrecacheCacheKeyPlugin","precacheController","cacheKeyWillBeUsed","_precacheController","getCacheKeyForURL","headers","supportStatus","copyResponse","response","modifier","clonedResponse","clone","responseInit","Headers","status","statusText","modifiedResponseInit","body","testResponse","Response","error","canConstructResponseFromBodyStream","blob","stripParams","fullURL","ignoreParams","strippedURL","param","delete","Deferred","promise","resolve","quotaErrorCallbacks","Set","toRequest","input","StrategyHandler","strategy","options","_cacheKeys","assign","_strategy","_handlerDeferred","_extendLifetimePromises","_plugins","plugins","_pluginStateMap","plugin","fetch","mode","FetchEvent","preloadResponse","possiblePreloadResponse","hasCallback","cb","iterateCallbacks","thrownErrorMessage","message","pluginFilteredRequest","fetchResponse","fetchOptions","callback","runCallbacks","fetchAndCachePut","responseClone","cachePut","cacheMatch","matchOptions","effectiveRequest","getCacheKey","multiMatchOptions","caches","ms","setTimeout","String","replace","RegExp","responseToCache","_ensureResponseSafeToCache","cache","open","hasCacheUpdateCallback","oldResponse","strippedRequestURL","keysOptions","ignoreSearch","cacheKeys","cacheMatchIgnoreParams","put","executeQuotaErrorCallbacks","newResponse","statefulCallback","statefulParam","doneWaiting","shift","destroy","pluginsUsed","Strategy","responseDone","handleAll","_getResponse","_awaitComplete","_handle","waitUntilError","PrecacheStrategy","_fallbackToNetwork","fallbackToNetwork","copyRedirectedCacheableResponsesPlugin","_handleInstall","_handleFetch","integrityInManifest","integrity","integrityInRequest","noIntegrityConflict","_useDefaultCacheabilityPluginIfNeeded","defaultPluginIndex","cacheWillUpdatePluginCount","entries","defaultPrecacheCacheabilityPlugin","cacheWillUpdate","redirected","PrecacheController","_urlsToCacheKeys","_urlsToCacheModes","_cacheKeysToIntegrities","install","bind","activate","addToCacheList","_installAndActiveListenersAdded","urlsToWarnAbout","cacheMode","firstEntry","secondEntry","warningMessage","console","warn","installReportPlugin","credentials","currentlyCachedRequests","expectedCacheKeys","values","deletedURLs","getURLsToCacheKeys","getCachedURLs","getIntegrityForCacheKey","matchPrecache","createHandlerBoundToURL","getOrCreatePrecacheController","PrecacheRoute","urlsToCacheKeys","possibleURL","ignoreURLParametersMatching","directoryIndex","cleanURLs","urlManipulation","hash","urlWithoutIgnoredParams","paramName","some","test","removeIgnoredSearchParams","pathname","endsWith","directoryURL","cleanURL","additionalURLs","urlToAttempt","generateURLVariations","addRoute","capture","captureUrl","matchCallback","moduleName","funcName"],"mappings":"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"}&rocket::state::Staterocket::state::Staterocket::serde::json::Jsonaw_models::info::Infoserver_infofontsstatic/api/0/info/api/0/buckets/api/0/query/api/0/import/api/0/export/api/0/settingsjsapplicationoctet-streamapplication/octet-streamcssAccess-Control-Request-Method/extension_cors_fairingheartbeataw-watcher-web-ShieldWindowUpdatestream_idsize_incrementStateinnerExtensionCorsScopeApiKeyCheckHostCheckErrorindexUnexpectedFrameTypePayloadTooBigReleaseCapacityTooBigOverflowedStreamIdMissingUriSchemeAndAuthorityPollResetAfterSendResponseSendPingWhilePendingSendSettingsWhilePendingPeerDisabledServerPushBadCharBadEnda Display implementation returned an error unexpectedlylayoutdependencyackpayloadReseterror_codeEmptyHostIdnaErrorInvalidPortInvalidIpv4AddressInvalidIpv6AddressInvalidDomainCharacterRelativeUrlWithoutBaseSetHostOnCannotBeABaseUrlutf-8() │ │ [12e82b8] │ │ [12e82f4] D���p���!���d���!���!���|���Ԕ�������������������^I���������������;�����9��9��9�����������������^H�����������������������T��������������������l��J�����������i�����������$��G���� │ │ [12e83dc] 0^F���^D��\^E���^A��^[^G��?^H��s^M���^M���^M���^M���^M��p^N���^N��c^P��^T^O���^O��y^P��C^T��^]^S���^S��^G^R���^T��c^V���^Z��t^[��D^[��M^[��^]^[���^[���^\��^Y^^���^\��d^]��/^^��p"��� ���!��\n │ │ ��n#���$��,&���&��v&��^�&��S&��^Z'���'��^])���'��t(��3)���,���*���+��^_*��j.��^�/���1��s2��G2��P2��$2���2���9��~;��B:���:���;���A��#@��^BA��-?���B���C��&F���F��`F��lF��CF���F���J���L��4K���K���L���Q��^FP���P���N���R���S��^HY��@Y��LY��pY��,Y���Y���Z��=\��^D[���[��S\���_���]���^��?]���`���a���d��Ue��)e��2e��^Fe���e���r��^Gx���u��%w���t���x���y���w���z�����������������^V��N��/assertion failed: self.mutex.compare_exchange(1, 0, Ordering::AcqRel, Ordering::Relaxed).is_ok()FieldSet corrupted (this is a bug)Serverconnection closing after flushcodec closedmutex poisonedrecv DATArecv HEADERSrecv PRIORITYrecv PUSH_PROMISErecv SETTINGSrecv PINGreceived unexpected shutdown pingrecv GOAWAYrecv WINDOW_UPDATErecv RST_STREAMConnection::poll; connection error -> already going awaystream errorConnection::poll; IO errorClosingCloseda Display implementation returned an error unexpectedlyErrorParseCharErrorEmptyStringTooManyChars()�^O��^F^P���^O���^O���^O��^R^P��$^P���^P��^[=��^[=���@���@��^[=���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@���@��^[=���@��$@���@���@���@���@���@���@���@���@���@���@��j@��b=���@���@���@���@���@���@���@���@���@���@���>���@���@���@���@���@���@���@��e?���@���@���@���@���@��r>���@���@���@���@���@���@���?���I���J��PJ��eJ���I���J��rZ���[��k[���[���[���[���Z��x[���c��(d���c��(d��(d��(d���c��^Ad���k���k���k���k���k��^Nl��^]s��Mt��^Mt��:t��%s��\t������^F���^F�����^F���^F���^F���^F���^F���^F���^F���^F���^F���^F���^F���^F���^F���^F���^F���^F���^F���^F�����^F���^F���^F���^F���^F���^F���^F���^F���^F���^F���^F���^F���^[���ۖ�^��������n���`�������������^U���������������������������������������������������������������������������������������������������������������<�����\n │ │ G�����������������������#��������������������������������������^G��S��S��������S��������������������������������������������������������S��������������������������������������x��x��������x��������������������������������������������������������x���������������������������������������������������������������������������������������w���>������ ^K��^Q^K������_����^M��x^V��i^V��^^^N���^W��{!��l!��^^^X���H���H���H���H���H���H���H���H���H���H���H��qF���H���H���H���H���H���H���H���G���H���H���H���H���H��fG���H���H���H���H���H���H���H���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I���I��wJ��wJ���J���J��wJ���J���J���J���J���J���J���J���J���J���J���J���J���J���J���J���J���J���J��wJ���J���J���J���J���J���J���J���J���J���J���J���J���J���J��^�K��^�K���J��^�K��^�K��^�K��^�K��^�K��^�K��^�K��^�K��^�K��^�K��^�K��^�K��^�K��^�K��^�K��^�K��^�K��^�K���J��^�K��^�K��^�K��^�K��^�K��^�K��^�K��^�K��^�K��^�K��^�K��1K��rocket::fs::serverAborting early to prevent inevitable handler error.rocket::fs::server::_invalid directory: refusing to continueinvalid file: refusing to continueaw_server::endpoints::ServerStateQuery function was unevaluated and was attempted to be serialized, panic!fewer elements in arrayversiontestingprofiledevice_ididtimestamptimeperiodsquerybucketsstruct Event with 4 elementsstruct Query with 2 elementsstruct BucketsExport with 1 elementclientcreatedeventslast_updatedstruct Bucket with 8 elementsthere should be an errornormaldebugoff}aw_server::endpoints::settings::_aw_server::endpoints::settingsRequest guard `& State < ServerState >` is forwarding.Internal invariant broken: dyn param not found.Please report this to the Rocket issue tracker.https://github.com/rwf2/Rocket/issuesData guard `Json < serde_json :: Value >` is forwarding.rocket::statecalled `Result::unwrap()` on an `Err` valueaw-server/src/endpoints/settings.rs&rocket::state::Staterocket::state::Statecore::result::Result>, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Json>std::collections::hash::map::HashMapalloc::string::Stringserde_json::value::Valueaw_server::endpoints::util::HttpErrorJsonsettings_get/applicationrocket::serde::json::Jsoncore::result::Resultrocket_http::status::Statussetting_set/core::result::Result<(), aw_server::endpoints::util::HttpErrorJson>()setting_deleteinternal error: entered unreachable codecore::result::Result, aw_server::endpoints::util::HttpErrorJson>setting_get0.14.0settings.settings.%Too long keyinvalid seek to a negative or overflowing positionan empty stream (vacuous)a multipart form fieldrocket::data::data_stream::_rocket::data::data_streama sequenceParseFloatErrorLayoutalignEmptyInvalidUtf8Errorvalid_up_toerror_lenFieldSet corrupted (this is a bug)send stream capacity unexpectedly closedParseBoolError00010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899IoParse^Y │ ├── readelf --wide --decompress --hex-dump=.data.rel.ro {} │ │ @@ -1318,17 +1318,17 @@ │ │ 0x01d4b670 59353701 d3000000 2c363701 11000000 Y57.....,67..... │ │ 0x01d4b680 01000000 90b2a76a 00000000 01000000 .......j........ │ │ 0x01d4b690 90b2a76a 00000000 c13eb6f9 c6406082 ...j.....>...@`. │ │ 0x01d4b6a0 1ef9c8b9 8176ee34 5814a08a 4be39b2f .....v.4X...K../ │ │ 0x01d4b6b0 c8aa813e 5920010c ffffffff 3d363701 ...>Y ......=67. │ │ 0x01d4b6c0 24160000 614c3701 15000000 01000000 $...aL7......... │ │ 0x01d4b6d0 90b2a76a 00000000 01000000 90b2a76a ...j...........j │ │ - 0x01d4b6e0 00000000 9fd9d1aa cd69402e b9807f2e .........i@..... │ │ - 0x01d4b6f0 5e76840e 6cc383df 114e991e d6d9be5c ^v..l....N.....\ │ │ - 0x01d4b700 1b14e320 ffffffff 764c3701 c6320000 ... ....vL7..2.. │ │ + 0x01d4b6e0 00000000 7bdaacc7 25b19654 5d35edf0 ....{...%..T]5.. │ │ + 0x01d4b6f0 4bb99faa 6c0b7966 91d2735c 9333a2bb K...l.yf..s\.3.. │ │ + 0x01d4b700 8eb8a198 ffffffff 764c3701 c6320000 ........vL7..2.. │ │ 0x01d4b710 3c7f3701 13000000 01000000 90b2a76a <.7............j │ │ 0x01d4b720 00000000 01000000 90b2a76a 00000000 ...........j.... │ │ 0x01d4b730 20303f36 731bff3a 555ee80b a80b28e1 0?6s..:U^....(. │ │ 0x01d4b740 c477ab33 4de8aa7d f618f6fc ef7b58e0 .w.3M..}.....{X. │ │ 0x01d4b750 ffffffff 4f7f3701 42380000 91b73701 ....O.7.B8....7. │ │ 0x01d4b760 17000000 01000000 90b2a76a 00000000 ...........j.... │ │ 0x01d4b770 01000000 90b2a76a 00000000 11991510 .......j........ ├── lib/armeabi-v7a/libaw_sync.so │ ├── strings --all --bytes=8 {} │ │ @@ -16720,15 +16720,15 @@ │ │ d="m 400,452.3622 33,-37" │ │ id="path4386" │ │ inkscape:connector-curvature="0" │ │ sodipodi:nodetypes="cc" /> │ │ manifest.json{"name":"ActivityWatch","short_name":"ActivityWatch","theme_color":"#4DBA87","icons":[{"src":"logo.png","sizes":"512x512","type":"image/png"}],"start_url":".","display":"standalone","background_color":"#000000"}service-worker.jsif(!self.define){let s,l={};const n=(n,r)=>(n=new URL(n+".js",r).href,l[n]||new Promise(l=>{if("document"in self){const s=document.createElement("script");s.src=n,s.onload=l,document.head.appendChild(s)}else s=n,importScripts(n),l()}).then(()=>{let s=l[n];if(!s)throw new Error(`Module ${n} didn │ │ t register its module`);return s}));self.define=(r,i)=>{const u=s||("document"in self?document.currentScript.src:"")||location.href;if(l[u])return;let e={};const c=s=>n(s,u),o={module:{uri:u},exports:e,require:c};l[u]=Promise.all(r.map(s=>o[s]||c(s))).then(s=>(i(...s),e))}}define(["./workbox-711a2045"],function(s){"use strict";s.setCacheNameDetails({prefix:"aw-webui"}),self.addEventListener("message",s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()}),s.precacheAndRoute([{url:"/css/1523.3af55662.css",revision:null},{url:"/css/1588.bd0bb219.css",revision:null},{url:"/css/1814.63a247f6.css",revision:null},{url:"/css/185.be8e4b9a.css",revision:null},{url:"/css/2233.e1bcf8fb.css",revision:null},{url:"/css/2352.af75f974.css",revision:null},{url:"/css/265.a9f5afc4.css",revision:null},{url:"/css/2921.0e21fe03.css",revision:null},{url:"/css/2970.0e21fe03.css",revision:null},{url:"/css/3510.cd69135e.css",revision:null},{url:"/css/3593.0e21fe03.css",revision:null},{url:"/css/4067.dcf2e439.css",revision:null},{url:"/css/428.fdf3fbd9.css",revision:null},{url:"/css/4528.ec40e91d.css",revision:null},{url:"/css/495.0e21fe03.css",revision:null},{url:"/css/5480.8f4f9eec.css",revision:null},{url:"/css/579.0a541622.css",revision:null},{url:"/css/5812.38cfb433.css",revision:null},{url:"/css/5966.c7b9176f.css",revision:null},{url:"/css/6218.0e21fe03.css",revision:null},{url:"/css/6531.22cc2d8b.css",revision:null},{url:"/css/663.692259ab.css",revision:null},{url:"/css/6652.0e21fe03.css",revision:null},{url:"/css/6741.67d99f8a.css",revision:null},{url:"/css/7496.0e21fe03.css",revision:null},{url:"/css/7561.280efd83.css",revision:null},{url:"/css/8081.e565b3f9.css",revision:null},{url:"/css/8123.25aa2d67.css",revision:null},{url:"/css/8327.64666c05.css",revision:null},{url:"/css/8596.36d78776.css",revision:null},{url:"/css/8599.3a3e658b.css",revision:null},{url:"/css/8665.f93fd221.css",revision:null},{url:"/css/8932.0e21fe03.css",revision:null},{url:"/css/8948.643cd595.css",revision:null},{url:"/css/9305.3e60e51d.css",revision:null},{url:"/css/9399.af65a5d7.css",revision:null},{url:"/css/chunk-vendors.5a33e728.css",revision:null},{url:"/css/index.08a8e1ac.css",revision:null},{url:"/dark.css",revision:"8bc8c75d670bba7c6ca0122c39beb964"},{url:"/fonts/varela-round-latin-400.72c5f1d4.woff2",revision:null},{url:"/fonts/varela-round-latin-400.ff576336.woff",revision:null},{url:"/index.html",revision:"7243701e68bb304ba443f64fa51fdf2c"},{url:"/js/1064.703d75f1.js",revision:null},{url:"/js/1172.0f4182b3.js",revision:null},{url:"/js/1523.12118690.js",revision:null},{url:"/js/1588.aa9f3f15.js",revision:null},{url:"/js/1814.d46e9bc8.js",revision:null},{url:"/js/185.62497fc3.js",revision:null},{url:"/js/2230.3215567d.js",revision:null},{url:"/js/2233.c2115b33.js",revision:null},{url:"/js/2352.1ad93c6c.js",revision:null},{url:"/js/2374.dc0764c4.js",revision:null},{url:"/js/2535.5fc7abe0.js",revision:null},{url:"/js/265.f78fd35d.js",revision:null},{url:"/js/2921.f2fbc226.js",revision:null},{url:"/js/2970.077864a1.js",revision:null},{url:"/js/2972.abaf9c34.js",revision:null},{url:"/js/3377.b843e352.js",revision:null},{url:"/js/3510.d0330312.js",revision:null},{url:"/js/3593.becd60e0.js",revision:null},{url:"/js/3837.aa23cf66.js",revision:null},{url:"/js/4033.1ef6ffc4.js",revision:null},{url:"/js/4067.341ed2f6.js",revision:null},{url:"/js/428.eac37ee4.js",revision:null},{url:"/js/4513.debf088d.js",revision:null},{url:"/js/4516.7aacfe2f.js",revision:null},{url:"/js/4528.d729566f.js",revision:null},{url:"/js/495.a6e46481.js",revision:null},{url:"/js/5013.56cf47a8.js",revision:null},{url:"/js/5034.3fc015f7.js",revision:null},{url:"/js/5480.a2d6d5cf.js",revision:null},{url:"/js/5649.f2a750a0.js",revision:null},{url:"/js/579.b909463e.js",revision:null},{url:"/js/5793.6b12a4f9.js",revision:null},{url:"/js/5803.4b20c165.js",revision:null},{url:"/js/5812.6233be92.js",revision:null},{url:"/js/5966.66ce7a50.js",revision:null},{url:"/js/6218.e53707fb.js",revision:null},{url:"/js/6514.43b09bcb.js",revision:null},{url:"/js/6531.e78f2219.js",revision:null},{url:"/js/663.97e7e4d3.js",revision:null},{url:"/js/6652.0a490cb9.js",revision:null},{url:"/js/6741.5fd675ba.js",revision:null},{url:"/js/7496.11fb35e2.js",revision:null},{url:"/js/7561.e7ca49b3.js",revision:null},{url:"/js/7634.34f19064.js",revision:null},{url:"/js/8081.a2aa8edc.js",revision:null},{url:"/js/8123.809ec791.js",revision:null},{url:"/js/8191.6a088066.js",revision:null},{url:"/js/8327.685ff366.js",revision:null},{url:"/js/8376.f63b6151.js",revision:null},{url:"/js/8596.0548d980.js",revision:null},{url:"/js/8599.46e04f48.js",revision:null},{url:"/js/8665.151a2c8a.js",revision:null},{url:"/js/8880.21fa7092.js",revision:null},{url:"/js/8932.31ef541c.js",revision:null},{url:"/js/8948.dd3c8695.js",revision:null},{url:"/js/901.21266bcc.js",revision:null},{url:"/js/9305.bd0d368f.js",revision:null},{url:"/js/9399.4c9cf5be.js",revision:null},{url:"/js/9565.078d08a2.js",revision:null},{url:"/js/980.0cf8e040.js",revision:null},{url:"/js/chunk-vendors.4b5dc043.js",revision:null},{url:"/js/index.df4f8794.js",revision:null},{url:"/logo.png",revision:"3cbfce2efacc0dd8d09018233de4afa9"},{url:"/logo.svg",revision:"17fa81a8fc448f2c53f30514400a7c5c"},{url:"/manifest.json",revision:"f6c821dd0bf011176cfb914f2508764c"}],{})}); │ │ //# sourceMappingURL=service-worker.js.map │ │ -service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/f63145c24d48a4d85c5c0b1874c25749/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}}); │ │ +service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/9c2e57c370725548057d828ec0f51d15/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}}); │ │ //# sourceMappingURL=workbox-711a2045.js.map │ │ workbox-711a2045.js.map{"version":3,"file":"workbox-711a2045.js","sources":["node_modules/workbox-webpack-plugin/node_modules/workbox-core/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/messages/messageGenerator.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/WorkboxError.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheNames.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/constants.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/normalizeHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Route.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/RegExpRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Router.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/waitUntil.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/createCacheKey.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheInstallReportPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheCacheKeyPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/canConstructResponseFromBodyStream.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/copyResponse.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheMatchIgnoreParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/Deferred.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/quotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/StrategyHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/timeout.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/getFriendlyURL.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/Strategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheStrategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/getOrCreatePrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/generateURLVariations.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/removeIgnoredSearchParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/addRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/registerRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precache.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:core:6.5.4'] && _();\n}\ncatch (e) { }\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:routing:6.5.4'] && _();\n}\ncatch (e) { }\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}\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 '../_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 { 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 { 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>} 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 | 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|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 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 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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:6.5.4'] && _();\n}\ncatch (e) { }\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 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 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 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 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} ignoreParams\n * @return {Promise}\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:6.5.4'] && _();\n}\ncatch (e) { }\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}\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}\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} 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} `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}\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}\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}\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 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 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 { 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 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} [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}\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} 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}\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} [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}\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} [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} 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}\n */\n install(event) {\n // waitUntil returns Promise\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}\n */\n activate(event) {\n // waitUntil returns Promise\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} 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} 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}\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 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} [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","/*\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} 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 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 { 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 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} 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} [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\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 './_private/assert.js';\nimport { cacheNames } from './_private/cacheNames.js';\nimport { WorkboxError } from './_private/WorkboxError.js';\nimport './_version.js';\n/**\n * Modifies the default cache names used by the Workbox packages.\n * Cache names are generated as `--`.\n *\n * @param {Object} details\n * @param {Object} [details.prefix] The string to add to the beginning of\n * the precache and runtime cache names.\n * @param {Object} [details.suffix] The string to add to the end of\n * the precache and runtime cache names.\n * @param {Object} [details.precache] The cache name to use for precache\n * caching.\n * @param {Object} [details.runtime] The cache name to use for runtime caching.\n * @param {Object} [details.googleAnalytics] The cache name to use for\n * `workbox-google-analytics` caching.\n *\n * @memberof workbox-core\n */\nfunction setCacheNameDetails(details) {\n if (process.env.NODE_ENV !== 'production') {\n Object.keys(details).forEach((key) => {\n assert.isType(details[key], 'string', {\n moduleName: 'workbox-core',\n funcName: 'setCacheNameDetails',\n paramName: `details.${key}`,\n });\n });\n if ('precache' in details && details['precache'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'precache',\n value: details['precache'],\n });\n }\n if ('runtime' in details && details['runtime'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'runtime',\n value: details['runtime'],\n });\n }\n if ('googleAnalytics' in details &&\n details['googleAnalytics'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'googleAnalytics',\n value: details['googleAnalytics'],\n });\n }\n }\n cacheNames.updateDetails(details);\n}\nexport { setCacheNameDetails };\n"],"names":["self","_","e","messageGenerator","fallback","code","args","msg","length","JSON","stringify","WorkboxError","Error","constructor","errorCode","details","super","this","name","_cacheNameDetails","googleAnalytics","precache","prefix","runtime","suffix","registration","scope","_createCacheName","cacheName","filter","value","join","cacheNames","fn","key","Object","keys","eachCacheNameDetail","userCacheName","normalizeHandler","handler","handle","Route","match","method","setCatchHandler","catchHandler","RegExpRoute","regExp","url","result","exec","href","origin","location","index","slice","Router","_routes","Map","_defaultHandlerMap","routes","addFetchListener","addEventListener","event","request","responsePromise","handleRequest","respondWith","addCacheListener","data","type","payload","requestPromises","Promise","all","urlsToCache","map","entry","Request","waitUntil","ports","then","postMessage","URL","protocol","startsWith","sameOrigin","params","route","findMatchingRoute","has","get","err","reject","_catchHandler","catch","async","catchErr","matchResult","Array","isArray","undefined","setDefaultHandler","set","registerRoute","push","unregisterRoute","routeIndex","indexOf","splice","defaultRouter","asyncFn","returnPromise","createCacheKey","urlObject","cacheKey","revision","cacheKeyURL","originalURL","searchParams","PrecacheInstallReportPlugin","updatedURLs","notUpdatedURLs","handlerWillStart","state","originalRequest","cachedResponseWillBeUsed","cachedResponse","PrecacheCacheKeyPlugin","precacheController","cacheKeyWillBeUsed","_precacheController","getCacheKeyForURL","headers","supportStatus","copyResponse","response","modifier","clonedResponse","clone","responseInit","Headers","status","statusText","modifiedResponseInit","body","testResponse","Response","error","canConstructResponseFromBodyStream","blob","stripParams","fullURL","ignoreParams","strippedURL","param","delete","Deferred","promise","resolve","quotaErrorCallbacks","Set","toRequest","input","StrategyHandler","strategy","options","_cacheKeys","assign","_strategy","_handlerDeferred","_extendLifetimePromises","_plugins","plugins","_pluginStateMap","plugin","fetch","mode","FetchEvent","preloadResponse","possiblePreloadResponse","hasCallback","cb","iterateCallbacks","thrownErrorMessage","message","pluginFilteredRequest","fetchResponse","fetchOptions","callback","runCallbacks","fetchAndCachePut","responseClone","cachePut","cacheMatch","matchOptions","effectiveRequest","getCacheKey","multiMatchOptions","caches","ms","setTimeout","String","replace","RegExp","responseToCache","_ensureResponseSafeToCache","cache","open","hasCacheUpdateCallback","oldResponse","strippedRequestURL","keysOptions","ignoreSearch","cacheKeys","cacheMatchIgnoreParams","put","executeQuotaErrorCallbacks","newResponse","statefulCallback","statefulParam","doneWaiting","shift","destroy","pluginsUsed","Strategy","responseDone","handleAll","_getResponse","_awaitComplete","_handle","waitUntilError","PrecacheStrategy","_fallbackToNetwork","fallbackToNetwork","copyRedirectedCacheableResponsesPlugin","_handleInstall","_handleFetch","integrityInManifest","integrity","integrityInRequest","noIntegrityConflict","_useDefaultCacheabilityPluginIfNeeded","defaultPluginIndex","cacheWillUpdatePluginCount","entries","defaultPrecacheCacheabilityPlugin","cacheWillUpdate","redirected","PrecacheController","_urlsToCacheKeys","_urlsToCacheModes","_cacheKeysToIntegrities","install","bind","activate","addToCacheList","_installAndActiveListenersAdded","urlsToWarnAbout","cacheMode","firstEntry","secondEntry","warningMessage","console","warn","installReportPlugin","credentials","currentlyCachedRequests","expectedCacheKeys","values","deletedURLs","getURLsToCacheKeys","getCachedURLs","getIntegrityForCacheKey","matchPrecache","createHandlerBoundToURL","getOrCreatePrecacheController","PrecacheRoute","urlsToCacheKeys","possibleURL","ignoreURLParametersMatching","directoryIndex","cleanURLs","urlManipulation","hash","urlWithoutIgnoredParams","paramName","some","test","removeIgnoredSearchParams","pathname","endsWith","directoryURL","cleanURL","additionalURLs","urlToAttempt","generateURLVariations","addRoute","capture","captureUrl","matchCallback","moduleName","funcName"],"mappings":"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"}&rocket::state::Staterocket::state::Staterocket::serde::json::Jsonaw_models::info::Infoserver_infofontsstatic/api/0/info/api/0/buckets/api/0/query/api/0/import/api/0/export/api/0/settingsjsoctet-streamapplication/octet-streamcss │ │ SizeLimitwhole_streamper_fieldfield_mapShieldStateinnerExtensionCorsScopeApiKeyCheckHostCheckstream_iddependencyan empty stream (vacuous)a multipart form fieldrocket::data::data_stream::_rocket::data::data_streamflagspad_lenassertion failed: cell.set(value)Reseterror_codedependency_idweightis_exclusiveParseErrorGoAwayReasonIoBadCharBadEndLibraryRemotea Display implementation returned an error unexpectedlyErrorParsingErrorEmptyQueryVariableNotDefinedMathErrorInvalidTypeInvalidFunctionParametersTimeIntervalErrorBucketNotFoundRegexCompileErrorConstraintssize_limitallowed_fieldsParse()there │ │ ctrlcsignalsgracemercyforce___figment_relative_metadata_path___figment_relative_pathaddressworkersmax_blockingidentlimits___figment_relative_path_bufkeep_alivelog_levelip_headercli_colorsdefaultstruct Config with 12 elementsstruct Shutdown with 5 elementsstruct RelativePathBuf with 2 elements___figment_tagged_itemvisit_value called before visit_keynormaldebugoffcalled `Result::unwrap()` on an `Err` valueErrorFieldSet corrupted (this is a bug)poll_completewritinginvalid framereclaimedwasn't expecting a frame to reclaimnot reclaiming frame for cancelled streamremoving dangling stream from pending_senddata framestream capacity is 0sending data frameaw_server::endpoints::ServerStateinvalid WINDOW_UPDATE frameunexpected flow control stateassertion failed: stream.state.is_closed()too_many_internal_resets │ │ Failed to encode event duration for dedupaw_server::endpoints::bucket::_aw_server::endpoints::bucketRequest guard `& State < ServerState >` is forwarding.aw_server::endpoints::import::_aw_server::endpoints::importData guard `Json < BucketsExport >` is forwarding.Internal invariant broken: dyn param not found.Please report this to the Rocket issue tracker.https://github.com/rwf2/Rocket/issuesData guard `Json < Bucket >` is forwarding.startendlimitQuery string failed to match route declaration.Data guard `Json < Vec < Event > >` is forwarding.pulsetimeData guard `Json < Event >` is forwarding.Data guard `Form < ImportForm >` is forwarding.buckets_methodrocket::statecalled `Result::unwrap()` on an `Err` valueaw-server/src/endpoints/bucket.rs&rocket::state::Staterocket::state::Statecore::result::Result>, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Json>std::collections::hash::map::HashMapalloc::string::Stringaw_models::bucket::Bucketaw_server::endpoints::util::HttpErrorJsonbuckets_get/applicationaw-server/src/endpoints/import.rsrocket::serde::json::Jsoncore::result::Result<(), aw_server::endpoints::util::HttpErrorJson>()bucket_import_jsonstrrocket::serde::json::Jsonbucket_new/core::option::Optioncore::option::Optionu64core::result::Result>, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Json>alloc::vec::Vecaw_models::event::Eventbucket_events_get//events?&&i64core::result::Result, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Jsonbucket_events_get_single//events/?<_unused..>internal error: entered unreachable codeinvalid keybucket_events_create//eventscapacity overflowf64bucket_events_heartbeat//heartbeat?core::result::Result, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Jsonbucket_event_count//events/countCannot convert indexed str to str without base string!bucket_events_delete_by_id//events/core::result::Resultaw_server::endpoints::util::BucketsExportRocketbucket_export//exportbucket_deletecore::result::Result, aw_server::endpoints::util::HttpErrorJson>bucket_getmultipartform-datarocket::form::form::Formaw_server::endpoints::import::ImportFormbucket_import_form │ │ http://127.0.0.1:27180 │ │ http://localhost:27180 │ ├── readelf --wide --decompress --string-dump=.rodata {} │ │ @@ -16559,15 +16559,15 @@ │ │ id="path4386"\n │ │ inkscape:connector-curvature="0"\n │ │ sodipodi:nodetypes="cc" />\n │ │ \n │ │ \n │ │ [12f99f0] manifest.json{"name":"ActivityWatch","short_name":"ActivityWatch","theme_color":"#4DBA87","icons":[{"src":"logo.png","sizes":"512x512","type":"image/png"}],"start_url":".","display":"standalone","background_color":"#000000"}service-worker.jsif(!self.define){let s,l={};const n=(n,r)=>(n=new URL(n+".js",r).href,l[n]||new Promise(l=>{if("document"in self){const s=document.createElement("script");s.src=n,s.onload=l,document.head.appendChild(s)}else s=n,importScripts(n),l()}).then(()=>{let s=l[n];if(!s)throw new Error(`Module ${n} didn�t register its module`);return s}));self.define=(r,i)=>{const u=s||("document"in self?document.currentScript.src:"")||location.href;if(l[u])return;let e={};const c=s=>n(s,u),o={module:{uri:u},exports:e,require:c};l[u]=Promise.all(r.map(s=>o[s]||c(s))).then(s=>(i(...s),e))}}define(["./workbox-711a2045"],function(s){"use strict";s.setCacheNameDetails({prefix:"aw-webui"}),self.addEventListener("message",s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()}),s.precacheAndRoute([{url:"/css/1523.3af55662.css",revision:null},{url:"/css/1588.bd0bb219.css",revision:null},{url:"/css/1814.63a247f6.css",revision:null},{url:"/css/185.be8e4b9a.css",revision:null},{url:"/css/2233.e1bcf8fb.css",revision:null},{url:"/css/2352.af75f974.css",revision:null},{url:"/css/265.a9f5afc4.css",revision:null},{url:"/css/2921.0e21fe03.css",revision:null},{url:"/css/2970.0e21fe03.css",revision:null},{url:"/css/3510.cd69135e.css",revision:null},{url:"/css/3593.0e21fe03.css",revision:null},{url:"/css/4067.dcf2e439.css",revision:null},{url:"/css/428.fdf3fbd9.css",revision:null},{url:"/css/4528.ec40e91d.css",revision:null},{url:"/css/495.0e21fe03.css",revision:null},{url:"/css/5480.8f4f9eec.css",revision:null},{url:"/css/579.0a541622.css",revision:null},{url:"/css/5812.38cfb433.css",revision:null},{url:"/css/5966.c7b9176f.css",revision:null},{url:"/css/6218.0e21fe03.css",revision:null},{url:"/css/6531.22cc2d8b.css",revision:null},{url:"/css/663.692259ab.css",revision:null},{url:"/css/6652.0e21fe03.css",revision:null},{url:"/css/6741.67d99f8a.css",revision:null},{url:"/css/7496.0e21fe03.css",revision:null},{url:"/css/7561.280efd83.css",revision:null},{url:"/css/8081.e565b3f9.css",revision:null},{url:"/css/8123.25aa2d67.css",revision:null},{url:"/css/8327.64666c05.css",revision:null},{url:"/css/8596.36d78776.css",revision:null},{url:"/css/8599.3a3e658b.css",revision:null},{url:"/css/8665.f93fd221.css",revision:null},{url:"/css/8932.0e21fe03.css",revision:null},{url:"/css/8948.643cd595.css",revision:null},{url:"/css/9305.3e60e51d.css",revision:null},{url:"/css/9399.af65a5d7.css",revision:null},{url:"/css/chunk-vendors.5a33e728.css",revision:null},{url:"/css/index.08a8e1ac.css",revision:null},{url:"/dark.css",revision:"8bc8c75d670bba7c6ca0122c39beb964"},{url:"/fonts/varela-round-latin-400.72c5f1d4.woff2",revision:null},{url:"/fonts/varela-round-latin-400.ff576336.woff",revision:null},{url:"/index.html",revision:"7243701e68bb304ba443f64fa51fdf2c"},{url:"/js/1064.703d75f1.js",revision:null},{url:"/js/1172.0f4182b3.js",revision:null},{url:"/js/1523.12118690.js",revision:null},{url:"/js/1588.aa9f3f15.js",revision:null},{url:"/js/1814.d46e9bc8.js",revision:null},{url:"/js/185.62497fc3.js",revision:null},{url:"/js/2230.3215567d.js",revision:null},{url:"/js/2233.c2115b33.js",revision:null},{url:"/js/2352.1ad93c6c.js",revision:null},{url:"/js/2374.dc0764c4.js",revision:null},{url:"/js/2535.5fc7abe0.js",revision:null},{url:"/js/265.f78fd35d.js",revision:null},{url:"/js/2921.f2fbc226.js",revision:null},{url:"/js/2970.077864a1.js",revision:null},{url:"/js/2972.abaf9c34.js",revision:null},{url:"/js/3377.b843e352.js",revision:null},{url:"/js/3510.d0330312.js",revision:null},{url:"/js/3593.becd60e0.js",revision:null},{url:"/js/3837.aa23cf66.js",revision:null},{url:"/js/4033.1ef6ffc4.js",revision:null},{url:"/js/4067.341ed2f6.js",revision:null},{url:"/js/428.eac37ee4.js",revision:null},{url:"/js/4513.debf088d.js",revision:null},{url:"/js/4516.7aacfe2f.js",revision:null},{url:"/js/4528.d729566f.js",revision:null},{url:"/js/495.a6e46481.js",revision:null},{url:"/js/5013.56cf47a8.js",revision:null},{url:"/js/5034.3fc015f7.js",revision:null},{url:"/js/5480.a2d6d5cf.js",revision:null},{url:"/js/5649.f2a750a0.js",revision:null},{url:"/js/579.b909463e.js",revision:null},{url:"/js/5793.6b12a4f9.js",revision:null},{url:"/js/5803.4b20c165.js",revision:null},{url:"/js/5812.6233be92.js",revision:null},{url:"/js/5966.66ce7a50.js",revision:null},{url:"/js/6218.e53707fb.js",revision:null},{url:"/js/6514.43b09bcb.js",revision:null},{url:"/js/6531.e78f2219.js",revision:null},{url:"/js/663.97e7e4d3.js",revision:null},{url:"/js/6652.0a490cb9.js",revision:null},{url:"/js/6741.5fd675ba.js",revision:null},{url:"/js/7496.11fb35e2.js",revision:null},{url:"/js/7561.e7ca49b3.js",revision:null},{url:"/js/7634.34f19064.js",revision:null},{url:"/js/8081.a2aa8edc.js",revision:null},{url:"/js/8123.809ec791.js",revision:null},{url:"/js/8191.6a088066.js",revision:null},{url:"/js/8327.685ff366.js",revision:null},{url:"/js/8376.f63b6151.js",revision:null},{url:"/js/8596.0548d980.js",revision:null},{url:"/js/8599.46e04f48.js",revision:null},{url:"/js/8665.151a2c8a.js",revision:null},{url:"/js/8880.21fa7092.js",revision:null},{url:"/js/8932.31ef541c.js",revision:null},{url:"/js/8948.dd3c8695.js",revision:null},{url:"/js/901.21266bcc.js",revision:null},{url:"/js/9305.bd0d368f.js",revision:null},{url:"/js/9399.4c9cf5be.js",revision:null},{url:"/js/9565.078d08a2.js",revision:null},{url:"/js/980.0cf8e040.js",revision:null},{url:"/js/chunk-vendors.4b5dc043.js",revision:null},{url:"/js/index.df4f8794.js",revision:null},{url:"/logo.png",revision:"3cbfce2efacc0dd8d09018233de4afa9"},{url:"/logo.svg",revision:"17fa81a8fc448f2c53f30514400a7c5c"},{url:"/manifest.json",revision:"f6c821dd0bf011176cfb914f2508764c"}],{})});\n │ │ //# sourceMappingURL=service-worker.js.map\n │ │ - service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/f63145c24d48a4d85c5c0b1874c25749/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}});\n │ │ + service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/9c2e57c370725548057d828ec0f51d15/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}});\n │ │ //# sourceMappingURL=workbox-711a2045.js.map\n │ │ workbox-711a2045.js.map{"version":3,"file":"workbox-711a2045.js","sources":["node_modules/workbox-webpack-plugin/node_modules/workbox-core/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/messages/messageGenerator.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/WorkboxError.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheNames.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/constants.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/normalizeHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Route.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/RegExpRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Router.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/waitUntil.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/createCacheKey.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheInstallReportPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheCacheKeyPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/canConstructResponseFromBodyStream.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/copyResponse.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheMatchIgnoreParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/Deferred.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/quotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/StrategyHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/timeout.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/getFriendlyURL.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/Strategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheStrategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/getOrCreatePrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/generateURLVariations.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/removeIgnoredSearchParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/addRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/registerRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precache.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:core:6.5.4'] && _();\n}\ncatch (e) { }\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:routing:6.5.4'] && _();\n}\ncatch (e) { }\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}\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 '../_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 { 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 { 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>} 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 | 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|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 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 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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:6.5.4'] && _();\n}\ncatch (e) { }\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 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 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 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 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} ignoreParams\n * @return {Promise}\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:6.5.4'] && _();\n}\ncatch (e) { }\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}\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}\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} 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} `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}\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}\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}\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 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 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 { 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 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} [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}\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} 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}\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} [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}\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} [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} 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}\n */\n install(event) {\n // waitUntil returns Promise\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}\n */\n activate(event) {\n // waitUntil returns Promise\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} 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} 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}\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 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} [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","/*\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} 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 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 { 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 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} 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} [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\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 './_private/assert.js';\nimport { cacheNames } from './_private/cacheNames.js';\nimport { WorkboxError } from './_private/WorkboxError.js';\nimport './_version.js';\n/**\n * Modifies the default cache names used by the Workbox packages.\n * Cache names are generated as `--`.\n *\n * @param {Object} details\n * @param {Object} [details.prefix] The string to add to the beginning of\n * the precache and runtime cache names.\n * @param {Object} [details.suffix] The string to add to the end of\n * the precache and runtime cache names.\n * @param {Object} [details.precache] The cache name to use for precache\n * caching.\n * @param {Object} [details.runtime] The cache name to use for runtime caching.\n * @param {Object} [details.googleAnalytics] The cache name to use for\n * `workbox-google-analytics` caching.\n *\n * @memberof workbox-core\n */\nfunction setCacheNameDetails(details) {\n if (process.env.NODE_ENV !== 'production') {\n Object.keys(details).forEach((key) => {\n assert.isType(details[key], 'string', {\n moduleName: 'workbox-core',\n funcName: 'setCacheNameDetails',\n paramName: `details.${key}`,\n });\n });\n if ('precache' in details && details['precache'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'precache',\n value: details['precache'],\n });\n }\n if ('runtime' in details && details['runtime'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'runtime',\n value: details['runtime'],\n });\n }\n if ('googleAnalytics' in details &&\n details['googleAnalytics'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'googleAnalytics',\n value: details['googleAnalytics'],\n });\n }\n }\n cacheNames.updateDetails(details);\n}\nexport { setCacheNameDetails };\n"],"names":["self","_","e","messageGenerator","fallback","code","args","msg","length","JSON","stringify","WorkboxError","Error","constructor","errorCode","details","super","this","name","_cacheNameDetails","googleAnalytics","precache","prefix","runtime","suffix","registration","scope","_createCacheName","cacheName","filter","value","join","cacheNames","fn","key","Object","keys","eachCacheNameDetail","userCacheName","normalizeHandler","handler","handle","Route","match","method","setCatchHandler","catchHandler","RegExpRoute","regExp","url","result","exec","href","origin","location","index","slice","Router","_routes","Map","_defaultHandlerMap","routes","addFetchListener","addEventListener","event","request","responsePromise","handleRequest","respondWith","addCacheListener","data","type","payload","requestPromises","Promise","all","urlsToCache","map","entry","Request","waitUntil","ports","then","postMessage","URL","protocol","startsWith","sameOrigin","params","route","findMatchingRoute","has","get","err","reject","_catchHandler","catch","async","catchErr","matchResult","Array","isArray","undefined","setDefaultHandler","set","registerRoute","push","unregisterRoute","routeIndex","indexOf","splice","defaultRouter","asyncFn","returnPromise","createCacheKey","urlObject","cacheKey","revision","cacheKeyURL","originalURL","searchParams","PrecacheInstallReportPlugin","updatedURLs","notUpdatedURLs","handlerWillStart","state","originalRequest","cachedResponseWillBeUsed","cachedResponse","PrecacheCacheKeyPlugin","precacheController","cacheKeyWillBeUsed","_precacheController","getCacheKeyForURL","headers","supportStatus","copyResponse","response","modifier","clonedResponse","clone","responseInit","Headers","status","statusText","modifiedResponseInit","body","testResponse","Response","error","canConstructResponseFromBodyStream","blob","stripParams","fullURL","ignoreParams","strippedURL","param","delete","Deferred","promise","resolve","quotaErrorCallbacks","Set","toRequest","input","StrategyHandler","strategy","options","_cacheKeys","assign","_strategy","_handlerDeferred","_extendLifetimePromises","_plugins","plugins","_pluginStateMap","plugin","fetch","mode","FetchEvent","preloadResponse","possiblePreloadResponse","hasCallback","cb","iterateCallbacks","thrownErrorMessage","message","pluginFilteredRequest","fetchResponse","fetchOptions","callback","runCallbacks","fetchAndCachePut","responseClone","cachePut","cacheMatch","matchOptions","effectiveRequest","getCacheKey","multiMatchOptions","caches","ms","setTimeout","String","replace","RegExp","responseToCache","_ensureResponseSafeToCache","cache","open","hasCacheUpdateCallback","oldResponse","strippedRequestURL","keysOptions","ignoreSearch","cacheKeys","cacheMatchIgnoreParams","put","executeQuotaErrorCallbacks","newResponse","statefulCallback","statefulParam","doneWaiting","shift","destroy","pluginsUsed","Strategy","responseDone","handleAll","_getResponse","_awaitComplete","_handle","waitUntilError","PrecacheStrategy","_fallbackToNetwork","fallbackToNetwork","copyRedirectedCacheableResponsesPlugin","_handleInstall","_handleFetch","integrityInManifest","integrity","integrityInRequest","noIntegrityConflict","_useDefaultCacheabilityPluginIfNeeded","defaultPluginIndex","cacheWillUpdatePluginCount","entries","defaultPrecacheCacheabilityPlugin","cacheWillUpdate","redirected","PrecacheController","_urlsToCacheKeys","_urlsToCacheModes","_cacheKeysToIntegrities","install","bind","activate","addToCacheList","_installAndActiveListenersAdded","urlsToWarnAbout","cacheMode","firstEntry","secondEntry","warningMessage","console","warn","installReportPlugin","credentials","currentlyCachedRequests","expectedCacheKeys","values","deletedURLs","getURLsToCacheKeys","getCachedURLs","getIntegrityForCacheKey","matchPrecache","createHandlerBoundToURL","getOrCreatePrecacheController","PrecacheRoute","urlsToCacheKeys","possibleURL","ignoreURLParametersMatching","directoryIndex","cleanURLs","urlManipulation","hash","urlWithoutIgnoredParams","paramName","some","test","removeIgnoredSearchParams","pathname","endsWith","directoryURL","cleanURL","additionalURLs","urlToAttempt","generateURLVariations","addRoute","capture","captureUrl","matchCallback","moduleName","funcName"],"mappings":"4CAEA,IACIA,KAAK,uBAAyBC,GAClC,CACA,MAAOC,GAAG,CCIV,MAcaC,EAdIC,CAACC,KAASC,KACvB,IAAIC,EAAMF,EAIV,OAHIC,EAAKE,OAAS,IACdD,GAAO,OAAOE,KAAKC,UAAUJ,MAE1BC,GCIX,MAAMI,UAAqBC,MASvBC,WAAAA,CAAYC,EAAWC,GAEnBC,MADgBb,EAAiBW,EAAWC,IAE5CE,KAAKC,KAAOJ,EACZG,KAAKF,QAAUA,CACnB,ECxBJ,MAAMI,EAAoB,CACtBC,gBAAiB,kBACjBC,SAAU,cACVC,OAAQ,UACRC,QAAS,UACTC,OAAgC,oBAAjBC,aAA+BA,aAAaC,MAAQ,IAEjEC,EAAoBC,GACf,CAACT,EAAkBG,OAAQM,EAAWT,EAAkBK,QAC1DK,OAAQC,GAAUA,GAASA,EAAMtB,OAAS,GAC1CuB,KAAK,KAODC,EACOjB,IANSkB,KACzB,IAAK,MAAMC,KAAOC,OAAOC,KAAKjB,GAC1Bc,EAAGC,IAKHG,CAAqBH,IACW,iBAAjBnB,EAAQmB,KACff,EAAkBe,GAAOnB,EAAQmB,OAJpCF,EAWSM,GACPA,GAAiBX,EAAiBR,EAAkBE,UAZtDW,EAiBQM,GACNA,GAAiBX,EAAiBR,EAAkBI,SCzCnE,IACIvB,KAAK,0BAA4BC,GACrC,CACA,MAAOC,GAAG,CCWH,MCAMqC,EAAoBC,GACzBA,GAA8B,iBAAZA,EASXA,EAWA,CAAEC,OAAQD,GCjBzB,MAAME,EAYF7B,WAAAA,CAAY8B,EAAOH,EAASI,EFhBH,OE8BrB3B,KAAKuB,QAAUD,EAAiBC,GAChCvB,KAAK0B,MAAQA,EACb1B,KAAK2B,OAASA,CAClB,CAMAC,eAAAA,CAAgBL,GACZvB,KAAK6B,aAAeP,EAAiBC,EACzC,ECnCJ,MAAMO,UAAoBL,EActB7B,WAAAA,CAAYmC,EAAQR,EAASI,GAiCzB5B,MAxBc2B,EAAGM,UACb,MAAMC,EAASF,EAAOG,KAAKF,EAAIG,MAE/B,GAAKF,IAODD,EAAII,SAAWC,SAASD,QAA2B,IAAjBH,EAAOK,OAY7C,OAAOL,EAAOM,MAAM,IAEXhB,EAASI,EAC1B,ECvCJ,MAAMa,EAIF5C,WAAAA,GACII,KAAKyC,EAAU,IAAIC,IACnB1C,KAAK2C,EAAqB,IAAID,GAClC,CAMA,UAAIE,GACA,OAAO5C,KAAKyC,CAChB,CAKAI,gBAAAA,GAEI9D,KAAK+D,iBAAiB,QAAWC,IAC7B,MAAMC,QAAEA,GAAYD,EACdE,EAAkBjD,KAAKkD,cAAc,CAAEF,UAASD,UAClDE,GACAF,EAAMI,YAAYF,IAG9B,CAuBAG,gBAAAA,GAEIrE,KAAK+D,iBAAiB,UAAaC,IAG/B,GAAIA,EAAMM,MAA4B,eAApBN,EAAMM,KAAKC,KAAuB,CAEhD,MAAMC,QAAEA,GAAYR,EAAMM,KAIpBG,EAAkBC,QAAQC,IAAIH,EAAQI,YAAYC,IAAKC,IACpC,iBAAVA,IACPA,EAAQ,CAACA,IAEb,MAAMb,EAAU,IAAIc,WAAWD,GAC/B,OAAO7D,KAAKkD,cAAc,CAAEF,UAASD,aAKzCA,EAAMgB,UAAUP,GAEZT,EAAMiB,OAASjB,EAAMiB,MAAM,IACtBR,EAAgBS,KAAK,IAAMlB,EAAMiB,MAAM,GAAGE,aAAY,GAEnE,GAER,CAaAhB,aAAAA,EAAcF,QAAEA,EAAOD,MAAEA,IASrB,MAAMf,EAAM,IAAImC,IAAInB,EAAQhB,IAAKK,SAASF,MAC1C,IAAKH,EAAIoC,SAASC,WAAW,QAIzB,OAEJ,MAAMC,EAAatC,EAAII,SAAWC,SAASD,QACrCmC,OAAEA,EAAMC,MAAEA,GAAUxE,KAAKyE,kBAAkB,CAC7C1B,QACAC,UACAsB,aACAtC,QAEJ,IAAIT,EAAUiD,GAASA,EAAMjD,QAe7B,MAAMI,EAASqB,EAAQrB,OAQvB,IAPKJ,GAAWvB,KAAK2C,EAAmB+B,IAAI/C,KAKxCJ,EAAUvB,KAAK2C,EAAmBgC,IAAIhD,KAErCJ,EAMD,OAkBJ,IAAI0B,EACJ,IACIA,EAAkB1B,EAAQC,OAAO,CAAEQ,MAAKgB,UAASD,QAAOwB,UAC3D,CACD,MAAOK,GACH3B,EAAkBQ,QAAQoB,OAAOD,EACrC,CAEA,MAAM/C,EAAe2C,GAASA,EAAM3C,aAuCpC,OAtCIoB,aAA2BQ,UAC1BzD,KAAK8E,GAAiBjD,KACvBoB,EAAkBA,EAAgB8B,MAAMC,UAEpC,GAAInD,EAUA,IACI,aAAaA,EAAaL,OAAO,CAAEQ,MAAKgB,UAASD,QAAOwB,UAC3D,CACD,MAAOU,GACCA,aAAoBtF,QACpBiF,EAAMK,EAEd,CAEJ,GAAIjF,KAAK8E,EAUL,OAAO9E,KAAK8E,EAActD,OAAO,CAAEQ,MAAKgB,UAASD,UAErD,MAAM6B,KAGP3B,CACX,CAgBAwB,iBAAAA,EAAkBzC,IAAEA,EAAGsC,WAAEA,EAAUtB,QAAEA,EAAOD,MAAEA,IAC1C,MAAMH,EAAS5C,KAAKyC,EAAQkC,IAAI3B,EAAQrB,SAAW,GACnD,IAAK,MAAM6C,KAAS5B,EAAQ,CACxB,IAAI2B,EAGJ,MAAMW,EAAcV,EAAM9C,MAAM,CAAEM,MAAKsC,aAAYtB,UAASD,UAC5D,GAAImC,EA6BA,OAjBAX,EAASW,GACLC,MAAMC,QAAQb,IAA6B,IAAlBA,EAAOhF,QAI3B2F,EAAYtF,cAAgBsB,QACG,IAApCA,OAAOC,KAAK+D,GAAa3F,QAIG,kBAAhB2F,KAPZX,OAASc,GAcN,CAAEb,QAAOD,SAExB,CAEA,MAAO,EACX,CAeAe,iBAAAA,CAAkB/D,EAASI,EJ1SF,OI2SrB3B,KAAK2C,EAAmB4C,IAAI5D,EAAQL,EAAiBC,GACzD,CAQAK,eAAAA,CAAgBL,GACZvB,KAAK8E,EAAgBxD,EAAiBC,EAC1C,CAMAiE,aAAAA,CAAchB,GAiCLxE,KAAKyC,EAAQiC,IAAIF,EAAM7C,SACxB3B,KAAKyC,EAAQ8C,IAAIf,EAAM7C,OAAQ,IAInC3B,KAAKyC,EAAQkC,IAAIH,EAAM7C,QAAQ8D,KAAKjB,EACxC,CAMAkB,eAAAA,CAAgBlB,GACZ,IAAKxE,KAAKyC,EAAQiC,IAAIF,EAAM7C,QACxB,MAAM,IAAIjC,EAAa,6CAA8C,CACjEiC,OAAQ6C,EAAM7C,SAGtB,MAAMgE,EAAa3F,KAAKyC,EAAQkC,IAAIH,EAAM7C,QAAQiE,QAAQpB,GAC1D,KAAImB,GAAc,GAId,MAAM,IAAIjG,EAAa,yCAHvBM,KAAKyC,EAAQkC,IAAIH,EAAM7C,QAAQkE,OAAOF,EAAY,EAK1D,EC7XJ,IAAIG,ECOJ,SAAS/B,EAAUhB,EAAOgD,GACtB,MAAMC,EAAgBD,IAEtB,OADAhD,EAAMgB,UAAUiC,GACTA,CACX,CClBA,IACIjH,KAAK,6BAA+BC,GACxC,CACA,MAAOC,GAAG,CCeH,SAASgH,EAAepC,GAC3B,IAAKA,EACD,MAAM,IAAInE,EAAa,oCAAqC,CAAEmE,UAIlE,GAAqB,iBAAVA,EAAoB,CAC3B,MAAMqC,EAAY,IAAI/B,IAAIN,EAAOxB,SAASF,MAC1C,MAAO,CACHgE,SAAUD,EAAU/D,KACpBH,IAAKkE,EAAU/D,KAEvB,CACA,MAAMiE,SAAEA,EAAQpE,IAAEA,GAAQ6B,EAC1B,IAAK7B,EACD,MAAM,IAAItC,EAAa,oCAAqC,CAAEmE,UAIlE,IAAKuC,EAAU,CACX,MAAMF,EAAY,IAAI/B,IAAInC,EAAKK,SAASF,MACxC,MAAO,CACHgE,SAAUD,EAAU/D,KACpBH,IAAKkE,EAAU/D,KAEvB,CAGA,MAAMkE,EAAc,IAAIlC,IAAInC,EAAKK,SAASF,MACpCmE,EAAc,IAAInC,IAAInC,EAAKK,SAASF,MAE1C,OADAkE,EAAYE,aAAahB,IAxCC,kBAwC0Ba,GAC7C,CACHD,SAAUE,EAAYlE,KACtBH,IAAKsE,EAAYnE,KAEzB,CCzCA,MAAMqE,EACF5G,WAAAA,GACII,KAAKyG,YAAc,GACnBzG,KAAK0G,eAAiB,GACtB1G,KAAK2G,iBAAmB3B,OAAShC,UAAS4D,YAElCA,IACAA,EAAMC,gBAAkB7D,IAGhChD,KAAK8G,yBAA2B9B,OAASjC,QAAO6D,QAAOG,qBACnD,GAAmB,YAAfhE,EAAMO,MACFsD,GACAA,EAAMC,iBACND,EAAMC,2BAA2B/C,QAAS,CAE1C,MAAM9B,EAAM4E,EAAMC,gBAAgB7E,IAC9B+E,EACA/G,KAAK0G,eAAejB,KAAKzD,GAGzBhC,KAAKyG,YAAYhB,KAAKzD,EAE9B,CAEJ,OAAO+E,EAEf,EC3BJ,MAAMC,EACFpH,WAAAA,EAAYqH,mBAAEA,IACVjH,KAAKkH,mBAAqBlC,OAAShC,UAASuB,aAGxC,MAAM4B,GAAY5B,aAA4C,EAAIA,EAAO4B,WACrEnG,KAAKmH,EAAoBC,kBAAkBpE,EAAQhB,KAEvD,OAAOmE,EACD,IAAIrC,QAAQqC,EAAU,CAAEkB,QAASrE,EAAQqE,UACzCrE,GAEVhD,KAAKmH,EAAsBF,CAC/B,ECnBJ,IAAIK,ECqBJtC,eAAeuC,EAAaC,EAAUC,GAClC,IAAIrF,EAAS,KAEb,GAAIoF,EAASxF,IAAK,CAEdI,EADoB,IAAI+B,IAAIqD,EAASxF,KAChBI,MACzB,CACA,GAAIA,IAAWrD,KAAKsD,SAASD,OACzB,MAAM,IAAI1C,EAAa,6BAA8B,CAAE0C,WAE3D,MAAMsF,EAAiBF,EAASG,QAE1BC,EAAe,CACjBP,QAAS,IAAIQ,QAAQH,EAAeL,SACpCS,OAAQJ,EAAeI,OACvBC,WAAYL,EAAeK,YAGzBC,EAAuBP,EAAWA,EAASG,GAAgBA,EAI3DK,EDjCV,WACI,QAAsB5C,IAAlBiC,EAA6B,CAC7B,MAAMY,EAAe,IAAIC,SAAS,IAClC,GAAI,SAAUD,EACV,IACI,IAAIC,SAASD,EAAaD,MAC1BX,GAAgB,CACnB,CACD,MAAOc,GACHd,GAAgB,CACpB,CAEJA,GAAgB,CACpB,CACA,OAAOA,CACX,CCkBiBe,GACPX,EAAeO,WACTP,EAAeY,OAC3B,OAAO,IAAIH,SAASF,EAAMD,EAC9B,CChDA,SAASO,EAAYC,EAASC,GAC1B,MAAMC,EAAc,IAAIvE,IAAIqE,GAC5B,IAAK,MAAMG,KAASF,EAChBC,EAAYnC,aAAaqC,OAAOD,GAEpC,OAAOD,EAAYvG,IACvB,CCGA,MAAM0G,EAIFjJ,WAAAA,GACII,KAAK8I,QAAU,IAAIrF,QAAQ,CAACsF,EAASlE,KACjC7E,KAAK+I,QAAUA,EACf/I,KAAK6E,OAASA,GAEtB,ECdJ,MAAMmE,EAAsB,IAAIC,ICThC,IACIlK,KAAK,6BAA+BC,GACxC,CACA,MAAOC,GAAG,CCWV,SAASiK,EAAUC,GACf,MAAwB,iBAAVA,EAAqB,IAAIrF,QAAQqF,GAASA,CAC5D,CAUA,MAAMC,EAiBFxJ,WAAAA,CAAYyJ,EAAUC,GAClBtJ,KAAKuJ,EAAa,GA8ClBrI,OAAOsI,OAAOxJ,KAAMsJ,GACpBtJ,KAAK+C,MAAQuG,EAAQvG,MACrB/C,KAAKyJ,EAAYJ,EACjBrJ,KAAK0J,EAAmB,IAAIb,EAC5B7I,KAAK2J,EAA0B,GAG/B3J,KAAK4J,EAAW,IAAIP,EAASQ,SAC7B7J,KAAK8J,EAAkB,IAAIpH,IAC3B,IAAK,MAAMqH,KAAU/J,KAAK4J,EACtB5J,KAAK8J,EAAgBvE,IAAIwE,EAAQ,CAAE,GAEvC/J,KAAK+C,MAAMgB,UAAU/D,KAAK0J,EAAiBZ,QAC/C,CAcA,WAAMkB,CAAMb,GACR,MAAMpG,MAAEA,GAAU/C,KAClB,IAAIgD,EAAUkG,EAAUC,GACxB,GAAqB,aAAjBnG,EAAQiH,MACRlH,aAAiBmH,YACjBnH,EAAMoH,gBAAiB,CACvB,MAAMC,QAAiCrH,EAAMoH,gBAC7C,GAAIC,EAKA,OAAOA,CAEf,CAIA,MAAMvD,EAAkB7G,KAAKqK,YAAY,gBACnCrH,EAAQ2E,QACR,KACN,IACI,IAAK,MAAM2C,KAAMtK,KAAKuK,iBAAiB,oBACnCvH,QAAgBsH,EAAG,CAAEtH,QAASA,EAAQ2E,QAAS5E,SAEtD,CACD,MAAO6B,GACH,GAAIA,aAAejF,MACf,MAAM,IAAID,EAAa,kCAAmC,CACtD8K,mBAAoB5F,EAAI6F,SAGpC,CAIA,MAAMC,EAAwB1H,EAAQ2E,QACtC,IACI,IAAIgD,EAEJA,QAAsBX,MAAMhH,EAA0B,aAAjBA,EAAQiH,UAAsB5E,EAAYrF,KAAKyJ,EAAUmB,cAM9F,IAAK,MAAMC,KAAY7K,KAAKuK,iBAAiB,mBACzCI,QAAsBE,EAAS,CAC3B9H,QACAC,QAAS0H,EACTlD,SAAUmD,IAGlB,OAAOA,CACV,CACD,MAAOvC,GAeH,MARIvB,SACM7G,KAAK8K,aAAa,eAAgB,CACpC1C,MAAOA,EACPrF,QACA8D,gBAAiBA,EAAgBc,QACjC3E,QAAS0H,EAAsB/C,UAGjCS,CACV,CACJ,CAWA,sBAAM2C,CAAiB5B,GACnB,MAAM3B,QAAiBxH,KAAKgK,MAAMb,GAC5B6B,EAAgBxD,EAASG,QAE/B,OADK3H,KAAK+D,UAAU/D,KAAKiL,SAAS9B,EAAO6B,IAClCxD,CACX,CAaA,gBAAM0D,CAAWjK,GACb,MAAM+B,EAAUkG,EAAUjI,GAC1B,IAAI8F,EACJ,MAAMpG,UAAEA,EAASwK,aAAEA,GAAiBnL,KAAKyJ,EACnC2B,QAAyBpL,KAAKqL,YAAYrI,EAAS,QACnDsI,EAAoBpK,OAAOsI,OAAOtI,OAAOsI,OAAO,CAAA,EAAI2B,GAAe,CAAExK,cAC3EoG,QAAuBwE,OAAO7J,MAAM0J,EAAkBE,GAStD,IAAK,MAAMT,KAAY7K,KAAKuK,iBAAiB,4BACzCxD,QACW8D,EAAS,CACZlK,YACAwK,eACApE,iBACA/D,QAASoI,EACTrI,MAAO/C,KAAK+C,cACTsC,EAEf,OAAO0B,CACX,CAgBA,cAAMkE,CAAShK,EAAKuG,GAChB,MAAMxE,EAAUkG,EAAUjI,GCxP3B,IAAiBuK,UD2PF,EC1PX,IAAI/H,QAASsF,GAAY0C,WAAW1C,EAASyC,KD2PhD,MAAMJ,QAAyBpL,KAAKqL,YAAYrI,EAAS,SAiBzD,IAAKwE,EAKD,MAAM,IAAI9H,EAAa,6BAA8B,CACjDsC,KE1RQA,EF0RYoJ,EAAiBpJ,IEzRlC,IAAImC,IAAIuH,OAAO1J,GAAMK,SAASF,MAG/BA,KAAKwJ,QAAQ,IAAIC,OAAO,IAAIvJ,SAASD,UAAW,OAJ1CJ,MF6RhB,MAAM6J,QAAwB7L,KAAK8L,EAA2BtE,GAC9D,IAAKqE,EAKD,OAAO,EAEX,MAAMlL,UAAEA,EAASwK,aAAEA,GAAiBnL,KAAKyJ,EACnCsC,QAAchN,KAAKwM,OAAOS,KAAKrL,GAC/BsL,EAAyBjM,KAAKqK,YAAY,kBAC1C6B,EAAcD,QJtR5BjH,eAAsC+G,EAAO/I,EAASyF,EAAc0C,GAChE,MAAMgB,EAAqB5D,EAAYvF,EAAQhB,IAAKyG,GAEpD,GAAIzF,EAAQhB,MAAQmK,EAChB,OAAOJ,EAAMrK,MAAMsB,EAASmI,GAGhC,MAAMiB,EAAclL,OAAOsI,OAAOtI,OAAOsI,OAAO,CAAA,EAAI2B,GAAe,CAAEkB,cAAc,IAC7EC,QAAkBP,EAAM5K,KAAK6B,EAASoJ,GAC5C,IAAK,MAAMjG,KAAYmG,EAEnB,GAAIH,IADwB5D,EAAYpC,EAASnE,IAAKyG,GAElD,OAAOsD,EAAMrK,MAAMyE,EAAUgF,EAIzC,CIuQoBoB,CAIRR,EAAOX,EAAiBzD,QAAS,CAAC,mBAAoBwD,GACpD,KAKN,UACUY,EAAMS,IAAIpB,EAAkBa,EAAyBJ,EAAgBlE,QAAUkE,EACxF,CACD,MAAOzD,GACH,GAAIA,aAAiBzI,MAKjB,KAHmB,uBAAfyI,EAAMnI,YGhT1B+E,iBAKI,IAAK,MAAM6F,KAAY7B,QACb6B,GAQd,CHmS0B4B,GAEJrE,CAEd,CACA,IAAK,MAAMyC,KAAY7K,KAAKuK,iBAAiB,wBACnCM,EAAS,CACXlK,YACAuL,cACAQ,YAAab,EAAgBlE,QAC7B3E,QAASoI,EACTrI,MAAO/C,KAAK+C,QAGpB,OAAO,CACX,CAYA,iBAAMsI,CAAYrI,EAASiH,GACvB,MAAMhJ,EAAM,GAAG+B,EAAQhB,SAASiI,IAChC,IAAKjK,KAAKuJ,EAAWtI,GAAM,CACvB,IAAImK,EAAmBpI,EACvB,IAAK,MAAM6H,KAAY7K,KAAKuK,iBAAiB,sBACzCa,EAAmBlC,QAAgB2B,EAAS,CACxCZ,OACAjH,QAASoI,EACTrI,MAAO/C,KAAK+C,MAEZwB,OAAQvE,KAAKuE,UAGrBvE,KAAKuJ,EAAWtI,GAAOmK,CAC3B,CACA,OAAOpL,KAAKuJ,EAAWtI,EAC3B,CAQAoJ,WAAAA,CAAYpK,GACR,IAAK,MAAM8J,KAAU/J,KAAKyJ,EAAUI,QAChC,GAAI5J,KAAQ8J,EACR,OAAO,EAGf,OAAO,CACX,CAiBA,kBAAMe,CAAa7K,EAAM0I,GACrB,IAAK,MAAMkC,KAAY7K,KAAKuK,iBAAiBtK,SAGnC4K,EAASlC,EAEvB,CAUA,iBAAC4B,CAAiBtK,GACd,IAAK,MAAM8J,KAAU/J,KAAKyJ,EAAUI,QAChC,GAA4B,mBAAjBE,EAAO9J,GAAsB,CACpC,MAAM2G,EAAQ5G,KAAK8J,EAAgBnF,IAAIoF,GACjC4C,EAAoBhE,IACtB,MAAMiE,EAAgB1L,OAAOsI,OAAOtI,OAAOsI,OAAO,CAAA,EAAIb,GAAQ,CAAE/B,UAGhE,OAAOmD,EAAO9J,GAAM2M,UAElBD,CACV,CAER,CAcA5I,SAAAA,CAAU+E,GAEN,OADA9I,KAAK2J,EAAwBlE,KAAKqD,GAC3BA,CACX,CAWA,iBAAM+D,GACF,IAAI/D,EACJ,KAAQA,EAAU9I,KAAK2J,EAAwBmD,eACrChE,CAEd,CAKAiE,OAAAA,GACI/M,KAAK0J,EAAiBX,QAAQ,KAClC,CAWA,OAAM+C,CAA2BtE,GAC7B,IAAIqE,EAAkBrE,EAClBwF,GAAc,EAClB,IAAK,MAAMnC,KAAY7K,KAAKuK,iBAAiB,mBAQzC,GAPAsB,QACWhB,EAAS,CACZ7H,QAAShD,KAAKgD,QACdwE,SAAUqE,EACV9I,MAAO/C,KAAK+C,cACTsC,EACX2H,GAAc,GACTnB,EACD,MAwBR,OArBKmB,GACGnB,GAA8C,MAA3BA,EAAgB/D,SACnC+D,OAAkBxG,GAmBnBwG,CACX,EIhfJ,MAAMoB,EAuBFrN,WAAAA,CAAY0J,EAAU,IAQlBtJ,KAAKW,UAAYI,EAA0BuI,EAAQ3I,WAQnDX,KAAK6J,QAAUP,EAAQO,SAAW,GAQlC7J,KAAK4K,aAAetB,EAAQsB,aAQ5B5K,KAAKmL,aAAe7B,EAAQ6B,YAChC,CAoBA3J,MAAAA,CAAO8H,GACH,MAAO4D,GAAgBlN,KAAKmN,UAAU7D,GACtC,OAAO4D,CACX,CAuBAC,SAAAA,CAAU7D,GAEFA,aAAmBY,aACnBZ,EAAU,CACNvG,MAAOuG,EACPtG,QAASsG,EAAQtG,UAGzB,MAAMD,EAAQuG,EAAQvG,MAChBC,EAAqC,iBAApBsG,EAAQtG,QACzB,IAAIc,QAAQwF,EAAQtG,SACpBsG,EAAQtG,QACRuB,EAAS,WAAY+E,EAAUA,EAAQ/E,YAASc,EAChD9D,EAAU,IAAI6H,EAAgBpJ,KAAM,CAAE+C,QAAOC,UAASuB,WACtD2I,EAAelN,KAAKoN,EAAa7L,EAASyB,EAASD,GAGzD,MAAO,CAACmK,EAFYlN,KAAKqN,EAAeH,EAAc3L,EAASyB,EAASD,GAG5E,CACA,OAAMqK,CAAa7L,EAASyB,EAASD,GAEjC,IAAIyE,QADEjG,EAAQuJ,aAAa,mBAAoB,CAAE/H,QAAOC,YAExD,IAKI,GAJAwE,QAAiBxH,KAAKsN,EAAQtK,EAASzB,IAIlCiG,GAA8B,UAAlBA,EAASlE,KACtB,MAAM,IAAI5D,EAAa,cAAe,CAAEsC,IAAKgB,EAAQhB,KAE5D,CACD,MAAOoG,GACH,GAAIA,aAAiBzI,MACjB,IAAK,MAAMkL,KAAYtJ,EAAQgJ,iBAAiB,mBAE5C,GADA/C,QAAiBqD,EAAS,CAAEzC,QAAOrF,QAAOC,YACtCwE,EACA,MAIZ,IAAKA,EACD,MAAMY,CAOd,CACA,IAAK,MAAMyC,KAAYtJ,EAAQgJ,iBAAiB,sBAC5C/C,QAAiBqD,EAAS,CAAE9H,QAAOC,UAASwE,aAEhD,OAAOA,CACX,CACA,OAAM6F,CAAeH,EAAc3L,EAASyB,EAASD,GACjD,IAAIyE,EACAY,EACJ,IACIZ,QAAiB0F,CACpB,CACD,MAAO9E,GAGH,CAEJ,UACU7G,EAAQuJ,aAAa,oBAAqB,CAC5C/H,QACAC,UACAwE,mBAEEjG,EAAQsL,aACjB,CACD,MAAOU,GACCA,aAA0B5N,QAC1ByI,EAAQmF,EAEhB,CAQA,SAPMhM,EAAQuJ,aAAa,qBAAsB,CAC7C/H,QACAC,UACAwE,WACAY,MAAOA,IAEX7G,EAAQwL,UACJ3E,EACA,MAAMA,CAEd,ECtLJ,MAAMoF,UAAyBP,EAkB3BrN,WAAAA,CAAY0J,EAAU,IAClBA,EAAQ3I,UAAYI,EAA2BuI,EAAQ3I,WACvDZ,MAAMuJ,GACNtJ,KAAKyN,GAC6B,IAA9BnE,EAAQoE,kBAKZ1N,KAAK6J,QAAQpE,KAAK+H,EAAiBG,uCACvC,CAQA,OAAML,CAAQtK,EAASzB,GACnB,MAAMiG,QAAiBjG,EAAQ2J,WAAWlI,GAC1C,OAAIwE,IAKAjG,EAAQwB,OAAgC,YAAvBxB,EAAQwB,MAAMO,WAClBtD,KAAK4N,EAAe5K,EAASzB,SAIjCvB,KAAK6N,EAAa7K,EAASzB,GAC5C,CACA,OAAMsM,CAAa7K,EAASzB,GACxB,IAAIiG,EACJ,MAAMjD,EAAUhD,EAAQgD,QAAU,GAElC,IAAIvE,KAAKyN,EAuCL,MAAM,IAAI/N,EAAa,yBAA0B,CAC7CiB,UAAWX,KAAKW,UAChBqB,IAAKgB,EAAQhB,MAzCQ,CAMzB,MAAM8L,EAAsBvJ,EAAOwJ,UAC7BC,EAAqBhL,EAAQ+K,UAC7BE,GAAuBD,GAAsBA,IAAuBF,EAG1EtG,QAAiBjG,EAAQyI,MAAM,IAAIlG,QAAQd,EAAS,CAChD+K,UAA4B,YAAjB/K,EAAQiH,KACb+D,GAAsBF,OACtBzI,KASNyI,GACAG,GACiB,YAAjBjL,EAAQiH,OACRjK,KAAKkO,UACmB3M,EAAQ0J,SAASjI,EAASwE,EAASG,SAQnE,CAuBA,OAAOH,CACX,CACA,OAAMoG,CAAe5K,EAASzB,GAC1BvB,KAAKkO,IACL,MAAM1G,QAAiBjG,EAAQyI,MAAMhH,GAIrC,UADwBzB,EAAQ0J,SAASjI,EAASwE,EAASG,SAIvD,MAAM,IAAIjI,EAAa,0BAA2B,CAC9CsC,IAAKgB,EAAQhB,IACb8F,OAAQN,EAASM,SAGzB,OAAON,CACX,CA4BA0G,CAAAA,GACI,IAAIC,EAAqB,KACrBC,EAA6B,EACjC,IAAK,MAAO9L,EAAOyH,KAAW/J,KAAK6J,QAAQwE,UAEnCtE,IAAWyD,EAAiBG,yCAI5B5D,IAAWyD,EAAiBc,oCAC5BH,EAAqB7L,GAErByH,EAAOwE,iBACPH,KAG2B,IAA/BA,EACApO,KAAK6J,QAAQpE,KAAK+H,EAAiBc,mCAE9BF,EAA6B,GAA4B,OAAvBD,GAEvCnO,KAAK6J,QAAQhE,OAAOsI,EAAoB,EAGhD,EAEJX,EAAiBc,kCAAoC,CACjDtJ,gBAAqBuJ,OAAC/G,SAAEA,MACfA,GAAYA,EAASM,QAAU,IACzB,KAEJN,GAGfgG,EAAiBG,uCAAyC,CACtD3I,gBAAqBuJ,OAAC/G,SAAEA,KACbA,EAASgH,iBAAmBjH,EAAaC,GAAYA,GCnMpE,MAAMiH,EAWF7O,WAAAA,EAAYe,UAAEA,EAASkJ,QAAEA,EAAU,GAAE6D,kBAAEA,GAAoB,GAAU,IACjE1N,KAAK0O,EAAmB,IAAIhM,IAC5B1C,KAAK2O,EAAoB,IAAIjM,IAC7B1C,KAAK4O,EAA0B,IAAIlM,IACnC1C,KAAKyJ,EAAY,IAAI+D,EAAiB,CAClC7M,UAAWI,EAA2BJ,GACtCkJ,QAAS,IACFA,EACH,IAAI7C,EAAuB,CAAEC,mBAAoBjH,QAErD0N,sBAGJ1N,KAAK6O,QAAU7O,KAAK6O,QAAQC,KAAK9O,MACjCA,KAAK+O,SAAW/O,KAAK+O,SAASD,KAAK9O,KACvC,CAKA,YAAIqJ,GACA,OAAOrJ,KAAKyJ,CAChB,CAWArJ,QAAAA,CAASiO,GACLrO,KAAKgP,eAAeX,GACfrO,KAAKiP,IACNlQ,KAAK+D,iBAAiB,UAAW9C,KAAK6O,SACtC9P,KAAK+D,iBAAiB,WAAY9C,KAAK+O,UACvC/O,KAAKiP,GAAkC,EAE/C,CAQAD,cAAAA,CAAeX,GASX,MAAMa,EAAkB,GACxB,IAAK,MAAMrL,KAASwK,EAAS,CAEJ,iBAAVxK,EACPqL,EAAgBzJ,KAAK5B,GAEhBA,QAA4BwB,IAAnBxB,EAAMuC,UACpB8I,EAAgBzJ,KAAK5B,EAAM7B,KAE/B,MAAMmE,SAAEA,EAAQnE,IAAEA,GAAQiE,EAAepC,GACnCsL,EAA6B,iBAAVtL,GAAsBA,EAAMuC,SAAW,SAAW,UAC3E,GAAIpG,KAAK0O,EAAiBhK,IAAI1C,IAC1BhC,KAAK0O,EAAiB/J,IAAI3C,KAASmE,EACnC,MAAM,IAAIzG,EAAa,wCAAyC,CAC5D0P,WAAYpP,KAAK0O,EAAiB/J,IAAI3C,GACtCqN,YAAalJ,IAGrB,GAAqB,iBAAVtC,GAAsBA,EAAMkK,UAAW,CAC9C,GAAI/N,KAAK4O,EAAwBlK,IAAIyB,IACjCnG,KAAK4O,EAAwBjK,IAAIwB,KAActC,EAAMkK,UACrD,MAAM,IAAIrO,EAAa,4CAA6C,CAChEsC,QAGRhC,KAAK4O,EAAwBrJ,IAAIY,EAAUtC,EAAMkK,UACrD,CAGA,GAFA/N,KAAK0O,EAAiBnJ,IAAIvD,EAAKmE,GAC/BnG,KAAK2O,EAAkBpJ,IAAIvD,EAAKmN,GAC5BD,EAAgB3P,OAAS,EAAG,CAC5B,MAAM+P,EACF,qDAASJ,EAAgBpO,KAAK,8EAK9ByO,QAAQC,KAAKF,EAKrB,CACJ,CACJ,CAWAT,OAAAA,CAAQ9L,GAGJ,OAAOgB,EAAUhB,EAAOiC,UACpB,MAAMyK,EAAsB,IAAIjJ,EAChCxG,KAAKqJ,SAASQ,QAAQpE,KAAKgK,GAG3B,IAAK,MAAOzN,EAAKmE,KAAanG,KAAK0O,EAAkB,CACjD,MAAMX,EAAY/N,KAAK4O,EAAwBjK,IAAIwB,GAC7CgJ,EAAYnP,KAAK2O,EAAkBhK,IAAI3C,GACvCgB,EAAU,IAAIc,QAAQ9B,EAAK,CAC7B+L,YACAhC,MAAOoD,EACPO,YAAa,sBAEXjM,QAAQC,IAAI1D,KAAKqJ,SAAS8D,UAAU,CACtC5I,OAAQ,CAAE4B,YACVnD,UACAD,UAER,CACA,MAAM0D,YAAEA,EAAWC,eAAEA,GAAmB+I,EAIxC,MAAO,CAAEhJ,cAAaC,mBAE9B,CAWAqI,QAAAA,CAAShM,GAGL,OAAOgB,EAAUhB,EAAOiC,UACpB,MAAM+G,QAAchN,KAAKwM,OAAOS,KAAKhM,KAAKqJ,SAAS1I,WAC7CgP,QAAgC5D,EAAM5K,OACtCyO,EAAoB,IAAI3G,IAAIjJ,KAAK0O,EAAiBmB,UAClDC,EAAc,GACpB,IAAK,MAAM9M,KAAW2M,EACbC,EAAkBlL,IAAI1B,EAAQhB,aACzB+J,EAAMnD,OAAO5F,GACnB8M,EAAYrK,KAAKzC,EAAQhB,MAMjC,MAAO,CAAE8N,gBAEjB,CAOAC,kBAAAA,GACI,OAAO/P,KAAK0O,CAChB,CAOAsB,aAAAA,GACI,MAAO,IAAIhQ,KAAK0O,EAAiBvN,OACrC,CAUAiG,iBAAAA,CAAkBpF,GACd,MAAMkE,EAAY,IAAI/B,IAAInC,EAAKK,SAASF,MACxC,OAAOnC,KAAK0O,EAAiB/J,IAAIuB,EAAU/D,KAC/C,CAMA8N,uBAAAA,CAAwB9J,GACpB,OAAOnG,KAAK4O,EAAwBjK,IAAIwB,EAC5C,CAmBA,mBAAM+J,CAAclN,GAChB,MAAMhB,EAAMgB,aAAmBc,QAAUd,EAAQhB,IAAMgB,EACjDmD,EAAWnG,KAAKoH,kBAAkBpF,GACxC,GAAImE,EAAU,CAEV,aADoBpH,KAAKwM,OAAOS,KAAKhM,KAAKqJ,SAAS1I,YACtCe,MAAMyE,EACvB,CAEJ,CASAgK,uBAAAA,CAAwBnO,GACpB,MAAMmE,EAAWnG,KAAKoH,kBAAkBpF,GACxC,IAAKmE,EACD,MAAM,IAAIzG,EAAa,oBAAqB,CAAEsC,QAElD,OAAQsH,IACJA,EAAQtG,QAAU,IAAIc,QAAQ9B,GAC9BsH,EAAQ/E,OAASrD,OAAOsI,OAAO,CAAErD,YAAYmD,EAAQ/E,QAC9CvE,KAAKqJ,SAAS7H,OAAO8H,GAEpC,ECxRJ,IAAIrC,EAKG,MAAMmJ,EAAgCA,KACpCnJ,IACDA,EAAqB,IAAIwH,GAEtBxH,GCGX,MAAMoJ,UAAsB5O,EAiBxB7B,WAAAA,CAAYqH,EAAoBqC,GAe5BvJ,MAdc2B,EAAGsB,cACb,MAAMsN,EAAkBrJ,EAAmB8I,qBAC3C,IAAK,MAAMQ,KCtBhB,UAAgCvO,GAAKwO,4BAAEA,EAA8B,CAAC,QAAS,YAAWC,eAAEA,EAAiB,aAAYC,UAAEA,GAAY,EAAIC,gBAAEA,GAAqB,IACrK,MAAMzK,EAAY,IAAI/B,IAAInC,EAAKK,SAASF,MACxC+D,EAAU0K,KAAO,SACX1K,EAAU/D,KAChB,MAAM0O,ECHH,SAAmC3K,EAAWsK,EAA8B,IAG/E,IAAK,MAAMM,IAAa,IAAI5K,EAAUK,aAAapF,QAC3CqP,EAA4BO,KAAMhP,GAAWA,EAAOiP,KAAKF,KACzD5K,EAAUK,aAAaqC,OAAOkI,GAGtC,OAAO5K,CACX,CDNoC+K,CAA0B/K,EAAWsK,GAErE,SADMK,EAAwB1O,KAC1BsO,GAAkBI,EAAwBK,SAASC,SAAS,KAAM,CAClE,MAAMC,EAAe,IAAIjN,IAAI0M,EAAwB1O,MACrDiP,EAAaF,UAAYT,QACnBW,EAAajP,IACvB,CACA,GAAIuO,EAAW,CACX,MAAMW,EAAW,IAAIlN,IAAI0M,EAAwB1O,MACjDkP,EAASH,UAAY,cACfG,EAASlP,IACnB,CACA,GAAIwO,EAAiB,CACjB,MAAMW,EAAiBX,EAAgB,CAAE3O,IAAKkE,IAC9C,IAAK,MAAMqL,KAAgBD,QACjBC,EAAapP,IAE3B,CACJ,CDAsCqP,CAAsBxO,EAAQhB,IAAKsH,GAAU,CACnE,MAAMnD,EAAWmK,EAAgB3L,IAAI4L,GACrC,GAAIpK,EAAU,CAEV,MAAO,CAAEA,WAAU4H,UADD9G,EAAmBgJ,wBAAwB9J,GAEjE,CACJ,GAMSc,EAAmBoC,SACpC,EG7BJ,SAASoI,EAASnI,GACd,MAAMrC,EAAqBmJ,KCK/B,SAAuBsB,EAASnQ,EAASI,GACrC,IAAI6C,EACJ,GAAuB,iBAAZkN,EAAsB,CAC7B,MAAMC,EAAa,IAAIxN,IAAIuN,EAASrP,SAASF,MAkC7CqC,EAAQ,IAAI/C,EAZUmQ,EAAG5P,SASdA,EAAIG,OAASwP,EAAWxP,KAGFZ,EAASI,EAC9C,MACK,GAAI+P,aAAmB9F,OAExBpH,EAAQ,IAAI1C,EAAY4P,EAASnQ,EAASI,QAEzC,GAAuB,mBAAZ+P,EAEZlN,EAAQ,IAAI/C,EAAMiQ,EAASnQ,EAASI,OAEnC,MAAI+P,aAAmBjQ,GAIxB,MAAM,IAAI/B,EAAa,yBAA0B,CAC7CmS,WAAY,kBACZC,SAAU,gBACVhB,UAAW,YANftM,EAAQkN,CAQZ,ExBrEK5L,IACDA,EAAgB,IAAItD,EAEpBsD,EAAcjD,mBACdiD,EAAc1C,oBAEX0C,GwBiEON,cAAchB,EAEhC,CD/DIgB,CADsB,IAAI6K,EAAcpJ,EAAoBqC,GAEhE,oBELA,SAA0B+E,EAAS/E,ICInC,SAAkB+E,GACa+B,IACRhQ,SAASiO,EAChC,CDNIjO,CAASiO,GACToD,EAASnI,EACb,wBECA,SAA6BxJ,GA6BzBiB,EAAyBjB,EAC7B"}&rocket::state::Staterocket::state::Staterocket::serde::json::Jsonaw_models::info::Infoserver_infofontsstatic/api/0/info/api/0/buckets/api/0/query/api/0/import/api/0/export/api/0/settingsjsoctet-streamapplication/octet-streamcss\n │ │ SizeLimitwhole_streamper_fieldfield_mapShieldStateinnerExtensionCorsScopeApiKeyCheckHostCheckstream_iddependencyan empty stream (vacuous)a multipart form fieldrocket::data::data_stream::_rocket::data::data_streamflagspad_lenassertion failed: cell.set(value)Reseterror_codedependency_idweightis_exclusiveParseErrorGoAwayReasonIoBadCharBadEndLibraryRemotea Display implementation returned an error unexpectedlyErrorParsingErrorEmptyQueryVariableNotDefinedMathErrorInvalidTypeInvalidFunctionParametersTimeIntervalErrorBucketNotFoundRegexCompileErrorConstraintssize_limitallowed_fieldsParse()there │ │ [1323f38] ctrlcsignalsgracemercyforce___figment_relative_metadata_path___figment_relative_pathaddressworkersmax_blockingidentlimits___figment_relative_path_bufkeep_alivelog_levelip_headercli_colorsdefaultstruct Config with 12 elementsstruct Shutdown with 5 elementsstruct RelativePathBuf with 2 elements___figment_tagged_itemvisit_value called before visit_keynormaldebugoffcalled `Result::unwrap()` on an `Err` valueErrorFieldSet corrupted (this is a bug)poll_completewritinginvalid framereclaimedwasn't expecting a frame to reclaimnot reclaiming frame for cancelled streamremoving dangling stream from pending_senddata framestream capacity is 0sending data frameaw_server::endpoints::ServerStateinvalid WINDOW_UPDATE frameunexpected flow control stateassertion failed: stream.state.is_closed()too_many_internal_resets │ │ [1324268] Failed to encode event duration for dedupaw_server::endpoints::bucket::_aw_server::endpoints::bucketRequest guard `& State < ServerState >` is forwarding.aw_server::endpoints::import::_aw_server::endpoints::importData guard `Json < BucketsExport >` is forwarding.Internal invariant broken: dyn param not found.Please report this to the Rocket issue tracker.https://github.com/rwf2/Rocket/issuesData guard `Json < Bucket >` is forwarding.startendlimitQuery string failed to match route declaration.Data guard `Json < Vec < Event > >` is forwarding.pulsetimeData guard `Json < Event >` is forwarding.Data guard `Form < ImportForm >` is forwarding.buckets_methodrocket::statecalled `Result::unwrap()` on an `Err` valueaw-server/src/endpoints/bucket.rs&rocket::state::Staterocket::state::Statecore::result::Result>, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Json>std::collections::hash::map::HashMapalloc::string::Stringaw_models::bucket::Bucketaw_server::endpoints::util::HttpErrorJsonbuckets_get/applicationaw-server/src/endpoints/import.rsrocket::serde::json::Jsoncore::result::Result<(), aw_server::endpoints::util::HttpErrorJson>()bucket_import_jsonstrrocket::serde::json::Jsonbucket_new/core::option::Optioncore::option::Optionu64core::result::Result>, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Json>alloc::vec::Vecaw_models::event::Eventbucket_events_get//events?&&i64core::result::Result, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Jsonbucket_events_get_single//events/?<_unused..>internal error: entered unreachable codeinvalid keybucket_events_create//eventscapacity overflowf64bucket_events_heartbeat//heartbeat?core::result::Result, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Jsonbucket_event_count//events/countCannot convert indexed str to str without base string!bucket_events_delete_by_id//events/core::result::Resultaw_server::endpoints::util::BucketsExportRocketbucket_export//exportbucket_deletecore::result::Result, aw_server::endpoints::util::HttpErrorJson>bucket_getmultipartform-datarocket::form::form::Formaw_server::endpoints::import::ImportFormbucket_import_form │ │ [1324eb8] http://127.0.0.1:27180 │ │ [1324ed0] http://localhost:27180 │ ├── readelf --wide --decompress --hex-dump=.data.rel.ro {} │ │ @@ -1905,16 +1905,16 @@ │ │ 0x01e18a50 90b2a76a 00000000 01000000 00000000 ...j............ │ │ 0x01e18a60 90b2a76a 00000000 c13eb6f9 c6406082 ...j.....>...@`. │ │ 0x01e18a70 1ef9c8b9 8176ee34 5814a08a 4be39b2f .....v.4X...K../ │ │ 0x01e18a80 c8aa813e 5920010c ffffffff e1ca3f01 ...>Y ........?. │ │ 0x01e18a90 24160000 00000000 05e13f01 15000000 $.........?..... │ │ 0x01e18aa0 01000000 00000000 90b2a76a 00000000 ...........j.... │ │ 0x01e18ab0 01000000 00000000 90b2a76a 00000000 ...........j.... │ │ - 0x01e18ac0 9fd9d1aa cd69402e b9807f2e 5e76840e .....i@.....^v.. │ │ - 0x01e18ad0 6cc383df 114e991e d6d9be5c 1b14e320 l....N.....\... │ │ + 0x01e18ac0 7bdaacc7 25b19654 5d35edf0 4bb99faa {...%..T]5..K... │ │ + 0x01e18ad0 6c0b7966 91d2735c 9333a2bb 8eb8a198 l.yf..s\.3...... │ │ 0x01e18ae0 ffffffff 1ae13f01 c6320000 00000000 ......?..2...... │ │ 0x01e18af0 e0134001 13000000 01000000 00000000 ..@............. │ │ 0x01e18b00 90b2a76a 00000000 01000000 00000000 ...j............ │ │ 0x01e18b10 90b2a76a 00000000 20303f36 731bff3a ...j.... 0?6s..: │ │ 0x01e18b20 555ee80b a80b28e1 c477ab33 4de8aa7d U^....(..w.3M..} │ │ 0x01e18b30 f618f6fc ef7b58e0 ffffffff f3134001 .....{X.......@. │ │ 0x01e18b40 42380000 00000000 354c4001 17000000 B8......5L@..... ├── lib/armeabi-v7a/libaw_server.so │ ├── strings --all --bytes=8 {} │ │ @@ -7270,15 +7270,15 @@ │ │ d="m 400,452.3622 33,-37" │ │ id="path4386" │ │ inkscape:connector-curvature="0" │ │ sodipodi:nodetypes="cc" /> │ │ manifest.json{"name":"ActivityWatch","short_name":"ActivityWatch","theme_color":"#4DBA87","icons":[{"src":"logo.png","sizes":"512x512","type":"image/png"}],"start_url":".","display":"standalone","background_color":"#000000"}service-worker.jsif(!self.define){let s,l={};const n=(n,r)=>(n=new URL(n+".js",r).href,l[n]||new Promise(l=>{if("document"in self){const s=document.createElement("script");s.src=n,s.onload=l,document.head.appendChild(s)}else s=n,importScripts(n),l()}).then(()=>{let s=l[n];if(!s)throw new Error(`Module ${n} didn │ │ t register its module`);return s}));self.define=(r,i)=>{const u=s||("document"in self?document.currentScript.src:"")||location.href;if(l[u])return;let e={};const c=s=>n(s,u),o={module:{uri:u},exports:e,require:c};l[u]=Promise.all(r.map(s=>o[s]||c(s))).then(s=>(i(...s),e))}}define(["./workbox-711a2045"],function(s){"use strict";s.setCacheNameDetails({prefix:"aw-webui"}),self.addEventListener("message",s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()}),s.precacheAndRoute([{url:"/css/1523.3af55662.css",revision:null},{url:"/css/1588.bd0bb219.css",revision:null},{url:"/css/1814.63a247f6.css",revision:null},{url:"/css/185.be8e4b9a.css",revision:null},{url:"/css/2233.e1bcf8fb.css",revision:null},{url:"/css/2352.af75f974.css",revision:null},{url:"/css/265.a9f5afc4.css",revision:null},{url:"/css/2921.0e21fe03.css",revision:null},{url:"/css/2970.0e21fe03.css",revision:null},{url:"/css/3510.cd69135e.css",revision:null},{url:"/css/3593.0e21fe03.css",revision:null},{url:"/css/4067.dcf2e439.css",revision:null},{url:"/css/428.fdf3fbd9.css",revision:null},{url:"/css/4528.ec40e91d.css",revision:null},{url:"/css/495.0e21fe03.css",revision:null},{url:"/css/5480.8f4f9eec.css",revision:null},{url:"/css/579.0a541622.css",revision:null},{url:"/css/5812.38cfb433.css",revision:null},{url:"/css/5966.c7b9176f.css",revision:null},{url:"/css/6218.0e21fe03.css",revision:null},{url:"/css/6531.22cc2d8b.css",revision:null},{url:"/css/663.692259ab.css",revision:null},{url:"/css/6652.0e21fe03.css",revision:null},{url:"/css/6741.67d99f8a.css",revision:null},{url:"/css/7496.0e21fe03.css",revision:null},{url:"/css/7561.280efd83.css",revision:null},{url:"/css/8081.e565b3f9.css",revision:null},{url:"/css/8123.25aa2d67.css",revision:null},{url:"/css/8327.64666c05.css",revision:null},{url:"/css/8596.36d78776.css",revision:null},{url:"/css/8599.3a3e658b.css",revision:null},{url:"/css/8665.f93fd221.css",revision:null},{url:"/css/8932.0e21fe03.css",revision:null},{url:"/css/8948.643cd595.css",revision:null},{url:"/css/9305.3e60e51d.css",revision:null},{url:"/css/9399.af65a5d7.css",revision:null},{url:"/css/chunk-vendors.5a33e728.css",revision:null},{url:"/css/index.08a8e1ac.css",revision:null},{url:"/dark.css",revision:"8bc8c75d670bba7c6ca0122c39beb964"},{url:"/fonts/varela-round-latin-400.72c5f1d4.woff2",revision:null},{url:"/fonts/varela-round-latin-400.ff576336.woff",revision:null},{url:"/index.html",revision:"7243701e68bb304ba443f64fa51fdf2c"},{url:"/js/1064.703d75f1.js",revision:null},{url:"/js/1172.0f4182b3.js",revision:null},{url:"/js/1523.12118690.js",revision:null},{url:"/js/1588.aa9f3f15.js",revision:null},{url:"/js/1814.d46e9bc8.js",revision:null},{url:"/js/185.62497fc3.js",revision:null},{url:"/js/2230.3215567d.js",revision:null},{url:"/js/2233.c2115b33.js",revision:null},{url:"/js/2352.1ad93c6c.js",revision:null},{url:"/js/2374.dc0764c4.js",revision:null},{url:"/js/2535.5fc7abe0.js",revision:null},{url:"/js/265.f78fd35d.js",revision:null},{url:"/js/2921.f2fbc226.js",revision:null},{url:"/js/2970.077864a1.js",revision:null},{url:"/js/2972.abaf9c34.js",revision:null},{url:"/js/3377.b843e352.js",revision:null},{url:"/js/3510.d0330312.js",revision:null},{url:"/js/3593.becd60e0.js",revision:null},{url:"/js/3837.aa23cf66.js",revision:null},{url:"/js/4033.1ef6ffc4.js",revision:null},{url:"/js/4067.341ed2f6.js",revision:null},{url:"/js/428.eac37ee4.js",revision:null},{url:"/js/4513.debf088d.js",revision:null},{url:"/js/4516.7aacfe2f.js",revision:null},{url:"/js/4528.d729566f.js",revision:null},{url:"/js/495.a6e46481.js",revision:null},{url:"/js/5013.56cf47a8.js",revision:null},{url:"/js/5034.3fc015f7.js",revision:null},{url:"/js/5480.a2d6d5cf.js",revision:null},{url:"/js/5649.f2a750a0.js",revision:null},{url:"/js/579.b909463e.js",revision:null},{url:"/js/5793.6b12a4f9.js",revision:null},{url:"/js/5803.4b20c165.js",revision:null},{url:"/js/5812.6233be92.js",revision:null},{url:"/js/5966.66ce7a50.js",revision:null},{url:"/js/6218.e53707fb.js",revision:null},{url:"/js/6514.43b09bcb.js",revision:null},{url:"/js/6531.e78f2219.js",revision:null},{url:"/js/663.97e7e4d3.js",revision:null},{url:"/js/6652.0a490cb9.js",revision:null},{url:"/js/6741.5fd675ba.js",revision:null},{url:"/js/7496.11fb35e2.js",revision:null},{url:"/js/7561.e7ca49b3.js",revision:null},{url:"/js/7634.34f19064.js",revision:null},{url:"/js/8081.a2aa8edc.js",revision:null},{url:"/js/8123.809ec791.js",revision:null},{url:"/js/8191.6a088066.js",revision:null},{url:"/js/8327.685ff366.js",revision:null},{url:"/js/8376.f63b6151.js",revision:null},{url:"/js/8596.0548d980.js",revision:null},{url:"/js/8599.46e04f48.js",revision:null},{url:"/js/8665.151a2c8a.js",revision:null},{url:"/js/8880.21fa7092.js",revision:null},{url:"/js/8932.31ef541c.js",revision:null},{url:"/js/8948.dd3c8695.js",revision:null},{url:"/js/901.21266bcc.js",revision:null},{url:"/js/9305.bd0d368f.js",revision:null},{url:"/js/9399.4c9cf5be.js",revision:null},{url:"/js/9565.078d08a2.js",revision:null},{url:"/js/980.0cf8e040.js",revision:null},{url:"/js/chunk-vendors.4b5dc043.js",revision:null},{url:"/js/index.df4f8794.js",revision:null},{url:"/logo.png",revision:"3cbfce2efacc0dd8d09018233de4afa9"},{url:"/logo.svg",revision:"17fa81a8fc448f2c53f30514400a7c5c"},{url:"/manifest.json",revision:"f6c821dd0bf011176cfb914f2508764c"}],{})}); │ │ //# sourceMappingURL=service-worker.js.map │ │ -service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/f63145c24d48a4d85c5c0b1874c25749/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}}); │ │ +service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/9c2e57c370725548057d828ec0f51d15/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}}); │ │ //# sourceMappingURL=workbox-711a2045.js.map │ │ workbox-711a2045.js.map{"version":3,"file":"workbox-711a2045.js","sources":["node_modules/workbox-webpack-plugin/node_modules/workbox-core/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/messages/messageGenerator.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/WorkboxError.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheNames.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/constants.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/normalizeHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Route.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/RegExpRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Router.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/waitUntil.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/createCacheKey.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheInstallReportPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheCacheKeyPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/canConstructResponseFromBodyStream.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/copyResponse.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheMatchIgnoreParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/Deferred.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/quotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/StrategyHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/timeout.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/getFriendlyURL.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/Strategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheStrategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/getOrCreatePrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/generateURLVariations.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/removeIgnoredSearchParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/addRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/registerRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precache.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:core:6.5.4'] && _();\n}\ncatch (e) { }\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:routing:6.5.4'] && _();\n}\ncatch (e) { }\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}\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 '../_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 { 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 { 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>} 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 | 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|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 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 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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:6.5.4'] && _();\n}\ncatch (e) { }\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 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 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 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 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} ignoreParams\n * @return {Promise}\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:6.5.4'] && _();\n}\ncatch (e) { }\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}\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}\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} 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} `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}\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}\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}\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 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 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 { 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 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} [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}\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} 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}\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} [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}\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} [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} 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}\n */\n install(event) {\n // waitUntil returns Promise\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}\n */\n activate(event) {\n // waitUntil returns Promise\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} 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} 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}\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 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} [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","/*\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} 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 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 { 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 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} 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} [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\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 './_private/assert.js';\nimport { cacheNames } from './_private/cacheNames.js';\nimport { WorkboxError } from './_private/WorkboxError.js';\nimport './_version.js';\n/**\n * Modifies the default cache names used by the Workbox packages.\n * Cache names are generated as `--`.\n *\n * @param {Object} details\n * @param {Object} [details.prefix] The string to add to the beginning of\n * the precache and runtime cache names.\n * @param {Object} [details.suffix] The string to add to the end of\n * the precache and runtime cache names.\n * @param {Object} [details.precache] The cache name to use for precache\n * caching.\n * @param {Object} [details.runtime] The cache name to use for runtime caching.\n * @param {Object} [details.googleAnalytics] The cache name to use for\n * `workbox-google-analytics` caching.\n *\n * @memberof workbox-core\n */\nfunction setCacheNameDetails(details) {\n if (process.env.NODE_ENV !== 'production') {\n Object.keys(details).forEach((key) => {\n assert.isType(details[key], 'string', {\n moduleName: 'workbox-core',\n funcName: 'setCacheNameDetails',\n paramName: `details.${key}`,\n });\n });\n if ('precache' in details && details['precache'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'precache',\n value: details['precache'],\n });\n }\n if ('runtime' in details && details['runtime'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'runtime',\n value: details['runtime'],\n });\n }\n if ('googleAnalytics' in details &&\n details['googleAnalytics'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'googleAnalytics',\n value: details['googleAnalytics'],\n });\n }\n }\n cacheNames.updateDetails(details);\n}\nexport { setCacheNameDetails };\n"],"names":["self","_","e","messageGenerator","fallback","code","args","msg","length","JSON","stringify","WorkboxError","Error","constructor","errorCode","details","super","this","name","_cacheNameDetails","googleAnalytics","precache","prefix","runtime","suffix","registration","scope","_createCacheName","cacheName","filter","value","join","cacheNames","fn","key","Object","keys","eachCacheNameDetail","userCacheName","normalizeHandler","handler","handle","Route","match","method","setCatchHandler","catchHandler","RegExpRoute","regExp","url","result","exec","href","origin","location","index","slice","Router","_routes","Map","_defaultHandlerMap","routes","addFetchListener","addEventListener","event","request","responsePromise","handleRequest","respondWith","addCacheListener","data","type","payload","requestPromises","Promise","all","urlsToCache","map","entry","Request","waitUntil","ports","then","postMessage","URL","protocol","startsWith","sameOrigin","params","route","findMatchingRoute","has","get","err","reject","_catchHandler","catch","async","catchErr","matchResult","Array","isArray","undefined","setDefaultHandler","set","registerRoute","push","unregisterRoute","routeIndex","indexOf","splice","defaultRouter","asyncFn","returnPromise","createCacheKey","urlObject","cacheKey","revision","cacheKeyURL","originalURL","searchParams","PrecacheInstallReportPlugin","updatedURLs","notUpdatedURLs","handlerWillStart","state","originalRequest","cachedResponseWillBeUsed","cachedResponse","PrecacheCacheKeyPlugin","precacheController","cacheKeyWillBeUsed","_precacheController","getCacheKeyForURL","headers","supportStatus","copyResponse","response","modifier","clonedResponse","clone","responseInit","Headers","status","statusText","modifiedResponseInit","body","testResponse","Response","error","canConstructResponseFromBodyStream","blob","stripParams","fullURL","ignoreParams","strippedURL","param","delete","Deferred","promise","resolve","quotaErrorCallbacks","Set","toRequest","input","StrategyHandler","strategy","options","_cacheKeys","assign","_strategy","_handlerDeferred","_extendLifetimePromises","_plugins","plugins","_pluginStateMap","plugin","fetch","mode","FetchEvent","preloadResponse","possiblePreloadResponse","hasCallback","cb","iterateCallbacks","thrownErrorMessage","message","pluginFilteredRequest","fetchResponse","fetchOptions","callback","runCallbacks","fetchAndCachePut","responseClone","cachePut","cacheMatch","matchOptions","effectiveRequest","getCacheKey","multiMatchOptions","caches","ms","setTimeout","String","replace","RegExp","responseToCache","_ensureResponseSafeToCache","cache","open","hasCacheUpdateCallback","oldResponse","strippedRequestURL","keysOptions","ignoreSearch","cacheKeys","cacheMatchIgnoreParams","put","executeQuotaErrorCallbacks","newResponse","statefulCallback","statefulParam","doneWaiting","shift","destroy","pluginsUsed","Strategy","responseDone","handleAll","_getResponse","_awaitComplete","_handle","waitUntilError","PrecacheStrategy","_fallbackToNetwork","fallbackToNetwork","copyRedirectedCacheableResponsesPlugin","_handleInstall","_handleFetch","integrityInManifest","integrity","integrityInRequest","noIntegrityConflict","_useDefaultCacheabilityPluginIfNeeded","defaultPluginIndex","cacheWillUpdatePluginCount","entries","defaultPrecacheCacheabilityPlugin","cacheWillUpdate","redirected","PrecacheController","_urlsToCacheKeys","_urlsToCacheModes","_cacheKeysToIntegrities","install","bind","activate","addToCacheList","_installAndActiveListenersAdded","urlsToWarnAbout","cacheMode","firstEntry","secondEntry","warningMessage","console","warn","installReportPlugin","credentials","currentlyCachedRequests","expectedCacheKeys","values","deletedURLs","getURLsToCacheKeys","getCachedURLs","getIntegrityForCacheKey","matchPrecache","createHandlerBoundToURL","getOrCreatePrecacheController","PrecacheRoute","urlsToCacheKeys","possibleURL","ignoreURLParametersMatching","directoryIndex","cleanURLs","urlManipulation","hash","urlWithoutIgnoredParams","paramName","some","test","removeIgnoredSearchParams","pathname","endsWith","directoryURL","cleanURL","additionalURLs","urlToAttempt","generateURLVariations","addRoute","capture","captureUrl","matchCallback","moduleName","funcName"],"mappings":"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"}&rocket::state::Staterocket::state::Staterocket::serde::json::Jsonaw_models::info::Infoserver_infofontsstatic/api/0/info/api/0/buckets/api/0/query/api/0/import/api/0/export/api/0/settingsjsoctet-streamapplication/octet-streamcss │ │ SizeLimitwhole_streamper_fieldfield_mapShieldStateinnerExtensionCorsScopeApiKeyCheckHostCheckstream_iddependencyan empty stream (vacuous)a multipart form fieldrocket::data::data_stream::_rocket::data::data_streamflagspad_lenassertion failed: cell.set(value)Reseterror_codedependency_idweightis_exclusiveParseErrorGoAwayReasonIoBadCharBadEndLibraryRemotea Display implementation returned an error unexpectedlyErrorParsingErrorEmptyQueryVariableNotDefinedMathErrorInvalidTypeInvalidFunctionParametersTimeIntervalErrorBucketNotFoundRegexCompileErrorConstraintssize_limitallowed_fieldsParse()there │ │ ctrlcsignalsgracemercyforce___figment_relative_metadata_path___figment_relative_pathaddressworkersmax_blockingidentlimits___figment_relative_path_bufkeep_alivelog_levelip_headercli_colorsdefaultstruct Config with 12 elementsstruct Shutdown with 5 elementsstruct RelativePathBuf with 2 elements___figment_tagged_itemvisit_value called before visit_keynormaldebugoffcalled `Result::unwrap()` on an `Err` valueUnknownThreadDetachedWrongVersionAlreadyCreatedOtherErrorFieldSet corrupted (this is a bug)poll_completewritinginvalid framereclaimedwasn't expecting a frame to reclaimnot reclaiming frame for cancelled streamremoving dangling stream from pending_senddata framestream capacity is 0sending data frameaw_server::endpoints::ServerStateinvalid WINDOW_UPDATE frameunexpected flow control stateassertion failed: stream.state.is_closed()too_many_internal_resets │ │ Failed to encode event duration for dedupaw_server::endpoints::bucket::_aw_server::endpoints::bucketRequest guard `& State < ServerState >` is forwarding.aw_server::endpoints::import::_aw_server::endpoints::importData guard `Json < BucketsExport >` is forwarding.Internal invariant broken: dyn param not found.Please report this to the Rocket issue tracker.https://github.com/rwf2/Rocket/issuesData guard `Json < Bucket >` is forwarding.startendlimitQuery string failed to match route declaration.Data guard `Json < Vec < Event > >` is forwarding.pulsetimeData guard `Json < Event >` is forwarding.Data guard `Form < ImportForm >` is forwarding.buckets_methodrocket::statecalled `Result::unwrap()` on an `Err` valueaw-server/src/endpoints/bucket.rs&rocket::state::Staterocket::state::Statecore::result::Result>, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Json>std::collections::hash::map::HashMapalloc::string::Stringaw_models::bucket::Bucketaw_server::endpoints::util::HttpErrorJsonbuckets_get/applicationaw-server/src/endpoints/import.rsrocket::serde::json::Jsoncore::result::Result<(), aw_server::endpoints::util::HttpErrorJson>()bucket_import_jsonstrrocket::serde::json::Jsonbucket_new/core::option::Optioncore::option::Optionu64core::result::Result>, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Json>alloc::vec::Vecaw_models::event::Eventbucket_events_get//events?&&i64core::result::Result, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Jsonbucket_events_get_single//events/?<_unused..>internal error: entered unreachable codeinvalid keybucket_events_create//eventscapacity overflowf64bucket_events_heartbeat//heartbeat?core::result::Result, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Jsonbucket_event_count//events/countCannot convert indexed str to str without base string!bucket_events_delete_by_id//events/core::result::Resultaw_server::endpoints::util::BucketsExportRocketbucket_export//exportbucket_deletecore::result::Result, aw_server::endpoints::util::HttpErrorJson>bucket_getmultipartform-datarocket::form::form::Formaw_server::endpoints::import::ImportFormbucket_import_form │ │ http://127.0.0.1:27180 │ │ http://localhost:27180 │ ├── readelf --wide --decompress --string-dump=.rodata {} │ │ @@ -5975,15 +5975,15 @@ │ │ id="path4386"\n │ │ inkscape:connector-curvature="0"\n │ │ sodipodi:nodetypes="cc" />\n │ │ \n │ │ \n │ │ [12bcdf8] manifest.json{"name":"ActivityWatch","short_name":"ActivityWatch","theme_color":"#4DBA87","icons":[{"src":"logo.png","sizes":"512x512","type":"image/png"}],"start_url":".","display":"standalone","background_color":"#000000"}service-worker.jsif(!self.define){let s,l={};const n=(n,r)=>(n=new URL(n+".js",r).href,l[n]||new Promise(l=>{if("document"in self){const s=document.createElement("script");s.src=n,s.onload=l,document.head.appendChild(s)}else s=n,importScripts(n),l()}).then(()=>{let s=l[n];if(!s)throw new Error(`Module ${n} didn�t register its module`);return s}));self.define=(r,i)=>{const u=s||("document"in self?document.currentScript.src:"")||location.href;if(l[u])return;let e={};const c=s=>n(s,u),o={module:{uri:u},exports:e,require:c};l[u]=Promise.all(r.map(s=>o[s]||c(s))).then(s=>(i(...s),e))}}define(["./workbox-711a2045"],function(s){"use strict";s.setCacheNameDetails({prefix:"aw-webui"}),self.addEventListener("message",s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()}),s.precacheAndRoute([{url:"/css/1523.3af55662.css",revision:null},{url:"/css/1588.bd0bb219.css",revision:null},{url:"/css/1814.63a247f6.css",revision:null},{url:"/css/185.be8e4b9a.css",revision:null},{url:"/css/2233.e1bcf8fb.css",revision:null},{url:"/css/2352.af75f974.css",revision:null},{url:"/css/265.a9f5afc4.css",revision:null},{url:"/css/2921.0e21fe03.css",revision:null},{url:"/css/2970.0e21fe03.css",revision:null},{url:"/css/3510.cd69135e.css",revision:null},{url:"/css/3593.0e21fe03.css",revision:null},{url:"/css/4067.dcf2e439.css",revision:null},{url:"/css/428.fdf3fbd9.css",revision:null},{url:"/css/4528.ec40e91d.css",revision:null},{url:"/css/495.0e21fe03.css",revision:null},{url:"/css/5480.8f4f9eec.css",revision:null},{url:"/css/579.0a541622.css",revision:null},{url:"/css/5812.38cfb433.css",revision:null},{url:"/css/5966.c7b9176f.css",revision:null},{url:"/css/6218.0e21fe03.css",revision:null},{url:"/css/6531.22cc2d8b.css",revision:null},{url:"/css/663.692259ab.css",revision:null},{url:"/css/6652.0e21fe03.css",revision:null},{url:"/css/6741.67d99f8a.css",revision:null},{url:"/css/7496.0e21fe03.css",revision:null},{url:"/css/7561.280efd83.css",revision:null},{url:"/css/8081.e565b3f9.css",revision:null},{url:"/css/8123.25aa2d67.css",revision:null},{url:"/css/8327.64666c05.css",revision:null},{url:"/css/8596.36d78776.css",revision:null},{url:"/css/8599.3a3e658b.css",revision:null},{url:"/css/8665.f93fd221.css",revision:null},{url:"/css/8932.0e21fe03.css",revision:null},{url:"/css/8948.643cd595.css",revision:null},{url:"/css/9305.3e60e51d.css",revision:null},{url:"/css/9399.af65a5d7.css",revision:null},{url:"/css/chunk-vendors.5a33e728.css",revision:null},{url:"/css/index.08a8e1ac.css",revision:null},{url:"/dark.css",revision:"8bc8c75d670bba7c6ca0122c39beb964"},{url:"/fonts/varela-round-latin-400.72c5f1d4.woff2",revision:null},{url:"/fonts/varela-round-latin-400.ff576336.woff",revision:null},{url:"/index.html",revision:"7243701e68bb304ba443f64fa51fdf2c"},{url:"/js/1064.703d75f1.js",revision:null},{url:"/js/1172.0f4182b3.js",revision:null},{url:"/js/1523.12118690.js",revision:null},{url:"/js/1588.aa9f3f15.js",revision:null},{url:"/js/1814.d46e9bc8.js",revision:null},{url:"/js/185.62497fc3.js",revision:null},{url:"/js/2230.3215567d.js",revision:null},{url:"/js/2233.c2115b33.js",revision:null},{url:"/js/2352.1ad93c6c.js",revision:null},{url:"/js/2374.dc0764c4.js",revision:null},{url:"/js/2535.5fc7abe0.js",revision:null},{url:"/js/265.f78fd35d.js",revision:null},{url:"/js/2921.f2fbc226.js",revision:null},{url:"/js/2970.077864a1.js",revision:null},{url:"/js/2972.abaf9c34.js",revision:null},{url:"/js/3377.b843e352.js",revision:null},{url:"/js/3510.d0330312.js",revision:null},{url:"/js/3593.becd60e0.js",revision:null},{url:"/js/3837.aa23cf66.js",revision:null},{url:"/js/4033.1ef6ffc4.js",revision:null},{url:"/js/4067.341ed2f6.js",revision:null},{url:"/js/428.eac37ee4.js",revision:null},{url:"/js/4513.debf088d.js",revision:null},{url:"/js/4516.7aacfe2f.js",revision:null},{url:"/js/4528.d729566f.js",revision:null},{url:"/js/495.a6e46481.js",revision:null},{url:"/js/5013.56cf47a8.js",revision:null},{url:"/js/5034.3fc015f7.js",revision:null},{url:"/js/5480.a2d6d5cf.js",revision:null},{url:"/js/5649.f2a750a0.js",revision:null},{url:"/js/579.b909463e.js",revision:null},{url:"/js/5793.6b12a4f9.js",revision:null},{url:"/js/5803.4b20c165.js",revision:null},{url:"/js/5812.6233be92.js",revision:null},{url:"/js/5966.66ce7a50.js",revision:null},{url:"/js/6218.e53707fb.js",revision:null},{url:"/js/6514.43b09bcb.js",revision:null},{url:"/js/6531.e78f2219.js",revision:null},{url:"/js/663.97e7e4d3.js",revision:null},{url:"/js/6652.0a490cb9.js",revision:null},{url:"/js/6741.5fd675ba.js",revision:null},{url:"/js/7496.11fb35e2.js",revision:null},{url:"/js/7561.e7ca49b3.js",revision:null},{url:"/js/7634.34f19064.js",revision:null},{url:"/js/8081.a2aa8edc.js",revision:null},{url:"/js/8123.809ec791.js",revision:null},{url:"/js/8191.6a088066.js",revision:null},{url:"/js/8327.685ff366.js",revision:null},{url:"/js/8376.f63b6151.js",revision:null},{url:"/js/8596.0548d980.js",revision:null},{url:"/js/8599.46e04f48.js",revision:null},{url:"/js/8665.151a2c8a.js",revision:null},{url:"/js/8880.21fa7092.js",revision:null},{url:"/js/8932.31ef541c.js",revision:null},{url:"/js/8948.dd3c8695.js",revision:null},{url:"/js/901.21266bcc.js",revision:null},{url:"/js/9305.bd0d368f.js",revision:null},{url:"/js/9399.4c9cf5be.js",revision:null},{url:"/js/9565.078d08a2.js",revision:null},{url:"/js/980.0cf8e040.js",revision:null},{url:"/js/chunk-vendors.4b5dc043.js",revision:null},{url:"/js/index.df4f8794.js",revision:null},{url:"/logo.png",revision:"3cbfce2efacc0dd8d09018233de4afa9"},{url:"/logo.svg",revision:"17fa81a8fc448f2c53f30514400a7c5c"},{url:"/manifest.json",revision:"f6c821dd0bf011176cfb914f2508764c"}],{})});\n │ │ //# sourceMappingURL=service-worker.js.map\n │ │ - service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/f63145c24d48a4d85c5c0b1874c25749/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}});\n │ │ + service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/9c2e57c370725548057d828ec0f51d15/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}});\n │ │ //# sourceMappingURL=workbox-711a2045.js.map\n │ │ workbox-711a2045.js.map{"version":3,"file":"workbox-711a2045.js","sources":["node_modules/workbox-webpack-plugin/node_modules/workbox-core/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/messages/messageGenerator.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/WorkboxError.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheNames.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/constants.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/normalizeHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Route.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/RegExpRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Router.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/waitUntil.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/createCacheKey.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheInstallReportPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheCacheKeyPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/canConstructResponseFromBodyStream.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/copyResponse.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheMatchIgnoreParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/Deferred.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/quotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/StrategyHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/timeout.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/getFriendlyURL.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/Strategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheStrategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/getOrCreatePrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/generateURLVariations.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/removeIgnoredSearchParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/addRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/registerRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precache.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:core:6.5.4'] && _();\n}\ncatch (e) { }\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:routing:6.5.4'] && _();\n}\ncatch (e) { }\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}\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 '../_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 { 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 { 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>} 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 | 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|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 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 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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:6.5.4'] && _();\n}\ncatch (e) { }\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 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 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 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 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} ignoreParams\n * @return {Promise}\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:6.5.4'] && _();\n}\ncatch (e) { }\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}\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}\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} 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} `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}\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}\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}\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 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 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 { 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 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} [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}\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} 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}\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} [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}\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} [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} 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}\n */\n install(event) {\n // waitUntil returns Promise\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}\n */\n activate(event) {\n // waitUntil returns Promise\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} 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} 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}\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 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} [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","/*\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} 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 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 { 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 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} 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} [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\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 './_private/assert.js';\nimport { cacheNames } from './_private/cacheNames.js';\nimport { WorkboxError } from './_private/WorkboxError.js';\nimport './_version.js';\n/**\n * Modifies the default cache names used by the Workbox packages.\n * Cache names are generated as `--`.\n *\n * @param {Object} details\n * @param {Object} [details.prefix] The string to add to the beginning of\n * the precache and runtime cache names.\n * @param {Object} [details.suffix] The string to add to the end of\n * the precache and runtime cache names.\n * @param {Object} [details.precache] The cache name to use for precache\n * caching.\n * @param {Object} [details.runtime] The cache name to use for runtime caching.\n * @param {Object} [details.googleAnalytics] The cache name to use for\n * `workbox-google-analytics` caching.\n *\n * @memberof workbox-core\n */\nfunction setCacheNameDetails(details) {\n if (process.env.NODE_ENV !== 'production') {\n Object.keys(details).forEach((key) => {\n assert.isType(details[key], 'string', {\n moduleName: 'workbox-core',\n funcName: 'setCacheNameDetails',\n paramName: `details.${key}`,\n });\n });\n if ('precache' in details && details['precache'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'precache',\n value: details['precache'],\n });\n }\n if ('runtime' in details && details['runtime'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'runtime',\n value: details['runtime'],\n });\n }\n if ('googleAnalytics' in details &&\n details['googleAnalytics'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'googleAnalytics',\n value: details['googleAnalytics'],\n });\n }\n }\n cacheNames.updateDetails(details);\n}\nexport { setCacheNameDetails };\n"],"names":["self","_","e","messageGenerator","fallback","code","args","msg","length","JSON","stringify","WorkboxError","Error","constructor","errorCode","details","super","this","name","_cacheNameDetails","googleAnalytics","precache","prefix","runtime","suffix","registration","scope","_createCacheName","cacheName","filter","value","join","cacheNames","fn","key","Object","keys","eachCacheNameDetail","userCacheName","normalizeHandler","handler","handle","Route","match","method","setCatchHandler","catchHandler","RegExpRoute","regExp","url","result","exec","href","origin","location","index","slice","Router","_routes","Map","_defaultHandlerMap","routes","addFetchListener","addEventListener","event","request","responsePromise","handleRequest","respondWith","addCacheListener","data","type","payload","requestPromises","Promise","all","urlsToCache","map","entry","Request","waitUntil","ports","then","postMessage","URL","protocol","startsWith","sameOrigin","params","route","findMatchingRoute","has","get","err","reject","_catchHandler","catch","async","catchErr","matchResult","Array","isArray","undefined","setDefaultHandler","set","registerRoute","push","unregisterRoute","routeIndex","indexOf","splice","defaultRouter","asyncFn","returnPromise","createCacheKey","urlObject","cacheKey","revision","cacheKeyURL","originalURL","searchParams","PrecacheInstallReportPlugin","updatedURLs","notUpdatedURLs","handlerWillStart","state","originalRequest","cachedResponseWillBeUsed","cachedResponse","PrecacheCacheKeyPlugin","precacheController","cacheKeyWillBeUsed","_precacheController","getCacheKeyForURL","headers","supportStatus","copyResponse","response","modifier","clonedResponse","clone","responseInit","Headers","status","statusText","modifiedResponseInit","body","testResponse","Response","error","canConstructResponseFromBodyStream","blob","stripParams","fullURL","ignoreParams","strippedURL","param","delete","Deferred","promise","resolve","quotaErrorCallbacks","Set","toRequest","input","StrategyHandler","strategy","options","_cacheKeys","assign","_strategy","_handlerDeferred","_extendLifetimePromises","_plugins","plugins","_pluginStateMap","plugin","fetch","mode","FetchEvent","preloadResponse","possiblePreloadResponse","hasCallback","cb","iterateCallbacks","thrownErrorMessage","message","pluginFilteredRequest","fetchResponse","fetchOptions","callback","runCallbacks","fetchAndCachePut","responseClone","cachePut","cacheMatch","matchOptions","effectiveRequest","getCacheKey","multiMatchOptions","caches","ms","setTimeout","String","replace","RegExp","responseToCache","_ensureResponseSafeToCache","cache","open","hasCacheUpdateCallback","oldResponse","strippedRequestURL","keysOptions","ignoreSearch","cacheKeys","cacheMatchIgnoreParams","put","executeQuotaErrorCallbacks","newResponse","statefulCallback","statefulParam","doneWaiting","shift","destroy","pluginsUsed","Strategy","responseDone","handleAll","_getResponse","_awaitComplete","_handle","waitUntilError","PrecacheStrategy","_fallbackToNetwork","fallbackToNetwork","copyRedirectedCacheableResponsesPlugin","_handleInstall","_handleFetch","integrityInManifest","integrity","integrityInRequest","noIntegrityConflict","_useDefaultCacheabilityPluginIfNeeded","defaultPluginIndex","cacheWillUpdatePluginCount","entries","defaultPrecacheCacheabilityPlugin","cacheWillUpdate","redirected","PrecacheController","_urlsToCacheKeys","_urlsToCacheModes","_cacheKeysToIntegrities","install","bind","activate","addToCacheList","_installAndActiveListenersAdded","urlsToWarnAbout","cacheMode","firstEntry","secondEntry","warningMessage","console","warn","installReportPlugin","credentials","currentlyCachedRequests","expectedCacheKeys","values","deletedURLs","getURLsToCacheKeys","getCachedURLs","getIntegrityForCacheKey","matchPrecache","createHandlerBoundToURL","getOrCreatePrecacheController","PrecacheRoute","urlsToCacheKeys","possibleURL","ignoreURLParametersMatching","directoryIndex","cleanURLs","urlManipulation","hash","urlWithoutIgnoredParams","paramName","some","test","removeIgnoredSearchParams","pathname","endsWith","directoryURL","cleanURL","additionalURLs","urlToAttempt","generateURLVariations","addRoute","capture","captureUrl","matchCallback","moduleName","funcName"],"mappings":"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"}&rocket::state::Staterocket::state::Staterocket::serde::json::Jsonaw_models::info::Infoserver_infofontsstatic/api/0/info/api/0/buckets/api/0/query/api/0/import/api/0/export/api/0/settingsjsoctet-streamapplication/octet-streamcss\n │ │ SizeLimitwhole_streamper_fieldfield_mapShieldStateinnerExtensionCorsScopeApiKeyCheckHostCheckstream_iddependencyan empty stream (vacuous)a multipart form fieldrocket::data::data_stream::_rocket::data::data_streamflagspad_lenassertion failed: cell.set(value)Reseterror_codedependency_idweightis_exclusiveParseErrorGoAwayReasonIoBadCharBadEndLibraryRemotea Display implementation returned an error unexpectedlyErrorParsingErrorEmptyQueryVariableNotDefinedMathErrorInvalidTypeInvalidFunctionParametersTimeIntervalErrorBucketNotFoundRegexCompileErrorConstraintssize_limitallowed_fieldsParse()there │ │ [12e7340] ctrlcsignalsgracemercyforce___figment_relative_metadata_path___figment_relative_pathaddressworkersmax_blockingidentlimits___figment_relative_path_bufkeep_alivelog_levelip_headercli_colorsdefaultstruct Config with 12 elementsstruct Shutdown with 5 elementsstruct RelativePathBuf with 2 elements___figment_tagged_itemvisit_value called before visit_keynormaldebugoffcalled `Result::unwrap()` on an `Err` valueUnknownThreadDetachedWrongVersionAlreadyCreatedOtherErrorFieldSet corrupted (this is a bug)poll_completewritinginvalid framereclaimedwasn't expecting a frame to reclaimnot reclaiming frame for cancelled streamremoving dangling stream from pending_senddata framestream capacity is 0sending data frameaw_server::endpoints::ServerStateinvalid WINDOW_UPDATE frameunexpected flow control stateassertion failed: stream.state.is_closed()too_many_internal_resets │ │ [12e76a0] Failed to encode event duration for dedupaw_server::endpoints::bucket::_aw_server::endpoints::bucketRequest guard `& State < ServerState >` is forwarding.aw_server::endpoints::import::_aw_server::endpoints::importData guard `Json < BucketsExport >` is forwarding.Internal invariant broken: dyn param not found.Please report this to the Rocket issue tracker.https://github.com/rwf2/Rocket/issuesData guard `Json < Bucket >` is forwarding.startendlimitQuery string failed to match route declaration.Data guard `Json < Vec < Event > >` is forwarding.pulsetimeData guard `Json < Event >` is forwarding.Data guard `Form < ImportForm >` is forwarding.buckets_methodrocket::statecalled `Result::unwrap()` on an `Err` valueaw-server/src/endpoints/bucket.rs&rocket::state::Staterocket::state::Statecore::result::Result>, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Json>std::collections::hash::map::HashMapalloc::string::Stringaw_models::bucket::Bucketaw_server::endpoints::util::HttpErrorJsonbuckets_get/applicationaw-server/src/endpoints/import.rsrocket::serde::json::Jsoncore::result::Result<(), aw_server::endpoints::util::HttpErrorJson>()bucket_import_jsonstrrocket::serde::json::Jsonbucket_new/core::option::Optioncore::option::Optionu64core::result::Result>, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Json>alloc::vec::Vecaw_models::event::Eventbucket_events_get//events?&&i64core::result::Result, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Jsonbucket_events_get_single//events/?<_unused..>internal error: entered unreachable codeinvalid keybucket_events_create//eventscapacity overflowf64bucket_events_heartbeat//heartbeat?core::result::Result, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Jsonbucket_event_count//events/countCannot convert indexed str to str without base string!bucket_events_delete_by_id//events/core::result::Resultaw_server::endpoints::util::BucketsExportRocketbucket_export//exportbucket_deletecore::result::Result, aw_server::endpoints::util::HttpErrorJson>bucket_getmultipartform-datarocket::form::form::Formaw_server::endpoints::import::ImportFormbucket_import_form │ │ [12e82f0] http://127.0.0.1:27180 │ │ [12e8308] http://localhost:27180 │ ├── readelf --wide --decompress --hex-dump=.data.rel.ro {} │ │ @@ -1731,16 +1731,16 @@ │ │ 0x01935b10 90b2a76a 00000000 01000000 00000000 ...j............ │ │ 0x01935b20 90b2a76a 00000000 c13eb6f9 c6406082 ...j.....>...@`. │ │ 0x01935b30 1ef9c8b9 8176ee34 5814a08a 4be39b2f .....v.4X...K../ │ │ 0x01935b40 c8aa813e 5920010c ffffffff e9983401 ...>Y ........4. │ │ 0x01935b50 24160000 00000000 0daf3401 15000000 $.........4..... │ │ 0x01935b60 01000000 00000000 90b2a76a 00000000 ...........j.... │ │ 0x01935b70 01000000 00000000 90b2a76a 00000000 ...........j.... │ │ - 0x01935b80 9fd9d1aa cd69402e b9807f2e 5e76840e .....i@.....^v.. │ │ - 0x01935b90 6cc383df 114e991e d6d9be5c 1b14e320 l....N.....\... │ │ + 0x01935b80 7bdaacc7 25b19654 5d35edf0 4bb99faa {...%..T]5..K... │ │ + 0x01935b90 6c0b7966 91d2735c 9333a2bb 8eb8a198 l.yf..s\.3...... │ │ 0x01935ba0 ffffffff 22af3401 c6320000 00000000 ....".4..2...... │ │ 0x01935bb0 e8e13401 13000000 01000000 00000000 ..4............. │ │ 0x01935bc0 90b2a76a 00000000 01000000 00000000 ...j............ │ │ 0x01935bd0 90b2a76a 00000000 20303f36 731bff3a ...j.... 0?6s..: │ │ 0x01935be0 555ee80b a80b28e1 c477ab33 4de8aa7d U^....(..w.3M..} │ │ 0x01935bf0 f618f6fc ef7b58e0 ffffffff fbe13401 .....{X.......4. │ │ 0x01935c00 42380000 00000000 3d1a3501 17000000 B8......=.5..... ├── lib/arm64-v8a/libaw_sync.so │ ├── strings --all --bytes=8 {} │ │ @@ -16914,15 +16914,15 @@ │ │ d="m 400,452.3622 33,-37" │ │ id="path4386" │ │ inkscape:connector-curvature="0" │ │ sodipodi:nodetypes="cc" /> │ │ manifest.json{"name":"ActivityWatch","short_name":"ActivityWatch","theme_color":"#4DBA87","icons":[{"src":"logo.png","sizes":"512x512","type":"image/png"}],"start_url":".","display":"standalone","background_color":"#000000"}service-worker.jsif(!self.define){let s,l={};const n=(n,r)=>(n=new URL(n+".js",r).href,l[n]||new Promise(l=>{if("document"in self){const s=document.createElement("script");s.src=n,s.onload=l,document.head.appendChild(s)}else s=n,importScripts(n),l()}).then(()=>{let s=l[n];if(!s)throw new Error(`Module ${n} didn │ │ t register its module`);return s}));self.define=(r,i)=>{const u=s||("document"in self?document.currentScript.src:"")||location.href;if(l[u])return;let e={};const c=s=>n(s,u),o={module:{uri:u},exports:e,require:c};l[u]=Promise.all(r.map(s=>o[s]||c(s))).then(s=>(i(...s),e))}}define(["./workbox-711a2045"],function(s){"use strict";s.setCacheNameDetails({prefix:"aw-webui"}),self.addEventListener("message",s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()}),s.precacheAndRoute([{url:"/css/1523.3af55662.css",revision:null},{url:"/css/1588.bd0bb219.css",revision:null},{url:"/css/1814.63a247f6.css",revision:null},{url:"/css/185.be8e4b9a.css",revision:null},{url:"/css/2233.e1bcf8fb.css",revision:null},{url:"/css/2352.af75f974.css",revision:null},{url:"/css/265.a9f5afc4.css",revision:null},{url:"/css/2921.0e21fe03.css",revision:null},{url:"/css/2970.0e21fe03.css",revision:null},{url:"/css/3510.cd69135e.css",revision:null},{url:"/css/3593.0e21fe03.css",revision:null},{url:"/css/4067.dcf2e439.css",revision:null},{url:"/css/428.fdf3fbd9.css",revision:null},{url:"/css/4528.ec40e91d.css",revision:null},{url:"/css/495.0e21fe03.css",revision:null},{url:"/css/5480.8f4f9eec.css",revision:null},{url:"/css/579.0a541622.css",revision:null},{url:"/css/5812.38cfb433.css",revision:null},{url:"/css/5966.c7b9176f.css",revision:null},{url:"/css/6218.0e21fe03.css",revision:null},{url:"/css/6531.22cc2d8b.css",revision:null},{url:"/css/663.692259ab.css",revision:null},{url:"/css/6652.0e21fe03.css",revision:null},{url:"/css/6741.67d99f8a.css",revision:null},{url:"/css/7496.0e21fe03.css",revision:null},{url:"/css/7561.280efd83.css",revision:null},{url:"/css/8081.e565b3f9.css",revision:null},{url:"/css/8123.25aa2d67.css",revision:null},{url:"/css/8327.64666c05.css",revision:null},{url:"/css/8596.36d78776.css",revision:null},{url:"/css/8599.3a3e658b.css",revision:null},{url:"/css/8665.f93fd221.css",revision:null},{url:"/css/8932.0e21fe03.css",revision:null},{url:"/css/8948.643cd595.css",revision:null},{url:"/css/9305.3e60e51d.css",revision:null},{url:"/css/9399.af65a5d7.css",revision:null},{url:"/css/chunk-vendors.5a33e728.css",revision:null},{url:"/css/index.08a8e1ac.css",revision:null},{url:"/dark.css",revision:"8bc8c75d670bba7c6ca0122c39beb964"},{url:"/fonts/varela-round-latin-400.72c5f1d4.woff2",revision:null},{url:"/fonts/varela-round-latin-400.ff576336.woff",revision:null},{url:"/index.html",revision:"7243701e68bb304ba443f64fa51fdf2c"},{url:"/js/1064.703d75f1.js",revision:null},{url:"/js/1172.0f4182b3.js",revision:null},{url:"/js/1523.12118690.js",revision:null},{url:"/js/1588.aa9f3f15.js",revision:null},{url:"/js/1814.d46e9bc8.js",revision:null},{url:"/js/185.62497fc3.js",revision:null},{url:"/js/2230.3215567d.js",revision:null},{url:"/js/2233.c2115b33.js",revision:null},{url:"/js/2352.1ad93c6c.js",revision:null},{url:"/js/2374.dc0764c4.js",revision:null},{url:"/js/2535.5fc7abe0.js",revision:null},{url:"/js/265.f78fd35d.js",revision:null},{url:"/js/2921.f2fbc226.js",revision:null},{url:"/js/2970.077864a1.js",revision:null},{url:"/js/2972.abaf9c34.js",revision:null},{url:"/js/3377.b843e352.js",revision:null},{url:"/js/3510.d0330312.js",revision:null},{url:"/js/3593.becd60e0.js",revision:null},{url:"/js/3837.aa23cf66.js",revision:null},{url:"/js/4033.1ef6ffc4.js",revision:null},{url:"/js/4067.341ed2f6.js",revision:null},{url:"/js/428.eac37ee4.js",revision:null},{url:"/js/4513.debf088d.js",revision:null},{url:"/js/4516.7aacfe2f.js",revision:null},{url:"/js/4528.d729566f.js",revision:null},{url:"/js/495.a6e46481.js",revision:null},{url:"/js/5013.56cf47a8.js",revision:null},{url:"/js/5034.3fc015f7.js",revision:null},{url:"/js/5480.a2d6d5cf.js",revision:null},{url:"/js/5649.f2a750a0.js",revision:null},{url:"/js/579.b909463e.js",revision:null},{url:"/js/5793.6b12a4f9.js",revision:null},{url:"/js/5803.4b20c165.js",revision:null},{url:"/js/5812.6233be92.js",revision:null},{url:"/js/5966.66ce7a50.js",revision:null},{url:"/js/6218.e53707fb.js",revision:null},{url:"/js/6514.43b09bcb.js",revision:null},{url:"/js/6531.e78f2219.js",revision:null},{url:"/js/663.97e7e4d3.js",revision:null},{url:"/js/6652.0a490cb9.js",revision:null},{url:"/js/6741.5fd675ba.js",revision:null},{url:"/js/7496.11fb35e2.js",revision:null},{url:"/js/7561.e7ca49b3.js",revision:null},{url:"/js/7634.34f19064.js",revision:null},{url:"/js/8081.a2aa8edc.js",revision:null},{url:"/js/8123.809ec791.js",revision:null},{url:"/js/8191.6a088066.js",revision:null},{url:"/js/8327.685ff366.js",revision:null},{url:"/js/8376.f63b6151.js",revision:null},{url:"/js/8596.0548d980.js",revision:null},{url:"/js/8599.46e04f48.js",revision:null},{url:"/js/8665.151a2c8a.js",revision:null},{url:"/js/8880.21fa7092.js",revision:null},{url:"/js/8932.31ef541c.js",revision:null},{url:"/js/8948.dd3c8695.js",revision:null},{url:"/js/901.21266bcc.js",revision:null},{url:"/js/9305.bd0d368f.js",revision:null},{url:"/js/9399.4c9cf5be.js",revision:null},{url:"/js/9565.078d08a2.js",revision:null},{url:"/js/980.0cf8e040.js",revision:null},{url:"/js/chunk-vendors.4b5dc043.js",revision:null},{url:"/js/index.df4f8794.js",revision:null},{url:"/logo.png",revision:"3cbfce2efacc0dd8d09018233de4afa9"},{url:"/logo.svg",revision:"17fa81a8fc448f2c53f30514400a7c5c"},{url:"/manifest.json",revision:"f6c821dd0bf011176cfb914f2508764c"}],{})}); │ │ //# sourceMappingURL=service-worker.js.map │ │ -service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/f63145c24d48a4d85c5c0b1874c25749/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}}); │ │ +service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/9c2e57c370725548057d828ec0f51d15/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}}); │ │ //# sourceMappingURL=workbox-711a2045.js.map │ │ workbox-711a2045.js.map{"version":3,"file":"workbox-711a2045.js","sources":["node_modules/workbox-webpack-plugin/node_modules/workbox-core/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/messages/messageGenerator.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/WorkboxError.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheNames.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/constants.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/normalizeHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Route.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/RegExpRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Router.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/waitUntil.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/createCacheKey.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheInstallReportPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheCacheKeyPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/canConstructResponseFromBodyStream.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/copyResponse.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheMatchIgnoreParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/Deferred.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/quotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/StrategyHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/timeout.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/getFriendlyURL.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/Strategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheStrategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/getOrCreatePrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/generateURLVariations.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/removeIgnoredSearchParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/addRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/registerRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precache.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:core:6.5.4'] && _();\n}\ncatch (e) { }\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:routing:6.5.4'] && _();\n}\ncatch (e) { }\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}\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 '../_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 { 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 { 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>} 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 | 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|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 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 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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:6.5.4'] && _();\n}\ncatch (e) { }\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 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 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 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 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} ignoreParams\n * @return {Promise}\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:6.5.4'] && _();\n}\ncatch (e) { }\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}\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}\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} 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} `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}\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}\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}\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 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 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 { 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 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} [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}\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} 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}\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} [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}\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} [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} 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}\n */\n install(event) {\n // waitUntil returns Promise\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}\n */\n activate(event) {\n // waitUntil returns Promise\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} 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} 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}\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 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} [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","/*\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} 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 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 { 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 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} 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} [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\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 './_private/assert.js';\nimport { cacheNames } from './_private/cacheNames.js';\nimport { WorkboxError } from './_private/WorkboxError.js';\nimport './_version.js';\n/**\n * Modifies the default cache names used by the Workbox packages.\n * Cache names are generated as `--`.\n *\n * @param {Object} details\n * @param {Object} [details.prefix] The string to add to the beginning of\n * the precache and runtime cache names.\n * @param {Object} [details.suffix] The string to add to the end of\n * the precache and runtime cache names.\n * @param {Object} [details.precache] The cache name to use for precache\n * caching.\n * @param {Object} [details.runtime] The cache name to use for runtime caching.\n * @param {Object} [details.googleAnalytics] The cache name to use for\n * `workbox-google-analytics` caching.\n *\n * @memberof workbox-core\n */\nfunction setCacheNameDetails(details) {\n if (process.env.NODE_ENV !== 'production') {\n Object.keys(details).forEach((key) => {\n assert.isType(details[key], 'string', {\n moduleName: 'workbox-core',\n funcName: 'setCacheNameDetails',\n paramName: `details.${key}`,\n });\n });\n if ('precache' in details && details['precache'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'precache',\n value: details['precache'],\n });\n }\n if ('runtime' in details && details['runtime'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'runtime',\n value: details['runtime'],\n });\n }\n if ('googleAnalytics' in details &&\n details['googleAnalytics'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'googleAnalytics',\n value: details['googleAnalytics'],\n });\n }\n }\n cacheNames.updateDetails(details);\n}\nexport { setCacheNameDetails };\n"],"names":["self","_","e","messageGenerator","fallback","code","args","msg","length","JSON","stringify","WorkboxError","Error","constructor","errorCode","details","super","this","name","_cacheNameDetails","googleAnalytics","precache","prefix","runtime","suffix","registration","scope","_createCacheName","cacheName","filter","value","join","cacheNames","fn","key","Object","keys","eachCacheNameDetail","userCacheName","normalizeHandler","handler","handle","Route","match","method","setCatchHandler","catchHandler","RegExpRoute","regExp","url","result","exec","href","origin","location","index","slice","Router","_routes","Map","_defaultHandlerMap","routes","addFetchListener","addEventListener","event","request","responsePromise","handleRequest","respondWith","addCacheListener","data","type","payload","requestPromises","Promise","all","urlsToCache","map","entry","Request","waitUntil","ports","then","postMessage","URL","protocol","startsWith","sameOrigin","params","route","findMatchingRoute","has","get","err","reject","_catchHandler","catch","async","catchErr","matchResult","Array","isArray","undefined","setDefaultHandler","set","registerRoute","push","unregisterRoute","routeIndex","indexOf","splice","defaultRouter","asyncFn","returnPromise","createCacheKey","urlObject","cacheKey","revision","cacheKeyURL","originalURL","searchParams","PrecacheInstallReportPlugin","updatedURLs","notUpdatedURLs","handlerWillStart","state","originalRequest","cachedResponseWillBeUsed","cachedResponse","PrecacheCacheKeyPlugin","precacheController","cacheKeyWillBeUsed","_precacheController","getCacheKeyForURL","headers","supportStatus","copyResponse","response","modifier","clonedResponse","clone","responseInit","Headers","status","statusText","modifiedResponseInit","body","testResponse","Response","error","canConstructResponseFromBodyStream","blob","stripParams","fullURL","ignoreParams","strippedURL","param","delete","Deferred","promise","resolve","quotaErrorCallbacks","Set","toRequest","input","StrategyHandler","strategy","options","_cacheKeys","assign","_strategy","_handlerDeferred","_extendLifetimePromises","_plugins","plugins","_pluginStateMap","plugin","fetch","mode","FetchEvent","preloadResponse","possiblePreloadResponse","hasCallback","cb","iterateCallbacks","thrownErrorMessage","message","pluginFilteredRequest","fetchResponse","fetchOptions","callback","runCallbacks","fetchAndCachePut","responseClone","cachePut","cacheMatch","matchOptions","effectiveRequest","getCacheKey","multiMatchOptions","caches","ms","setTimeout","String","replace","RegExp","responseToCache","_ensureResponseSafeToCache","cache","open","hasCacheUpdateCallback","oldResponse","strippedRequestURL","keysOptions","ignoreSearch","cacheKeys","cacheMatchIgnoreParams","put","executeQuotaErrorCallbacks","newResponse","statefulCallback","statefulParam","doneWaiting","shift","destroy","pluginsUsed","Strategy","responseDone","handleAll","_getResponse","_awaitComplete","_handle","waitUntilError","PrecacheStrategy","_fallbackToNetwork","fallbackToNetwork","copyRedirectedCacheableResponsesPlugin","_handleInstall","_handleFetch","integrityInManifest","integrity","integrityInRequest","noIntegrityConflict","_useDefaultCacheabilityPluginIfNeeded","defaultPluginIndex","cacheWillUpdatePluginCount","entries","defaultPrecacheCacheabilityPlugin","cacheWillUpdate","redirected","PrecacheController","_urlsToCacheKeys","_urlsToCacheModes","_cacheKeysToIntegrities","install","bind","activate","addToCacheList","_installAndActiveListenersAdded","urlsToWarnAbout","cacheMode","firstEntry","secondEntry","warningMessage","console","warn","installReportPlugin","credentials","currentlyCachedRequests","expectedCacheKeys","values","deletedURLs","getURLsToCacheKeys","getCachedURLs","getIntegrityForCacheKey","matchPrecache","createHandlerBoundToURL","getOrCreatePrecacheController","PrecacheRoute","urlsToCacheKeys","possibleURL","ignoreURLParametersMatching","directoryIndex","cleanURLs","urlManipulation","hash","urlWithoutIgnoredParams","paramName","some","test","removeIgnoredSearchParams","pathname","endsWith","directoryURL","cleanURL","additionalURLs","urlToAttempt","generateURLVariations","addRoute","capture","captureUrl","matchCallback","moduleName","funcName"],"mappings":"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"}&rocket::state::Staterocket::state::Staterocket::serde::json::Jsonaw_models::info::Infoserver_infofontsstatic/api/0/info/api/0/buckets/api/0/query/api/0/import/api/0/export/api/0/settingsfavicon.icojsapplicationoctet-streamapplication/octet-streamcssdefaultFailed to get db pathFailed to get Java stringCouldn't create java string/apikey_fairingLocal time out of range for `NaiveDateTime`NoSuchBucketBucketAlreadyExistsNoSuchKeyMpscErrorInternalErrorUninitializedOldDbVersionErrorindexqueue not emptyBadCharBadEndUtf8Errorvalid_up_toerror_lena Display implementation returned an error unexpectedlyUnexpectedParseEoiCharacterBoundaryParsingErrorEmptyQueryVariableNotDefinedMathErrorInvalidTypeInvalidFunctionParametersTimeIntervalErrorBucketNotFoundRegexCompileErrorWrongJValueTypeInvalidCtorReturnInvalidArgListMethodNotFoundsigFieldNotFoundJavaExceptionJNIEnvMethodNotFoundNullPtrNullDerefTryLockJavaVMMethodNotFoundFieldAlreadySetThrowFailedParseFailedJniCall()failed to write whole bufferthere (from Rust!) │ │ calling checked jni method: NewStringUTFjni::wrapper::jnienvlooking up jni method NewStringUTFJNIEnv*JNIEnvjnienv method not defined, returning errorNewStringUTFchecking for exceptioncalling unchecked jni method: ExceptionChecklooking up jni method ExceptionCheckExceptionCheckno exception foundNewStringUTF resultpush() => non-emptyQuery function was unevaluated and was attempted to be serialized, panic!0 or 1true or falsectrlcsignalsgracemercyforcehupintiovariant index 0 <= i < 10Shutdown requested. Waiting for pending I/O...rocket::serverServer shutdown nominally.all branches are disabled and there is no else branchShutdown failed: server executing after timeouts.Graceful shutdown completed successfully.Shutdown failed: outstanding background I/O. │ │ Rocket has launched fromrocket::launchrocket::rkt │ │ Building server state...aw_server::android::androiddefaultcalled `Result::unwrap()` on an `Err` valuebuffer space exhausted; sending this messages would overflow the statea mapaw_server::config::AWConfigrocket::stateUsing `State` requires managing it with `.manage()`.aw_server::endpoints::ServerStateassertion failed: cell.set(value)Error`Ready` polled after completiondescription() is deprecated; use Display │ │ inrocket::rktrocket::rkt::_routedefaultrocket_cors::Corsaborting due to duplicated managed stateaw_server::config::AWConfigaw_server::endpoints::ServerStaterocket::launchaborting due to configuration error(s)Configaddressworkersmax_blockingidentip_headerlimitskeep_alivelog_levelcli_colors___figment_relative_path_buf___figment_relative_metadata_path___figment_relative_pathctrlcsignalsgracemercyforce___figment_tagged_tag___figment_tagged_valuerocket::launch::_complete parsers should not report `ErrMode::Incomplete(_)`]][[table header]called `Result::unwrap()` on an `Err` valueinternal error: entered unreachable codea sequencea mapShieldExtensionCorsScopeApiKeyCheckHostCheckDuplicateKeykeytableDottedKeyExtendWrongTypeactualOutOfRangeRecursionLimitExceededa Display implementation returned an error unexpectedlyError │ │ ctrlcsignalsgracemercyforce___figment_relative_metadata_path___figment_relative_pathaddressworkersmax_blockingidentlimitskeep_alivelog_levelip_headercli_colorsdefaultstruct Config with 12 elementsstruct Shutdown with 5 elementsstruct RelativePathBuf with 2 elementsvisit_value called before visit_keynormaldebugoffExpected::TokenExpected::SliceExpected::EofExpected::Otherunexpected EOF: expected some tokenunexpected EOF: expected some sliceexpected EOF but input remains[ERROR ELIDED]assertion failed: self.mutex.compare_exchange(1, 0, Ordering::AcqRel, Ordering::Relaxed).is_ok()filled overflowindex not foundemptyfuture still here when droppingDecordefaultprefixsuffixKeykeyleaf_decordotted_decor │ ├── readelf --wide --decompress --string-dump=.rodata {} │ │ @@ -17488,15 +17488,15 @@ │ │ id="path4386"\n │ │ inkscape:connector-curvature="0"\n │ │ sodipodi:nodetypes="cc" />\n │ │ \n │ │ \n │ │ manifest.json{"name":"ActivityWatch","short_name":"ActivityWatch","theme_color":"#4DBA87","icons":[{"src":"logo.png","sizes":"512x512","type":"image/png"}],"start_url":".","display":"standalone","background_color":"#000000"}service-worker.jsif(!self.define){let s,l={};const n=(n,r)=>(n=new URL(n+".js",r).href,l[n]||new Promise(l=>{if("document"in self){const s=document.createElement("script");s.src=n,s.onload=l,document.head.appendChild(s)}else s=n,importScripts(n),l()}).then(()=>{let s=l[n];if(!s)throw new Error(`Module ${n} didn�t register its module`);return s}));self.define=(r,i)=>{const u=s||("document"in self?document.currentScript.src:"")||location.href;if(l[u])return;let e={};const c=s=>n(s,u),o={module:{uri:u},exports:e,require:c};l[u]=Promise.all(r.map(s=>o[s]||c(s))).then(s=>(i(...s),e))}}define(["./workbox-711a2045"],function(s){"use strict";s.setCacheNameDetails({prefix:"aw-webui"}),self.addEventListener("message",s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()}),s.precacheAndRoute([{url:"/css/1523.3af55662.css",revision:null},{url:"/css/1588.bd0bb219.css",revision:null},{url:"/css/1814.63a247f6.css",revision:null},{url:"/css/185.be8e4b9a.css",revision:null},{url:"/css/2233.e1bcf8fb.css",revision:null},{url:"/css/2352.af75f974.css",revision:null},{url:"/css/265.a9f5afc4.css",revision:null},{url:"/css/2921.0e21fe03.css",revision:null},{url:"/css/2970.0e21fe03.css",revision:null},{url:"/css/3510.cd69135e.css",revision:null},{url:"/css/3593.0e21fe03.css",revision:null},{url:"/css/4067.dcf2e439.css",revision:null},{url:"/css/428.fdf3fbd9.css",revision:null},{url:"/css/4528.ec40e91d.css",revision:null},{url:"/css/495.0e21fe03.css",revision:null},{url:"/css/5480.8f4f9eec.css",revision:null},{url:"/css/579.0a541622.css",revision:null},{url:"/css/5812.38cfb433.css",revision:null},{url:"/css/5966.c7b9176f.css",revision:null},{url:"/css/6218.0e21fe03.css",revision:null},{url:"/css/6531.22cc2d8b.css",revision:null},{url:"/css/663.692259ab.css",revision:null},{url:"/css/6652.0e21fe03.css",revision:null},{url:"/css/6741.67d99f8a.css",revision:null},{url:"/css/7496.0e21fe03.css",revision:null},{url:"/css/7561.280efd83.css",revision:null},{url:"/css/8081.e565b3f9.css",revision:null},{url:"/css/8123.25aa2d67.css",revision:null},{url:"/css/8327.64666c05.css",revision:null},{url:"/css/8596.36d78776.css",revision:null},{url:"/css/8599.3a3e658b.css",revision:null},{url:"/css/8665.f93fd221.css",revision:null},{url:"/css/8932.0e21fe03.css",revision:null},{url:"/css/8948.643cd595.css",revision:null},{url:"/css/9305.3e60e51d.css",revision:null},{url:"/css/9399.af65a5d7.css",revision:null},{url:"/css/chunk-vendors.5a33e728.css",revision:null},{url:"/css/index.08a8e1ac.css",revision:null},{url:"/dark.css",revision:"8bc8c75d670bba7c6ca0122c39beb964"},{url:"/fonts/varela-round-latin-400.72c5f1d4.woff2",revision:null},{url:"/fonts/varela-round-latin-400.ff576336.woff",revision:null},{url:"/index.html",revision:"7243701e68bb304ba443f64fa51fdf2c"},{url:"/js/1064.703d75f1.js",revision:null},{url:"/js/1172.0f4182b3.js",revision:null},{url:"/js/1523.12118690.js",revision:null},{url:"/js/1588.aa9f3f15.js",revision:null},{url:"/js/1814.d46e9bc8.js",revision:null},{url:"/js/185.62497fc3.js",revision:null},{url:"/js/2230.3215567d.js",revision:null},{url:"/js/2233.c2115b33.js",revision:null},{url:"/js/2352.1ad93c6c.js",revision:null},{url:"/js/2374.dc0764c4.js",revision:null},{url:"/js/2535.5fc7abe0.js",revision:null},{url:"/js/265.f78fd35d.js",revision:null},{url:"/js/2921.f2fbc226.js",revision:null},{url:"/js/2970.077864a1.js",revision:null},{url:"/js/2972.abaf9c34.js",revision:null},{url:"/js/3377.b843e352.js",revision:null},{url:"/js/3510.d0330312.js",revision:null},{url:"/js/3593.becd60e0.js",revision:null},{url:"/js/3837.aa23cf66.js",revision:null},{url:"/js/4033.1ef6ffc4.js",revision:null},{url:"/js/4067.341ed2f6.js",revision:null},{url:"/js/428.eac37ee4.js",revision:null},{url:"/js/4513.debf088d.js",revision:null},{url:"/js/4516.7aacfe2f.js",revision:null},{url:"/js/4528.d729566f.js",revision:null},{url:"/js/495.a6e46481.js",revision:null},{url:"/js/5013.56cf47a8.js",revision:null},{url:"/js/5034.3fc015f7.js",revision:null},{url:"/js/5480.a2d6d5cf.js",revision:null},{url:"/js/5649.f2a750a0.js",revision:null},{url:"/js/579.b909463e.js",revision:null},{url:"/js/5793.6b12a4f9.js",revision:null},{url:"/js/5803.4b20c165.js",revision:null},{url:"/js/5812.6233be92.js",revision:null},{url:"/js/5966.66ce7a50.js",revision:null},{url:"/js/6218.e53707fb.js",revision:null},{url:"/js/6514.43b09bcb.js",revision:null},{url:"/js/6531.e78f2219.js",revision:null},{url:"/js/663.97e7e4d3.js",revision:null},{url:"/js/6652.0a490cb9.js",revision:null},{url:"/js/6741.5fd675ba.js",revision:null},{url:"/js/7496.11fb35e2.js",revision:null},{url:"/js/7561.e7ca49b3.js",revision:null},{url:"/js/7634.34f19064.js",revision:null},{url:"/js/8081.a2aa8edc.js",revision:null},{url:"/js/8123.809ec791.js",revision:null},{url:"/js/8191.6a088066.js",revision:null},{url:"/js/8327.685ff366.js",revision:null},{url:"/js/8376.f63b6151.js",revision:null},{url:"/js/8596.0548d980.js",revision:null},{url:"/js/8599.46e04f48.js",revision:null},{url:"/js/8665.151a2c8a.js",revision:null},{url:"/js/8880.21fa7092.js",revision:null},{url:"/js/8932.31ef541c.js",revision:null},{url:"/js/8948.dd3c8695.js",revision:null},{url:"/js/901.21266bcc.js",revision:null},{url:"/js/9305.bd0d368f.js",revision:null},{url:"/js/9399.4c9cf5be.js",revision:null},{url:"/js/9565.078d08a2.js",revision:null},{url:"/js/980.0cf8e040.js",revision:null},{url:"/js/chunk-vendors.4b5dc043.js",revision:null},{url:"/js/index.df4f8794.js",revision:null},{url:"/logo.png",revision:"3cbfce2efacc0dd8d09018233de4afa9"},{url:"/logo.svg",revision:"17fa81a8fc448f2c53f30514400a7c5c"},{url:"/manifest.json",revision:"f6c821dd0bf011176cfb914f2508764c"}],{})});\n │ │ //# sourceMappingURL=service-worker.js.map\n │ │ - service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/f63145c24d48a4d85c5c0b1874c25749/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}});\n │ │ + service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/9c2e57c370725548057d828ec0f51d15/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}});\n │ │ //# sourceMappingURL=workbox-711a2045.js.map\n │ │ workbox-711a2045.js.map{"version":3,"file":"workbox-711a2045.js","sources":["node_modules/workbox-webpack-plugin/node_modules/workbox-core/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/messages/messageGenerator.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/WorkboxError.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheNames.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/constants.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/normalizeHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Route.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/RegExpRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Router.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/waitUntil.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/createCacheKey.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheInstallReportPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheCacheKeyPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/canConstructResponseFromBodyStream.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/copyResponse.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheMatchIgnoreParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/Deferred.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/quotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/StrategyHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/timeout.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/getFriendlyURL.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/Strategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheStrategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/getOrCreatePrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/generateURLVariations.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/removeIgnoredSearchParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/addRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/registerRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precache.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:core:6.5.4'] && _();\n}\ncatch (e) { }\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:routing:6.5.4'] && _();\n}\ncatch (e) { }\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}\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 '../_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 { 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 { 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>} 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 | 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|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 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 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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:6.5.4'] && _();\n}\ncatch (e) { }\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 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 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 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 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} ignoreParams\n * @return {Promise}\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:6.5.4'] && _();\n}\ncatch (e) { }\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}\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}\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} 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} `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}\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}\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}\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 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 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 { 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 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} [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}\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} 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}\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} [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}\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} [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} 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}\n */\n install(event) {\n // waitUntil returns Promise\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}\n */\n activate(event) {\n // waitUntil returns Promise\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} 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} 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}\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 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} [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","/*\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} 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 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 { 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 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} 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} [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\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 './_private/assert.js';\nimport { cacheNames } from './_private/cacheNames.js';\nimport { WorkboxError } from './_private/WorkboxError.js';\nimport './_version.js';\n/**\n * Modifies the default cache names used by the Workbox packages.\n * Cache names are generated as `--`.\n *\n * @param {Object} details\n * @param {Object} [details.prefix] The string to add to the beginning of\n * the precache and runtime cache names.\n * @param {Object} [details.suffix] The string to add to the end of\n * the precache and runtime cache names.\n * @param {Object} [details.precache] The cache name to use for precache\n * caching.\n * @param {Object} [details.runtime] The cache name to use for runtime caching.\n * @param {Object} [details.googleAnalytics] The cache name to use for\n * `workbox-google-analytics` caching.\n *\n * @memberof workbox-core\n */\nfunction setCacheNameDetails(details) {\n if (process.env.NODE_ENV !== 'production') {\n Object.keys(details).forEach((key) => {\n assert.isType(details[key], 'string', {\n moduleName: 'workbox-core',\n funcName: 'setCacheNameDetails',\n paramName: `details.${key}`,\n });\n });\n if ('precache' in details && details['precache'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'precache',\n value: details['precache'],\n });\n }\n if ('runtime' in details && details['runtime'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'runtime',\n value: details['runtime'],\n });\n }\n if ('googleAnalytics' in details &&\n details['googleAnalytics'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'googleAnalytics',\n value: details['googleAnalytics'],\n });\n }\n }\n cacheNames.updateDetails(details);\n}\nexport { setCacheNameDetails };\n"],"names":["self","_","e","messageGenerator","fallback","code","args","msg","length","JSON","stringify","WorkboxError","Error","constructor","errorCode","details","super","this","name","_cacheNameDetails","googleAnalytics","precache","prefix","runtime","suffix","registration","scope","_createCacheName","cacheName","filter","value","join","cacheNames","fn","key","Object","keys","eachCacheNameDetail","userCacheName","normalizeHandler","handler","handle","Route","match","method","setCatchHandler","catchHandler","RegExpRoute","regExp","url","result","exec","href","origin","location","index","slice","Router","_routes","Map","_defaultHandlerMap","routes","addFetchListener","addEventListener","event","request","responsePromise","handleRequest","respondWith","addCacheListener","data","type","payload","requestPromises","Promise","all","urlsToCache","map","entry","Request","waitUntil","ports","then","postMessage","URL","protocol","startsWith","sameOrigin","params","route","findMatchingRoute","has","get","err","reject","_catchHandler","catch","async","catchErr","matchResult","Array","isArray","undefined","setDefaultHandler","set","registerRoute","push","unregisterRoute","routeIndex","indexOf","splice","defaultRouter","asyncFn","returnPromise","createCacheKey","urlObject","cacheKey","revision","cacheKeyURL","originalURL","searchParams","PrecacheInstallReportPlugin","updatedURLs","notUpdatedURLs","handlerWillStart","state","originalRequest","cachedResponseWillBeUsed","cachedResponse","PrecacheCacheKeyPlugin","precacheController","cacheKeyWillBeUsed","_precacheController","getCacheKeyForURL","headers","supportStatus","copyResponse","response","modifier","clonedResponse","clone","responseInit","Headers","status","statusText","modifiedResponseInit","body","testResponse","Response","error","canConstructResponseFromBodyStream","blob","stripParams","fullURL","ignoreParams","strippedURL","param","delete","Deferred","promise","resolve","quotaErrorCallbacks","Set","toRequest","input","StrategyHandler","strategy","options","_cacheKeys","assign","_strategy","_handlerDeferred","_extendLifetimePromises","_plugins","plugins","_pluginStateMap","plugin","fetch","mode","FetchEvent","preloadResponse","possiblePreloadResponse","hasCallback","cb","iterateCallbacks","thrownErrorMessage","message","pluginFilteredRequest","fetchResponse","fetchOptions","callback","runCallbacks","fetchAndCachePut","responseClone","cachePut","cacheMatch","matchOptions","effectiveRequest","getCacheKey","multiMatchOptions","caches","ms","setTimeout","String","replace","RegExp","responseToCache","_ensureResponseSafeToCache","cache","open","hasCacheUpdateCallback","oldResponse","strippedRequestURL","keysOptions","ignoreSearch","cacheKeys","cacheMatchIgnoreParams","put","executeQuotaErrorCallbacks","newResponse","statefulCallback","statefulParam","doneWaiting","shift","destroy","pluginsUsed","Strategy","responseDone","handleAll","_getResponse","_awaitComplete","_handle","waitUntilError","PrecacheStrategy","_fallbackToNetwork","fallbackToNetwork","copyRedirectedCacheableResponsesPlugin","_handleInstall","_handleFetch","integrityInManifest","integrity","integrityInRequest","noIntegrityConflict","_useDefaultCacheabilityPluginIfNeeded","defaultPluginIndex","cacheWillUpdatePluginCount","entries","defaultPrecacheCacheabilityPlugin","cacheWillUpdate","redirected","PrecacheController","_urlsToCacheKeys","_urlsToCacheModes","_cacheKeysToIntegrities","install","bind","activate","addToCacheList","_installAndActiveListenersAdded","urlsToWarnAbout","cacheMode","firstEntry","secondEntry","warningMessage","console","warn","installReportPlugin","credentials","currentlyCachedRequests","expectedCacheKeys","values","deletedURLs","getURLsToCacheKeys","getCachedURLs","getIntegrityForCacheKey","matchPrecache","createHandlerBoundToURL","getOrCreatePrecacheController","PrecacheRoute","urlsToCacheKeys","possibleURL","ignoreURLParametersMatching","directoryIndex","cleanURLs","urlManipulation","hash","urlWithoutIgnoredParams","paramName","some","test","removeIgnoredSearchParams","pathname","endsWith","directoryURL","cleanURL","additionalURLs","urlToAttempt","generateURLVariations","addRoute","capture","captureUrl","matchCallback","moduleName","funcName"],"mappings":"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"}&rocket::state::Staterocket::state::Staterocket::serde::json::Jsonaw_models::info::Infoserver_infofontsstatic/api/0/info/api/0/buckets/api/0/query/api/0/import/api/0/export/api/0/settingsfavicon.icojsapplicationoctet-streamapplication/octet-streamcssdefaultFailed to get db pathFailed to get Java stringCouldn't create java string/apikey_fairingLocal time out of range for `NaiveDateTime`NoSuchBucketBucketAlreadyExistsNoSuchKeyMpscErrorInternalErrorUninitializedOldDbVersionErrorindexqueue not emptyBadCharBadEndUtf8Errorvalid_up_toerror_lena Display implementation returned an error unexpectedlyUnexpectedParseEoiCharacterBoundaryParsingErrorEmptyQueryVariableNotDefinedMathErrorInvalidTypeInvalidFunctionParametersTimeIntervalErrorBucketNotFoundRegexCompileErrorWrongJValueTypeInvalidCtorReturnInvalidArgListMethodNotFoundsigFieldNotFoundJavaExceptionJNIEnvMethodNotFoundNullPtrNullDerefTryLockJavaVMMethodNotFoundFieldAlreadySetThrowFailedParseFailedJniCall()failed to write whole bufferthere (from Rust!) │ │ [1326348] G���V���Y��� │ │ [132635e] calling checked jni method: NewStringUTFjni::wrapper::jnienvlooking up jni method NewStringUTFJNIEnv*JNIEnvjnienv method not defined, returning errorNewStringUTFchecking for exceptioncalling unchecked jni method: ExceptionChecklooking up jni method ExceptionCheckExceptionCheckno exception foundNewStringUTF resultpush() => non-emptyQuery function was unevaluated and was attempted to be serialized, panic!0 or 1true or falsectrlcsignalsgracemercyforcehupintiovariant index 0 <= i < 10Shutdown requested. Waiting for pending I/O...rocket::serverServer shutdown nominally.all branches are disabled and there is no else branchShutdown failed: server executing after timeouts.Graceful shutdown completed successfully.Shutdown failed: outstanding background I/O.� Rocket has launched fromrocket::launchrocket::rkt� Routes� Building server state...aw_server::android::androiddefaultcalled `Result::unwrap()` on an `Err` valuebuffer space exhausted; sending this messages would overflow the statea mapaw_server::config::AWConfigrocket::stateUsing `State` requires managing it with `.manage()`.aw_server::endpoints::ServerStateassertion failed: cell.set(value)Error`Ready` polled after completiondescription() is deprecated; use Display │ │ [1326836] q^A^R^A^^^AW │ │ [1326842] *^A^R^B� │ │ [132684a] C │ ├── readelf --wide --decompress --hex-dump=.data.rel.ro {} │ │ @@ -1497,16 +1497,16 @@ │ │ 0x0232daa0 90b2a76a 00000000 c13eb6f9 c6406082 ...j.....>...@`. │ │ 0x0232dab0 1ef9c8b9 8176ee34 5814a08a 4be39b2f .....v.4X...K../ │ │ 0x0232dac0 c8aa813e 5920010c ffffffff ffffffff ...>Y .......... │ │ 0x0232dad0 00000000 00000000 24160000 00000000 ........$....... │ │ 0x0232dae0 00000000 00000000 15000000 00000000 ................ │ │ 0x0232daf0 01000000 00000000 90b2a76a 00000000 ...........j.... │ │ 0x0232db00 01000000 00000000 90b2a76a 00000000 ...........j.... │ │ - 0x0232db10 9fd9d1aa cd69402e b9807f2e 5e76840e .....i@.....^v.. │ │ - 0x0232db20 6cc383df 114e991e d6d9be5c 1b14e320 l....N.....\... │ │ + 0x0232db10 7bdaacc7 25b19654 5d35edf0 4bb99faa {...%..T]5..K... │ │ + 0x0232db20 6c0b7966 91d2735c 9333a2bb 8eb8a198 l.yf..s\.3...... │ │ 0x0232db30 ffffffff ffffffff 00000000 00000000 ................ │ │ 0x0232db40 c6320000 00000000 00000000 00000000 .2.............. │ │ 0x0232db50 13000000 00000000 01000000 00000000 ................ │ │ 0x0232db60 90b2a76a 00000000 01000000 00000000 ...j............ │ │ 0x0232db70 90b2a76a 00000000 20303f36 731bff3a ...j.... 0?6s..: │ │ 0x0232db80 555ee80b a80b28e1 c477ab33 4de8aa7d U^....(..w.3M..} │ │ 0x0232db90 f618f6fc ef7b58e0 ffffffff ffffffff .....{X......... ├── lib/arm64-v8a/libaw_server.so │ ├── strings --all --bytes=8 {} │ │ @@ -7420,15 +7420,15 @@ │ │ d="m 400,452.3622 33,-37" │ │ id="path4386" │ │ inkscape:connector-curvature="0" │ │ sodipodi:nodetypes="cc" /> │ │ manifest.json{"name":"ActivityWatch","short_name":"ActivityWatch","theme_color":"#4DBA87","icons":[{"src":"logo.png","sizes":"512x512","type":"image/png"}],"start_url":".","display":"standalone","background_color":"#000000"}service-worker.jsif(!self.define){let s,l={};const n=(n,r)=>(n=new URL(n+".js",r).href,l[n]||new Promise(l=>{if("document"in self){const s=document.createElement("script");s.src=n,s.onload=l,document.head.appendChild(s)}else s=n,importScripts(n),l()}).then(()=>{let s=l[n];if(!s)throw new Error(`Module ${n} didn │ │ t register its module`);return s}));self.define=(r,i)=>{const u=s||("document"in self?document.currentScript.src:"")||location.href;if(l[u])return;let e={};const c=s=>n(s,u),o={module:{uri:u},exports:e,require:c};l[u]=Promise.all(r.map(s=>o[s]||c(s))).then(s=>(i(...s),e))}}define(["./workbox-711a2045"],function(s){"use strict";s.setCacheNameDetails({prefix:"aw-webui"}),self.addEventListener("message",s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()}),s.precacheAndRoute([{url:"/css/1523.3af55662.css",revision:null},{url:"/css/1588.bd0bb219.css",revision:null},{url:"/css/1814.63a247f6.css",revision:null},{url:"/css/185.be8e4b9a.css",revision:null},{url:"/css/2233.e1bcf8fb.css",revision:null},{url:"/css/2352.af75f974.css",revision:null},{url:"/css/265.a9f5afc4.css",revision:null},{url:"/css/2921.0e21fe03.css",revision:null},{url:"/css/2970.0e21fe03.css",revision:null},{url:"/css/3510.cd69135e.css",revision:null},{url:"/css/3593.0e21fe03.css",revision:null},{url:"/css/4067.dcf2e439.css",revision:null},{url:"/css/428.fdf3fbd9.css",revision:null},{url:"/css/4528.ec40e91d.css",revision:null},{url:"/css/495.0e21fe03.css",revision:null},{url:"/css/5480.8f4f9eec.css",revision:null},{url:"/css/579.0a541622.css",revision:null},{url:"/css/5812.38cfb433.css",revision:null},{url:"/css/5966.c7b9176f.css",revision:null},{url:"/css/6218.0e21fe03.css",revision:null},{url:"/css/6531.22cc2d8b.css",revision:null},{url:"/css/663.692259ab.css",revision:null},{url:"/css/6652.0e21fe03.css",revision:null},{url:"/css/6741.67d99f8a.css",revision:null},{url:"/css/7496.0e21fe03.css",revision:null},{url:"/css/7561.280efd83.css",revision:null},{url:"/css/8081.e565b3f9.css",revision:null},{url:"/css/8123.25aa2d67.css",revision:null},{url:"/css/8327.64666c05.css",revision:null},{url:"/css/8596.36d78776.css",revision:null},{url:"/css/8599.3a3e658b.css",revision:null},{url:"/css/8665.f93fd221.css",revision:null},{url:"/css/8932.0e21fe03.css",revision:null},{url:"/css/8948.643cd595.css",revision:null},{url:"/css/9305.3e60e51d.css",revision:null},{url:"/css/9399.af65a5d7.css",revision:null},{url:"/css/chunk-vendors.5a33e728.css",revision:null},{url:"/css/index.08a8e1ac.css",revision:null},{url:"/dark.css",revision:"8bc8c75d670bba7c6ca0122c39beb964"},{url:"/fonts/varela-round-latin-400.72c5f1d4.woff2",revision:null},{url:"/fonts/varela-round-latin-400.ff576336.woff",revision:null},{url:"/index.html",revision:"7243701e68bb304ba443f64fa51fdf2c"},{url:"/js/1064.703d75f1.js",revision:null},{url:"/js/1172.0f4182b3.js",revision:null},{url:"/js/1523.12118690.js",revision:null},{url:"/js/1588.aa9f3f15.js",revision:null},{url:"/js/1814.d46e9bc8.js",revision:null},{url:"/js/185.62497fc3.js",revision:null},{url:"/js/2230.3215567d.js",revision:null},{url:"/js/2233.c2115b33.js",revision:null},{url:"/js/2352.1ad93c6c.js",revision:null},{url:"/js/2374.dc0764c4.js",revision:null},{url:"/js/2535.5fc7abe0.js",revision:null},{url:"/js/265.f78fd35d.js",revision:null},{url:"/js/2921.f2fbc226.js",revision:null},{url:"/js/2970.077864a1.js",revision:null},{url:"/js/2972.abaf9c34.js",revision:null},{url:"/js/3377.b843e352.js",revision:null},{url:"/js/3510.d0330312.js",revision:null},{url:"/js/3593.becd60e0.js",revision:null},{url:"/js/3837.aa23cf66.js",revision:null},{url:"/js/4033.1ef6ffc4.js",revision:null},{url:"/js/4067.341ed2f6.js",revision:null},{url:"/js/428.eac37ee4.js",revision:null},{url:"/js/4513.debf088d.js",revision:null},{url:"/js/4516.7aacfe2f.js",revision:null},{url:"/js/4528.d729566f.js",revision:null},{url:"/js/495.a6e46481.js",revision:null},{url:"/js/5013.56cf47a8.js",revision:null},{url:"/js/5034.3fc015f7.js",revision:null},{url:"/js/5480.a2d6d5cf.js",revision:null},{url:"/js/5649.f2a750a0.js",revision:null},{url:"/js/579.b909463e.js",revision:null},{url:"/js/5793.6b12a4f9.js",revision:null},{url:"/js/5803.4b20c165.js",revision:null},{url:"/js/5812.6233be92.js",revision:null},{url:"/js/5966.66ce7a50.js",revision:null},{url:"/js/6218.e53707fb.js",revision:null},{url:"/js/6514.43b09bcb.js",revision:null},{url:"/js/6531.e78f2219.js",revision:null},{url:"/js/663.97e7e4d3.js",revision:null},{url:"/js/6652.0a490cb9.js",revision:null},{url:"/js/6741.5fd675ba.js",revision:null},{url:"/js/7496.11fb35e2.js",revision:null},{url:"/js/7561.e7ca49b3.js",revision:null},{url:"/js/7634.34f19064.js",revision:null},{url:"/js/8081.a2aa8edc.js",revision:null},{url:"/js/8123.809ec791.js",revision:null},{url:"/js/8191.6a088066.js",revision:null},{url:"/js/8327.685ff366.js",revision:null},{url:"/js/8376.f63b6151.js",revision:null},{url:"/js/8596.0548d980.js",revision:null},{url:"/js/8599.46e04f48.js",revision:null},{url:"/js/8665.151a2c8a.js",revision:null},{url:"/js/8880.21fa7092.js",revision:null},{url:"/js/8932.31ef541c.js",revision:null},{url:"/js/8948.dd3c8695.js",revision:null},{url:"/js/901.21266bcc.js",revision:null},{url:"/js/9305.bd0d368f.js",revision:null},{url:"/js/9399.4c9cf5be.js",revision:null},{url:"/js/9565.078d08a2.js",revision:null},{url:"/js/980.0cf8e040.js",revision:null},{url:"/js/chunk-vendors.4b5dc043.js",revision:null},{url:"/js/index.df4f8794.js",revision:null},{url:"/logo.png",revision:"3cbfce2efacc0dd8d09018233de4afa9"},{url:"/logo.svg",revision:"17fa81a8fc448f2c53f30514400a7c5c"},{url:"/manifest.json",revision:"f6c821dd0bf011176cfb914f2508764c"}],{})}); │ │ //# sourceMappingURL=service-worker.js.map │ │ -service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/f63145c24d48a4d85c5c0b1874c25749/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}}); │ │ +service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/9c2e57c370725548057d828ec0f51d15/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}}); │ │ //# sourceMappingURL=workbox-711a2045.js.map │ │ workbox-711a2045.js.map{"version":3,"file":"workbox-711a2045.js","sources":["node_modules/workbox-webpack-plugin/node_modules/workbox-core/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/messages/messageGenerator.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/WorkboxError.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheNames.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/constants.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/normalizeHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Route.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/RegExpRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Router.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/waitUntil.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/createCacheKey.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheInstallReportPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheCacheKeyPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/canConstructResponseFromBodyStream.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/copyResponse.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheMatchIgnoreParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/Deferred.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/quotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/StrategyHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/timeout.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/getFriendlyURL.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/Strategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheStrategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/getOrCreatePrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/generateURLVariations.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/removeIgnoredSearchParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/addRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/registerRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precache.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:core:6.5.4'] && _();\n}\ncatch (e) { }\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:routing:6.5.4'] && _();\n}\ncatch (e) { }\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}\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 '../_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 { 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 { 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>} 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 | 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|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 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 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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:6.5.4'] && _();\n}\ncatch (e) { }\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 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 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 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 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} ignoreParams\n * @return {Promise}\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:6.5.4'] && _();\n}\ncatch (e) { }\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}\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}\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} 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} `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}\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}\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}\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 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 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 { 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 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} [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}\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} 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}\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} [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}\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} [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} 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}\n */\n install(event) {\n // waitUntil returns Promise\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}\n */\n activate(event) {\n // waitUntil returns Promise\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} 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} 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}\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 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} [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","/*\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} 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 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 { 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 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} 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} [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\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 './_private/assert.js';\nimport { cacheNames } from './_private/cacheNames.js';\nimport { WorkboxError } from './_private/WorkboxError.js';\nimport './_version.js';\n/**\n * Modifies the default cache names used by the Workbox packages.\n * Cache names are generated as `--`.\n *\n * @param {Object} details\n * @param {Object} [details.prefix] The string to add to the beginning of\n * the precache and runtime cache names.\n * @param {Object} [details.suffix] The string to add to the end of\n * the precache and runtime cache names.\n * @param {Object} [details.precache] The cache name to use for precache\n * caching.\n * @param {Object} [details.runtime] The cache name to use for runtime caching.\n * @param {Object} [details.googleAnalytics] The cache name to use for\n * `workbox-google-analytics` caching.\n *\n * @memberof workbox-core\n */\nfunction setCacheNameDetails(details) {\n if (process.env.NODE_ENV !== 'production') {\n Object.keys(details).forEach((key) => {\n assert.isType(details[key], 'string', {\n moduleName: 'workbox-core',\n funcName: 'setCacheNameDetails',\n paramName: `details.${key}`,\n });\n });\n if ('precache' in details && details['precache'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'precache',\n value: details['precache'],\n });\n }\n if ('runtime' in details && details['runtime'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'runtime',\n value: details['runtime'],\n });\n }\n if ('googleAnalytics' in details &&\n details['googleAnalytics'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'googleAnalytics',\n value: details['googleAnalytics'],\n });\n }\n }\n cacheNames.updateDetails(details);\n}\nexport { setCacheNameDetails };\n"],"names":["self","_","e","messageGenerator","fallback","code","args","msg","length","JSON","stringify","WorkboxError","Error","constructor","errorCode","details","super","this","name","_cacheNameDetails","googleAnalytics","precache","prefix","runtime","suffix","registration","scope","_createCacheName","cacheName","filter","value","join","cacheNames","fn","key","Object","keys","eachCacheNameDetail","userCacheName","normalizeHandler","handler","handle","Route","match","method","setCatchHandler","catchHandler","RegExpRoute","regExp","url","result","exec","href","origin","location","index","slice","Router","_routes","Map","_defaultHandlerMap","routes","addFetchListener","addEventListener","event","request","responsePromise","handleRequest","respondWith","addCacheListener","data","type","payload","requestPromises","Promise","all","urlsToCache","map","entry","Request","waitUntil","ports","then","postMessage","URL","protocol","startsWith","sameOrigin","params","route","findMatchingRoute","has","get","err","reject","_catchHandler","catch","async","catchErr","matchResult","Array","isArray","undefined","setDefaultHandler","set","registerRoute","push","unregisterRoute","routeIndex","indexOf","splice","defaultRouter","asyncFn","returnPromise","createCacheKey","urlObject","cacheKey","revision","cacheKeyURL","originalURL","searchParams","PrecacheInstallReportPlugin","updatedURLs","notUpdatedURLs","handlerWillStart","state","originalRequest","cachedResponseWillBeUsed","cachedResponse","PrecacheCacheKeyPlugin","precacheController","cacheKeyWillBeUsed","_precacheController","getCacheKeyForURL","headers","supportStatus","copyResponse","response","modifier","clonedResponse","clone","responseInit","Headers","status","statusText","modifiedResponseInit","body","testResponse","Response","error","canConstructResponseFromBodyStream","blob","stripParams","fullURL","ignoreParams","strippedURL","param","delete","Deferred","promise","resolve","quotaErrorCallbacks","Set","toRequest","input","StrategyHandler","strategy","options","_cacheKeys","assign","_strategy","_handlerDeferred","_extendLifetimePromises","_plugins","plugins","_pluginStateMap","plugin","fetch","mode","FetchEvent","preloadResponse","possiblePreloadResponse","hasCallback","cb","iterateCallbacks","thrownErrorMessage","message","pluginFilteredRequest","fetchResponse","fetchOptions","callback","runCallbacks","fetchAndCachePut","responseClone","cachePut","cacheMatch","matchOptions","effectiveRequest","getCacheKey","multiMatchOptions","caches","ms","setTimeout","String","replace","RegExp","responseToCache","_ensureResponseSafeToCache","cache","open","hasCacheUpdateCallback","oldResponse","strippedRequestURL","keysOptions","ignoreSearch","cacheKeys","cacheMatchIgnoreParams","put","executeQuotaErrorCallbacks","newResponse","statefulCallback","statefulParam","doneWaiting","shift","destroy","pluginsUsed","Strategy","responseDone","handleAll","_getResponse","_awaitComplete","_handle","waitUntilError","PrecacheStrategy","_fallbackToNetwork","fallbackToNetwork","copyRedirectedCacheableResponsesPlugin","_handleInstall","_handleFetch","integrityInManifest","integrity","integrityInRequest","noIntegrityConflict","_useDefaultCacheabilityPluginIfNeeded","defaultPluginIndex","cacheWillUpdatePluginCount","entries","defaultPrecacheCacheabilityPlugin","cacheWillUpdate","redirected","PrecacheController","_urlsToCacheKeys","_urlsToCacheModes","_cacheKeysToIntegrities","install","bind","activate","addToCacheList","_installAndActiveListenersAdded","urlsToWarnAbout","cacheMode","firstEntry","secondEntry","warningMessage","console","warn","installReportPlugin","credentials","currentlyCachedRequests","expectedCacheKeys","values","deletedURLs","getURLsToCacheKeys","getCachedURLs","getIntegrityForCacheKey","matchPrecache","createHandlerBoundToURL","getOrCreatePrecacheController","PrecacheRoute","urlsToCacheKeys","possibleURL","ignoreURLParametersMatching","directoryIndex","cleanURLs","urlManipulation","hash","urlWithoutIgnoredParams","paramName","some","test","removeIgnoredSearchParams","pathname","endsWith","directoryURL","cleanURL","additionalURLs","urlToAttempt","generateURLVariations","addRoute","capture","captureUrl","matchCallback","moduleName","funcName"],"mappings":"4CAEA,IACIA,KAAK,uBAAyBC,GAClC,CACA,MAAOC,GAAG,CCIV,MAcaC,EAdIC,CAACC,KAASC,KACvB,IAAIC,EAAMF,EAIV,OAHIC,EAAKE,OAAS,IACdD,GAAO,OAAOE,KAAKC,UAAUJ,MAE1BC,GCIX,MAAMI,UAAqBC,MASvBC,WAAAA,CAAYC,EAAWC,GAEnBC,MADgBb,EAAiBW,EAAWC,IAE5CE,KAAKC,KAAOJ,EACZG,KAAKF,QAAUA,CACnB,ECxBJ,MAAMI,EAAoB,CACtBC,gBAAiB,kBACjBC,SAAU,cACVC,OAAQ,UACRC,QAAS,UACTC,OAAgC,oBAAjBC,aAA+BA,aAAaC,MAAQ,IAEjEC,EAAoBC,GACf,CAACT,EAAkBG,OAAQM,EAAWT,EAAkBK,QAC1DK,OAAQC,GAAUA,GAASA,EAAMtB,OAAS,GAC1CuB,KAAK,KAODC,EACOjB,IANSkB,KACzB,IAAK,MAAMC,KAAOC,OAAOC,KAAKjB,GAC1Bc,EAAGC,IAKHG,CAAqBH,IACW,iBAAjBnB,EAAQmB,KACff,EAAkBe,GAAOnB,EAAQmB,OAJpCF,EAWSM,GACPA,GAAiBX,EAAiBR,EAAkBE,UAZtDW,EAiBQM,GACNA,GAAiBX,EAAiBR,EAAkBI,SCzCnE,IACIvB,KAAK,0BAA4BC,GACrC,CACA,MAAOC,GAAG,CCWH,MCAMqC,EAAoBC,GACzBA,GAA8B,iBAAZA,EASXA,EAWA,CAAEC,OAAQD,GCjBzB,MAAME,EAYF7B,WAAAA,CAAY8B,EAAOH,EAASI,EFhBH,OE8BrB3B,KAAKuB,QAAUD,EAAiBC,GAChCvB,KAAK0B,MAAQA,EACb1B,KAAK2B,OAASA,CAClB,CAMAC,eAAAA,CAAgBL,GACZvB,KAAK6B,aAAeP,EAAiBC,EACzC,ECnCJ,MAAMO,UAAoBL,EActB7B,WAAAA,CAAYmC,EAAQR,EAASI,GAiCzB5B,MAxBc2B,EAAGM,UACb,MAAMC,EAASF,EAAOG,KAAKF,EAAIG,MAE/B,GAAKF,IAODD,EAAII,SAAWC,SAASD,QAA2B,IAAjBH,EAAOK,OAY7C,OAAOL,EAAOM,MAAM,IAEXhB,EAASI,EAC1B,ECvCJ,MAAMa,EAIF5C,WAAAA,GACII,KAAKyC,EAAU,IAAIC,IACnB1C,KAAK2C,EAAqB,IAAID,GAClC,CAMA,UAAIE,GACA,OAAO5C,KAAKyC,CAChB,CAKAI,gBAAAA,GAEI9D,KAAK+D,iBAAiB,QAAWC,IAC7B,MAAMC,QAAEA,GAAYD,EACdE,EAAkBjD,KAAKkD,cAAc,CAAEF,UAASD,UAClDE,GACAF,EAAMI,YAAYF,IAG9B,CAuBAG,gBAAAA,GAEIrE,KAAK+D,iBAAiB,UAAaC,IAG/B,GAAIA,EAAMM,MAA4B,eAApBN,EAAMM,KAAKC,KAAuB,CAEhD,MAAMC,QAAEA,GAAYR,EAAMM,KAIpBG,EAAkBC,QAAQC,IAAIH,EAAQI,YAAYC,IAAKC,IACpC,iBAAVA,IACPA,EAAQ,CAACA,IAEb,MAAMb,EAAU,IAAIc,WAAWD,GAC/B,OAAO7D,KAAKkD,cAAc,CAAEF,UAASD,aAKzCA,EAAMgB,UAAUP,GAEZT,EAAMiB,OAASjB,EAAMiB,MAAM,IACtBR,EAAgBS,KAAK,IAAMlB,EAAMiB,MAAM,GAAGE,aAAY,GAEnE,GAER,CAaAhB,aAAAA,EAAcF,QAAEA,EAAOD,MAAEA,IASrB,MAAMf,EAAM,IAAImC,IAAInB,EAAQhB,IAAKK,SAASF,MAC1C,IAAKH,EAAIoC,SAASC,WAAW,QAIzB,OAEJ,MAAMC,EAAatC,EAAII,SAAWC,SAASD,QACrCmC,OAAEA,EAAMC,MAAEA,GAAUxE,KAAKyE,kBAAkB,CAC7C1B,QACAC,UACAsB,aACAtC,QAEJ,IAAIT,EAAUiD,GAASA,EAAMjD,QAe7B,MAAMI,EAASqB,EAAQrB,OAQvB,IAPKJ,GAAWvB,KAAK2C,EAAmB+B,IAAI/C,KAKxCJ,EAAUvB,KAAK2C,EAAmBgC,IAAIhD,KAErCJ,EAMD,OAkBJ,IAAI0B,EACJ,IACIA,EAAkB1B,EAAQC,OAAO,CAAEQ,MAAKgB,UAASD,QAAOwB,UAC3D,CACD,MAAOK,GACH3B,EAAkBQ,QAAQoB,OAAOD,EACrC,CAEA,MAAM/C,EAAe2C,GAASA,EAAM3C,aAuCpC,OAtCIoB,aAA2BQ,UAC1BzD,KAAK8E,GAAiBjD,KACvBoB,EAAkBA,EAAgB8B,MAAMC,UAEpC,GAAInD,EAUA,IACI,aAAaA,EAAaL,OAAO,CAAEQ,MAAKgB,UAASD,QAAOwB,UAC3D,CACD,MAAOU,GACCA,aAAoBtF,QACpBiF,EAAMK,EAEd,CAEJ,GAAIjF,KAAK8E,EAUL,OAAO9E,KAAK8E,EAActD,OAAO,CAAEQ,MAAKgB,UAASD,UAErD,MAAM6B,KAGP3B,CACX,CAgBAwB,iBAAAA,EAAkBzC,IAAEA,EAAGsC,WAAEA,EAAUtB,QAAEA,EAAOD,MAAEA,IAC1C,MAAMH,EAAS5C,KAAKyC,EAAQkC,IAAI3B,EAAQrB,SAAW,GACnD,IAAK,MAAM6C,KAAS5B,EAAQ,CACxB,IAAI2B,EAGJ,MAAMW,EAAcV,EAAM9C,MAAM,CAAEM,MAAKsC,aAAYtB,UAASD,UAC5D,GAAImC,EA6BA,OAjBAX,EAASW,GACLC,MAAMC,QAAQb,IAA6B,IAAlBA,EAAOhF,QAI3B2F,EAAYtF,cAAgBsB,QACG,IAApCA,OAAOC,KAAK+D,GAAa3F,QAIG,kBAAhB2F,KAPZX,OAASc,GAcN,CAAEb,QAAOD,SAExB,CAEA,MAAO,EACX,CAeAe,iBAAAA,CAAkB/D,EAASI,EJ1SF,OI2SrB3B,KAAK2C,EAAmB4C,IAAI5D,EAAQL,EAAiBC,GACzD,CAQAK,eAAAA,CAAgBL,GACZvB,KAAK8E,EAAgBxD,EAAiBC,EAC1C,CAMAiE,aAAAA,CAAchB,GAiCLxE,KAAKyC,EAAQiC,IAAIF,EAAM7C,SACxB3B,KAAKyC,EAAQ8C,IAAIf,EAAM7C,OAAQ,IAInC3B,KAAKyC,EAAQkC,IAAIH,EAAM7C,QAAQ8D,KAAKjB,EACxC,CAMAkB,eAAAA,CAAgBlB,GACZ,IAAKxE,KAAKyC,EAAQiC,IAAIF,EAAM7C,QACxB,MAAM,IAAIjC,EAAa,6CAA8C,CACjEiC,OAAQ6C,EAAM7C,SAGtB,MAAMgE,EAAa3F,KAAKyC,EAAQkC,IAAIH,EAAM7C,QAAQiE,QAAQpB,GAC1D,KAAImB,GAAc,GAId,MAAM,IAAIjG,EAAa,yCAHvBM,KAAKyC,EAAQkC,IAAIH,EAAM7C,QAAQkE,OAAOF,EAAY,EAK1D,EC7XJ,IAAIG,ECOJ,SAAS/B,EAAUhB,EAAOgD,GACtB,MAAMC,EAAgBD,IAEtB,OADAhD,EAAMgB,UAAUiC,GACTA,CACX,CClBA,IACIjH,KAAK,6BAA+BC,GACxC,CACA,MAAOC,GAAG,CCeH,SAASgH,EAAepC,GAC3B,IAAKA,EACD,MAAM,IAAInE,EAAa,oCAAqC,CAAEmE,UAIlE,GAAqB,iBAAVA,EAAoB,CAC3B,MAAMqC,EAAY,IAAI/B,IAAIN,EAAOxB,SAASF,MAC1C,MAAO,CACHgE,SAAUD,EAAU/D,KACpBH,IAAKkE,EAAU/D,KAEvB,CACA,MAAMiE,SAAEA,EAAQpE,IAAEA,GAAQ6B,EAC1B,IAAK7B,EACD,MAAM,IAAItC,EAAa,oCAAqC,CAAEmE,UAIlE,IAAKuC,EAAU,CACX,MAAMF,EAAY,IAAI/B,IAAInC,EAAKK,SAASF,MACxC,MAAO,CACHgE,SAAUD,EAAU/D,KACpBH,IAAKkE,EAAU/D,KAEvB,CAGA,MAAMkE,EAAc,IAAIlC,IAAInC,EAAKK,SAASF,MACpCmE,EAAc,IAAInC,IAAInC,EAAKK,SAASF,MAE1C,OADAkE,EAAYE,aAAahB,IAxCC,kBAwC0Ba,GAC7C,CACHD,SAAUE,EAAYlE,KACtBH,IAAKsE,EAAYnE,KAEzB,CCzCA,MAAMqE,EACF5G,WAAAA,GACII,KAAKyG,YAAc,GACnBzG,KAAK0G,eAAiB,GACtB1G,KAAK2G,iBAAmB3B,OAAShC,UAAS4D,YAElCA,IACAA,EAAMC,gBAAkB7D,IAGhChD,KAAK8G,yBAA2B9B,OAASjC,QAAO6D,QAAOG,qBACnD,GAAmB,YAAfhE,EAAMO,MACFsD,GACAA,EAAMC,iBACND,EAAMC,2BAA2B/C,QAAS,CAE1C,MAAM9B,EAAM4E,EAAMC,gBAAgB7E,IAC9B+E,EACA/G,KAAK0G,eAAejB,KAAKzD,GAGzBhC,KAAKyG,YAAYhB,KAAKzD,EAE9B,CAEJ,OAAO+E,EAEf,EC3BJ,MAAMC,EACFpH,WAAAA,EAAYqH,mBAAEA,IACVjH,KAAKkH,mBAAqBlC,OAAShC,UAASuB,aAGxC,MAAM4B,GAAY5B,aAA4C,EAAIA,EAAO4B,WACrEnG,KAAKmH,EAAoBC,kBAAkBpE,EAAQhB,KAEvD,OAAOmE,EACD,IAAIrC,QAAQqC,EAAU,CAAEkB,QAASrE,EAAQqE,UACzCrE,GAEVhD,KAAKmH,EAAsBF,CAC/B,ECnBJ,IAAIK,ECqBJtC,eAAeuC,EAAaC,EAAUC,GAClC,IAAIrF,EAAS,KAEb,GAAIoF,EAASxF,IAAK,CAEdI,EADoB,IAAI+B,IAAIqD,EAASxF,KAChBI,MACzB,CACA,GAAIA,IAAWrD,KAAKsD,SAASD,OACzB,MAAM,IAAI1C,EAAa,6BAA8B,CAAE0C,WAE3D,MAAMsF,EAAiBF,EAASG,QAE1BC,EAAe,CACjBP,QAAS,IAAIQ,QAAQH,EAAeL,SACpCS,OAAQJ,EAAeI,OACvBC,WAAYL,EAAeK,YAGzBC,EAAuBP,EAAWA,EAASG,GAAgBA,EAI3DK,EDjCV,WACI,QAAsB5C,IAAlBiC,EAA6B,CAC7B,MAAMY,EAAe,IAAIC,SAAS,IAClC,GAAI,SAAUD,EACV,IACI,IAAIC,SAASD,EAAaD,MAC1BX,GAAgB,CACnB,CACD,MAAOc,GACHd,GAAgB,CACpB,CAEJA,GAAgB,CACpB,CACA,OAAOA,CACX,CCkBiBe,GACPX,EAAeO,WACTP,EAAeY,OAC3B,OAAO,IAAIH,SAASF,EAAMD,EAC9B,CChDA,SAASO,EAAYC,EAASC,GAC1B,MAAMC,EAAc,IAAIvE,IAAIqE,GAC5B,IAAK,MAAMG,KAASF,EAChBC,EAAYnC,aAAaqC,OAAOD,GAEpC,OAAOD,EAAYvG,IACvB,CCGA,MAAM0G,EAIFjJ,WAAAA,GACII,KAAK8I,QAAU,IAAIrF,QAAQ,CAACsF,EAASlE,KACjC7E,KAAK+I,QAAUA,EACf/I,KAAK6E,OAASA,GAEtB,ECdJ,MAAMmE,EAAsB,IAAIC,ICThC,IACIlK,KAAK,6BAA+BC,GACxC,CACA,MAAOC,GAAG,CCWV,SAASiK,EAAUC,GACf,MAAwB,iBAAVA,EAAqB,IAAIrF,QAAQqF,GAASA,CAC5D,CAUA,MAAMC,EAiBFxJ,WAAAA,CAAYyJ,EAAUC,GAClBtJ,KAAKuJ,EAAa,GA8ClBrI,OAAOsI,OAAOxJ,KAAMsJ,GACpBtJ,KAAK+C,MAAQuG,EAAQvG,MACrB/C,KAAKyJ,EAAYJ,EACjBrJ,KAAK0J,EAAmB,IAAIb,EAC5B7I,KAAK2J,EAA0B,GAG/B3J,KAAK4J,EAAW,IAAIP,EAASQ,SAC7B7J,KAAK8J,EAAkB,IAAIpH,IAC3B,IAAK,MAAMqH,KAAU/J,KAAK4J,EACtB5J,KAAK8J,EAAgBvE,IAAIwE,EAAQ,CAAE,GAEvC/J,KAAK+C,MAAMgB,UAAU/D,KAAK0J,EAAiBZ,QAC/C,CAcA,WAAMkB,CAAMb,GACR,MAAMpG,MAAEA,GAAU/C,KAClB,IAAIgD,EAAUkG,EAAUC,GACxB,GAAqB,aAAjBnG,EAAQiH,MACRlH,aAAiBmH,YACjBnH,EAAMoH,gBAAiB,CACvB,MAAMC,QAAiCrH,EAAMoH,gBAC7C,GAAIC,EAKA,OAAOA,CAEf,CAIA,MAAMvD,EAAkB7G,KAAKqK,YAAY,gBACnCrH,EAAQ2E,QACR,KACN,IACI,IAAK,MAAM2C,KAAMtK,KAAKuK,iBAAiB,oBACnCvH,QAAgBsH,EAAG,CAAEtH,QAASA,EAAQ2E,QAAS5E,SAEtD,CACD,MAAO6B,GACH,GAAIA,aAAejF,MACf,MAAM,IAAID,EAAa,kCAAmC,CACtD8K,mBAAoB5F,EAAI6F,SAGpC,CAIA,MAAMC,EAAwB1H,EAAQ2E,QACtC,IACI,IAAIgD,EAEJA,QAAsBX,MAAMhH,EAA0B,aAAjBA,EAAQiH,UAAsB5E,EAAYrF,KAAKyJ,EAAUmB,cAM9F,IAAK,MAAMC,KAAY7K,KAAKuK,iBAAiB,mBACzCI,QAAsBE,EAAS,CAC3B9H,QACAC,QAAS0H,EACTlD,SAAUmD,IAGlB,OAAOA,CACV,CACD,MAAOvC,GAeH,MARIvB,SACM7G,KAAK8K,aAAa,eAAgB,CACpC1C,MAAOA,EACPrF,QACA8D,gBAAiBA,EAAgBc,QACjC3E,QAAS0H,EAAsB/C,UAGjCS,CACV,CACJ,CAWA,sBAAM2C,CAAiB5B,GACnB,MAAM3B,QAAiBxH,KAAKgK,MAAMb,GAC5B6B,EAAgBxD,EAASG,QAE/B,OADK3H,KAAK+D,UAAU/D,KAAKiL,SAAS9B,EAAO6B,IAClCxD,CACX,CAaA,gBAAM0D,CAAWjK,GACb,MAAM+B,EAAUkG,EAAUjI,GAC1B,IAAI8F,EACJ,MAAMpG,UAAEA,EAASwK,aAAEA,GAAiBnL,KAAKyJ,EACnC2B,QAAyBpL,KAAKqL,YAAYrI,EAAS,QACnDsI,EAAoBpK,OAAOsI,OAAOtI,OAAOsI,OAAO,CAAA,EAAI2B,GAAe,CAAExK,cAC3EoG,QAAuBwE,OAAO7J,MAAM0J,EAAkBE,GAStD,IAAK,MAAMT,KAAY7K,KAAKuK,iBAAiB,4BACzCxD,QACW8D,EAAS,CACZlK,YACAwK,eACApE,iBACA/D,QAASoI,EACTrI,MAAO/C,KAAK+C,cACTsC,EAEf,OAAO0B,CACX,CAgBA,cAAMkE,CAAShK,EAAKuG,GAChB,MAAMxE,EAAUkG,EAAUjI,GCxP3B,IAAiBuK,UD2PF,EC1PX,IAAI/H,QAASsF,GAAY0C,WAAW1C,EAASyC,KD2PhD,MAAMJ,QAAyBpL,KAAKqL,YAAYrI,EAAS,SAiBzD,IAAKwE,EAKD,MAAM,IAAI9H,EAAa,6BAA8B,CACjDsC,KE1RQA,EF0RYoJ,EAAiBpJ,IEzRlC,IAAImC,IAAIuH,OAAO1J,GAAMK,SAASF,MAG/BA,KAAKwJ,QAAQ,IAAIC,OAAO,IAAIvJ,SAASD,UAAW,OAJ1CJ,MF6RhB,MAAM6J,QAAwB7L,KAAK8L,EAA2BtE,GAC9D,IAAKqE,EAKD,OAAO,EAEX,MAAMlL,UAAEA,EAASwK,aAAEA,GAAiBnL,KAAKyJ,EACnCsC,QAAchN,KAAKwM,OAAOS,KAAKrL,GAC/BsL,EAAyBjM,KAAKqK,YAAY,kBAC1C6B,EAAcD,QJtR5BjH,eAAsC+G,EAAO/I,EAASyF,EAAc0C,GAChE,MAAMgB,EAAqB5D,EAAYvF,EAAQhB,IAAKyG,GAEpD,GAAIzF,EAAQhB,MAAQmK,EAChB,OAAOJ,EAAMrK,MAAMsB,EAASmI,GAGhC,MAAMiB,EAAclL,OAAOsI,OAAOtI,OAAOsI,OAAO,CAAA,EAAI2B,GAAe,CAAEkB,cAAc,IAC7EC,QAAkBP,EAAM5K,KAAK6B,EAASoJ,GAC5C,IAAK,MAAMjG,KAAYmG,EAEnB,GAAIH,IADwB5D,EAAYpC,EAASnE,IAAKyG,GAElD,OAAOsD,EAAMrK,MAAMyE,EAAUgF,EAIzC,CIuQoBoB,CAIRR,EAAOX,EAAiBzD,QAAS,CAAC,mBAAoBwD,GACpD,KAKN,UACUY,EAAMS,IAAIpB,EAAkBa,EAAyBJ,EAAgBlE,QAAUkE,EACxF,CACD,MAAOzD,GACH,GAAIA,aAAiBzI,MAKjB,KAHmB,uBAAfyI,EAAMnI,YGhT1B+E,iBAKI,IAAK,MAAM6F,KAAY7B,QACb6B,GAQd,CHmS0B4B,GAEJrE,CAEd,CACA,IAAK,MAAMyC,KAAY7K,KAAKuK,iBAAiB,wBACnCM,EAAS,CACXlK,YACAuL,cACAQ,YAAab,EAAgBlE,QAC7B3E,QAASoI,EACTrI,MAAO/C,KAAK+C,QAGpB,OAAO,CACX,CAYA,iBAAMsI,CAAYrI,EAASiH,GACvB,MAAMhJ,EAAM,GAAG+B,EAAQhB,SAASiI,IAChC,IAAKjK,KAAKuJ,EAAWtI,GAAM,CACvB,IAAImK,EAAmBpI,EACvB,IAAK,MAAM6H,KAAY7K,KAAKuK,iBAAiB,sBACzCa,EAAmBlC,QAAgB2B,EAAS,CACxCZ,OACAjH,QAASoI,EACTrI,MAAO/C,KAAK+C,MAEZwB,OAAQvE,KAAKuE,UAGrBvE,KAAKuJ,EAAWtI,GAAOmK,CAC3B,CACA,OAAOpL,KAAKuJ,EAAWtI,EAC3B,CAQAoJ,WAAAA,CAAYpK,GACR,IAAK,MAAM8J,KAAU/J,KAAKyJ,EAAUI,QAChC,GAAI5J,KAAQ8J,EACR,OAAO,EAGf,OAAO,CACX,CAiBA,kBAAMe,CAAa7K,EAAM0I,GACrB,IAAK,MAAMkC,KAAY7K,KAAKuK,iBAAiBtK,SAGnC4K,EAASlC,EAEvB,CAUA,iBAAC4B,CAAiBtK,GACd,IAAK,MAAM8J,KAAU/J,KAAKyJ,EAAUI,QAChC,GAA4B,mBAAjBE,EAAO9J,GAAsB,CACpC,MAAM2G,EAAQ5G,KAAK8J,EAAgBnF,IAAIoF,GACjC4C,EAAoBhE,IACtB,MAAMiE,EAAgB1L,OAAOsI,OAAOtI,OAAOsI,OAAO,CAAA,EAAIb,GAAQ,CAAE/B,UAGhE,OAAOmD,EAAO9J,GAAM2M,UAElBD,CACV,CAER,CAcA5I,SAAAA,CAAU+E,GAEN,OADA9I,KAAK2J,EAAwBlE,KAAKqD,GAC3BA,CACX,CAWA,iBAAM+D,GACF,IAAI/D,EACJ,KAAQA,EAAU9I,KAAK2J,EAAwBmD,eACrChE,CAEd,CAKAiE,OAAAA,GACI/M,KAAK0J,EAAiBX,QAAQ,KAClC,CAWA,OAAM+C,CAA2BtE,GAC7B,IAAIqE,EAAkBrE,EAClBwF,GAAc,EAClB,IAAK,MAAMnC,KAAY7K,KAAKuK,iBAAiB,mBAQzC,GAPAsB,QACWhB,EAAS,CACZ7H,QAAShD,KAAKgD,QACdwE,SAAUqE,EACV9I,MAAO/C,KAAK+C,cACTsC,EACX2H,GAAc,GACTnB,EACD,MAwBR,OArBKmB,GACGnB,GAA8C,MAA3BA,EAAgB/D,SACnC+D,OAAkBxG,GAmBnBwG,CACX,EIhfJ,MAAMoB,EAuBFrN,WAAAA,CAAY0J,EAAU,IAQlBtJ,KAAKW,UAAYI,EAA0BuI,EAAQ3I,WAQnDX,KAAK6J,QAAUP,EAAQO,SAAW,GAQlC7J,KAAK4K,aAAetB,EAAQsB,aAQ5B5K,KAAKmL,aAAe7B,EAAQ6B,YAChC,CAoBA3J,MAAAA,CAAO8H,GACH,MAAO4D,GAAgBlN,KAAKmN,UAAU7D,GACtC,OAAO4D,CACX,CAuBAC,SAAAA,CAAU7D,GAEFA,aAAmBY,aACnBZ,EAAU,CACNvG,MAAOuG,EACPtG,QAASsG,EAAQtG,UAGzB,MAAMD,EAAQuG,EAAQvG,MAChBC,EAAqC,iBAApBsG,EAAQtG,QACzB,IAAIc,QAAQwF,EAAQtG,SACpBsG,EAAQtG,QACRuB,EAAS,WAAY+E,EAAUA,EAAQ/E,YAASc,EAChD9D,EAAU,IAAI6H,EAAgBpJ,KAAM,CAAE+C,QAAOC,UAASuB,WACtD2I,EAAelN,KAAKoN,EAAa7L,EAASyB,EAASD,GAGzD,MAAO,CAACmK,EAFYlN,KAAKqN,EAAeH,EAAc3L,EAASyB,EAASD,GAG5E,CACA,OAAMqK,CAAa7L,EAASyB,EAASD,GAEjC,IAAIyE,QADEjG,EAAQuJ,aAAa,mBAAoB,CAAE/H,QAAOC,YAExD,IAKI,GAJAwE,QAAiBxH,KAAKsN,EAAQtK,EAASzB,IAIlCiG,GAA8B,UAAlBA,EAASlE,KACtB,MAAM,IAAI5D,EAAa,cAAe,CAAEsC,IAAKgB,EAAQhB,KAE5D,CACD,MAAOoG,GACH,GAAIA,aAAiBzI,MACjB,IAAK,MAAMkL,KAAYtJ,EAAQgJ,iBAAiB,mBAE5C,GADA/C,QAAiBqD,EAAS,CAAEzC,QAAOrF,QAAOC,YACtCwE,EACA,MAIZ,IAAKA,EACD,MAAMY,CAOd,CACA,IAAK,MAAMyC,KAAYtJ,EAAQgJ,iBAAiB,sBAC5C/C,QAAiBqD,EAAS,CAAE9H,QAAOC,UAASwE,aAEhD,OAAOA,CACX,CACA,OAAM6F,CAAeH,EAAc3L,EAASyB,EAASD,GACjD,IAAIyE,EACAY,EACJ,IACIZ,QAAiB0F,CACpB,CACD,MAAO9E,GAGH,CAEJ,UACU7G,EAAQuJ,aAAa,oBAAqB,CAC5C/H,QACAC,UACAwE,mBAEEjG,EAAQsL,aACjB,CACD,MAAOU,GACCA,aAA0B5N,QAC1ByI,EAAQmF,EAEhB,CAQA,SAPMhM,EAAQuJ,aAAa,qBAAsB,CAC7C/H,QACAC,UACAwE,WACAY,MAAOA,IAEX7G,EAAQwL,UACJ3E,EACA,MAAMA,CAEd,ECtLJ,MAAMoF,UAAyBP,EAkB3BrN,WAAAA,CAAY0J,EAAU,IAClBA,EAAQ3I,UAAYI,EAA2BuI,EAAQ3I,WACvDZ,MAAMuJ,GACNtJ,KAAKyN,GAC6B,IAA9BnE,EAAQoE,kBAKZ1N,KAAK6J,QAAQpE,KAAK+H,EAAiBG,uCACvC,CAQA,OAAML,CAAQtK,EAASzB,GACnB,MAAMiG,QAAiBjG,EAAQ2J,WAAWlI,GAC1C,OAAIwE,IAKAjG,EAAQwB,OAAgC,YAAvBxB,EAAQwB,MAAMO,WAClBtD,KAAK4N,EAAe5K,EAASzB,SAIjCvB,KAAK6N,EAAa7K,EAASzB,GAC5C,CACA,OAAMsM,CAAa7K,EAASzB,GACxB,IAAIiG,EACJ,MAAMjD,EAAUhD,EAAQgD,QAAU,GAElC,IAAIvE,KAAKyN,EAuCL,MAAM,IAAI/N,EAAa,yBAA0B,CAC7CiB,UAAWX,KAAKW,UAChBqB,IAAKgB,EAAQhB,MAzCQ,CAMzB,MAAM8L,EAAsBvJ,EAAOwJ,UAC7BC,EAAqBhL,EAAQ+K,UAC7BE,GAAuBD,GAAsBA,IAAuBF,EAG1EtG,QAAiBjG,EAAQyI,MAAM,IAAIlG,QAAQd,EAAS,CAChD+K,UAA4B,YAAjB/K,EAAQiH,KACb+D,GAAsBF,OACtBzI,KASNyI,GACAG,GACiB,YAAjBjL,EAAQiH,OACRjK,KAAKkO,UACmB3M,EAAQ0J,SAASjI,EAASwE,EAASG,SAQnE,CAuBA,OAAOH,CACX,CACA,OAAMoG,CAAe5K,EAASzB,GAC1BvB,KAAKkO,IACL,MAAM1G,QAAiBjG,EAAQyI,MAAMhH,GAIrC,UADwBzB,EAAQ0J,SAASjI,EAASwE,EAASG,SAIvD,MAAM,IAAIjI,EAAa,0BAA2B,CAC9CsC,IAAKgB,EAAQhB,IACb8F,OAAQN,EAASM,SAGzB,OAAON,CACX,CA4BA0G,CAAAA,GACI,IAAIC,EAAqB,KACrBC,EAA6B,EACjC,IAAK,MAAO9L,EAAOyH,KAAW/J,KAAK6J,QAAQwE,UAEnCtE,IAAWyD,EAAiBG,yCAI5B5D,IAAWyD,EAAiBc,oCAC5BH,EAAqB7L,GAErByH,EAAOwE,iBACPH,KAG2B,IAA/BA,EACApO,KAAK6J,QAAQpE,KAAK+H,EAAiBc,mCAE9BF,EAA6B,GAA4B,OAAvBD,GAEvCnO,KAAK6J,QAAQhE,OAAOsI,EAAoB,EAGhD,EAEJX,EAAiBc,kCAAoC,CACjDtJ,gBAAqBuJ,OAAC/G,SAAEA,MACfA,GAAYA,EAASM,QAAU,IACzB,KAEJN,GAGfgG,EAAiBG,uCAAyC,CACtD3I,gBAAqBuJ,OAAC/G,SAAEA,KACbA,EAASgH,iBAAmBjH,EAAaC,GAAYA,GCnMpE,MAAMiH,EAWF7O,WAAAA,EAAYe,UAAEA,EAASkJ,QAAEA,EAAU,GAAE6D,kBAAEA,GAAoB,GAAU,IACjE1N,KAAK0O,EAAmB,IAAIhM,IAC5B1C,KAAK2O,EAAoB,IAAIjM,IAC7B1C,KAAK4O,EAA0B,IAAIlM,IACnC1C,KAAKyJ,EAAY,IAAI+D,EAAiB,CAClC7M,UAAWI,EAA2BJ,GACtCkJ,QAAS,IACFA,EACH,IAAI7C,EAAuB,CAAEC,mBAAoBjH,QAErD0N,sBAGJ1N,KAAK6O,QAAU7O,KAAK6O,QAAQC,KAAK9O,MACjCA,KAAK+O,SAAW/O,KAAK+O,SAASD,KAAK9O,KACvC,CAKA,YAAIqJ,GACA,OAAOrJ,KAAKyJ,CAChB,CAWArJ,QAAAA,CAASiO,GACLrO,KAAKgP,eAAeX,GACfrO,KAAKiP,IACNlQ,KAAK+D,iBAAiB,UAAW9C,KAAK6O,SACtC9P,KAAK+D,iBAAiB,WAAY9C,KAAK+O,UACvC/O,KAAKiP,GAAkC,EAE/C,CAQAD,cAAAA,CAAeX,GASX,MAAMa,EAAkB,GACxB,IAAK,MAAMrL,KAASwK,EAAS,CAEJ,iBAAVxK,EACPqL,EAAgBzJ,KAAK5B,GAEhBA,QAA4BwB,IAAnBxB,EAAMuC,UACpB8I,EAAgBzJ,KAAK5B,EAAM7B,KAE/B,MAAMmE,SAAEA,EAAQnE,IAAEA,GAAQiE,EAAepC,GACnCsL,EAA6B,iBAAVtL,GAAsBA,EAAMuC,SAAW,SAAW,UAC3E,GAAIpG,KAAK0O,EAAiBhK,IAAI1C,IAC1BhC,KAAK0O,EAAiB/J,IAAI3C,KAASmE,EACnC,MAAM,IAAIzG,EAAa,wCAAyC,CAC5D0P,WAAYpP,KAAK0O,EAAiB/J,IAAI3C,GACtCqN,YAAalJ,IAGrB,GAAqB,iBAAVtC,GAAsBA,EAAMkK,UAAW,CAC9C,GAAI/N,KAAK4O,EAAwBlK,IAAIyB,IACjCnG,KAAK4O,EAAwBjK,IAAIwB,KAActC,EAAMkK,UACrD,MAAM,IAAIrO,EAAa,4CAA6C,CAChEsC,QAGRhC,KAAK4O,EAAwBrJ,IAAIY,EAAUtC,EAAMkK,UACrD,CAGA,GAFA/N,KAAK0O,EAAiBnJ,IAAIvD,EAAKmE,GAC/BnG,KAAK2O,EAAkBpJ,IAAIvD,EAAKmN,GAC5BD,EAAgB3P,OAAS,EAAG,CAC5B,MAAM+P,EACF,qDAASJ,EAAgBpO,KAAK,8EAK9ByO,QAAQC,KAAKF,EAKrB,CACJ,CACJ,CAWAT,OAAAA,CAAQ9L,GAGJ,OAAOgB,EAAUhB,EAAOiC,UACpB,MAAMyK,EAAsB,IAAIjJ,EAChCxG,KAAKqJ,SAASQ,QAAQpE,KAAKgK,GAG3B,IAAK,MAAOzN,EAAKmE,KAAanG,KAAK0O,EAAkB,CACjD,MAAMX,EAAY/N,KAAK4O,EAAwBjK,IAAIwB,GAC7CgJ,EAAYnP,KAAK2O,EAAkBhK,IAAI3C,GACvCgB,EAAU,IAAIc,QAAQ9B,EAAK,CAC7B+L,YACAhC,MAAOoD,EACPO,YAAa,sBAEXjM,QAAQC,IAAI1D,KAAKqJ,SAAS8D,UAAU,CACtC5I,OAAQ,CAAE4B,YACVnD,UACAD,UAER,CACA,MAAM0D,YAAEA,EAAWC,eAAEA,GAAmB+I,EAIxC,MAAO,CAAEhJ,cAAaC,mBAE9B,CAWAqI,QAAAA,CAAShM,GAGL,OAAOgB,EAAUhB,EAAOiC,UACpB,MAAM+G,QAAchN,KAAKwM,OAAOS,KAAKhM,KAAKqJ,SAAS1I,WAC7CgP,QAAgC5D,EAAM5K,OACtCyO,EAAoB,IAAI3G,IAAIjJ,KAAK0O,EAAiBmB,UAClDC,EAAc,GACpB,IAAK,MAAM9M,KAAW2M,EACbC,EAAkBlL,IAAI1B,EAAQhB,aACzB+J,EAAMnD,OAAO5F,GACnB8M,EAAYrK,KAAKzC,EAAQhB,MAMjC,MAAO,CAAE8N,gBAEjB,CAOAC,kBAAAA,GACI,OAAO/P,KAAK0O,CAChB,CAOAsB,aAAAA,GACI,MAAO,IAAIhQ,KAAK0O,EAAiBvN,OACrC,CAUAiG,iBAAAA,CAAkBpF,GACd,MAAMkE,EAAY,IAAI/B,IAAInC,EAAKK,SAASF,MACxC,OAAOnC,KAAK0O,EAAiB/J,IAAIuB,EAAU/D,KAC/C,CAMA8N,uBAAAA,CAAwB9J,GACpB,OAAOnG,KAAK4O,EAAwBjK,IAAIwB,EAC5C,CAmBA,mBAAM+J,CAAclN,GAChB,MAAMhB,EAAMgB,aAAmBc,QAAUd,EAAQhB,IAAMgB,EACjDmD,EAAWnG,KAAKoH,kBAAkBpF,GACxC,GAAImE,EAAU,CAEV,aADoBpH,KAAKwM,OAAOS,KAAKhM,KAAKqJ,SAAS1I,YACtCe,MAAMyE,EACvB,CAEJ,CASAgK,uBAAAA,CAAwBnO,GACpB,MAAMmE,EAAWnG,KAAKoH,kBAAkBpF,GACxC,IAAKmE,EACD,MAAM,IAAIzG,EAAa,oBAAqB,CAAEsC,QAElD,OAAQsH,IACJA,EAAQtG,QAAU,IAAIc,QAAQ9B,GAC9BsH,EAAQ/E,OAASrD,OAAOsI,OAAO,CAAErD,YAAYmD,EAAQ/E,QAC9CvE,KAAKqJ,SAAS7H,OAAO8H,GAEpC,ECxRJ,IAAIrC,EAKG,MAAMmJ,EAAgCA,KACpCnJ,IACDA,EAAqB,IAAIwH,GAEtBxH,GCGX,MAAMoJ,UAAsB5O,EAiBxB7B,WAAAA,CAAYqH,EAAoBqC,GAe5BvJ,MAdc2B,EAAGsB,cACb,MAAMsN,EAAkBrJ,EAAmB8I,qBAC3C,IAAK,MAAMQ,KCtBhB,UAAgCvO,GAAKwO,4BAAEA,EAA8B,CAAC,QAAS,YAAWC,eAAEA,EAAiB,aAAYC,UAAEA,GAAY,EAAIC,gBAAEA,GAAqB,IACrK,MAAMzK,EAAY,IAAI/B,IAAInC,EAAKK,SAASF,MACxC+D,EAAU0K,KAAO,SACX1K,EAAU/D,KAChB,MAAM0O,ECHH,SAAmC3K,EAAWsK,EAA8B,IAG/E,IAAK,MAAMM,IAAa,IAAI5K,EAAUK,aAAapF,QAC3CqP,EAA4BO,KAAMhP,GAAWA,EAAOiP,KAAKF,KACzD5K,EAAUK,aAAaqC,OAAOkI,GAGtC,OAAO5K,CACX,CDNoC+K,CAA0B/K,EAAWsK,GAErE,SADMK,EAAwB1O,KAC1BsO,GAAkBI,EAAwBK,SAASC,SAAS,KAAM,CAClE,MAAMC,EAAe,IAAIjN,IAAI0M,EAAwB1O,MACrDiP,EAAaF,UAAYT,QACnBW,EAAajP,IACvB,CACA,GAAIuO,EAAW,CACX,MAAMW,EAAW,IAAIlN,IAAI0M,EAAwB1O,MACjDkP,EAASH,UAAY,cACfG,EAASlP,IACnB,CACA,GAAIwO,EAAiB,CACjB,MAAMW,EAAiBX,EAAgB,CAAE3O,IAAKkE,IAC9C,IAAK,MAAMqL,KAAgBD,QACjBC,EAAapP,IAE3B,CACJ,CDAsCqP,CAAsBxO,EAAQhB,IAAKsH,GAAU,CACnE,MAAMnD,EAAWmK,EAAgB3L,IAAI4L,GACrC,GAAIpK,EAAU,CAEV,MAAO,CAAEA,WAAU4H,UADD9G,EAAmBgJ,wBAAwB9J,GAEjE,CACJ,GAMSc,EAAmBoC,SACpC,EG7BJ,SAASoI,EAASnI,GACd,MAAMrC,EAAqBmJ,KCK/B,SAAuBsB,EAASnQ,EAASI,GACrC,IAAI6C,EACJ,GAAuB,iBAAZkN,EAAsB,CAC7B,MAAMC,EAAa,IAAIxN,IAAIuN,EAASrP,SAASF,MAkC7CqC,EAAQ,IAAI/C,EAZUmQ,EAAG5P,SASdA,EAAIG,OAASwP,EAAWxP,KAGFZ,EAASI,EAC9C,MACK,GAAI+P,aAAmB9F,OAExBpH,EAAQ,IAAI1C,EAAY4P,EAASnQ,EAASI,QAEzC,GAAuB,mBAAZ+P,EAEZlN,EAAQ,IAAI/C,EAAMiQ,EAASnQ,EAASI,OAEnC,MAAI+P,aAAmBjQ,GAIxB,MAAM,IAAI/B,EAAa,yBAA0B,CAC7CmS,WAAY,kBACZC,SAAU,gBACVhB,UAAW,YANftM,EAAQkN,CAQZ,ExBrEK5L,IACDA,EAAgB,IAAItD,EAEpBsD,EAAcjD,mBACdiD,EAAc1C,oBAEX0C,GwBiEON,cAAchB,EAEhC,CD/DIgB,CADsB,IAAI6K,EAAcpJ,EAAoBqC,GAEhE,oBELA,SAA0B+E,EAAS/E,ICInC,SAAkB+E,GACa+B,IACRhQ,SAASiO,EAChC,CDNIjO,CAASiO,GACToD,EAASnI,EACb,wBECA,SAA6BxJ,GA6BzBiB,EAAyBjB,EAC7B"}&rocket::state::Staterocket::state::Staterocket::serde::json::Jsonaw_models::info::Infoserver_infofontsstatic/api/0/info/api/0/buckets/api/0/query/api/0/import/api/0/export/api/0/settingsfavicon.icojsapplicationoctet-streamapplication/octet-streamcssdefaultFailed to get db pathFailed to get Java stringCouldn't create java string/apikey_fairingLocal time out of range for `NaiveDateTime`NoSuchBucketBucketAlreadyExistsNoSuchKeyMpscErrorInternalErrorUninitializedOldDbVersionUnknownThreadDetachedWrongVersionAlreadyCreatedOtherErrorindexqueue not emptyBadCharBadEndUtf8Errorvalid_up_toerror_lena Display implementation returned an error unexpectedlyUnexpectedParseEoiCharacterBoundaryParsingErrorEmptyQueryVariableNotDefinedMathErrorInvalidTypeInvalidFunctionParametersTimeIntervalErrorBucketNotFoundRegexCompileErrorWrongJValueTypeInvalidCtorReturnInvalidArgListMethodNotFoundsigFieldNotFoundJavaExceptionJNIEnvMethodNotFoundNullPtrNullDerefTryLockJavaVMMethodNotFoundFieldAlreadySetThrowFailedParseFailedJniCall()failed to write whole bufferthere (from Rust!) │ │ assertion failed: self.mutex.compare_exchange(1, 0, Ordering::AcqRel, Ordering::Relaxed).is_ok()filled overflowindex not foundemptyfuture still here when droppingDecordefaultprefixsuffixKeykeyleaf_decordotted_decor │ │ FieldSet corrupted (this is a bug){role=server}aw_server::endpoints::ServerStateaddresscors_regexcustom_staticapi_keyno more values in next_value_seed, internal error in ValueDeserializerFailed to encode event duration for dedupaw_server::endpoints::bucket::_aw_server::endpoints::bucketRequest guard `& State < ServerState >` is forwarding.aw_server::endpoints::export::_aw_server::endpoints::exportaw_server::endpoints::import::_aw_server::endpoints::importData guard `Json < BucketsExport >` is forwarding.Internal invariant broken: dyn param not found.Please report this to the Rocket issue tracker.https://github.com/rwf2/Rocket/issuesData guard `Json < Bucket >` is forwarding.startendQuery string failed to match route declaration._unusedData guard `Json < Vec < Event > >` is forwarding.pulsetimeData guard `Json < Event >` is forwarding.Data guard `Form < ImportForm >` is forwarding.bucketsrocket::stateaw-server/src/endpoints/bucket.rs&rocket::state::Staterocket::state::Statecore::result::Result>, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Json>std::collections::hash::map::HashMapalloc::string::Stringaw_models::bucket::Bucketaw_server::endpoints::util::HttpErrorJsonbuckets_get/aw-server/src/endpoints/export.rscore::result::Resultaw_server::endpoints::util::BucketsExportRocketbuckets_exportapplicationaw-server/src/endpoints/import.rsrocket::serde::json::Jsoncore::result::Result<(), aw_server::endpoints::util::HttpErrorJson>()bucket_import_jsonmaybe_notify; read eofmaybe_notify; read_from_io blockedshut down IO completekeep-alivesize overflows MAX_SIZEHTTP/1.1 100 Continue │ │ automatically sending 100 Continueincoming body completedConn::read_headignoring expect-continue since body is emptydisable_keep_alive; closing idle connectiondisable_keep_alive; in-progress connectionfound EOF on idle connection, closingbody drained0 │ │ strrocket::serde::json::Jsonbucket_new/core::option::Optioncore::option::Optionu64core::result::Result>, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Json>alloc::vec::Vecaw_models::event::Eventbucket_events_get//events?&&i64core::result::Result, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Jsonbucket_events_get_single//events/?<_unused..>bucket_events_create//eventsf64bucket_events_heartbeat//heartbeat?core::result::Result, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Jsonbucket_event_count//events/countbucket_events_delete_by_id//events/bucket_export//exportbucket_deletecore::result::Result, aw_server::endpoints::util::HttpErrorJson>bucket_getmultipartform-datarocket::form::form::Formaw_server::endpoints::import::ImportFormbucket_import_formdevice_idNoSuchBucketBucketAlreadyExistsNoSuchKeyMpscErrorInternalErrorUninitializedOldDbVersionKeepAliveClosedPoisonErrorParseCharErrorIdleBusyDisabledStatusIoParseEmptyStringTooManyCharsErrorsErrorvalueentityInvalidLengthminmaxInvalidChoicechoicesOutOfRangeValidationDuplicateMissingUnexpectedUnknownCustomMultipartIntFloatFieldValueFieldDataFieldValueKeyIndexdescription() is deprecated; use Display │ │ capacity overflowFieldSet corrupted (this is a bug)buffer.flattenbuffer.queuecell::get_or_init(): set() => get() okread header from client timeoutparse eofaw_server::endpoints::ServerStateEventidtimestampquerymessageIP address}falsetype_map::get(): get() called before set() for given typecharsetutf-8data-formContent-Typerocket::form::parser::_rocket::form::parserdata limit exceededaw_server::endpoints::query::_aw_server::endpoints::queryRequest guard `& State < ServerState >` is forwarding.Data guard `Json < Query >` is forwarding.aw_server::endpoints::utilrocket::serde::json::_rocket::serde::jsonrocket::statecalled `Result::unwrap()` on an `Err` valueapplicationrocket::serde::json::Jsonaw_models::query::Query&rocket::state::Staterocket::state::Statecore::result::Resultserde_json::value::Valueaw_server::endpoints::util::HttpErrorJson/multipartform-datamultipart/form-datax-www-form-urlencodedapplication/x-www-form-urlencoded │ ├── readelf --wide --decompress --string-dump=.rodata {} │ │ @@ -6754,15 +6754,15 @@ │ │ id="path4386"\n │ │ inkscape:connector-curvature="0"\n │ │ sodipodi:nodetypes="cc" />\n │ │ \n │ │ \n │ │ manifest.json{"name":"ActivityWatch","short_name":"ActivityWatch","theme_color":"#4DBA87","icons":[{"src":"logo.png","sizes":"512x512","type":"image/png"}],"start_url":".","display":"standalone","background_color":"#000000"}service-worker.jsif(!self.define){let s,l={};const n=(n,r)=>(n=new URL(n+".js",r).href,l[n]||new Promise(l=>{if("document"in self){const s=document.createElement("script");s.src=n,s.onload=l,document.head.appendChild(s)}else s=n,importScripts(n),l()}).then(()=>{let s=l[n];if(!s)throw new Error(`Module ${n} didn�t register its module`);return s}));self.define=(r,i)=>{const u=s||("document"in self?document.currentScript.src:"")||location.href;if(l[u])return;let e={};const c=s=>n(s,u),o={module:{uri:u},exports:e,require:c};l[u]=Promise.all(r.map(s=>o[s]||c(s))).then(s=>(i(...s),e))}}define(["./workbox-711a2045"],function(s){"use strict";s.setCacheNameDetails({prefix:"aw-webui"}),self.addEventListener("message",s=>{s.data&&"SKIP_WAITING"===s.data.type&&self.skipWaiting()}),s.precacheAndRoute([{url:"/css/1523.3af55662.css",revision:null},{url:"/css/1588.bd0bb219.css",revision:null},{url:"/css/1814.63a247f6.css",revision:null},{url:"/css/185.be8e4b9a.css",revision:null},{url:"/css/2233.e1bcf8fb.css",revision:null},{url:"/css/2352.af75f974.css",revision:null},{url:"/css/265.a9f5afc4.css",revision:null},{url:"/css/2921.0e21fe03.css",revision:null},{url:"/css/2970.0e21fe03.css",revision:null},{url:"/css/3510.cd69135e.css",revision:null},{url:"/css/3593.0e21fe03.css",revision:null},{url:"/css/4067.dcf2e439.css",revision:null},{url:"/css/428.fdf3fbd9.css",revision:null},{url:"/css/4528.ec40e91d.css",revision:null},{url:"/css/495.0e21fe03.css",revision:null},{url:"/css/5480.8f4f9eec.css",revision:null},{url:"/css/579.0a541622.css",revision:null},{url:"/css/5812.38cfb433.css",revision:null},{url:"/css/5966.c7b9176f.css",revision:null},{url:"/css/6218.0e21fe03.css",revision:null},{url:"/css/6531.22cc2d8b.css",revision:null},{url:"/css/663.692259ab.css",revision:null},{url:"/css/6652.0e21fe03.css",revision:null},{url:"/css/6741.67d99f8a.css",revision:null},{url:"/css/7496.0e21fe03.css",revision:null},{url:"/css/7561.280efd83.css",revision:null},{url:"/css/8081.e565b3f9.css",revision:null},{url:"/css/8123.25aa2d67.css",revision:null},{url:"/css/8327.64666c05.css",revision:null},{url:"/css/8596.36d78776.css",revision:null},{url:"/css/8599.3a3e658b.css",revision:null},{url:"/css/8665.f93fd221.css",revision:null},{url:"/css/8932.0e21fe03.css",revision:null},{url:"/css/8948.643cd595.css",revision:null},{url:"/css/9305.3e60e51d.css",revision:null},{url:"/css/9399.af65a5d7.css",revision:null},{url:"/css/chunk-vendors.5a33e728.css",revision:null},{url:"/css/index.08a8e1ac.css",revision:null},{url:"/dark.css",revision:"8bc8c75d670bba7c6ca0122c39beb964"},{url:"/fonts/varela-round-latin-400.72c5f1d4.woff2",revision:null},{url:"/fonts/varela-round-latin-400.ff576336.woff",revision:null},{url:"/index.html",revision:"7243701e68bb304ba443f64fa51fdf2c"},{url:"/js/1064.703d75f1.js",revision:null},{url:"/js/1172.0f4182b3.js",revision:null},{url:"/js/1523.12118690.js",revision:null},{url:"/js/1588.aa9f3f15.js",revision:null},{url:"/js/1814.d46e9bc8.js",revision:null},{url:"/js/185.62497fc3.js",revision:null},{url:"/js/2230.3215567d.js",revision:null},{url:"/js/2233.c2115b33.js",revision:null},{url:"/js/2352.1ad93c6c.js",revision:null},{url:"/js/2374.dc0764c4.js",revision:null},{url:"/js/2535.5fc7abe0.js",revision:null},{url:"/js/265.f78fd35d.js",revision:null},{url:"/js/2921.f2fbc226.js",revision:null},{url:"/js/2970.077864a1.js",revision:null},{url:"/js/2972.abaf9c34.js",revision:null},{url:"/js/3377.b843e352.js",revision:null},{url:"/js/3510.d0330312.js",revision:null},{url:"/js/3593.becd60e0.js",revision:null},{url:"/js/3837.aa23cf66.js",revision:null},{url:"/js/4033.1ef6ffc4.js",revision:null},{url:"/js/4067.341ed2f6.js",revision:null},{url:"/js/428.eac37ee4.js",revision:null},{url:"/js/4513.debf088d.js",revision:null},{url:"/js/4516.7aacfe2f.js",revision:null},{url:"/js/4528.d729566f.js",revision:null},{url:"/js/495.a6e46481.js",revision:null},{url:"/js/5013.56cf47a8.js",revision:null},{url:"/js/5034.3fc015f7.js",revision:null},{url:"/js/5480.a2d6d5cf.js",revision:null},{url:"/js/5649.f2a750a0.js",revision:null},{url:"/js/579.b909463e.js",revision:null},{url:"/js/5793.6b12a4f9.js",revision:null},{url:"/js/5803.4b20c165.js",revision:null},{url:"/js/5812.6233be92.js",revision:null},{url:"/js/5966.66ce7a50.js",revision:null},{url:"/js/6218.e53707fb.js",revision:null},{url:"/js/6514.43b09bcb.js",revision:null},{url:"/js/6531.e78f2219.js",revision:null},{url:"/js/663.97e7e4d3.js",revision:null},{url:"/js/6652.0a490cb9.js",revision:null},{url:"/js/6741.5fd675ba.js",revision:null},{url:"/js/7496.11fb35e2.js",revision:null},{url:"/js/7561.e7ca49b3.js",revision:null},{url:"/js/7634.34f19064.js",revision:null},{url:"/js/8081.a2aa8edc.js",revision:null},{url:"/js/8123.809ec791.js",revision:null},{url:"/js/8191.6a088066.js",revision:null},{url:"/js/8327.685ff366.js",revision:null},{url:"/js/8376.f63b6151.js",revision:null},{url:"/js/8596.0548d980.js",revision:null},{url:"/js/8599.46e04f48.js",revision:null},{url:"/js/8665.151a2c8a.js",revision:null},{url:"/js/8880.21fa7092.js",revision:null},{url:"/js/8932.31ef541c.js",revision:null},{url:"/js/8948.dd3c8695.js",revision:null},{url:"/js/901.21266bcc.js",revision:null},{url:"/js/9305.bd0d368f.js",revision:null},{url:"/js/9399.4c9cf5be.js",revision:null},{url:"/js/9565.078d08a2.js",revision:null},{url:"/js/980.0cf8e040.js",revision:null},{url:"/js/chunk-vendors.4b5dc043.js",revision:null},{url:"/js/index.df4f8794.js",revision:null},{url:"/logo.png",revision:"3cbfce2efacc0dd8d09018233de4afa9"},{url:"/logo.svg",revision:"17fa81a8fc448f2c53f30514400a7c5c"},{url:"/manifest.json",revision:"f6c821dd0bf011176cfb914f2508764c"}],{})});\n │ │ //# sourceMappingURL=service-worker.js.map\n │ │ - service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/f63145c24d48a4d85c5c0b1874c25749/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}});\n │ │ + service-worker.js.map{"version":3,"file":"service-worker.js","sources":["../../../../../../tmp/9c2e57c370725548057d828ec0f51d15/service-worker.js"],"sourcesContent":["import {setCacheNameDetails as workbox_core_setCacheNameDetails} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/vagrant/build/net.activitywatch.android/aw-server-rust/aw-webui/node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\n\nworkbox_core_setCacheNameDetails({prefix: \"aw-webui\"});\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n\n\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"/css/1523.3af55662.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1588.bd0bb219.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/1814.63a247f6.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/185.be8e4b9a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2233.e1bcf8fb.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2352.af75f974.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/265.a9f5afc4.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2921.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/2970.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3510.cd69135e.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/3593.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4067.dcf2e439.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/428.fdf3fbd9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/4528.ec40e91d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/495.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5480.8f4f9eec.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/579.0a541622.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5812.38cfb433.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/5966.c7b9176f.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6218.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6531.22cc2d8b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/663.692259ab.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6652.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/6741.67d99f8a.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7496.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/7561.280efd83.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8081.e565b3f9.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8123.25aa2d67.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8327.64666c05.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8596.36d78776.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8599.3a3e658b.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8665.f93fd221.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8932.0e21fe03.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/8948.643cd595.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9305.3e60e51d.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/9399.af65a5d7.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/chunk-vendors.5a33e728.css\",\n \"revision\": null\n },\n {\n \"url\": \"/css/index.08a8e1ac.css\",\n \"revision\": null\n },\n {\n \"url\": \"/dark.css\",\n \"revision\": \"8bc8c75d670bba7c6ca0122c39beb964\"\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.72c5f1d4.woff2\",\n \"revision\": null\n },\n {\n \"url\": \"/fonts/varela-round-latin-400.ff576336.woff\",\n \"revision\": null\n },\n {\n \"url\": \"/index.html\",\n \"revision\": \"7243701e68bb304ba443f64fa51fdf2c\"\n },\n {\n \"url\": \"/js/1064.703d75f1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1172.0f4182b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1523.12118690.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1588.aa9f3f15.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/1814.d46e9bc8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/185.62497fc3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2230.3215567d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2233.c2115b33.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2352.1ad93c6c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2374.dc0764c4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2535.5fc7abe0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/265.f78fd35d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2921.f2fbc226.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2970.077864a1.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/2972.abaf9c34.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3377.b843e352.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3510.d0330312.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3593.becd60e0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/3837.aa23cf66.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4033.1ef6ffc4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4067.341ed2f6.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/428.eac37ee4.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4513.debf088d.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4516.7aacfe2f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/4528.d729566f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/495.a6e46481.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5013.56cf47a8.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5034.3fc015f7.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5480.a2d6d5cf.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5649.f2a750a0.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/579.b909463e.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5793.6b12a4f9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5803.4b20c165.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5812.6233be92.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/5966.66ce7a50.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6218.e53707fb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6514.43b09bcb.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6531.e78f2219.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/663.97e7e4d3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6652.0a490cb9.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/6741.5fd675ba.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7496.11fb35e2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7561.e7ca49b3.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/7634.34f19064.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8081.a2aa8edc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8123.809ec791.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8191.6a088066.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8327.685ff366.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8376.f63b6151.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8596.0548d980.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8599.46e04f48.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8665.151a2c8a.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8880.21fa7092.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8932.31ef541c.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/8948.dd3c8695.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/901.21266bcc.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9305.bd0d368f.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9399.4c9cf5be.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/9565.078d08a2.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/980.0cf8e040.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/chunk-vendors.4b5dc043.js\",\n \"revision\": null\n },\n {\n \"url\": \"/js/index.df4f8794.js\",\n \"revision\": null\n },\n {\n \"url\": \"/logo.png\",\n \"revision\": \"3cbfce2efacc0dd8d09018233de4afa9\"\n },\n {\n \"url\": \"/logo.svg\",\n \"revision\": \"17fa81a8fc448f2c53f30514400a7c5c\"\n },\n {\n \"url\": \"/manifest.json\",\n \"revision\": \"f6c821dd0bf011176cfb914f2508764c\"\n }\n], {});\n\n\n\n\n\n\n\n\n"],"names":["workbox_core_setCacheNameDetails","prefix","self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision"],"mappings":"inBAiBAA,EAAAA,oBAAiC,CAACC,OAAQ,aAG1CC,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBAYTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,yBACPC,SAAY,MAEd,CACED,IAAO,kCACPC,SAAY,MAEd,CACED,IAAO,0BACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,+CACPC,SAAY,MAEd,CACED,IAAO,8CACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,uBACPC,SAAY,MAEd,CACED,IAAO,sBACPC,SAAY,MAEd,CACED,IAAO,gCACPC,SAAY,MAEd,CACED,IAAO,wBACPC,SAAY,MAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,YACPC,SAAY,oCAEd,CACED,IAAO,iBACPC,SAAY,qCAEb,CAAA"}workbox-711a2045.jsdefine(["exports"],function(t){"use strict";try{self["workbox:core:6.5.4"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}const n={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},i=t=>[n.prefix,t,n.suffix].filter(t=>t&&t.length>0).join("-"),r=t=>{(t=>{for(const e of Object.keys(n))t(e)})(e=>{"string"==typeof t[e]&&(n[e]=t[e])})},o=t=>t||i(n.precache),c=t=>t||i(n.runtime);try{self["workbox:routing:6.5.4"]&&_()}catch(t){}const a=t=>t&&"object"==typeof t?t:{handle:t};class h{constructor(t,e,s="GET"){this.handler=a(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=a(t)}}class u extends h{constructor(t,e,s){super(({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)},e,s)}}class l{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)})}addCacheListener(){self.addEventListener("message",t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map(e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})}));t.waitUntil(s),t.ports&&t.ports[0]&&s.then(()=>t.ports[0].postMessage(!0))}})}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch(async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n})),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,a(t))}setCatchHandler(t){this.o=a(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let f;function w(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.5.4"]&&_()}catch(t){}function d(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class p{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class y{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let g;async function R(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===g){const t=new Response("");if("body"in t)try{new Response(t.body),g=!0}catch(t){g=!1}g=!1}return g}()?i.body:await i.blob();return new Response(c,o)}function m(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class v{constructor(){this.promise=new Promise((t,e)=>{this.resolve=t,this.reject=e})}}const q=new Set;try{self["workbox:strategies:6.5.4"]&&_()}catch(t){}function U(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new v,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=U(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=U(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=U(t);var i;await(i=0,new Promise(t=>setTimeout(t,i)));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=m(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===m(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of q)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=U(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class L{constructor(t={}){this.cacheName=c(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class C extends L{constructor(t={}){t.cacheName=o(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(C.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.j(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.j();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}j(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==C.copyRedirectedCacheableResponsesPlugin&&(n===C.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(C.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}C.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},C.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await R(t):t};class E{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.k=new Map,this.K=new Map,this.T=new Map,this.l=new C({cacheName:o(t),plugins:[...e,new y({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=d(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.k.has(i)&&this.k.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.k.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.k.set(i,t),this.K.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return w(t,async()=>{const e=new p;this.strategy.plugins.push(e);for(const[e,s]of this.k){const n=this.T.get(s),i=this.K.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}})}activate(t){return w(t,async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.k.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}})}getURLsToCacheKeys(){return this.k}getCachedURLs(){return[...this.k.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.k.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let O;const x=()=>(O||(O=new E),O);class N extends h{constructor(t,e){super(({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some(t=>t.test(s))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}},t.strategy)}}function j(t){const e=x();!function(t,e,n){let i;if("string"==typeof t){const s=new URL(t,location.href);i=new h(({url:t})=>t.href===s.href,e,n)}else if(t instanceof RegExp)i=new u(t,e,n);else if("function"==typeof t)i=new h(t,e,n);else{if(!(t instanceof h))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});i=t}(f||(f=new l,f.addFetchListener(),f.addCacheListener()),f).registerRoute(i)}(new N(e,t))}t.precacheAndRoute=function(t,e){!function(t){x().precache(t)}(t),j(e)},t.setCacheNameDetails=function(t){r(t)}});\n │ │ //# sourceMappingURL=workbox-711a2045.js.map\n │ │ workbox-711a2045.js.map{"version":3,"file":"workbox-711a2045.js","sources":["node_modules/workbox-webpack-plugin/node_modules/workbox-core/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/messages/messageGenerator.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/WorkboxError.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheNames.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/constants.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/normalizeHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Route.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/RegExpRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/Router.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/utils/getOrCreateDefaultRouter.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/waitUntil.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/createCacheKey.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheInstallReportPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/PrecacheCacheKeyPlugin.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/canConstructResponseFromBodyStream.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/copyResponse.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/cacheMatchIgnoreParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/Deferred.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/models/quotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/_version.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/StrategyHandler.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/timeout.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/getFriendlyURL.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/_private/executeQuotaErrorCallbacks.js","node_modules/workbox-webpack-plugin/node_modules/workbox-strategies/Strategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheStrategy.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/getOrCreatePrecacheController.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/PrecacheRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/generateURLVariations.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/utils/removeIgnoredSearchParams.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/addRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-routing/registerRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precacheAndRoute.js","node_modules/workbox-webpack-plugin/node_modules/workbox-precaching/precache.js","node_modules/workbox-webpack-plugin/node_modules/workbox-core/setCacheNameDetails.js"],"sourcesContent":["\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:core:6.5.4'] && _();\n}\ncatch (e) { }\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:routing:6.5.4'] && _();\n}\ncatch (e) { }\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}\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 '../_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 { 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 { 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>} 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 | 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|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 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 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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:precaching:6.5.4'] && _();\n}\ncatch (e) { }\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 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 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 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 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} ignoreParams\n * @return {Promise}\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 '../_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","\"use strict\";\n// @ts-ignore\ntry {\n self['workbox:strategies:6.5.4'] && _();\n}\ncatch (e) { }\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}\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}\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} 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} `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}\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}\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}\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 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 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 { 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 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} [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}\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} 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}\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} [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}\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} [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} 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}\n */\n install(event) {\n // waitUntil returns Promise\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}\n */\n activate(event) {\n // waitUntil returns Promise\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} 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} 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}\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 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} [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","/*\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} 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 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 { 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 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} 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} [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\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 './_private/assert.js';\nimport { cacheNames } from './_private/cacheNames.js';\nimport { WorkboxError } from './_private/WorkboxError.js';\nimport './_version.js';\n/**\n * Modifies the default cache names used by the Workbox packages.\n * Cache names are generated as `--`.\n *\n * @param {Object} details\n * @param {Object} [details.prefix] The string to add to the beginning of\n * the precache and runtime cache names.\n * @param {Object} [details.suffix] The string to add to the end of\n * the precache and runtime cache names.\n * @param {Object} [details.precache] The cache name to use for precache\n * caching.\n * @param {Object} [details.runtime] The cache name to use for runtime caching.\n * @param {Object} [details.googleAnalytics] The cache name to use for\n * `workbox-google-analytics` caching.\n *\n * @memberof workbox-core\n */\nfunction setCacheNameDetails(details) {\n if (process.env.NODE_ENV !== 'production') {\n Object.keys(details).forEach((key) => {\n assert.isType(details[key], 'string', {\n moduleName: 'workbox-core',\n funcName: 'setCacheNameDetails',\n paramName: `details.${key}`,\n });\n });\n if ('precache' in details && details['precache'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'precache',\n value: details['precache'],\n });\n }\n if ('runtime' in details && details['runtime'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'runtime',\n value: details['runtime'],\n });\n }\n if ('googleAnalytics' in details &&\n details['googleAnalytics'].length === 0) {\n throw new WorkboxError('invalid-cache-name', {\n cacheNameId: 'googleAnalytics',\n value: details['googleAnalytics'],\n });\n }\n }\n cacheNames.updateDetails(details);\n}\nexport { setCacheNameDetails };\n"],"names":["self","_","e","messageGenerator","fallback","code","args","msg","length","JSON","stringify","WorkboxError","Error","constructor","errorCode","details","super","this","name","_cacheNameDetails","googleAnalytics","precache","prefix","runtime","suffix","registration","scope","_createCacheName","cacheName","filter","value","join","cacheNames","fn","key","Object","keys","eachCacheNameDetail","userCacheName","normalizeHandler","handler","handle","Route","match","method","setCatchHandler","catchHandler","RegExpRoute","regExp","url","result","exec","href","origin","location","index","slice","Router","_routes","Map","_defaultHandlerMap","routes","addFetchListener","addEventListener","event","request","responsePromise","handleRequest","respondWith","addCacheListener","data","type","payload","requestPromises","Promise","all","urlsToCache","map","entry","Request","waitUntil","ports","then","postMessage","URL","protocol","startsWith","sameOrigin","params","route","findMatchingRoute","has","get","err","reject","_catchHandler","catch","async","catchErr","matchResult","Array","isArray","undefined","setDefaultHandler","set","registerRoute","push","unregisterRoute","routeIndex","indexOf","splice","defaultRouter","asyncFn","returnPromise","createCacheKey","urlObject","cacheKey","revision","cacheKeyURL","originalURL","searchParams","PrecacheInstallReportPlugin","updatedURLs","notUpdatedURLs","handlerWillStart","state","originalRequest","cachedResponseWillBeUsed","cachedResponse","PrecacheCacheKeyPlugin","precacheController","cacheKeyWillBeUsed","_precacheController","getCacheKeyForURL","headers","supportStatus","copyResponse","response","modifier","clonedResponse","clone","responseInit","Headers","status","statusText","modifiedResponseInit","body","testResponse","Response","error","canConstructResponseFromBodyStream","blob","stripParams","fullURL","ignoreParams","strippedURL","param","delete","Deferred","promise","resolve","quotaErrorCallbacks","Set","toRequest","input","StrategyHandler","strategy","options","_cacheKeys","assign","_strategy","_handlerDeferred","_extendLifetimePromises","_plugins","plugins","_pluginStateMap","plugin","fetch","mode","FetchEvent","preloadResponse","possiblePreloadResponse","hasCallback","cb","iterateCallbacks","thrownErrorMessage","message","pluginFilteredRequest","fetchResponse","fetchOptions","callback","runCallbacks","fetchAndCachePut","responseClone","cachePut","cacheMatch","matchOptions","effectiveRequest","getCacheKey","multiMatchOptions","caches","ms","setTimeout","String","replace","RegExp","responseToCache","_ensureResponseSafeToCache","cache","open","hasCacheUpdateCallback","oldResponse","strippedRequestURL","keysOptions","ignoreSearch","cacheKeys","cacheMatchIgnoreParams","put","executeQuotaErrorCallbacks","newResponse","statefulCallback","statefulParam","doneWaiting","shift","destroy","pluginsUsed","Strategy","responseDone","handleAll","_getResponse","_awaitComplete","_handle","waitUntilError","PrecacheStrategy","_fallbackToNetwork","fallbackToNetwork","copyRedirectedCacheableResponsesPlugin","_handleInstall","_handleFetch","integrityInManifest","integrity","integrityInRequest","noIntegrityConflict","_useDefaultCacheabilityPluginIfNeeded","defaultPluginIndex","cacheWillUpdatePluginCount","entries","defaultPrecacheCacheabilityPlugin","cacheWillUpdate","redirected","PrecacheController","_urlsToCacheKeys","_urlsToCacheModes","_cacheKeysToIntegrities","install","bind","activate","addToCacheList","_installAndActiveListenersAdded","urlsToWarnAbout","cacheMode","firstEntry","secondEntry","warningMessage","console","warn","installReportPlugin","credentials","currentlyCachedRequests","expectedCacheKeys","values","deletedURLs","getURLsToCacheKeys","getCachedURLs","getIntegrityForCacheKey","matchPrecache","createHandlerBoundToURL","getOrCreatePrecacheController","PrecacheRoute","urlsToCacheKeys","possibleURL","ignoreURLParametersMatching","directoryIndex","cleanURLs","urlManipulation","hash","urlWithoutIgnoredParams","paramName","some","test","removeIgnoredSearchParams","pathname","endsWith","directoryURL","cleanURL","additionalURLs","urlToAttempt","generateURLVariations","addRoute","capture","captureUrl","matchCallback","moduleName","funcName"],"mappings":"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"}&rocket::state::Staterocket::state::Staterocket::serde::json::Jsonaw_models::info::Infoserver_infofontsstatic/api/0/info/api/0/buckets/api/0/query/api/0/import/api/0/export/api/0/settingsfavicon.icojsapplicationoctet-streamapplication/octet-streamcssdefaultFailed to get db pathFailed to get Java stringCouldn't create java string/apikey_fairingLocal time out of range for `NaiveDateTime`NoSuchBucketBucketAlreadyExistsNoSuchKeyMpscErrorInternalErrorUninitializedOldDbVersionUnknownThreadDetachedWrongVersionAlreadyCreatedOtherErrorindexqueue not emptyBadCharBadEndUtf8Errorvalid_up_toerror_lena Display implementation returned an error unexpectedlyUnexpectedParseEoiCharacterBoundaryParsingErrorEmptyQueryVariableNotDefinedMathErrorInvalidTypeInvalidFunctionParametersTimeIntervalErrorBucketNotFoundRegexCompileErrorWrongJValueTypeInvalidCtorReturnInvalidArgListMethodNotFoundsigFieldNotFoundJavaExceptionJNIEnvMethodNotFoundNullPtrNullDerefTryLockJavaVMMethodNotFoundFieldAlreadySetThrowFailedParseFailedJniCall()failed to write whole bufferthere (from Rust!) │ │ [12e9028] I���X���[���assertion failed: self.mutex.compare_exchange(1, 0, Ordering::AcqRel, Ordering::Relaxed).is_ok()filled overflowindex not foundemptyfuture still here when droppingDecordefaultprefixsuffixKeykeyleaf_decordotted_decor │ │ [12e910c] Yx9����M�2@�%q^XFieldSet corrupted (this is a bug){role=server}aw_server::endpoints::ServerStateaddresscors_regexcustom_staticapi_keyno more values in next_value_seed, internal error in ValueDeserializerFailed to encode event duration for dedupaw_server::endpoints::bucket::_aw_server::endpoints::bucketRequest guard `& State < ServerState >` is forwarding.aw_server::endpoints::export::_aw_server::endpoints::exportaw_server::endpoints::import::_aw_server::endpoints::importData guard `Json < BucketsExport >` is forwarding.Internal invariant broken: dyn param not found.Please report this to the Rocket issue tracker.https://github.com/rwf2/Rocket/issuesData guard `Json < Bucket >` is forwarding.startendQuery string failed to match route declaration._unusedData guard `Json < Vec < Event > >` is forwarding.pulsetimeData guard `Json < Event >` is forwarding.Data guard `Form < ImportForm >` is forwarding.bucketsrocket::stateaw-server/src/endpoints/bucket.rs&rocket::state::Staterocket::state::Statecore::result::Result>, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Json>std::collections::hash::map::HashMapalloc::string::Stringaw_models::bucket::Bucketaw_server::endpoints::util::HttpErrorJsonbuckets_get/aw-server/src/endpoints/export.rscore::result::Resultaw_server::endpoints::util::BucketsExportRocketbuckets_exportapplicationaw-server/src/endpoints/import.rsrocket::serde::json::Jsoncore::result::Result<(), aw_server::endpoints::util::HttpErrorJson>()bucket_import_jsonmaybe_notify; read eofmaybe_notify; read_from_io blockedshut down IO completekeep-alivesize overflows MAX_SIZEHTTP/1.1 100 Continue^M\n │ │ automatically sending 100 Continueincoming body completedConn::read_headignoring expect-continue since body is emptydisable_keep_alive; closing idle connectiondisable_keep_alive; in-progress connectionfound EOF on idle connection, closingbody drained0^M\n │ │ strrocket::serde::json::Jsonbucket_new/core::option::Optioncore::option::Optionu64core::result::Result>, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Json>alloc::vec::Vecaw_models::event::Eventbucket_events_get//events?&&i64core::result::Result, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Jsonbucket_events_get_single//events/?<_unused..>bucket_events_create//eventsf64bucket_events_heartbeat//heartbeat?core::result::Result, aw_server::endpoints::util::HttpErrorJson>rocket::serde::json::Jsonbucket_event_count//events/countbucket_events_delete_by_id//events/bucket_export//exportbucket_deletecore::result::Result, aw_server::endpoints::util::HttpErrorJson>bucket_getmultipartform-datarocket::form::form::Formaw_server::endpoints::import::ImportFormbucket_import_formdevice_idNoSuchBucketBucketAlreadyExistsNoSuchKeyMpscErrorInternalErrorUninitializedOldDbVersionKeepAliveClosedPoisonErrorParseCharErrorIdleBusyDisabledStatusIoParseEmptyStringTooManyCharsErrorsErrorvalueentityInvalidLengthminmaxInvalidChoicechoicesOutOfRangeValidationDuplicateMissingUnexpectedUnknownCustomMultipartIntFloatFieldValueFieldDataFieldValueKeyIndexdescription() is deprecated; use Display │ │ [12ea11d] @^\(^LFR4^^Xcapacity overflowFieldSet corrupted (this is a bug)buffer.flattenbuffer.queuecell::get_or_init(): set() => get() okread header from client timeoutparse eofaw_server::endpoints::ServerStateEventidtimestampquerymessageIP address}falsetype_map::get(): get() called before set() for given typecharsetutf-8data-formContent-Typerocket::form::parser::_rocket::form::parserdata limit exceededaw_server::endpoints::query::_aw_server::endpoints::queryRequest guard `& State < ServerState >` is forwarding.Data guard `Json < Query >` is forwarding.aw_server::endpoints::utilrocket::serde::json::_rocket::serde::jsonrocket::statecalled `Result::unwrap()` on an `Err` valueapplicationrocket::serde::json::Jsonaw_models::query::Query&rocket::state::Staterocket::state::Statecore::result::Resultserde_json::value::Valueaw_server::endpoints::util::HttpErrorJson/multipartform-datamultipart/form-datax-www-form-urlencodedapplication/x-www-form-urlencoded\n │ ├── readelf --wide --decompress --hex-dump=.data.rel.ro {} │ │ @@ -1448,17 +1448,17 @@ │ │ 0x01bed580 01000000 00000000 90b2a76a 00000000 ...........j.... │ │ 0x01bed590 c13eb6f9 c6406082 1ef9c8b9 8176ee34 .>...@`......v.4 │ │ 0x01bed5a0 5814a08a 4be39b2f c8aa813e 5920010c X...K../...>Y .. │ │ 0x01bed5b0 ffffffff ffffffff 00000000 00000000 ................ │ │ 0x01bed5c0 24160000 00000000 00000000 00000000 $............... │ │ 0x01bed5d0 15000000 00000000 01000000 00000000 ................ │ │ 0x01bed5e0 90b2a76a 00000000 01000000 00000000 ...j............ │ │ - 0x01bed5f0 90b2a76a 00000000 9fd9d1aa cd69402e ...j.........i@. │ │ - 0x01bed600 b9807f2e 5e76840e 6cc383df 114e991e ....^v..l....N.. │ │ - 0x01bed610 d6d9be5c 1b14e320 ffffffff ffffffff ...\... ........ │ │ + 0x01bed5f0 90b2a76a 00000000 7bdaacc7 25b19654 ...j....{...%..T │ │ + 0x01bed600 5d35edf0 4bb99faa 6c0b7966 91d2735c ]5..K...l.yf..s\ │ │ + 0x01bed610 9333a2bb 8eb8a198 ffffffff ffffffff .3.............. │ │ 0x01bed620 00000000 00000000 c6320000 00000000 .........2...... │ │ 0x01bed630 00000000 00000000 13000000 00000000 ................ │ │ 0x01bed640 01000000 00000000 90b2a76a 00000000 ...........j.... │ │ 0x01bed650 01000000 00000000 90b2a76a 00000000 ...........j.... │ │ 0x01bed660 20303f36 731bff3a 555ee80b a80b28e1 0?6s..:U^....(. │ │ 0x01bed670 c477ab33 4de8aa7d f618f6fc ef7b58e0 .w.3M..}.....{X. │ │ 0x01bed680 ffffffff ffffffff 00000000 00000000 ................