const isOldIE = function isOldIE() { let memo; return function memorize() { if (typeof memo === "undefined") { // Test for IE <= 9 as proposed by Browserhacks // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805 // Tests for existence of standard globals is to allow style-loader // to operate correctly into non-standard environments // @see https://github.com/webpack-contrib/style-loader/issues/177 memo = Boolean(window && document && document.all && !window.atob); } return memo; }; }(); const getTargetElement = function() { const memo = {}; return function memorize(target) { if (typeof memo[target] === "undefined") { let styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) { try { // This will throw an exception if access to iframe is blocked // due to cross-origin restrictions styleTarget = styleTarget.contentDocument.head; } catch (e) { // istanbul ignore next styleTarget = null; } } memo[target] = styleTarget; } return memo[target]; }; }(); const stylesInDom = []; function getIndexByIdentifier(identifier) { let result = -1; for(let i = 0; i < stylesInDom.length; i++){ if (stylesInDom[i].identifier === identifier) { result = i; break; } } return result; } function modulesToDom(list, options) { const idCountMap = {}; const identifiers = []; for(let i = 0; i < list.length; i++){ const item = list[i]; const id = options.base ? item[0] + options.base : item[0]; const count = idCountMap[id] || 0; const identifier = id + " " + count.toString(); idCountMap[id] = count + 1; const index = getIndexByIdentifier(identifier); const obj = { css: item[1], media: item[2], sourceMap: item[3] }; if (index !== -1) { stylesInDom[index].references++; stylesInDom[index].updater(obj); } else { stylesInDom.push({ identifier: identifier, // eslint-disable-next-line @typescript-eslint/no-use-before-define updater: addStyle(obj, options), references: 1 }); } identifiers.push(identifier); } return identifiers; } function insertStyleElement(options) { const style = document.createElement("style"); const attributes = options.attributes || {}; if (typeof attributes.nonce === "undefined") { const nonce = // eslint-disable-next-line no-undef typeof __webpack_nonce__ !== "undefined" ? __webpack_nonce__ : null; if (nonce) { attributes.nonce = nonce; } } Object.keys(attributes).forEach(function(key) { style.setAttribute(key, attributes[key]); }); if (typeof options.insert === "function") { options.insert(style); } else { const target = getTargetElement(options.insert || "head"); if (!target) { throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); } target.appendChild(style); } return style; } function removeStyleElement(style) { // istanbul ignore if if (style.parentNode === null) { return false; } style.parentNode.removeChild(style); } /* istanbul ignore next */ const replaceText = function replaceText() { const textStore = []; return function replace(index, replacement) { textStore[index] = replacement; return textStore.filter(Boolean).join("\n"); }; }(); function applyToSingletonTag(style, index, remove, obj) { const css = remove ? "" : obj.media ? "@media " + obj.media + " {" + obj.css + "}" : obj.css; // For old IE /* istanbul ignore if */ if (style.styleSheet) { style.styleSheet.cssText = replaceText(index, css); } else { const cssNode = document.createTextNode(css); const childNodes = style.childNodes; if (childNodes[index]) { style.removeChild(childNodes[index]); } if (childNodes.length) { style.insertBefore(cssNode, childNodes[index]); } else { style.appendChild(cssNode); } } } function applyToTag(style, _options, obj) { let css = obj.css; const media = obj.media; const sourceMap = obj.sourceMap; if (media) { style.setAttribute("media", media); } else { style.removeAttribute("media"); } if (sourceMap && typeof btoa !== "undefined") { css += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */"; } // For old IE /* istanbul ignore if */ if (style.styleSheet) { style.styleSheet.cssText = css; } else { while(style.firstChild){ style.removeChild(style.firstChild); } style.appendChild(document.createTextNode(css)); } } let singleton = null; let singletonCounter = 0; function addStyle(obj, options) { let style; let update; let remove; if (options.singleton) { const styleIndex = singletonCounter++; style = singleton || (singleton = insertStyleElement(options)); update = applyToSingletonTag.bind(null, style, styleIndex, false); remove = applyToSingletonTag.bind(null, style, styleIndex, true); } else { style = insertStyleElement(options); update = applyToTag.bind(null, style, options); remove = function() { removeStyleElement(style); }; } update(obj); return function updateStyle(newObj) { if (newObj) { if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) { return; } update(obj = newObj); } else { remove(); } }; } module.exports = function(list, options) { options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of