| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 | /* Stencil Client Patch Browser v2.18.1 | MIT Licensed | https://stenciljs.com */import { BUILD, NAMESPACE } from '@stencil/core/internal/app-data';import { consoleDevInfo, plt, win, doc, promiseResolve, H } from '@stencil/core';const getDynamicImportFunction = (namespace) => `__sc_import_${namespace.replace(/\s|-/g, '_')}`;const patchBrowser = () => {    // NOTE!! This fn cannot use async/await!    if (BUILD.isDev && !BUILD.isTesting) {        consoleDevInfo('Running in development mode.');    }    if (BUILD.cssVarShim) {        // shim css vars        plt.$cssShim$ = win.__cssshim;    }    if (BUILD.cloneNodeFix) {        // opted-in to polyfill cloneNode() for slot polyfilled components        patchCloneNodeFix(H.prototype);    }    if (BUILD.profile && !performance.mark) {        // not all browsers support performance.mark/measure (Safari 10)        // because the mark/measure APIs are designed to write entries to a buffer in the browser that does not exist,        // simply stub the implementations out.        // TODO(STENCIL-323): Remove this patch when support for older browsers is removed (breaking)        // @ts-ignore        performance.mark = performance.measure = () => {            /*noop*/        };        performance.getEntriesByName = () => [];    }    // @ts-ignore    const scriptElm = BUILD.scriptDataOpts || BUILD.safari10 || BUILD.dynamicImportShim        ? Array.from(doc.querySelectorAll('script')).find((s) => new RegExp(`\/${NAMESPACE}(\\.esm)?\\.js($|\\?|#)`).test(s.src) ||            s.getAttribute('data-stencil-namespace') === NAMESPACE)        : null;    const importMeta = import.meta.url;    const opts = BUILD.scriptDataOpts ? scriptElm['data-opts'] || {} : {};    if (BUILD.safari10 && 'onbeforeload' in scriptElm && !history.scrollRestoration /* IS_ESM_BUILD */) {        // Safari < v11 support: This IF is true if it's Safari below v11.        // This fn cannot use async/await since Safari didn't support it until v11,        // however, Safari 10 did support modules. Safari 10 also didn't support "nomodule",        // so both the ESM file and nomodule file would get downloaded. Only Safari        // has 'onbeforeload' in the script, and "history.scrollRestoration" was added        // to Safari in v11. Return a noop then() so the async/await ESM code doesn't continue.        // IS_ESM_BUILD is replaced at build time so this check doesn't happen in systemjs builds.        return {            then() {                /* promise noop */            },        };    }    if (!BUILD.safari10 && importMeta !== '') {        opts.resourcesUrl = new URL('.', importMeta).href;    }    else if (BUILD.dynamicImportShim || BUILD.safari10) {        opts.resourcesUrl = new URL('.', new URL(scriptElm.getAttribute('data-resources-url') || scriptElm.src, win.location.href)).href;        if (BUILD.dynamicImportShim) {            patchDynamicImport(opts.resourcesUrl, scriptElm);        }        if (BUILD.dynamicImportShim && !win.customElements) {            // module support, but no custom elements support (Old Edge)            // @ts-ignore            return import(/* webpackChunkName: "polyfills-dom" */ './dom.js').then(() => opts);        }    }    return promiseResolve(opts);};const patchDynamicImport = (base, orgScriptElm) => {    const importFunctionName = getDynamicImportFunction(NAMESPACE);    try {        // test if this browser supports dynamic imports        // There is a caching issue in V8, that breaks using import() in Function        // By generating a random string, we can workaround it        // Check https://bugs.chromium.org/p/chromium/issues/detail?id=990810 for more info        win[importFunctionName] = new Function('w', `return import(w);//${Math.random()}`);    }    catch (e) {        // this shim is specifically for browsers that do support "esm" imports        // however, they do NOT support "dynamic" imports        // basically this code is for old Edge, v18 and below        const moduleMap = new Map();        win[importFunctionName] = (src) => {            const url = new URL(src, base).href;            let mod = moduleMap.get(url);            if (!mod) {                const script = doc.createElement('script');                script.type = 'module';                script.crossOrigin = orgScriptElm.crossOrigin;                script.src = URL.createObjectURL(new Blob([`import * as m from '${url}'; window.${importFunctionName}.m = m;`], {                    type: 'application/javascript',                }));                mod = new Promise((resolve) => {                    script.onload = () => {                        resolve(win[importFunctionName].m);                        script.remove();                    };                });                moduleMap.set(url, mod);                doc.head.appendChild(script);            }            return mod;        };    }};const patchCloneNodeFix = (HTMLElementPrototype) => {    const nativeCloneNodeFn = HTMLElementPrototype.cloneNode;    HTMLElementPrototype.cloneNode = function (deep) {        if (this.nodeName === 'TEMPLATE') {            return nativeCloneNodeFn.call(this, deep);        }        const clonedNode = nativeCloneNodeFn.call(this, false);        const srcChildNodes = this.childNodes;        if (deep) {            for (let i = 0; i < srcChildNodes.length; i++) {                // Node.ATTRIBUTE_NODE === 2, and checking because IE11                if (srcChildNodes[i].nodeType !== 2) {                    clonedNode.appendChild(srcChildNodes[i].cloneNode(true));                }            }        }        return clonedNode;    };};export { patchBrowser };
 |