{"version":3,"file":"es-module-shims.js","sources":["../dist/es-module-shims.js"],"sourcesContent":["/* ES Module Shims 1.7.0 */\n(function () {\n\n const hasWindow = typeof window !== 'undefined';\n const hasDocument = typeof document !== 'undefined';\n\n const noop = () => {};\n\n const optionsScript = hasDocument ? document.querySelector('script[type=esms-options]') : undefined;\n\n const esmsInitOptions = optionsScript ? JSON.parse(optionsScript.innerHTML) : {};\n Object.assign(esmsInitOptions, self.esmsInitOptions || {});\n\n let shimMode = hasDocument ? !!esmsInitOptions.shimMode : true;\n\n const importHook = globalHook(shimMode && esmsInitOptions.onimport);\n const resolveHook = globalHook(shimMode && esmsInitOptions.resolve);\n let fetchHook = esmsInitOptions.fetch ? globalHook(esmsInitOptions.fetch) : fetch;\n const metaHook = esmsInitOptions.meta ? globalHook(shimMode && esmsInitOptions.meta) : noop;\n\n const mapOverrides = esmsInitOptions.mapOverrides;\n\n let nonce = esmsInitOptions.nonce;\n if (!nonce && hasDocument) {\n const nonceElement = document.querySelector('script[nonce]');\n if (nonceElement)\n nonce = nonceElement.nonce || nonceElement.getAttribute('nonce');\n }\n\n const onerror = globalHook(esmsInitOptions.onerror || noop);\n const onpolyfill = esmsInitOptions.onpolyfill ? globalHook(esmsInitOptions.onpolyfill) : () => {\n console.log('%c^^ Module TypeError above is polyfilled and can be ignored ^^', 'font-weight:900;color:#391');\n };\n\n const { revokeBlobURLs, noLoadEventRetriggers, enforceIntegrity } = esmsInitOptions;\n\n function globalHook (name) {\n return typeof name === 'string' ? self[name] : name;\n }\n\n const enable = Array.isArray(esmsInitOptions.polyfillEnable) ? esmsInitOptions.polyfillEnable : [];\n const cssModulesEnabled = enable.includes('css-modules');\n const jsonModulesEnabled = enable.includes('json-modules');\n\n const edge = !navigator.userAgentData && !!navigator.userAgent.match(/Edge\\/\\d+\\.\\d+/);\n\n const baseUrl = hasDocument\n ? document.baseURI\n : `${location.protocol}//${location.host}${location.pathname.includes('/') \n ? location.pathname.slice(0, location.pathname.lastIndexOf('/') + 1) \n : location.pathname}`;\n\n const createBlob = (source, type = 'text/javascript') => URL.createObjectURL(new Blob([source], { type }));\n let { skip } = esmsInitOptions;\n if (Array.isArray(skip)) {\n const l = skip.map(s => new URL(s, baseUrl).href);\n skip = s => l.some(i => i[i.length - 1] === '/' && s.startsWith(i) || s === i);\n }\n else if (typeof skip === 'string') {\n const r = new RegExp(skip);\n skip = s => r.test(s);\n }\n\n const eoop = err => setTimeout(() => { throw err });\n\n const throwError = err => { (self.reportError || hasWindow && window.safari && console.error || eoop)(err), void onerror(err); };\n\n function fromParent (parent) {\n return parent ? ` imported from ${parent}` : '';\n }\n\n let importMapSrcOrLazy = false;\n\n function setImportMapSrcOrLazy () {\n importMapSrcOrLazy = true;\n }\n\n // shim mode is determined on initialization, no late shim mode\n if (!shimMode) {\n if (document.querySelectorAll('script[type=module-shim],script[type=importmap-shim],link[rel=modulepreload-shim]').length) {\n shimMode = true;\n }\n else {\n let seenScript = false;\n for (const script of document.querySelectorAll('script[type=module],script[type=importmap]')) {\n if (!seenScript) {\n if (script.type === 'module' && !script.ep)\n seenScript = true;\n }\n else if (script.type === 'importmap' && seenScript) {\n importMapSrcOrLazy = true;\n break;\n }\n }\n }\n }\n\n const backslashRegEx = /\\\\/g;\n\n function isURL (url) {\n if (url.indexOf(':') === -1) return false;\n try {\n new URL(url);\n return true;\n }\n catch (_) {\n return false;\n }\n }\n\n function resolveUrl (relUrl, parentUrl) {\n return resolveIfNotPlainOrUrl(relUrl, parentUrl) || (isURL(relUrl) ? relUrl : resolveIfNotPlainOrUrl('./' + relUrl, parentUrl));\n }\n\n function resolveIfNotPlainOrUrl (relUrl, parentUrl) {\n const hIdx = parentUrl.indexOf('#'), qIdx = parentUrl.indexOf('?');\n if (hIdx + qIdx > -2)\n parentUrl = parentUrl.slice(0, hIdx === -1 ? qIdx : qIdx === -1 || qIdx > hIdx ? hIdx : qIdx);\n if (relUrl.indexOf('\\\\') !== -1)\n relUrl = relUrl.replace(backslashRegEx, '/');\n // protocol-relative\n if (relUrl[0] === '/' && relUrl[1] === '/') {\n return parentUrl.slice(0, parentUrl.indexOf(':') + 1) + relUrl;\n }\n // relative-url\n else if (relUrl[0] === '.' && (relUrl[1] === '/' || relUrl[1] === '.' && (relUrl[2] === '/' || relUrl.length === 2 && (relUrl += '/')) ||\n relUrl.length === 1 && (relUrl += '/')) ||\n relUrl[0] === '/') {\n const parentProtocol = parentUrl.slice(0, parentUrl.indexOf(':') + 1);\n // Disabled, but these cases will give inconsistent results for deep backtracking\n //if (parentUrl[parentProtocol.length] !== '/')\n // throw new Error('Cannot resolve');\n // read pathname from parent URL\n // pathname taken to be part after leading \"/\"\n let pathname;\n if (parentUrl[parentProtocol.length + 1] === '/') {\n // resolving to a :// so we need to read out the auth and host\n if (parentProtocol !== 'file:') {\n pathname = parentUrl.slice(parentProtocol.length + 2);\n pathname = pathname.slice(pathname.indexOf('/') + 1);\n }\n else {\n pathname = parentUrl.slice(8);\n }\n }\n else {\n // resolving to :/ so pathname is the /... part\n pathname = parentUrl.slice(parentProtocol.length + (parentUrl[parentProtocol.length] === '/'));\n }\n\n if (relUrl[0] === '/')\n return parentUrl.slice(0, parentUrl.length - pathname.length - 1) + relUrl;\n\n // join together and split for removal of .. and . segments\n // looping the string instead of anything fancy for perf reasons\n // '../../../../../z' resolved to 'x/y' is just 'z'\n const segmented = pathname.slice(0, pathname.lastIndexOf('/') + 1) + relUrl;\n\n const output = [];\n let segmentIndex = -1;\n for (let i = 0; i < segmented.length; i++) {\n // busy reading a segment - only terminate on '/'\n if (segmentIndex !== -1) {\n if (segmented[i] === '/') {\n output.push(segmented.slice(segmentIndex, i + 1));\n segmentIndex = -1;\n }\n continue;\n }\n // new segment - check if it is relative\n else if (segmented[i] === '.') {\n // ../ segment\n if (segmented[i + 1] === '.' && (segmented[i + 2] === '/' || i + 2 === segmented.length)) {\n output.pop();\n i += 2;\n continue;\n }\n // ./ segment\n else if (segmented[i + 1] === '/' || i + 1 === segmented.length) {\n i += 1;\n continue;\n }\n }\n // it is the start of a new segment\n while (segmented[i] === '/') i++;\n segmentIndex = i; \n }\n // finish reading out the last segment\n if (segmentIndex !== -1)\n output.push(segmented.slice(segmentIndex));\n return parentUrl.slice(0, parentUrl.length - pathname.length) + output.join('');\n }\n }\n\n function resolveAndComposeImportMap (json, baseUrl, parentMap) {\n const outMap = { imports: Object.assign({}, parentMap.imports), scopes: Object.assign({}, parentMap.scopes) };\n\n if (json.imports)\n resolveAndComposePackages(json.imports, outMap.imports, baseUrl, parentMap);\n\n if (json.scopes)\n for (let s in json.scopes) {\n const resolvedScope = resolveUrl(s, baseUrl);\n resolveAndComposePackages(json.scopes[s], outMap.scopes[resolvedScope] || (outMap.scopes[resolvedScope] = {}), baseUrl, parentMap);\n }\n\n return outMap;\n }\n\n function getMatch (path, matchObj) {\n if (matchObj[path])\n return path;\n let sepIndex = path.length;\n do {\n const segment = path.slice(0, sepIndex + 1);\n if (segment in matchObj)\n return segment;\n } while ((sepIndex = path.lastIndexOf('/', sepIndex - 1)) !== -1)\n }\n\n function applyPackages (id, packages) {\n const pkgName = getMatch(id, packages);\n if (pkgName) {\n const pkg = packages[pkgName];\n if (pkg === null) return;\n return pkg + id.slice(pkgName.length);\n }\n }\n\n\n function resolveImportMap (importMap, resolvedOrPlain, parentUrl) {\n let scopeUrl = parentUrl && getMatch(parentUrl, importMap.scopes);\n while (scopeUrl) {\n const packageResolution = applyPackages(resolvedOrPlain, importMap.scopes[scopeUrl]);\n if (packageResolution)\n return packageResolution;\n scopeUrl = getMatch(scopeUrl.slice(0, scopeUrl.lastIndexOf('/')), importMap.scopes);\n }\n return applyPackages(resolvedOrPlain, importMap.imports) || resolvedOrPlain.indexOf(':') !== -1 && resolvedOrPlain;\n }\n\n function resolveAndComposePackages (packages, outPackages, baseUrl, parentMap) {\n for (let p in packages) {\n const resolvedLhs = resolveIfNotPlainOrUrl(p, baseUrl) || p;\n if ((!shimMode || !mapOverrides) && outPackages[resolvedLhs] && (outPackages[resolvedLhs] !== packages[resolvedLhs])) {\n throw Error(`Rejected map override \"${resolvedLhs}\" from ${outPackages[resolvedLhs]} to ${packages[resolvedLhs]}.`);\n }\n let target = packages[p];\n if (typeof target !== 'string')\n continue;\n const mapped = resolveImportMap(parentMap, resolveIfNotPlainOrUrl(target, baseUrl) || target, baseUrl);\n if (mapped) {\n outPackages[resolvedLhs] = mapped;\n continue;\n }\n console.warn(`Mapping \"${p}\" -> \"${packages[p]}\" does not resolve`);\n }\n }\n\n let dynamicImport = !hasDocument && (0, eval)('u=>import(u)');\n\n let supportsDynamicImport;\n\n const dynamicImportCheck = hasDocument && new Promise(resolve => {\n const s = Object.assign(document.createElement('script'), {\n src: createBlob('self._d=u=>import(u)'),\n ep: true\n });\n s.setAttribute('nonce', nonce);\n s.addEventListener('load', () => {\n if (!(supportsDynamicImport = !!(dynamicImport = self._d))) {\n let err;\n window.addEventListener('error', _err => err = _err);\n dynamicImport = (url, opts) => new Promise((resolve, reject) => {\n const s = Object.assign(document.createElement('script'), {\n type: 'module',\n src: createBlob(`import*as m from'${url}';self._esmsi=m`)\n });\n err = undefined;\n s.ep = true;\n if (nonce)\n s.setAttribute('nonce', nonce);\n // Safari is unique in supporting module script error events\n s.addEventListener('error', cb);\n s.addEventListener('load', cb);\n function cb (_err) {\n document.head.removeChild(s);\n if (self._esmsi) {\n resolve(self._esmsi, baseUrl);\n self._esmsi = undefined;\n }\n else {\n reject(!(_err instanceof Event) && _err || err && err.error || new Error(`Error loading ${opts && opts.errUrl || url} (${s.src}).`));\n err = undefined;\n }\n }\n document.head.appendChild(s);\n });\n }\n document.head.removeChild(s);\n delete self._d;\n resolve();\n });\n document.head.appendChild(s);\n });\n\n // support browsers without dynamic import support (eg Firefox 6x)\n let supportsJsonAssertions = false;\n let supportsCssAssertions = false;\n\n let supportsImportMaps = hasDocument && HTMLScriptElement.supports ? HTMLScriptElement.supports('importmap') : false;\n let supportsImportMeta = supportsImportMaps;\n\n const importMetaCheck = 'import.meta';\n const cssModulesCheck = `import\"x\"assert{type:\"css\"}`;\n const jsonModulesCheck = `import\"x\"assert{type:\"json\"}`;\n\n const featureDetectionPromise = Promise.resolve(dynamicImportCheck).then(() => {\n if (!supportsDynamicImport || supportsImportMaps && !cssModulesEnabled && !jsonModulesEnabled)\n return;\n\n if (!hasDocument)\n return Promise.all([\n supportsImportMaps || dynamicImport(createBlob(importMetaCheck)).then(() => supportsImportMeta = true, noop),\n cssModulesEnabled && dynamicImport(createBlob(cssModulesCheck.replace('x', createBlob('', 'text/css')))).then(() => supportsCssAssertions = true, noop),\n jsonModulesEnabled && dynamicImport(createBlob(jsonModulescheck.replace('x', createBlob('{}', 'text/json')))).then(() => supportsJsonAssertions = true, noop),\n ]);\n\n return new Promise(resolve => {\n const iframe = document.createElement('iframe');\n iframe.style.display = 'none';\n iframe.setAttribute('nonce', nonce);\n function cb ({ data: [a, b, c, d] }) {\n supportsImportMaps = a;\n supportsImportMeta = b;\n supportsCssAssertions = c;\n supportsJsonAssertions = d;\n resolve();\n document.head.removeChild(iframe);\n window.removeEventListener('message', cb, false);\n }\n window.addEventListener('message', cb, false);\n\n const importMapTest = `