{"version":3,"file":"install-sw.js","mappings":"mBAAA,MAAMA,EACFC,YAAYC,EAAS,eAAgBC,EAAY,UAC7CC,KAAKD,UAAYA,EACjBC,KAAKC,KAAO,IAAIC,SAAQ,CAACC,EAASC,KAC9B,MAAMC,EAAUC,UAAUC,KAAKT,EAAQ,GACvCO,EAAQG,QAAU,IAAMJ,EAAOC,EAAQI,OACvCJ,EAAQK,UAAY,IAAMP,EAAQE,EAAQM,QAE1CN,EAAQO,gBAAkB,KACtBP,EAAQM,OAAOE,kBAAkBd,EAAU,CAC9C,GAET,CACAe,cAAcC,EAAMC,GAChB,OAAOhB,KAAKC,KAAKgB,MAAKC,GAAM,IAAIhB,SAAQ,CAACC,EAASC,KAC9C,MAAMe,EAAcD,EAAGC,YAAYnB,KAAKD,UAAWgB,GACnDI,EAAYC,WAAa,IAAMjB,IAC/BgB,EAAYE,QAAUF,EAAYX,QAAU,IAAMJ,EAAOe,EAAYV,OACrEO,EAASG,EAAYG,YAAYtB,KAAKD,WAAW,KAEzD,EAEJ,IAAIwB,EACJ,SAASC,IAGL,OAFKD,IACDA,EAAQ,IAAI3B,GACT2B,CACX,C,0SCxBO,MAAME,EAAsB,qBCD/B,kBAAmBC,WDmChB,W,yCAIH,OArBsCC,EAqBL,CAC7BC,mBAjCR,W,yCACI,IAAKC,KAAKC,kBAAmB,OAAO,EAEpC,MACMC,QAAaC,MADF,+EACkBf,MAAKgB,GAAKA,EAAEF,SAC/C,OAAOD,kBAAkBC,GAAMd,MAC3B,KAAM,IACN,KAAM,GAEd,G,CAoBuBW,GAKfM,sBAJ0BC,OAAOC,iBAAmB,GDX5D,SAAaC,EAAKd,EAAQC,KACtB,IAAIc,EACJ,OAAOf,EAAMT,cAAc,YAAYS,IACnCe,EAAMf,EAAMgB,IAAIF,EAAI,IACrBpB,MAAK,IAAMqB,EAAI3B,QACtB,CCZW,CAAIc,GAAqBR,MAAMuB,GDa1C,SAAaH,EAAKI,EAAOlB,EAAQC,KAC7B,OAAOD,EAAMT,cAAc,aAAaS,IACpCA,EAAMmB,IAAID,EAAOJ,EAAI,GAE7B,CChBeM,CAAIlB,EAAqB,CAC5BG,aAAcD,EAAOC,aACrBM,sBACIP,EAAOO,uBACNM,GAAiBA,EAAcN,0BANzC,IAAmCP,CAyB1C,G,CC1CIiB,GAAkC3B,MAAK,KACnCS,UAAUmB,cAAcC,SAAS,UAAUC,OAAMtC,IAE7CuC,QAAQvC,MAAM,sCAAuCA,EAAM,GAC7D,G","sources":["webpack://bastion/./node_modules/idb-keyval/dist/idb-keyval.mjs","webpack://bastion/./src/service-worker/tapestry/tapestry-configuration.ts","webpack://bastion/./src/service-worker/install-sw.ts"],"sourcesContent":["class Store {\r\n constructor(dbName = 'keyval-store', storeName = 'keyval') {\r\n this.storeName = storeName;\r\n this._dbp = new Promise((resolve, reject) => {\r\n const openreq = indexedDB.open(dbName, 1);\r\n openreq.onerror = () => reject(openreq.error);\r\n openreq.onsuccess = () => resolve(openreq.result);\r\n // First time setup: create an empty object store\r\n openreq.onupgradeneeded = () => {\r\n openreq.result.createObjectStore(storeName);\r\n };\r\n });\r\n }\r\n _withIDBStore(type, callback) {\r\n return this._dbp.then(db => new Promise((resolve, reject) => {\r\n const transaction = db.transaction(this.storeName, type);\r\n transaction.oncomplete = () => resolve();\r\n transaction.onabort = transaction.onerror = () => reject(transaction.error);\r\n callback(transaction.objectStore(this.storeName));\r\n }));\r\n }\r\n}\r\nlet store;\r\nfunction getDefaultStore() {\r\n if (!store)\r\n store = new Store();\r\n return store;\r\n}\r\nfunction get(key, store = getDefaultStore()) {\r\n let req;\r\n return store._withIDBStore('readonly', store => {\r\n req = store.get(key);\r\n }).then(() => req.result);\r\n}\r\nfunction set(key, value, store = getDefaultStore()) {\r\n return store._withIDBStore('readwrite', store => {\r\n store.put(value, key);\r\n });\r\n}\r\nfunction del(key, store = getDefaultStore()) {\r\n return store._withIDBStore('readwrite', store => {\r\n store.delete(key);\r\n });\r\n}\r\nfunction clear(store = getDefaultStore()) {\r\n return store._withIDBStore('readwrite', store => {\r\n store.clear();\r\n });\r\n}\r\nfunction keys(store = getDefaultStore()) {\r\n const keys = [];\r\n return store._withIDBStore('readonly', store => {\r\n // This would be store.getAllKeys(), but it isn't supported by Edge or Safari.\r\n // And openKeyCursor isn't supported by Safari.\r\n (store.openKeyCursor || store.openCursor).call(store).onsuccess = function () {\r\n if (!this.result)\r\n return;\r\n keys.push(this.result.key);\r\n this.result.continue();\r\n };\r\n }).then(() => keys);\r\n}\n\nexport { Store, get, set, del, clear, keys };\n","import { get, set } from 'idb-keyval';\nimport { ServiceWorkerGlobal99dScope } from '../sw';\n\nexport const TAPESTRY_CONFIG_KEY = 'tapestry-sw-config';\nexport interface TapestryConfig {\n supportsWebp: boolean;\n hasHighDensityDisplay: boolean;\n}\n\nasync function supportsWebp() {\n if (!self.createImageBitmap) return false;\n\n const webpData = 'data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA=';\n const blob = await fetch(webpData).then(r => r.blob());\n return createImageBitmap(blob).then(\n () => true,\n () => false\n );\n}\n\nexport function saveTapestryConfiguration(config: TapestryConfig) {\n return get(TAPESTRY_CONFIG_KEY).then((currentConfig: TapestryConfig) => {\n return set(TAPESTRY_CONFIG_KEY, {\n supportsWebp: config.supportsWebp,\n hasHighDensityDisplay:\n config.hasHighDensityDisplay ||\n (currentConfig && currentConfig.hasHighDensityDisplay),\n });\n });\n}\n\nexport function loadTapestryConfig(self: ServiceWorkerGlobal99dScope) {\n return get(TAPESTRY_CONFIG_KEY).then((config: TapestryConfig) => {\n self.tapestryConfig = config;\n });\n}\n\nexport async function initialiseTapestryConfiguration() {\n const webp = await supportsWebp();\n const hasHighDensityDisplay = window.devicePixelRatio > 1;\n\n return saveTapestryConfiguration({\n supportsWebp: webp,\n hasHighDensityDisplay: hasHighDensityDisplay,\n });\n}\n","import { initialiseTapestryConfiguration } from './tapestry/tapestry-configuration';\n\nif ('serviceWorker' in navigator) {\n initialiseTapestryConfiguration().then(() => {\n navigator.serviceWorker.register('/sw.js').catch(error => {\n // registration failed :(\n console.error('ServiceWorker registration failed: ', error);\n });\n });\n}\n"],"names":["Store","constructor","dbName","storeName","this","_dbp","Promise","resolve","reject","openreq","indexedDB","open","onerror","error","onsuccess","result","onupgradeneeded","createObjectStore","_withIDBStore","type","callback","then","db","transaction","oncomplete","onabort","objectStore","store","getDefaultStore","TAPESTRY_CONFIG_KEY","navigator","config","supportsWebp","self","createImageBitmap","blob","fetch","r","hasHighDensityDisplay","window","devicePixelRatio","key","req","get","currentConfig","value","put","set","initialiseTapestryConfiguration","serviceWorker","register","catch","console"],"sourceRoot":""}