UNPKG

@rindo/core

Version:

A Compiler for Web Components and Progressive Web Apps

772 lines (760 loc) 69.5 kB
/*! Rindo Dev Server Client v4.22.3 | MIT Licensed | https://rindojs.web.app */ // src/dev-server/client/app-error.css var app_error_default = "#dev-server-modal * { box-sizing: border-box !important; } #dev-server-modal { direction: ltr !important; display: block !important; position: absolute !important; top: 0 !important; right: 0 !important; bottom: 0 !important; left: 0 !important; z-index: 100000; margin: 0 !important; padding: 0 !important; font-family: -apple-system, 'Roboto', BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol' !important; font-size: 14px !important; line-height: 1.5 !important; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; text-size-adjust: none; word-wrap: break-word; color: #333 !important; background-color: white !important; box-sizing: border-box !important; overflow: hidden; user-select: auto; } #dev-server-modal-inner { position: relative !important; padding: 0 0 30px 0 !important; width: 100% !important; height: 100%; overflow-x: hidden; overflow-y: scroll; -webkit-overflow-scrolling: touch; } .dev-server-diagnostic { margin: 20px !important; border: 1px solid #ddd !important; border-radius: 3px !important; } .dev-server-diagnostic-masthead { padding: 8px 12px 12px 12px !important; } .dev-server-diagnostic-title { margin: 0 !important; font-weight: bold !important; color: #222 !important; } .dev-server-diagnostic-message { margin-top: 4px !important; color: #555 !important; } .dev-server-diagnostic-file { position: relative !important; border-top: 1px solid #ddd !important; } .dev-server-diagnostic-file-header { display: block !important; padding: 5px 10px !important; color: #555 !important; border-bottom: 1px solid #ddd !important; border-top-left-radius: 2px !important; border-top-right-radius: 2px !important; background-color: #f9f9f9 !important; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; font-size: 12px !important; } a.dev-server-diagnostic-file-header { color: #0000ee !important; text-decoration: underline !important; } a.dev-server-diagnostic-file-header:hover { text-decoration: none !important; background-color: #f4f4f4 !important; } .dev-server-diagnostic-file-name { font-weight: bold !important; } .dev-server-diagnostic-blob { overflow-x: auto !important; overflow-y: hidden !important; border-bottom-right-radius: 3px !important; border-bottom-left-radius: 3px !important; } .dev-server-diagnostic-table { margin: 0 !important; padding: 0 !important; border-spacing: 0 !important; border-collapse: collapse !important; border-width: 0 !important; border-style: none !important; -moz-tab-size: 2; tab-size: 2; } .dev-server-diagnostic-table td, .dev-server-diagnostic-table th { padding: 0 !important; border-width: 0 !important; border-style: none !important; } td.dev-server-diagnostic-blob-num { padding-right: 10px !important; padding-left: 10px !important; width: 1% !important; min-width: 50px !important; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; font-size: 12px !important; line-height: 20px !important; color: rgba(0, 0, 0, 0.3) !important; text-align: right !important; white-space: nowrap !important; vertical-align: top !important; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; border: solid #eee !important; border-width: 0 1px 0 0 !important; } td.dev-server-diagnostic-blob-num::before { content: attr(data-line-number) !important; } .dev-server-diagnostic-error-line td.dev-server-diagnostic-blob-num { background-color: #ffdddd !important; border-color: #ffc9c9 !important; } .dev-server-diagnostic-error-line td.dev-server-diagnostic-blob-code { background: rgba(255, 221, 221, 0.25) !important; z-index: -1; } .dev-server-diagnostic-open-in-editor td.dev-server-diagnostic-blob-num:hover { cursor: pointer; background-color: #ffffe3 !important; font-weight: bold; } .dev-server-diagnostic-open-in-editor.dev-server-diagnostic-error-line td.dev-server-diagnostic-blob-num:hover { background-color: #ffdada !important; } td.dev-server-diagnostic-blob-code { position: relative !important; padding-right: 10px !important; padding-left: 10px !important; line-height: 20px !important; vertical-align: top !important; overflow: visible !important; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; font-size: 12px !important; color: #333 !important; word-wrap: normal !important; white-space: pre !important; } td.dev-server-diagnostic-blob-code::before { content: '' !important; } .dev-server-diagnostic-error-chr { position: relative !important; } .dev-server-diagnostic-error-chr::before { position: absolute !important; z-index: -1; top: -3px !important; left: 0px !important; width: 8px !important; height: 20px !important; background-color: #ffdddd !important; content: '' !important; } /** * GitHub Gist Theme * Author : Louis Barranqueiro - https://github.com/LouisBarranqueiro * https://highlightjs.org/ */ .hljs-comment, .hljs-meta { color: #969896; } .hljs-string, .hljs-variable, .hljs-template-variable, .hljs-strong, .hljs-emphasis, .hljs-quote { color: #df5000; } .hljs-keyword, .hljs-selector-tag, .hljs-type { color: #a71d5d; } .hljs-literal, .hljs-symbol, .hljs-bullet, .hljs-attribute { color: #0086b3; } .hljs-section, .hljs-name { color: #63a35c; } .hljs-tag { color: #333333; } .hljs-title, .hljs-attr, .hljs-selector-id, .hljs-selector-class, .hljs-selector-attr, .hljs-selector-pseudo { color: #795da3; } .hljs-addition { color: #55a532; background-color: #eaffea; } .hljs-deletion { color: #bd2c00; background-color: #ffecec; } .hljs-link { text-decoration: underline; }"; // build/dev-server/client/app-error.js var appError = (data) => { const results = { diagnostics: [], status: null }; if (data && data.window && Array.isArray(data.buildResults.diagnostics)) { const diagnostics = data.buildResults.diagnostics.filter((diagnostic) => diagnostic.level === "error"); if (diagnostics.length > 0) { const modal = getDevServerModal(data.window.document); diagnostics.forEach((diagnostic) => { results.diagnostics.push(diagnostic); appendDiagnostic(data.window.document, data.openInEditor, modal, diagnostic); }); results.status = "error"; } } return results; }; var appendDiagnostic = (doc, openInEditor, modal, diagnostic) => { var _a, _b, _c, _d; const card = doc.createElement("div"); card.className = "dev-server-diagnostic"; const masthead = doc.createElement("div"); masthead.className = "dev-server-diagnostic-masthead"; masthead.title = `${escapeHtml(diagnostic.type)} error: ${escapeHtml((_a = diagnostic.code) !== null && _a !== void 0 ? _a : "unknown error")}`; card.appendChild(masthead); const title = doc.createElement("div"); title.className = "dev-server-diagnostic-title"; if (typeof diagnostic.header === "string" && diagnostic.header.trim().length > 0) { title.textContent = diagnostic.header; } else { title.textContent = `${titleCase(diagnostic.type)} ${titleCase(diagnostic.level)}`; } masthead.appendChild(title); const message = doc.createElement("div"); message.className = "dev-server-diagnostic-message"; message.textContent = diagnostic.messageText; masthead.appendChild(message); const file = doc.createElement("div"); file.className = "dev-server-diagnostic-file"; card.appendChild(file); const isUrl = typeof diagnostic.absFilePath === "string" && diagnostic.absFilePath.indexOf("http") === 0; const canOpenInEditor = typeof openInEditor === "function" && typeof diagnostic.absFilePath === "string" && !isUrl; if (isUrl) { const fileHeader = doc.createElement("a"); fileHeader.href = (_b = diagnostic.absFilePath) !== null && _b !== void 0 ? _b : ""; fileHeader.setAttribute("target", "_blank"); fileHeader.setAttribute("rel", "noopener noreferrer"); fileHeader.className = "dev-server-diagnostic-file-header"; const filePath = doc.createElement("span"); filePath.className = "dev-server-diagnostic-file-path"; filePath.textContent = (_c = diagnostic.absFilePath) !== null && _c !== void 0 ? _c : ""; fileHeader.appendChild(filePath); file.appendChild(fileHeader); } else if (diagnostic.relFilePath) { const fileHeader = doc.createElement(canOpenInEditor ? "a" : "div"); fileHeader.className = "dev-server-diagnostic-file-header"; if (diagnostic.absFilePath) { fileHeader.title = escapeHtml(diagnostic.absFilePath); if (canOpenInEditor) { addOpenInEditor(openInEditor, fileHeader, diagnostic.absFilePath, diagnostic.lineNumber, diagnostic.columnNumber); } } const parts = diagnostic.relFilePath.split("/"); const fileName = doc.createElement("span"); fileName.className = "dev-server-diagnostic-file-name"; fileName.textContent = (_d = parts.pop()) !== null && _d !== void 0 ? _d : ""; const filePath = doc.createElement("span"); filePath.className = "dev-server-diagnostic-file-path"; filePath.textContent = parts.join("/") + "/"; fileHeader.appendChild(filePath); fileHeader.appendChild(fileName); file.appendChild(fileHeader); } if (diagnostic.lines && diagnostic.lines.length > 0) { const blob = doc.createElement("div"); blob.className = "dev-server-diagnostic-blob"; file.appendChild(blob); const table = doc.createElement("table"); table.className = "dev-server-diagnostic-table"; blob.appendChild(table); prepareLines(diagnostic.lines).forEach((l) => { var _a2, _b2, _c2; const tr = doc.createElement("tr"); if (l.errorCharStart > 0) { tr.classList.add("dev-server-diagnostic-error-line"); } if (canOpenInEditor) { tr.classList.add("dev-server-diagnostic-open-in-editor"); } table.appendChild(tr); const tdNum = doc.createElement("td"); tdNum.className = "dev-server-diagnostic-blob-num"; if (l.lineNumber > 0) { tdNum.setAttribute("data-line-number", l.lineNumber + ""); tdNum.title = escapeHtml((_a2 = diagnostic.relFilePath) !== null && _a2 !== void 0 ? _a2 : "") + ", line " + l.lineNumber; const maybeFile = diagnostic.absFilePath; if (canOpenInEditor && maybeFile) { const column = l.lineNumber === diagnostic.lineNumber ? diagnostic.columnNumber : 1; addOpenInEditor(openInEditor, tdNum, maybeFile, l.lineNumber, column); } } tr.appendChild(tdNum); const tdCode = doc.createElement("td"); tdCode.className = "dev-server-diagnostic-blob-code"; tdCode.innerHTML = highlightError((_b2 = l.text) !== null && _b2 !== void 0 ? _b2 : "", l.errorCharStart, (_c2 = l.errorLength) !== null && _c2 !== void 0 ? _c2 : 0); tr.appendChild(tdCode); }); } modal.appendChild(card); }; var addOpenInEditor = (openInEditor, elm, file, line, column) => { if (elm.tagName === "A") { elm.href = "#open-in-editor"; } const lineNumber = typeof line !== "number" || line < 1 ? 1 : line; const columnNumber = typeof column !== "number" || column < 1 ? 1 : column; elm.addEventListener("click", (ev) => { ev.preventDefault(); ev.stopPropagation(); openInEditor({ file, line: lineNumber, column: columnNumber }); }); }; var getDevServerModal = (doc) => { let outer = doc.getElementById(DEV_SERVER_MODAL); if (!outer) { outer = doc.createElement("div"); outer.id = DEV_SERVER_MODAL; outer.setAttribute("role", "dialog"); doc.body.appendChild(outer); } outer.innerHTML = `<style>${app_error_default}</style><div id="${DEV_SERVER_MODAL}-inner"></div>`; return doc.getElementById(`${DEV_SERVER_MODAL}-inner`); }; var clearAppErrorModal = (data) => { const appErrorElm = data.window.document.getElementById(DEV_SERVER_MODAL); if (appErrorElm === null || appErrorElm === void 0 ? void 0 : appErrorElm.parentNode) { appErrorElm.parentNode.removeChild(appErrorElm); } }; var escapeHtml = (unsafe) => { if (typeof unsafe === "number" || typeof unsafe === "boolean") { return unsafe.toString(); } if (typeof unsafe === "string") { return unsafe.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;"); } return ""; }; var titleCase = (str) => str.charAt(0).toUpperCase() + str.slice(1); var highlightError = (text, errorCharStart, errorLength) => { if (typeof text !== "string") { return ""; } const errorCharEnd = errorCharStart + errorLength; return text.split("").map((inputChar, charIndex) => { let outputChar; if (inputChar === `<`) { outputChar = `&lt;`; } else if (inputChar === `>`) { outputChar = `&gt;`; } else if (inputChar === `"`) { outputChar = `&quot;`; } else if (inputChar === `'`) { outputChar = `&#039;`; } else if (inputChar === `&`) { outputChar = `&amp;`; } else { outputChar = inputChar; } if (charIndex >= errorCharStart && charIndex < errorCharEnd) { outputChar = `<span class="dev-server-diagnostic-error-chr">${outputChar}</span>`; } return outputChar; }).join(""); }; var prepareLines = (orgLines) => { var _a, _b, _c; const lines = JSON.parse(JSON.stringify(orgLines)); for (let i = 0; i < 100; i++) { if (!eachLineHasLeadingWhitespace(lines)) { return lines; } for (let i2 = 0; i2 < lines.length; i2++) { lines[i2].text = (_b = (_a = lines[i2].text) === null || _a === void 0 ? void 0 : _a.slice(1)) !== null && _b !== void 0 ? _b : ""; lines[i2].errorCharStart--; if (!((_c = lines[i2].text) === null || _c === void 0 ? void 0 : _c.length)) { return lines; } } } return lines; }; var eachLineHasLeadingWhitespace = (lines) => { var _a, _b, _c; if (!lines.length) { return false; } for (let i = 0; i < lines.length; i++) { if (!lines[i].text || ((_b = (_a = lines[i].text) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) < 1) { return false; } const firstChar = (_c = lines[i].text) === null || _c === void 0 ? void 0 : _c.charAt(0); if (firstChar !== " " && firstChar !== " ") { return false; } } return true; }; var DEV_SERVER_MODAL = `dev-server-modal`; // build/dev-server/client/events.js var emitBuildLog = (win, buildLog) => { win.dispatchEvent(new CustomEvent(BUILD_LOG, { detail: buildLog })); }; var emitBuildResults = (win, buildResults) => { win.dispatchEvent(new CustomEvent(BUILD_RESULTS, { detail: buildResults })); }; var emitBuildStatus = (win, buildStatus) => { win.dispatchEvent(new CustomEvent(BUILD_STATUS, { detail: buildStatus })); }; var onBuildLog = (win, cb) => { win.addEventListener(BUILD_LOG, (ev) => { cb(ev.detail); }); }; var onBuildResults = (win, cb) => { win.addEventListener(BUILD_RESULTS, (ev) => { cb(ev.detail); }); }; var onBuildStatus = (win, cb) => { win.addEventListener(BUILD_STATUS, (ev) => { cb(ev.detail); }); }; var BUILD_LOG = `devserver:buildlog`; var BUILD_RESULTS = `devserver:buildresults`; var BUILD_STATUS = `devserver:buildstatus`; // build/dev-server/client/hmr-util.js var getHmrHref = (versionId, fileName, testUrl) => { if (typeof testUrl === "string" && testUrl.trim() !== "") { if (getUrlFileName(fileName) === getUrlFileName(testUrl)) { return setHmrQueryString(testUrl, versionId); } } return testUrl; }; var getUrlFileName = (url) => { const splt = url.split("/"); return splt[splt.length - 1].split("&")[0].split("?")[0]; }; var parseQuerystring = (oldQs) => { const newQs = {}; if (typeof oldQs === "string") { oldQs.split("&").forEach((kv) => { const splt = kv.split("="); newQs[splt[0]] = splt[1] ? splt[1] : ""; }); } return newQs; }; var stringifyQuerystring = (qs) => Object.keys(qs).map((key) => key + "=" + qs[key]).join("&"); var setQueryString = (url, qsKey, qsValue) => { const urlSplt = url.split("?"); const urlPath = urlSplt[0]; const qs = parseQuerystring(urlSplt[1]); qs[qsKey] = qsValue; return urlPath + "?" + stringifyQuerystring(qs); }; var setHmrQueryString = (url, versionId) => setQueryString(url, "s-hmr", versionId); var updateCssUrlValue = (versionId, fileName, oldCss) => { const reg = /url\((['"]?)(.*)\1\)/gi; let result; let newCss = oldCss; while ((result = reg.exec(oldCss)) !== null) { const url = result[2]; newCss = newCss.replace(url, getHmrHref(versionId, fileName, url)); } return newCss; }; var isLinkStylesheet = (elm) => elm.nodeName.toLowerCase() === "link" && !!elm.href && !!elm.rel && elm.rel.toLowerCase() === "stylesheet"; var isTemplate = (elm) => elm.nodeName.toLowerCase() === "template" && !!elm.content && elm.content.nodeType === 11; var setHmrAttr = (elm, versionId) => { elm.setAttribute("data-hmr", versionId); }; var hasShadowRoot = (elm) => !!elm.shadowRoot && elm.shadowRoot.nodeType === 11 && elm.shadowRoot !== elm; var isElement = (elm) => !!elm && elm.nodeType === 1 && !!elm.getAttribute; // build/dev-server/client/hmr-components.js var hmrComponents = (element, versionId, hmrTagNames) => { const updatedTags = []; hmrTagNames.forEach((hmrTagName) => { hmrComponent(updatedTags, element, versionId, hmrTagName); }); return updatedTags.sort(); }; var hmrComponent = (updatedTags, element, versionId, cmpTagName) => { if (element.nodeName.toLowerCase() === cmpTagName && typeof element["s-hmr"] === "function") { element["s-hmr"](versionId); setHmrAttr(element, versionId); if (updatedTags.indexOf(cmpTagName) === -1) { updatedTags.push(cmpTagName); } } if (hasShadowRoot(element)) { hmrComponent(updatedTags, element.shadowRoot, versionId, cmpTagName); } if (element.children) { for (let i = 0; i < element.children.length; i++) { hmrComponent(updatedTags, element.children[i], versionId, cmpTagName); } } }; // build/dev-server/client/hmr-external-styles.js var hmrExternalStyles = (elm, versionId, cssFileNames) => { if (isLinkStylesheet(elm)) { cssFileNames.forEach((cssFileName) => { hmrStylesheetLink(elm, versionId, cssFileName); }); } if (isTemplate(elm)) { hmrExternalStyles(elm.content, versionId, cssFileNames); } if (hasShadowRoot(elm)) { hmrExternalStyles(elm.shadowRoot, versionId, cssFileNames); } if (elm.children) { for (let i = 0; i < elm.children.length; i++) { hmrExternalStyles(elm.children[i], versionId, cssFileNames); } } return cssFileNames.sort(); }; var hmrStylesheetLink = (styleSheetElm, versionId, cssFileName) => { const orgHref = styleSheetElm.getAttribute("href"); const newHref = getHmrHref(versionId, cssFileName, styleSheetElm.href); if (newHref !== orgHref) { styleSheetElm.setAttribute("href", newHref); setHmrAttr(styleSheetElm, versionId); } }; // build/dev-server/client/hmr-images.js var hmrImages = (win, doc, versionId, imageFileNames) => { if (win.location.protocol !== "file:" && doc.styleSheets) { hmrStyleSheetsImages(doc, versionId, imageFileNames); } hmrImagesElements(win, doc.documentElement, versionId, imageFileNames); return imageFileNames.sort(); }; var hmrStyleSheetsImages = (doc, versionId, imageFileNames) => { const cssImageProps = Object.keys(doc.documentElement.style).filter((cssProp) => { return cssProp.endsWith("Image"); }); for (let i = 0; i < doc.styleSheets.length; i++) { hmrStyleSheetImages(cssImageProps, doc.styleSheets[i], versionId, imageFileNames); } }; var hmrStyleSheetImages = (cssImageProps, styleSheet, versionId, imageFileNames) => { try { const cssRules = styleSheet.cssRules; for (let i = 0; i < cssRules.length; i++) { const cssRule = cssRules[i]; switch (cssRule.type) { case CSSRule.IMPORT_RULE: hmrStyleSheetImages(cssImageProps, cssRule.styleSheet, versionId, imageFileNames); break; case CSSRule.STYLE_RULE: hmrStyleSheetRuleImages(cssImageProps, cssRule, versionId, imageFileNames); break; case CSSRule.MEDIA_RULE: hmrStyleSheetImages(cssImageProps, cssRule, versionId, imageFileNames); break; } } } catch (e) { console.error("hmrStyleSheetImages: " + e); } }; var hmrStyleSheetRuleImages = (cssImageProps, cssRule, versionId, imageFileNames) => { cssImageProps.forEach((cssImageProp) => { imageFileNames.forEach((imageFileName) => { const oldCssText = cssRule.style[cssImageProp]; const newCssText = updateCssUrlValue(versionId, imageFileName, oldCssText); if (oldCssText !== newCssText) { cssRule.style[cssImageProp] = newCssText; } }); }); }; var hmrImagesElements = (win, elm, versionId, imageFileNames) => { const tagName = elm.nodeName.toLowerCase(); if (tagName === "img") { hmrImgElement(elm, versionId, imageFileNames); } if (isElement(elm)) { const styleAttr = elm.getAttribute("style"); if (styleAttr) { hmrUpdateStyleAttr(elm, versionId, imageFileNames, styleAttr); } } if (tagName === "style") { hmrUpdateStyleElementUrl(elm, versionId, imageFileNames); } if (win.location.protocol !== "file:" && isLinkStylesheet(elm)) { hmrUpdateLinkElementUrl(elm, versionId, imageFileNames); } if (isTemplate(elm)) { hmrImagesElements(win, elm.content, versionId, imageFileNames); } if (hasShadowRoot(elm)) { hmrImagesElements(win, elm.shadowRoot, versionId, imageFileNames); } if (elm.children) { for (let i = 0; i < elm.children.length; i++) { hmrImagesElements(win, elm.children[i], versionId, imageFileNames); } } }; var hmrImgElement = (imgElm, versionId, imageFileNames) => { imageFileNames.forEach((imageFileName) => { const orgSrc = imgElm.getAttribute("src"); const newSrc = getHmrHref(versionId, imageFileName, orgSrc); if (newSrc !== orgSrc) { imgElm.setAttribute("src", newSrc); setHmrAttr(imgElm, versionId); } }); }; var hmrUpdateStyleAttr = (elm, versionId, imageFileNames, oldStyleAttr) => { imageFileNames.forEach((imageFileName) => { const newStyleAttr = updateCssUrlValue(versionId, imageFileName, oldStyleAttr); if (newStyleAttr !== oldStyleAttr) { elm.setAttribute("style", newStyleAttr); setHmrAttr(elm, versionId); } }); }; var hmrUpdateStyleElementUrl = (styleElm, versionId, imageFileNames) => { imageFileNames.forEach((imageFileName) => { const oldCssText = styleElm.innerHTML; const newCssText = updateCssUrlValue(versionId, imageFileName, oldCssText); if (newCssText !== oldCssText) { styleElm.innerHTML = newCssText; setHmrAttr(styleElm, versionId); } }); }; var hmrUpdateLinkElementUrl = (linkElm, versionId, imageFileNames) => { linkElm.href = setQueryString(linkElm.href, "s-hmr-urls", imageFileNames.sort().join(",")); linkElm.href = setHmrQueryString(linkElm.href, versionId); linkElm.setAttribute("data-hmr", versionId); }; // build/dev-server/client/hmr-inline-styles.js var hmrInlineStyles = (elm, versionId, stylesUpdatedData) => { const stylesUpdated = stylesUpdatedData; if (isElement(elm) && elm.nodeName.toLowerCase() === "style") { stylesUpdated.forEach((styleUpdated) => { hmrStyleElement(elm, versionId, styleUpdated); }); } if (isTemplate(elm)) { hmrInlineStyles(elm.content, versionId, stylesUpdated); } if (hasShadowRoot(elm)) { hmrInlineStyles(elm.shadowRoot, versionId, stylesUpdated); } if (elm.children) { for (let i = 0; i < elm.children.length; i++) { hmrInlineStyles(elm.children[i], versionId, stylesUpdated); } } return stylesUpdated.map((s) => s.styleTag).reduce((arr, v) => { if (arr.indexOf(v) === -1) { arr.push(v); } return arr; }, []).sort(); }; var hmrStyleElement = (elm, versionId, stylesUpdated) => { const styleId = elm.getAttribute("sty-id"); if (styleId === stylesUpdated.styleId && stylesUpdated.styleText) { elm.innerHTML = stylesUpdated.styleText.replace(/\\n/g, "\n"); elm.setAttribute("data-hmr", versionId); } }; // build/dev-server/client/hmr-window.js var hmrWindow = (data) => { const results = { updatedComponents: [], updatedExternalStyles: [], updatedInlineStyles: [], updatedImages: [], versionId: "" }; try { if (!data || !data.window || !data.window.document.documentElement || !data.hmr || typeof data.hmr.versionId !== "string") { return results; } const win = data.window; const doc = win.document; const hmr = data.hmr; const documentElement = doc.documentElement; const versionId = hmr.versionId; results.versionId = versionId; if (hmr.componentsUpdated) { results.updatedComponents = hmrComponents(documentElement, versionId, hmr.componentsUpdated); } if (hmr.inlineStylesUpdated) { results.updatedInlineStyles = hmrInlineStyles(documentElement, versionId, hmr.inlineStylesUpdated); } if (hmr.externalStylesUpdated) { results.updatedExternalStyles = hmrExternalStyles(documentElement, versionId, hmr.externalStylesUpdated); } if (hmr.imagesUpdated) { results.updatedImages = hmrImages(win, doc, versionId, hmr.imagesUpdated); } setHmrAttr(documentElement, versionId); } catch (e) { console.error(e); } return results; }; // build/dev-server/client/logger.js var logBuild = (msg) => log(BLUE, "Build", msg); var logReload = (msg) => logWarn("Reload", msg); var logWarn = (prefix, msg) => log(YELLOW, prefix, msg); var logDisabled = (prefix, msg) => log(GRAY, prefix, msg); var logDiagnostic = (diag) => { const diagnostic = diag; let color = RED; let prefix = "Error"; if (diagnostic.level === "warn") { color = YELLOW; prefix = "Warning"; } if (diagnostic.header) { prefix = diagnostic.header; } let msg = ``; if (diagnostic.relFilePath) { msg += diagnostic.relFilePath; if (typeof diagnostic.lineNumber === "number" && diagnostic.lineNumber > 0) { msg += ", line " + diagnostic.lineNumber; if (typeof diagnostic.columnNumber === "number" && diagnostic.columnNumber > 0) { msg += ", column " + diagnostic.columnNumber; } } msg += ` `; } msg += diagnostic.messageText; log(color, prefix, msg); }; var log = (color, prefix, msg) => { if (typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.indexOf("Trident") > -1) { console.log(prefix, msg); } else { console.log.apply(console, [ "%c" + prefix, `background: ${color}; color: white; padding: 2px 3px; border-radius: 2px; font-size: 0.8em;`, msg ]); } }; var YELLOW = `#f39c12`; var RED = `#c0392b`; var BLUE = `#3498db`; var GRAY = `#717171`; // build/dev-server/client/progress.js var initBuildProgress = (data) => { const win = data.window; const doc = win.document; const barColor = `#5851ff`; const errorColor = `#b70c19`; let addBarTimerId; let removeBarTimerId; let opacityTimerId; let incIntervalId; let progressIncrease; let currentProgress = 0; function update() { clearTimeout(opacityTimerId); clearTimeout(removeBarTimerId); const progressBar = getProgressBar(); if (!progressBar) { createProgressBar(); addBarTimerId = setTimeout(update, 16); return; } progressBar.style.background = barColor; progressBar.style.opacity = `1`; progressBar.style.transform = `scaleX(${Math.min(1, displayProgress())})`; if (incIntervalId == null) { incIntervalId = setInterval(() => { progressIncrease += Math.random() * 0.05 + 0.01; if (displayProgress() < 0.9) { update(); } else { clearInterval(incIntervalId); } }, 800); } } function reset() { clearInterval(incIntervalId); progressIncrease = 0.05; incIntervalId = null; clearTimeout(opacityTimerId); clearTimeout(addBarTimerId); clearTimeout(removeBarTimerId); const progressBar = getProgressBar(); if (progressBar) { if (currentProgress >= 1) { progressBar.style.transform = `scaleX(1)`; } opacityTimerId = setTimeout(() => { try { const progressBar2 = getProgressBar(); if (progressBar2) { progressBar2.style.opacity = `0`; } } catch (e) { } }, 150); removeBarTimerId = setTimeout(() => { try { const progressBar2 = getProgressBar(); if (progressBar2) { progressBar2.parentNode.removeChild(progressBar2); } } catch (e) { } }, 1e3); } } function displayProgress() { const p = currentProgress + progressIncrease; return Math.max(0, Math.min(1, p)); } reset(); onBuildLog(win, (buildLog) => { currentProgress = buildLog.progress; if (currentProgress >= 0 && currentProgress < 1) { update(); } else { reset(); } }); onBuildResults(win, (buildResults) => { if (buildResults.hasError) { const progressBar = getProgressBar(); if (progressBar) { progressBar.style.transform = `scaleX(1)`; progressBar.style.background = errorColor; } } reset(); }); onBuildStatus(win, (buildStatus) => { if (buildStatus === "disabled") { reset(); } }); if (doc.head.dataset.tmpl === "tmpl-initial-load") { update(); } const PROGRESS_BAR_ID = `dev-server-progress-bar`; function getProgressBar() { return doc.getElementById(PROGRESS_BAR_ID); } function createProgressBar() { const progressBar = doc.createElement("div"); progressBar.id = PROGRESS_BAR_ID; progressBar.style.position = `absolute`; progressBar.style.top = `0`; progressBar.style.left = `0`; progressBar.style.zIndex = `100001`; progressBar.style.width = `100%`; progressBar.style.height = `2px`; progressBar.style.transform = `scaleX(0)`; progressBar.style.opacity = `1`; progressBar.style.background = barColor; progressBar.style.transformOrigin = `left center`; progressBar.style.transition = `transform .1s ease-in-out, opacity .5s ease-in`; progressBar.style.contain = `strict`; doc.body.appendChild(progressBar); } }; // build/dev-server/client/status.js var initBuildStatus = (data) => { const win = data.window; const doc = win.document; const iconElms = getFavIcons(doc); iconElms.forEach((iconElm) => { if (iconElm.href) { iconElm.dataset.href = iconElm.href; iconElm.dataset.type = iconElm.type; } }); onBuildStatus(win, (buildStatus) => { updateBuildStatus(doc, buildStatus); }); }; var updateBuildStatus = (doc, status) => { const iconElms = getFavIcons(doc); iconElms.forEach((iconElm) => { updateFavIcon(iconElm, status); }); }; var updateFavIcon = (linkElm, status) => { if (status === "pending") { linkElm.href = ICON_PENDING; linkElm.type = ICON_TYPE; linkElm.setAttribute("data-status", status); } else if (status === "error") { linkElm.href = ICON_ERROR; linkElm.type = ICON_TYPE; linkElm.setAttribute("data-status", status); } else if (status === "disabled") { linkElm.href = ICON_DISABLED; linkElm.type = ICON_TYPE; linkElm.setAttribute("data-status", status); } else { linkElm.removeAttribute("data-status"); if (linkElm.dataset.href) { linkElm.href = linkElm.dataset.href; linkElm.type = linkElm.dataset.type; } else { linkElm.href = ICON_DEFAULT; linkElm.type = ICON_TYPE; } } }; var getFavIcons = (doc) => { const iconElms = []; const linkElms = doc.querySelectorAll("link"); for (let i = 0; i < linkElms.length; i++) { if (linkElms[i].href && linkElms[i].rel && (linkElms[i].rel.indexOf("shortcut") > -1 || linkElms[i].rel.indexOf("icon") > -1)) { iconElms.push(linkElms[i]); } } if (iconElms.length === 0) { const linkElm = doc.createElement("link"); linkElm.rel = "shortcut icon"; doc.head.appendChild(linkElm); iconElms.push(linkElm); } return iconElms; }; var ICON_DEFAULT = "data:image/png;base64,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"; var ICON_PENDING = "data:image/png;base64,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