/*! Stencil Testing v2.15.1 | MIT Licensed | https://stenciljs.com */ function _lazyRequire(e) { return new Proxy({}, { get(t, r) { const s = require(e); return Reflect.get(s, r); }, set(t, r, s) { const n = require(e); return Reflect.set(n, r, s); } }); } function _interopDefaultLegacy(e) { return e && "object" == typeof e && "default" in e ? e : { default: e }; } function _interopNamespace(e) { if (e && e.__esModule) return e; var t = Object.create(null); return e && Object.keys(e).forEach((function(r) { if ("default" !== r) { var s = Object.getOwnPropertyDescriptor(e, r); Object.defineProperty(t, r, s.get ? s : { enumerable: !0, get: function() { return e[r]; } }); } })), t.default = e, Object.freeze(t); } async function startPuppeteerBrowser(e) { if (!e.flags.e2e) return null; const t = process.env, r = e.testing.browserExecutablePath ? "puppeteer-core" : "puppeteer", s = e.sys.lazyRequire.getModulePath(e.rootDir, r), n = e.sys.lazyRequire.require(e.rootDir, s); t.__STENCIL_PUPPETEER_MODULE__ = s, t.__STENCIL_BROWSER_WAIT_UNTIL = e.testing.browserWaitUntil, e.flags.devtools && (e.testing.browserDevtools = !0, e.testing.browserHeadless = !1, t.__STENCIL_E2E_DEVTOOLS__ = "true"), e.logger.debug(`puppeteer: ${s}`), e.logger.debug(`puppeteer headless: ${e.testing.browserHeadless}`), Array.isArray(e.testing.browserArgs) && e.logger.debug(`puppeteer args: ${e.testing.browserArgs.join(" ")}`), "boolean" == typeof e.testing.browserDevtools && e.logger.debug(`puppeteer devtools: ${e.testing.browserDevtools}`), "number" == typeof e.testing.browserSlowMo && e.logger.debug(`puppeteer slowMo: ${e.testing.browserSlowMo}`); const o = { ignoreHTTPSErrors: !0, slowMo: e.testing.browserSlowMo }; let i; if (e.testing.browserWSEndpoint) i = await n.connect({ browserWSEndpoint: e.testing.browserWSEndpoint, ...o }); else { const t = { args: e.testing.browserArgs, headless: e.testing.browserHeadless, devtools: e.testing.browserDevtools, ...o }; e.testing.browserExecutablePath && (t.executablePath = e.testing.browserExecutablePath), i = await n.launch({ ...t }); } return t.__STENCIL_BROWSER_WS_ENDPOINT__ = i.wsEndpoint(), e.logger.debug(`puppeteer browser wsEndpoint: ${t.__STENCIL_BROWSER_WS_ENDPOINT__}`), i; } function getAppStyleUrl(e, t) { return e.globalStyle ? getAppUrl(e, t, `${e.fsNamespace}.css`) : null; } function getAppUrl(e, t, r) { const s = e.outputTargets.find(isOutputTargetWww); if (s) { const e = s.buildDir, n = path$2.join(e, r), o = path$2.relative(s.dir, n); return new URL(o, t).href; } const n = e.outputTargets.find(isOutputTargetDistLazy); if (n) { const s = n.esmDir, o = path$2.join(s, r), i = path$2.relative(e.rootDir, o); return new URL(i, t).href; } return t; } function setScreenshotEmulateData(e, t) { const r = { userAgent: "default", viewport: { width: 800, height: 600, deviceScaleFactor: 1, isMobile: !1, hasTouch: !1, isLandscape: !1 } }; if ("string" == typeof e.device) try { const s = require(t.__STENCIL_PUPPETEER_MODULE__ + "/DeviceDescriptors")[e.device]; if (!s) return void console.error(`invalid emulate device: ${e.device}`); r.device = e.device, r.userAgent = s.userAgent, r.viewport = s.viewport; } catch (e) { return void console.error("error loading puppeteer DeviceDescriptors", e); } e.viewport && ("number" == typeof e.viewport.width && (r.viewport.width = e.viewport.width), "number" == typeof e.viewport.height && (r.viewport.height = e.viewport.height), "number" == typeof e.viewport.deviceScaleFactor && (r.viewport.deviceScaleFactor = e.viewport.deviceScaleFactor), "boolean" == typeof e.viewport.hasTouch && (r.viewport.hasTouch = e.viewport.hasTouch), "boolean" == typeof e.viewport.isLandscape && (r.viewport.isLandscape = e.viewport.isLandscape), "boolean" == typeof e.viewport.isMobile && (r.viewport.isMobile = e.viewport.isMobile), "string" == typeof e.userAgent && (r.userAgent = e.userAgent)), t.__STENCIL_EMULATE__ = JSON.stringify(r); } async function runJest(e, t) { let r = !1; try { const s = function s(e, t) { let r = e.emulate.slice(); if ("string" == typeof t.emulate) { const e = t.emulate.toLowerCase(); r = r.filter((t => "string" == typeof t.device && t.device.toLowerCase() === e || !("string" != typeof t.userAgent || !t.userAgent.toLowerCase().includes(e)))); } return r; }(e.testing, e.flags); t.__STENCIL_EMULATE_CONFIGS__ = JSON.stringify(s), t.__STENCIL_ENV__ = JSON.stringify(e.env), e.flags.ci || e.flags.e2e ? t.__STENCIL_DEFAULT_TIMEOUT__ = "30000" : t.__STENCIL_DEFAULT_TIMEOUT__ = "15000", e.flags.devtools && (t.__STENCIL_DEFAULT_TIMEOUT__ = "300000000"), e.logger.debug(`default timeout: ${t.__STENCIL_DEFAULT_TIMEOUT__}`); const n = function n(e) { const t = require("yargs"), r = [ ...e.flags.unknownArgs.slice(), ...e.flags.knownArgs.slice() ]; r.some((e => e.startsWith("--max-workers") || e.startsWith("--maxWorkers"))) || r.push(`--max-workers=${e.maxConcurrentWorkers}`), e.flags.devtools && r.push("--runInBand"), e.logger.info(e.logger.magenta(`jest args: ${r.join(" ")}`)); let s = t(r).argv; if (s = { detectLeaks: !1, "detect-leaks": !1, detectOpenHandles: !1, "detect-open-handles": !1, errorOnDeprecated: !1, "error-on-deprecated": !1, listTests: !1, "list-tests": !1, maxConcurrency: 5, "max-concurrency": 5, notifyMode: "failure-change", "notify-mode": "failure-change", passWithNoTests: !1, "pass-with-no-tests": !1, runTestsByPath: !1, "run-tests-by-path": !1, testLocationInResults: !1, "test-location-in-results": !1, ...s }, s.config = function n(e) { const t = e.testing, r = require("jest-config").defaults, s = Object.keys(r), n = {}; return Object.keys(t).forEach((e => { s.includes(e) && (n[e] = t[e]); })), n.rootDir = e.rootDir, isString(t.collectCoverage) && (n.collectCoverage = t.collectCoverage), Array.isArray(t.collectCoverageFrom) && (n.collectCoverageFrom = t.collectCoverageFrom), isString(t.coverageDirectory) && (n.coverageDirectory = t.coverageDirectory), t.coverageThreshold && (n.coverageThreshold = t.coverageThreshold), isString(t.globalSetup) && (n.globalSetup = t.globalSetup), isString(t.globalTeardown) && (n.globalTeardown = t.globalTeardown), isString(t.preset) && (n.preset = t.preset), t.projects && (n.projects = t.projects), Array.isArray(t.reporters) && (n.reporters = t.reporters), isString(t.testResultsProcessor) && (n.testResultsProcessor = t.testResultsProcessor), t.transform && (n.transform = t.transform), t.verbose && (n.verbose = t.verbose), n.testRunner = "jest-jasmine2", JSON.stringify(n); }(e), "string" == typeof s.maxWorkers) try { s.maxWorkers = parseInt(s.maxWorkers, 10); } catch (e) {} return "string" == typeof s.ci && (s.ci = "true" === s.ci || "" === s.ci), s; }(e), o = function o(e, t) { const r = t.projects ? t.projects : []; return r.push(e.rootDir), r; }(e, n), {runCLI: i} = require("@jest/core"); r = !!(await i(n, o)).results.success; } catch (t) { e.logger.error(`runJest: ${t}`); } return r; } function createBuildId() { const e = new Date; let t = e.getFullYear() + ""; return t += ("0" + (e.getMonth() + 1)).slice(-2), t += ("0" + e.getDate()).slice(-2), t += ("0" + e.getHours()).slice(-2), t += ("0" + e.getMinutes()).slice(-2), t += ("0" + e.getSeconds()).slice(-2), t; } function createBuildMessage() { const e = new Date; let t = e.getFullYear() + "-"; return t += ("0" + (e.getMonth() + 1)).slice(-2) + "-", t += ("0" + e.getDate()).slice(-2) + " ", t += ("0" + e.getHours()).slice(-2) + ":", t += ("0" + e.getMinutes()).slice(-2) + ":", t += ("0" + e.getSeconds()).slice(-2), `Build: ${t}`; } function transpile(e, t = {}) { t = { ...t, componentExport: null, componentMetadata: "compilerstatic", coreImportPath: isString(t.coreImportPath) ? t.coreImportPath : "@stencil/core/internal/testing", currentDirectory: t.currentDirectory || process.cwd(), module: "cjs", proxy: null, sourceMap: "inline", style: null, styleImportData: "queryparams", target: "es2015" }; try { const e = process.versions.node.split("."); parseInt(e[0], 10) >= 10 && (t.target = "es2017"); } catch (e) {} return stencil_js.transpileSync(e, t); } function formatDiagnostic(e) { let t = ""; return e.relFilePath && (t += e.relFilePath, "number" == typeof e.lineNumber && (t += ":" + e.lineNumber + 1, "number" == typeof e.columnNumber && (t += ":" + e.columnNumber)), t += "\n"), t += e.messageText, t; } function getCompilerOptions(e) { if (_tsCompilerOptions) return _tsCompilerOptions; if ("string" != typeof e) return null; e = normalizePath(e); const t = stencil_js.ts.findConfigFile(e, stencil_js.ts.sys.fileExists); if (!t) return null; const r = stencil_js.ts.readConfigFile(t, stencil_js.ts.sys.readFile); if (r.error) throw new Error(formatDiagnostic((e => { const t = { level: "warn", type: "typescript", language: "typescript", header: "TypeScript", code: e.code.toString(), messageText: flattenDiagnosticMessageText(e, e.messageText), relFilePath: null, absFilePath: null, lines: [] }; if (1 === e.category && (t.level = "error"), e.file) { t.absFilePath = e.file.fileName; const s = "string" != typeof (r = e.file.text) ? [] : (r = r.replace(/\\r/g, "\n")).split("\n"), n = e.file.getLineAndCharacterOfPosition(e.start), o = { lineIndex: n.line, lineNumber: n.line + 1, text: s[n.line], errorCharStart: n.character, errorLength: Math.max(e.length, 1) }; if (t.lineNumber = o.lineNumber, t.columnNumber = o.errorCharStart + 1, t.lines.push(o), 0 === o.errorLength && o.errorCharStart > 0 && (o.errorLength = 1, o.errorCharStart--), o.lineIndex > 0) { const e = { lineIndex: o.lineIndex - 1, lineNumber: o.lineNumber - 1, text: s[o.lineIndex - 1], errorCharStart: -1, errorLength: -1 }; t.lines.unshift(e); } if (o.lineIndex + 1 < s.length) { const e = { lineIndex: o.lineIndex + 1, lineNumber: o.lineNumber + 1, text: s[o.lineIndex + 1], errorCharStart: -1, errorLength: -1 }; t.lines.push(e); } } var r; return t; })(r.error))); const s = stencil_js.ts.parseJsonConfigFileContent(r.config, stencil_js.ts.sys, e, void 0, t); return _tsCompilerOptions = s.options, _tsCompilerOptions; } function compareHtml(e, t, r) { if (null == e) throw new Error(`expect toEqualHtml() value is "${e}"`); if ("function" == typeof e.then) throw new Error("element must be a resolved value, not a promise, before it can be tested"); let s; if (1 === e.nodeType) { const t = function n(e) { return e && e.ownerDocument && e.ownerDocument.defaultView && e.ownerDocument.defaultView.__stencil_spec_options || {}; }(e); s = index_cjs.serializeNodeToHtml(e, { prettyHtml: !0, outerHtml: !0, removeHtmlComments: !1 === t.includeAnnotations, excludeTags: [ "body" ], serializeShadowRoot: r }); } else if (11 === e.nodeType) s = index_cjs.serializeNodeToHtml(e, { prettyHtml: !0, excludeTags: [ "style" ], excludeTagContent: [ "style" ], serializeShadowRoot: r }); else { if ("string" != typeof e) throw new Error("expect toEqualHtml() value should be an element, shadow root or string."); { const t = index_cjs.parseHtmlToFragment(e); s = index_cjs.serializeNodeToHtml(t, { prettyHtml: !0, serializeShadowRoot: r }); } } const o = index_cjs.parseHtmlToFragment(t), i = index_cjs.serializeNodeToHtml(o, { prettyHtml: !0, excludeTags: [ "body" ] }); return s !== i ? (expect(s).toBe(i), { message: () => "HTML does not match", pass: !1 }) : { message: () => "expect HTML to match", pass: !0 }; } function toHaveClasses(e, t) { if (!e) throw new Error("expect toHaveClasses value is null"); if ("function" == typeof e.then) throw new Error("element must be a resolved value, not a promise, before it can be tested"); if (1 !== e.nodeType) throw new Error("expect toHaveClasses value is not an element"); const r = t.every((t => e.classList.contains(t))); return { message: () => `expected to ${r ? "not " : ""}have css classes "${t.join(" ")}", but className is "${e.className}"`, pass: r }; } async function globalMockFetch(e) { let t; if (null == e) throw new Error("missing url input for mock fetch()"); if ("string" == typeof e) t = e; else { if ("string" != typeof e.url) throw new Error("invalid url for mock fetch()"); t = e.url; } t = new URL(t, location.href).href; let r = mockedResponses.get(t); if (null == r) { const e = new URL(FETCH_DEFAULT_PATH, location.href); r = mockedResponses.get(e.href); } if (null == r) return new MockResponse404; const s = r.response.clone(); return "number" != typeof s.status && (s.status = 200), "string" != typeof s.statusText && (s.status >= 500 ? s.statusText = "Internal Server Error" : 404 === s.status ? s.statusText = "Not Found" : s.status >= 400 ? s.statusText = "Bad Request" : 302 === s.status ? s.statusText = "Found" : 301 === s.status ? s.statusText = "Moved Permanently" : s.status >= 300 ? s.statusText = "Redirection" : s.statusText = "OK"), s.ok = s.status >= 200 && s.status <= 299, "string" != typeof s.type && (s.type = "basic"), s; } function setMockedResponse(e, t, r) { if (!e) throw new Error("MockResponse required"); "string" == typeof e.url && "" !== e.url || ("string" == typeof t ? e.url = t : t && "string" == typeof t.url ? e.url = t.url : e.url = FETCH_DEFAULT_PATH); const s = new URL(e.url, location.href); e.url = s.href; const n = { response: e, reject: r }; mockedResponses.set(e.url, n); } function resetBuildConditionals(e) { Object.keys(e).forEach((t => { e[t] = !0; })), e.isDev = !0, e.isTesting = !0, e.isDebug = !1, e.lazyLoad = !0, e.member = !0, e.reflect = !0, e.scoped = !0, e.shadowDom = !0, e.slotRelocation = !0, e.asyncLoading = !0, e.svg = !0, e.updatable = !0, e.vdomAttribute = !0, e.vdomClass = !0, e.vdomFunctional = !0, e.vdomKey = !0, e.vdomPropOrAttr = !0, e.vdomRef = !0, e.vdomListener = !0, e.vdomStyle = !0, e.vdomText = !0, e.vdomXlink = !0, e.allRenderFn = !1, e.devTools = !1, e.hydrateClientSide = !1, e.hydrateServerSide = !1, e.cssAnnotations = !1, e.style = !1, e.hydratedAttribute = !1, e.hydratedClass = !0, e.invisiblePrehydration = !0, e.appendChildSlotFix = !1, e.cloneNodeFix = !1, e.dynamicImportShim = !1, e.hotModuleReplacement = !1, e.safari10 = !1, e.scriptDataOpts = !1, e.scopedSlotTextContentFix = !1, e.slotChildNodesFix = !1; } function assertPath(e) { if ("string" != typeof e) throw new TypeError("Path must be a string. Received " + JSON.stringify(e)); } function normalizeStringPosix(e, t) { var r, s, n, o = "", i = 0, a = -1, l = 0; for (s = 0; s <= e.length; ++s) { if (s < e.length) r = e.charCodeAt(s); else { if (47 === r) break; r = 47; } if (47 === r) { if (a === s - 1 || 1 === l) ; else if (a !== s - 1 && 2 === l) { if (o.length < 2 || 2 !== i || 46 !== o.charCodeAt(o.length - 1) || 46 !== o.charCodeAt(o.length - 2)) if (o.length > 2) { if ((n = o.lastIndexOf("/")) !== o.length - 1) { -1 === n ? (o = "", i = 0) : i = (o = o.slice(0, n)).length - 1 - o.lastIndexOf("/"), a = s, l = 0; continue; } } else if (2 === o.length || 1 === o.length) { o = "", i = 0, a = s, l = 0; continue; } t && (o.length > 0 ? o += "/.." : o = "..", i = 2); } else o.length > 0 ? o += "/" + e.slice(a + 1, s) : o = e.slice(a + 1, s), i = s - a - 1; a = s, l = 0; } else 46 === r && -1 !== l ? ++l : l = -1; } return o; } function specifierIncluded$1(e, t) { var r, s, n, o = e.split("."), i = t.split(" "), a = i.length > 1 ? i[0] : "=", l = (i.length > 1 ? i[1] : i[0]).split("."); for (r = 0; r < 3; ++r) if ((s = parseInt(o[r] || 0, 10)) !== (n = parseInt(l[r] || 0, 10))) return "<" === a ? s < n : ">=" === a && s >= n; return ">=" === a; } function matchesRange$1(e, t) { var r, s = t.split(/ ?&& ?/); if (0 === s.length) return !1; for (r = 0; r < s.length; ++r) if (!specifierIncluded$1(e, s[r])) return !1; return !0; } function specifierIncluded(e) { var t, r, s, n = e.split(" "), o = n.length > 1 ? n[0] : "=", i = (n.length > 1 ? n[1] : n[0]).split("."); for (t = 0; t < 3; ++t) if ((r = parseInt(current[t] || 0, 10)) !== (s = parseInt(i[t] || 0, 10))) return "<" === o ? r < s : ">=" === o && r >= s; return ">=" === o; } function matchesRange(e) { var t, r = e.split(/ ?&& ?/); if (0 === r.length) return !1; for (t = 0; t < r.length; ++t) if (!specifierIncluded(r[t])) return !1; return !0; } function versionIncluded(e) { if ("boolean" == typeof e) return e; if (e && "object" == typeof e) { for (var t = 0; t < e.length; ++t) if (matchesRange(e[t])) return !0; return !1; } return matchesRange(e); } function mockConfig(e) { const t = path__default.default.resolve("/"); return e || (e = createTestingSystem()), e.getCurrentDirectory = () => t, { _isTesting: !0, namespace: "Testing", rootDir: t, globalScript: null, devMode: !0, enableCache: !1, buildAppCore: !1, buildDist: !0, flags: {}, bundles: null, outputTargets: null, buildEs5: !1, hashFileNames: !1, logger: new TestingLogger, maxConcurrentWorkers: 0, minifyCss: !1, minifyJs: !1, sys: e, testing: null, validateTypes: !1, extras: {}, nodeResolve: { customResolveOptions: {} }, sourceMap: !0 }; } function mockCompilerCtx(e) { e || (e = mockConfig()); const t = { version: 1, activeBuildId: 0, activeDirsAdded: [], activeDirsDeleted: [], activeFilesAdded: [], activeFilesDeleted: [], activeFilesUpdated: [], addWatchDir: noop, addWatchFile: noop, cachedGlobalStyle: null, changedFiles: new Set, changedModules: new Set, collections: [], compilerOptions: null, cache: null, cssModuleImports: new Map, events: null, fs: null, hasSuccessfulBuild: !1, isActivelyBuilding: !1, lastBuildResults: null, moduleMap: new Map, nodeMap: new WeakMap, reset: noop, resolvedCollections: new Set, rollupCache: new Map, rollupCacheHydrate: null, rollupCacheLazy: null, rollupCacheNative: null, styleModeNames: new Set, worker: stencil_js.createWorkerContext(e.sys) }; return Object.defineProperty(t, "fs", { get() { return null == this._fs && (this._fs = (e => { const t = new Map, r = new Map, s = async e => { const t = b(e); if ("boolean" == typeof t.exists) return { exists: t.exists, isDirectory: t.isDirectory, isFile: t.isFile }; const r = { exists: !1, isDirectory: !1, isFile: !1 }, s = await c(e); return s ? (t.exists = s.exists, t.isDirectory = s.isDirectory, t.isFile = s.isFile, r.exists = t.exists, r.isDirectory = t.isDirectory, r.isFile = t.isFile) : t.exists = !1, r; }, n = async (e, r = {}) => { e = normalizePath(e); const s = []; if (!0 === r.inMemoryOnly) { let n = e; n.endsWith("/") || (n += "/"); const o = e.split("/"); t.forEach(((t, n) => { if (!n.startsWith(e)) return; const a = n.split("/"); if ((a.length === o.length + 1 || r.recursive && a.length > o.length) && t.exists) { const e = { absPath: n, relPath: a[o.length], isDirectory: t.isDirectory, isFile: t.isFile }; i(r, e) || s.push(e); } })); } else await o(e, e, r, s); return s.sort(((e, t) => e.absPath < t.absPath ? -1 : e.absPath > t.absPath ? 1 : 0)); }, o = async (t, r, s, n) => { const a = await e.readDir(r); if (a.length > 0) { const e = b(r); e.exists = !0, e.isFile = !1, e.isDirectory = !0, await Promise.all(a.map((async e => { const r = normalizePath(e), a = normalizePath(path$2.relative(t, r)), l = await c(r), u = { absPath: r, relPath: a, isDirectory: l.isDirectory, isFile: l.isFile }; i(s, u) || (n.push(u), !0 === s.recursive && !0 === l.isDirectory && await o(t, r, s, n)); }))); } }, i = (e, t) => { if (t.isDirectory) { if (Array.isArray(e.excludeDirNames)) { const r = path$2.basename(t.absPath); if (e.excludeDirNames.some((e => r === e))) return !0; } } else if (Array.isArray(e.excludeExtensions)) { const r = t.relPath.toLowerCase(); if (e.excludeExtensions.some((e => r.endsWith(e)))) return !0; } return !1; }, a = async e => { const t = b(e); t.isFile = !1, t.isDirectory = !0, t.queueWriteToDisk || (t.queueDeleteFromDisk = !0); try { const t = await n(e, { recursive: !0 }); await Promise.all(t.map((e => e.relPath.endsWith(".gitkeep") ? null : l(e.absPath)))); } catch (e) {} }, l = async e => { const t = b(e); t.queueWriteToDisk || (t.queueDeleteFromDisk = !0); }, c = async t => { const r = b(t); if ("boolean" != typeof r.isDirectory || "boolean" != typeof r.isFile) { const s = await e.stat(t); s.error ? r.exists = !1 : (r.exists = !0, s.isFile ? (r.isFile = !0, r.isDirectory = !1, r.size = s.size) : s.isDirectory ? (r.isFile = !1, r.isDirectory = !0, r.size = s.size) : (r.isFile = !1, r.isDirectory = !1, r.size = null)); } return { exists: !!r.exists, isFile: !!r.isFile, isDirectory: !!r.isDirectory, size: "number" == typeof r.size ? r.size : 0 }; }, u = t => { const r = b(t); if ("boolean" != typeof r.isDirectory || "boolean" != typeof r.isFile) { const s = e.statSync(t); s.error ? r.exists = !1 : (r.exists = !0, s.isFile ? (r.isFile = !0, r.isDirectory = !1, r.size = s.size) : s.isDirectory ? (r.isFile = !1, r.isDirectory = !0, r.size = s.size) : (r.isFile = !1, r.isDirectory = !1, r.size = null)); } return { exists: !!r.exists, isFile: !!r.isFile, isDirectory: !!r.isDirectory }; }, d = async (t, s, n) => { if ("string" != typeof t) throw new Error(`writeFile, invalid filePath: ${t}`); if ("string" != typeof s) throw new Error(`writeFile, invalid content: ${t}`); const o = { ignored: !1, changedContent: !1, queuedWrite: !1 }; if (!0 === shouldIgnore(t)) return o.ignored = !0, o; const i = b(t); if (i.exists = !0, i.isFile = !0, i.isDirectory = !1, i.queueDeleteFromDisk = !1, "string" == typeof i.fileText ? o.changedContent = i.fileText.replace(/\r/g, "") !== s.replace(/\r/g, "") : o.changedContent = !0, i.fileText = s, o.queuedWrite = !1, null != n && ("string" == typeof n.outputTargetType && r.set(t, n.outputTargetType), !1 === n.useCache && (i.useCache = !1)), null != n && !0 === n.inMemoryOnly) i.queueWriteToDisk ? o.queuedWrite = !0 : i.queueWriteToDisk = !1, await h(t, !0); else if (null != n && !0 === n.immediateWrite) { if (o.changedContent || !0 !== n.useCache) { const r = await e.readFile(t); "string" == typeof r && (o.changedContent = i.fileText.replace(/\r/g, "") !== r.replace(/\r/g, "")), o.changedContent && (await h(t, !1), await e.writeFile(t, i.fileText)); } } else i.queueWriteToDisk || !0 !== o.changedContent || (i.queueWriteToDisk = !0, o.queuedWrite = !0); return o; }, h = async (e, t) => { const r = []; for (;"string" == typeof (e = path$2.dirname(e)) && e.length > 0 && "/" !== e && !1 === e.endsWith(":/") && !1 === e.endsWith(":\\"); ) r.push(e); r.reverse(), await p(r, t); }, p = async (t, r) => { const s = []; for (const n of t) { const t = b(n); if (!0 !== t.exists || !0 !== t.isDirectory) try { t.exists = !0, t.isDirectory = !0, t.isFile = !1, r || await e.createDir(n), s.push(n); } catch (e) {} } return s; }, f = t => Promise.all(t.map((async t => { const r = t[0], s = t[1]; return await e.copyFile(r, s), [ r, s ]; }))), m = e => Promise.all(e.map((async e => { if ("string" != typeof e) throw new Error("unable to writeFile without filePath"); return g(e); }))), g = async t => { const r = b(t); if (null == r.fileText) throw new Error(`unable to find item fileText to write: ${t}`); return await e.writeFile(t, r.fileText), !1 === r.useCache && v(t), t; }, y = async t => await Promise.all(t.map((async t => { if ("string" != typeof t) throw new Error("unable to unlink without filePath"); return await e.removeFile(t), t; }))), w = async t => { const r = []; for (const s of t) await e.removeDir(s), r.push(s); return r; }, _ = e => { e = normalizePath(e), t.forEach(((t, r) => { const s = path$2.relative(e, r).split("/")[0]; s.startsWith(".") || s.startsWith("/") || v(r); })); }, v = e => { e = normalizePath(e); const r = t.get(e); null == r || r.queueWriteToDisk || t.delete(e); }, b = e => { e = normalizePath(e); let r = t.get(e); return null != r || t.set(e, r = { exists: null, fileText: null, size: null, mtimeMs: null, isDirectory: null, isFile: null, queueCopyFileToDest: null, queueDeleteFromDisk: null, queueWriteToDisk: null, useCache: null }), r; }, E = 5242880; return { access: async e => (await s(e)).exists, accessSync: e => { const t = b(e); if ("boolean" != typeof t.exists) { const r = u(e); t.exists = r.exists, t.isDirectory = r.isDirectory, t.isFile = r.isFile; } return t.exists; }, accessData: s, cancelDeleteDirectoriesFromDisk: e => { for (const t of e) { const e = b(t); !0 === e.queueDeleteFromDisk && (e.queueDeleteFromDisk = !1); } }, cancelDeleteFilesFromDisk: e => { for (const t of e) { const e = b(t); !0 === e.isFile && !0 === e.queueDeleteFromDisk && (e.queueDeleteFromDisk = !1); } }, clearCache: () => t.clear(), clearDirCache: _, clearFileCache: v, commit: async () => { const e = getCommitInstructions(t), r = await p(e.dirsToEnsure, !1), s = await m(e.filesToWrite), n = await f(e.filesToCopy), o = await y(e.filesToDelete), i = await w(e.dirsToDelete); return e.filesToDelete.forEach(v), e.dirsToDelete.forEach(_), { filesCopied: n, filesWritten: s, filesDeleted: o, dirsDeleted: i, dirsAdded: r }; }, copyFile: async (e, t) => { b(e).queueCopyFileToDest = t; }, emptyDirs: async e => { e = e.filter(isString).map(normalizePath).reduce(((e, t) => (e.includes(t) || e.push(t), e)), []); const t = await Promise.all(e.map((e => n(e, { recursive: !0 })))), r = []; for (const e of t) for (const t of e) r.includes(t.absPath) || r.push(t.absPath); r.sort(((e, t) => { const r = e.split("/").length, s = t.split("/").length; return r < s ? 1 : r > s ? -1 : 0; })), await Promise.all(r.map(l)), e.forEach((e => { const t = b(e); t.isFile = !1, t.isDirectory = !0, t.queueWriteToDisk = !0, t.queueDeleteFromDisk = !1; })); }, getBuildOutputs: () => { const e = []; return r.forEach(((t, r) => { const s = e.find((e => e.type === t)); s ? s.files.push(r) : e.push({ type: t, files: [ r ] }); })), e.forEach((e => e.files.sort())), e.sort(((e, t) => e.type < t.type ? -1 : e.type > t.type ? 1 : 0)); }, getItem: b, getMemoryStats: () => `data length: ${t.size}`, keys: () => Array.from(t.keys()).sort(), readFile: async (t, r) => { if (null == r || !0 === r.useCache || void 0 === r.useCache) { const e = b(t); if (e.exists && "string" == typeof e.fileText) return e.fileText; } const s = await e.readFile(t), n = b(t); return "string" == typeof s ? s.length < E && (n.exists = !0, n.isFile = !0, n.isDirectory = !1, n.fileText = s) : n.exists = !1, s; }, readFileSync: (t, r) => { if (null == r || !0 === r.useCache || void 0 === r.useCache) { const e = b(t); if (e.exists && "string" == typeof e.fileText) return e.fileText; } const s = e.readFileSync(t), n = b(t); return "string" == typeof s ? s.length < E && (n.exists = !0, n.isFile = !0, n.isDirectory = !1, n.fileText = s) : n.exists = !1, s; }, readdir: n, remove: async e => { const t = await c(e); !0 === t.isDirectory ? await a(e) : !0 === t.isFile && await l(e); }, stat: c, statSync: u, sys: e, writeFile: d, writeFiles: (e, t) => { const r = []; return isIterable(e) ? e.forEach(((e, s) => { r.push(d(s, e, t)); })) : Object.keys(e).map((s => { r.push(d(s, e[s], t)); })), Promise.all(r); } }; })(e.sys)), this._fs; } }), Object.defineProperty(t, "cache", { get() { return null == this._cache && (this._cache = function r(e, t) { e || (e = mockConfig()), t || (t = mockCompilerCtx(e)), e.enableCache = !0; const r = new Cache(e, t.fs); return r.initCacheDir(), r; }(e, t)), this._cache; } }), t; } function findRootComponent(e, t) { if (null != t) { const r = t.children, s = r.length; for (let t = 0; t < s; t++) { const s = r[t]; if (e.has(s.nodeName.toLowerCase())) return s; } for (let t = 0; t < s; t++) { const s = findRootComponent(e, r[t]); if (null != s) return s; } } return null; } async function initPageEvents(e) { e._e2eEvents = new Map, e._e2eEventIds = 0, e.spyOnEvent = pageSpyOnEvent.bind(e, e), await e.exposeFunction("stencilOnEvent", ((t, r) => { !function s(e, t, r) { const s = e.get(t); s && s.callback(r); }(e._e2eEvents, t, r); })), await e.evaluateOnNewDocument(browserContextEvents); } async function pageSpyOnEvent(e, t, r) { const s = new EventSpy(t), n = "document" !== r ? () => window : () => document, o = await e.evaluateHandle(n); return await addE2EListener(e, o, t, (e => { s.push(e); })), s; } async function waitForEvent(e, t, r) { const s = .5 * jasmine.DEFAULT_TIMEOUT_INTERVAL, n = await e.evaluate(((e, t, r) => new Promise(((s, n) => { const o = setTimeout((() => { n(new Error(`waitForEvent() timeout, eventName: ${t}`)); }), r); e.addEventListener(t, (e => { clearTimeout(o), s(window.stencilSerializeEvent(e)); }), { once: !0 }); }))), r, t, s); return await e.waitForChanges(), n; } async function addE2EListener(e, t, r, s) { const n = e._e2eEventIds++; e._e2eEvents.set(n, { eventName: r, callback: s }); const o = t.executionContext(); await o.evaluate(((e, t, r) => { e.addEventListener(r, (e => { window.stencilOnEvent(t, window.stencilSerializeEvent(e)); })); }), t, n, r); } function browserContextEvents() { const e = () => { const e = [], t = (e, r) => { if (null != r && 1 === r.nodeType) for (let s = 0; s < r.children.length; s++) { const n = r.children[s]; n.tagName.includes("-") && "function" == typeof n.componentOnReady && e.push(n.componentOnReady()), t(e, n); } }; return t(e, window.document.documentElement), Promise.all(e).catch((e => console.error(e))); }, t = () => e().then((() => new Promise((e => { requestAnimationFrame(e); })))).then((() => e())).then((() => { window.stencilAppLoaded = !0; })); window.stencilSerializeEventTarget = e => e ? e === window ? { serializedWindow: !0 } : e === document ? { serializedDocument: !0 } : null != e.nodeType ? { serializedElement: !0, nodeName: e.nodeName, nodeValue: e.nodeValue, nodeType: e.nodeType, tagName: e.tagName, className: e.className, id: e.id } : null : null, window.stencilSerializeEvent = e => ({ bubbles: e.bubbles, cancelBubble: e.cancelBubble, cancelable: e.cancelable, composed: e.composed, currentTarget: window.stencilSerializeEventTarget(e.currentTarget), defaultPrevented: e.defaultPrevented, detail: e.detail, eventPhase: e.eventPhase, isTrusted: e.isTrusted, returnValue: e.returnValue, srcElement: window.stencilSerializeEventTarget(e.srcElement), target: window.stencilSerializeEventTarget(e.target), timeStamp: e.timeStamp, type: e.type, isSerializedEvent: !0 }), "complete" === window.document.readyState ? t() : document.addEventListener("readystatechange", (function(e) { "complete" == e.target.readyState && t(); })); } async function find(e, t, r) { const {lightSelector: s, shadowSelector: n, text: o, contains: i} = getSelector(r); let a; if (a = "string" == typeof s ? await async function l(e, t, r, s) { let n = await t.$(r); if (!n) return null; if (s) { const t = await e.evaluateHandle(((e, t) => { if (!e.shadowRoot) throw new Error(`shadow root does not exist for element: ${e.tagName.toLowerCase()}`); return e.shadowRoot.querySelector(t); }), n, s); if (await n.dispose(), !t) return null; n = t.asElement(); } return n; }(e, t, s, n) : await async function c(e, t, r, s) { const n = await e.evaluateHandle(((e, t, r) => { let s = null; return function e(n) { if (n && !s) if (3 === n.nodeType) { if ("string" == typeof t && n.textContent.trim() === t) return void (s = n.parentElement); if ("string" == typeof r && n.textContent.includes(r)) return void (s = n.parentElement); } else { if ("SCRIPT" === n.nodeName || "STYLE" === n.nodeName) return; if (e(n.shadowRoot), n.childNodes) for (let t = 0; t < n.childNodes.length; t++) e(n.childNodes[t]); } }(e), s; }), t, r, s); return n ? n.asElement() : null; }(e, t, o, i), !a) return null; const u = new E2EElement(e, a); return await u.e2eSync(), u; } async function findAll(e, t, r) { const s = [], {lightSelector: n, shadowSelector: o} = getSelector(r), i = await t.$$(n); if (0 === i.length) return s; if (o) for (let t = 0; t < i.length; t++) { const r = i[t].executionContext(), n = await r.evaluateHandle(((e, t) => { if (!e.shadowRoot) throw new Error(`shadow root does not exist for element: ${e.tagName.toLowerCase()}`); return e.shadowRoot.querySelectorAll(t); }), i[t], o); await i[t].dispose(); const a = await n.getProperties(); await n.dispose(); for (const t of a.values()) { const r = t.asElement(); if (r) { const t = new E2EElement(e, r); await t.e2eSync(), s.push(t); } } } else for (let t = 0; t < i.length; t++) { const r = new E2EElement(e, i[t]); await r.e2eSync(), s.push(r); } return s; } function getSelector(e) { const t = { lightSelector: null, shadowSelector: null, text: null, contains: null }; if ("string" == typeof e) { const r = e.split(">>>"); t.lightSelector = r[0].trim(), t.shadowSelector = r.length > 1 ? r[1].trim() : null; } else if ("string" == typeof e.text) t.text = e.text.trim(); else { if ("string" != typeof e.contains) throw new Error(`invalid find selector: ${e}`); t.contains = e.contains.trim(); } return t; } async function writeScreenshotData(e, t) { const r = function s(e, t) { const r = `${t}.json`; return path__default.default.join(e, r); }(e, t.id), n = JSON.stringify(t, null, 2); await writeFile(r, n); } function writeFile(e, t) { return new Promise(((r, s) => { fs__default.default.writeFile(e, t, (e => { e ? s(e) : r(); })); })); } async function compareScreenshot(e, t, r, s, n, o, i, a) { const l = `${crypto$3.createHash("md5").update(r).digest("hex")}.png`, c = path$2.join(t.imagesDir, l); await async function u(e, t) { await function r(e) { return new Promise((t => { fs__default.default.access(e, (e => t(!e))); })); }(e) || await writeFile(e, t); }(c, r), r = null, i && (i = normalizePath(path$2.relative(t.rootDir, i))); const d = function h(e, t) { if ("string" != typeof t || 0 === t.trim().length) throw new Error("invalid test description"); const r = crypto$3.createHash("md5"); return r.update(t + ":"), r.update(e.userAgent + ":"), r.update(e.viewport.width + ":"), r.update(e.viewport.height + ":"), r.update(e.viewport.deviceScaleFactor + ":"), r.update(e.viewport.hasTouch + ":"), r.update(e.viewport.isMobile + ":"), r.digest("hex").slice(0, 8).toLowerCase(); }(e, s), p = { id: d, image: l, device: e.device, userAgent: e.userAgent, desc: s, testPath: i, width: n, height: o, deviceScaleFactor: e.viewport.deviceScaleFactor, hasTouch: e.viewport.hasTouch, isLandscape: e.viewport.isLandscape, isMobile: e.viewport.isMobile, diff: { id: d, desc: s, imageA: l, imageB: l, mismatchedPixels: 0, device: e.device, userAgent: e.userAgent, width: n, height: o, deviceScaleFactor: e.viewport.deviceScaleFactor, hasTouch: e.viewport.hasTouch, isLandscape: e.viewport.isLandscape, isMobile: e.viewport.isMobile, allowableMismatchedPixels: t.allowableMismatchedPixels, allowableMismatchedRatio: t.allowableMismatchedRatio, testPath: i } }; if (t.updateMaster) return await writeScreenshotData(t.currentBuildDir, p), p.diff; const f = t.masterScreenshots[p.id]; if (!f) return await writeScreenshotData(t.currentBuildDir, p), p.diff; if (p.diff.imageA = f, p.diff.imageA !== p.diff.imageB) { p.diff.cacheKey = function m(e, t, r) { const s = crypto$3.createHash("md5"); return s.update(`${e}:${t}:${r}`), s.digest("hex").slice(0, 10); }(p.diff.imageA, p.diff.imageB, a); const r = t.cache[p.diff.cacheKey]; if ("number" != typeof r || isNaN(r)) { const r = Math.round(e.viewport.width * e.viewport.deviceScaleFactor), s = Math.round(e.viewport.height * e.viewport.deviceScaleFactor), n = { imageAPath: path$2.join(t.imagesDir, p.diff.imageA), imageBPath: path$2.join(t.imagesDir, p.diff.imageB), width: r, height: s, pixelmatchThreshold: a }; p.diff.mismatchedPixels = await async function g(e, t) { return new Promise(((r, s) => { const n = .5 * jasmine.DEFAULT_TIMEOUT_INTERVAL, o = setTimeout((() => { s(`getMismatchedPixels timeout: ${n}ms`); }), n); try { const n = { execArgv: process.execArgv.filter((e => !/^--(debug|inspect)/.test(e))), env: process.env, cwd: process.cwd(), stdio: [ "pipe", "pipe", "pipe", "ipc" ] }, i = child_process$2.fork(e, [], n); i.on("message", (e => { i.kill(), clearTimeout(o), r(e); })), i.on("error", (e => { clearTimeout(o), s(e); })), i.send(t); } catch (e) { clearTimeout(o), s(`getMismatchedPixels error: ${e}`); } })); }(t.pixelmatchModulePath, n); } else p.diff.mismatchedPixels = r; } return await writeScreenshotData(t.currentBuildDir, p), p.diff; } async function e2eGoTo(e, t, r = {}) { if (e.isClosed()) throw new Error("e2eGoTo unavailable: page already closed"); if ("string" != typeof t) throw new Error("invalid gotoTest() url"); if (!t.startsWith("/")) throw new Error("gotoTest() url must start with /"); const s = env.__STENCIL_BROWSER_URL__; if ("string" != typeof s) throw new Error("invalid gotoTest() browser url"); const n = s + t.substring(1); r.waitUntil || (r.waitUntil = env.__STENCIL_BROWSER_WAIT_UNTIL); const o = await e._e2eGoto(n, r); if (!o.ok()) throw new Error(`Testing unable to load ${t}, HTTP status: ${o.status()}`); return await waitForStencil(e, r), o; } async function e2eSetContent(e, t, r = {}) { if (e.isClosed()) throw new Error("e2eSetContent unavailable: page already closed"); if ("string" != typeof t) throw new Error("invalid e2eSetContent() html"); const s = [], n = env.__STENCIL_APP_SCRIPT_URL__; if ("string" != typeof n) throw new Error("invalid e2eSetContent() app script url"); s.push(""), s.push(""), s.push("
"); const o = env.__STENCIL_APP_STYLE_URL__; "string" == typeof o && s.push(``), s.push(`