UNPKG

@stencil/core

Version:

A Compiler for Web Components and Progressive Web Apps

1,247 lines (1,183 loc) • 242 kB
/*! Stencil Testing v4.8.0 | 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); } function createCommonjsModule(e, t, r) { return e(r = { path: t, exports: {}, require: function(e, t) { return function s() { throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs"); }(null == t && r.path); } }, r.exports), r.exports; } 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.platformPath.join(s, "package.json"), o = e.sys.lazyRequire.require(e.rootDir, s); t.__STENCIL_PUPPETEER_MODULE__ = s; try { const r = e.sys.readFileSync(n, "utf8"), s = JSON.parse(r); t.__STENCIL_PUPPETEER_VERSION__ = major_1(s.version); } catch (e) { console.error(`An error occurred determining the version of Puppeteer installed:\n${e}`), t.__STENCIL_PUPPETEER_VERSION__ = void 0; } t.__STENCIL_BROWSER_WAIT_UNTIL = e.testing.browserWaitUntil, e.flags.devtools && (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 i = { ignoreHTTPSErrors: !0, slowMo: e.testing.browserSlowMo }; let a; if (e.testing.browserWSEndpoint) a = await o.connect({ browserWSEndpoint: e.testing.browserWSEndpoint, ...i }); else { const t = { args: e.testing.browserArgs, headless: e.testing.browserHeadless, devtools: e.testing.browserDevtools, ...i }; e.testing.browserExecutablePath && (t.executablePath = e.testing.browserExecutablePath), a = await o.launch({ ...t }); } return t.__STENCIL_BROWSER_WS_ENDPOINT__ = a.wsEndpoint(), e.logger.debug(`puppeteer browser wsEndpoint: ${t.__STENCIL_BROWSER_WS_ENDPOINT__}`), a; } async function connectBrowser() { const e = process.env, t = e.__STENCIL_BROWSER_WS_ENDPOINT__; if (!t) return null; const r = { browserWSEndpoint: t, ignoreHTTPSErrors: !0 }, s = require(e.__STENCIL_PUPPETEER_MODULE__); return await s.connect(r); } async function disconnectBrowser(e) { if (e) try { e.disconnect(); } catch (e) {} } function newBrowserPage(e) { return e.newPage(); } function createJestPuppeteerEnvironment$2() { const e = require("jest-environment-node"); return class extends e { constructor(e) { super(e), this.browser = null, this.pages = []; } async setup() { "true" === process.env.__STENCIL_E2E_TESTS__ && (this.global.__NEW_TEST_PAGE__ = this.newPuppeteerPage.bind(this), this.global.__CLOSE_OPEN_PAGES__ = this.closeOpenPages.bind(this)); } async newPuppeteerPage() { this.browser || (this.browser = await connectBrowser()); const e = await newBrowserPage(this.browser); this.pages.push(e); const t = process.env; return "string" == typeof t.__STENCIL_DEFAULT_TIMEOUT__ && e.setDefaultTimeout(parseInt(t.__STENCIL_DEFAULT_TIMEOUT__, 10)), e; } async closeOpenPages() { await Promise.all(this.pages.map((e => e.close()))), this.pages.length = 0; } async teardown() { await super.teardown(), await this.closeOpenPages(), await disconnectBrowser(this.browser), this.browser = null; } getVmContext() { return super.getVmContext(); } }; } function relative(e, t) { return normalizePath(path__default.default.relative(e, t), !1); } function join(...e) { return normalizePath(path__default.default.join(...e), !1); } function transpile(e, t = {}) { var r; 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", transformAliasedImportPaths: (r = process.env.__STENCIL_TRANSPILE_PATHS__, "true" === r) }; 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$2(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$2(e) { if (_tsCompilerOptions$2) return _tsCompilerOptions$2; 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$2(loadTypeScriptDiagnostic(r.error))); const s = stencil_js.ts.parseJsonConfigFileContent(r.config, stencil_js.ts.sys, e, void 0, t); return _tsCompilerOptions$2 = s.options, _tsCompilerOptions$2; } 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$2(e, t) { let r = !1; try { const s = function s(e, t) { var r, s; let n = null !== (s = null === (r = e.emulate) || void 0 === r ? void 0 : r.slice()) && void 0 !== s ? s : []; if ("string" == typeof t.emulate) { const e = t.emulate.toLowerCase(); n = n.filter((t => "string" == typeof t.device && t.device.toLowerCase() === e || !("string" != typeof t.userAgent || !t.userAgent.toLowerCase().includes(e)))); } return n; }(e.testing, e.flags); t.__STENCIL_EMULATE_CONFIGS__ = JSON.stringify(s), t.__STENCIL_ENV__ = JSON.stringify(e.env), t.__STENCIL_TRANSPILE_PATHS__ = e.transformAliasedImportPaths ? "true" : "false", 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.knownArgs.slice(); r.some((e => e.startsWith("--max-workers") || e.startsWith("--maxWorkers"))) || r.push(`--max-workers=${e.maxConcurrentWorkers}`), e.flags.devtools && r.push("--runInBand"); const s = [ ...r, ...e.flags.unknownArgs ]; e.logger.info(e.logger.magenta(`jest args: ${s.join(" ")}`)); let n = t(s).argv; if (n = { 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, ...n }, n.config = function o(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 = (new Jest27Stencil).getDefaultJestRunner(), JSON.stringify(n); }(e), "string" == typeof n.maxWorkers) try { n.maxWorkers = parseInt(n.maxWorkers, 10); } catch (e) {} return "string" == typeof n.ci && (n.ci = "true" === n.ci || "" === n.ci), n; }(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 createTestRunner$2() { class e extends TestRunner__default.default { async runTests(e, t, r, s, n, o) { const i = process.env; if (e = e.filter((e => function t(e, r) { const s = (e = e.toLowerCase().replace(/\\/g, "/")).includes(".e2e.") || e.includes("/e2e."); return !("true" !== r.__STENCIL_E2E_TESTS__ || !s) || "true" === r.__STENCIL_SPEC_TESTS__ && !s; }(e.path, i))), "true" === i.__STENCIL_SCREENSHOT__ && i.__STENCIL_EMULATE_CONFIGS__) { const a = JSON.parse(i.__STENCIL_EMULATE_CONFIGS__); for (let l = 0; l < a.length; l++) setScreenshotEmulateData(a[l], i), await super.runTests(e, t, r, s, n, o); } else await super.runTests(e, t, r, s, n, o); } } return e; } async function runJestScreenshot$2(e, t) { e.logger.debug(`screenshot connector: ${e.testing.screenshotConnector}`); const r = new (require(e.testing.screenshotConnector)), s = path$2.join(e.sys.getCompilerExecutingPath(), "..", "..", "screenshot", "pixel-match.js"); e.logger.debug(`pixelmatch module: ${s}`); const n = e.logger.createTimeSpan("screenshot, initBuild started", !0); await r.initBuild({ buildId: createBuildId$2(), buildMessage: createBuildMessage$2(), buildTimestamp: Date.now(), appNamespace: e.namespace, rootDir: e.rootDir, cacheDir: e.cacheDir, packageDir: path$2.join(e.sys.getCompilerExecutingPath(), "..", ".."), updateMaster: !!e.flags.updateScreenshot, logger: e.logger, allowableMismatchedPixels: e.testing.allowableMismatchedPixels, allowableMismatchedRatio: e.testing.allowableMismatchedRatio, pixelmatchThreshold: e.testing.pixelmatchThreshold, waitBeforeScreenshot: e.testing.waitBeforeScreenshot, pixelmatchModulePath: s }), e.flags.updateScreenshot || await r.pullMasterBuild(), n.finish("screenshot, initBuild finished"); const o = await Promise.all([ await r.getMasterBuild(), await r.getScreenshotCache() ]), i = o[0], a = o[1]; t.__STENCIL_SCREENSHOT_BUILD__ = r.toJson(i, a); const l = e.logger.createTimeSpan("screenshot, tests started", !0), c = await runJest$2(e, t); l.finish(`screenshot, tests finished, passed: ${c}`); try { const t = e.logger.createTimeSpan("screenshot, completeTimespan started", !0); let s = await r.completeBuild(i); if (t.finish("screenshot, completeTimespan finished"), s) { const t = e.logger.createTimeSpan("screenshot, publishBuild started", !0); if (s = await r.publishBuild(s), t.finish("screenshot, publishBuild finished"), e.flags.updateScreenshot) s.currentBuild && "string" == typeof s.currentBuild.previewUrl && e.logger.info(e.logger.magenta(s.currentBuild.previewUrl)); else if (s.compare) { try { await r.updateScreenshotCache(a, s); } catch (t) { e.logger.error(t); } e.logger.info(`screenshots compared: ${s.compare.diffs.length}`), "string" == typeof s.compare.url && e.logger.info(e.logger.magenta(s.compare.url)); } } } catch (t) { t instanceof Error ? e.logger.error(t, t.stack) : e.logger.error(t); } return c; } function createBuildId$2() { 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$2() { 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 setupMockFetch(e) { const t = e.window; "fetch" in t || (t.fetch = function(e) { return globalMockFetch(e); }), "fetch" in e || (e.fetch = function(e) { return globalMockFetch(e); }); } 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.hotModuleReplacement = !1, e.scriptDataOpts = !1, e.scopedSlotTextContentFix = !1, e.slotChildNodesFix = !1, e.experimentalSlotFixes = !1; } function toHaveClasses$2(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 }; } function compareHtml$2(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 jestSetupTestFramework$2() { global.resourcesUrl = "/build", expect.extend(expectExtend$2), expect.addSnapshotSerializer(HtmlSerializer$2), index_cjs.setupGlobal(global), setupMockFetch(global), beforeEach((() => { testing.resetPlatform(), testing.setErrorHandler(void 0), resetBuildConditionals(appData.BUILD), testing.modeResolutionChain.length = 0; })), afterEach((async () => { var e, t, r, s, n, o; global.__CLOSE_OPEN_PAGES__ && await global.__CLOSE_OPEN_PAGES__(), testing.stopAutoApplyChanges(); const i = null === (n = null === (s = null === (r = null === (t = null === (e = global.window) || void 0 === e ? void 0 : e.document) || void 0 === t ? void 0 : t.childNodes) || void 0 === r ? void 0 : r[1]) || void 0 === s ? void 0 : s.childNodes) || void 0 === n ? void 0 : n.find((e => "BODY" === e.nodeName)); null === (o = null == i ? void 0 : i.childNodes) || void 0 === o || o.forEach(removeDomNodes$2), index_cjs.teardownGlobal(global), global.resourcesUrl = "/build"; })); const e = jasmine.getEnv(); null != e && e.addReporter({ specStarted: e => { global.currentSpec = e; } }), global.screenshotDescriptions = new Set; const t = process.env; if ("string" == typeof t.__STENCIL_DEFAULT_TIMEOUT__) { const e = parseInt(t.__STENCIL_DEFAULT_TIMEOUT__, 10); jest.setTimeout(1.5 * e), jasmine.DEFAULT_TIMEOUT_INTERVAL = e; } if ("string" == typeof t.__STENCIL_ENV__) { const e = JSON.parse(t.__STENCIL_ENV__); Object.assign(appData.Env, e); } } function removeDomNodes$2(e) { var t, r; null != e && ((null === (t = e.childNodes) || void 0 === t ? void 0 : t.length) || e.remove(), null === (r = e.childNodes) || void 0 === r || r.forEach(removeDomNodes$2)); } function createJestPuppeteerEnvironment$1() { const e = require("jest-environment-node").TestEnvironment; return class extends e { constructor(e, t) { super(e, t), this.browser = null, this.pages = [], this.testPath = null, this.testPath = t.testPath; } async setup() { "true" === process.env.__STENCIL_E2E_TESTS__ && (this.global.__NEW_TEST_PAGE__ = this.newPuppeteerPage.bind(this), this.global.__CLOSE_OPEN_PAGES__ = this.closeOpenPages.bind(this)); } async handleTestEvent(e) { if ("test_start" === e.name) { const t = e.test; let r = t.name, s = t.parent; for (;s && s.name && "ROOT_DESCRIBE_BLOCK" != s.name; ) r = `${s.name} ${r}`, s = s.parent; this.global.currentSpec = { description: t.name, fullName: r, testPath: this.testPath }; } } async newPuppeteerPage() { this.browser || (this.browser = await connectBrowser()); const e = await newBrowserPage(this.browser); this.pages.push(e); const t = process.env; return "string" == typeof t.__STENCIL_DEFAULT_TIMEOUT__ && e.setDefaultTimeout(parseInt(t.__STENCIL_DEFAULT_TIMEOUT__, 10)), e; } async closeOpenPages() { await Promise.all(this.pages.map((e => e.close()))), this.pages.length = 0; } async teardown() { await super.teardown(), await this.closeOpenPages(), await disconnectBrowser(this.browser), this.browser = null; } getVmContext() { return super.getVmContext(); } }; } function formatDiagnostic$1(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$1(e) { if (_tsCompilerOptions$1) return _tsCompilerOptions$1; 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$1(loadTypeScriptDiagnostic(r.error))); const s = stencil_js.ts.parseJsonConfigFileContent(r.config, stencil_js.ts.sys, e, void 0, t); return _tsCompilerOptions$1 = s.options, _tsCompilerOptions$1; } async function runJest$1(e, t) { let r = !1; try { const s = function s(e, t) { var r, s; let n = null !== (s = null === (r = e.emulate) || void 0 === r ? void 0 : r.slice()) && void 0 !== s ? s : []; if ("string" == typeof t.emulate) { const e = t.emulate.toLowerCase(); n = n.filter((t => "string" == typeof t.device && t.device.toLowerCase() === e || !("string" != typeof t.userAgent || !t.userAgent.toLowerCase().includes(e)))); } return n; }(e.testing, e.flags); t.__STENCIL_EMULATE_CONFIGS__ = JSON.stringify(s), t.__STENCIL_ENV__ = JSON.stringify(e.env), t.__STENCIL_TRANSPILE_PATHS__ = e.transformAliasedImportPaths ? "true" : "false", 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.knownArgs.slice(); r.some((e => e.startsWith("--max-workers") || e.startsWith("--maxWorkers"))) || r.push(`--max-workers=${e.maxConcurrentWorkers}`), e.flags.devtools && r.push("--runInBand"); const s = [ ...r, ...e.flags.unknownArgs ]; e.logger.info(e.logger.magenta(`jest args: ${s.join(" ")}`)); const n = t(s).argv; if (n.config = function o(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 = (new Jest28Stencil).getDefaultJestRunner(), JSON.stringify(n); }(e), "string" == typeof n.maxWorkers) try { n.maxWorkers = parseInt(n.maxWorkers, 10); } catch (e) {} return "string" == typeof n.ci && (n.ci = "true" === n.ci || "" === n.ci), n; }(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 createTestRunner$1() { class e extends TestRunner__default.default { async runTests(e, t, r) { const s = process.env; if (e = e.filter((e => function t(e, r) { const s = (e = e.toLowerCase().replace(/\\/g, "/")).includes(".e2e.") || e.includes("/e2e."); return !("true" !== r.__STENCIL_E2E_TESTS__ || !s) || "true" === r.__STENCIL_SPEC_TESTS__ && !s; }(e.path, s))), "true" === s.__STENCIL_SCREENSHOT__ && s.__STENCIL_EMULATE_CONFIGS__) { const n = JSON.parse(s.__STENCIL_EMULATE_CONFIGS__); for (let o = 0; o < n.length; o++) setScreenshotEmulateData(n[o], s), await super.runTests(e, t, r); } else await super.runTests(e, t, r); } } return e; } async function runJestScreenshot$1(e, t) { e.logger.debug(`screenshot connector: ${e.testing.screenshotConnector}`); const r = new (require(e.testing.screenshotConnector)), s = path$2.join(e.sys.getCompilerExecutingPath(), "..", "..", "screenshot", "pixel-match.js"); e.logger.debug(`pixelmatch module: ${s}`); const n = e.logger.createTimeSpan("screenshot, initBuild started", !0); await r.initBuild({ buildId: createBuildId$1(), buildMessage: createBuildMessage$1(), buildTimestamp: Date.now(), appNamespace: e.namespace, rootDir: e.rootDir, cacheDir: e.cacheDir, packageDir: path$2.join(e.sys.getCompilerExecutingPath(), "..", ".."), updateMaster: !!e.flags.updateScreenshot, logger: e.logger, allowableMismatchedPixels: e.testing.allowableMismatchedPixels, allowableMismatchedRatio: e.testing.allowableMismatchedRatio, pixelmatchThreshold: e.testing.pixelmatchThreshold, waitBeforeScreenshot: e.testing.waitBeforeScreenshot, pixelmatchModulePath: s }), e.flags.updateScreenshot || await r.pullMasterBuild(), n.finish("screenshot, initBuild finished"); const o = await Promise.all([ await r.getMasterBuild(), await r.getScreenshotCache() ]), i = o[0], a = o[1]; t.__STENCIL_SCREENSHOT_BUILD__ = r.toJson(i, a); const l = e.logger.createTimeSpan("screenshot, tests started", !0), c = await runJest$1(e, t); l.finish(`screenshot, tests finished, passed: ${c}`); try { const t = e.logger.createTimeSpan("screenshot, completeTimespan started", !0); let s = await r.completeBuild(i); if (t.finish("screenshot, completeTimespan finished"), s) { const t = e.logger.createTimeSpan("screenshot, publishBuild started", !0); if (s = await r.publishBuild(s), t.finish("screenshot, publishBuild finished"), e.flags.updateScreenshot) s.currentBuild && "string" == typeof s.currentBuild.previewUrl && e.logger.info(e.logger.magenta(s.currentBuild.previewUrl)); else if (s.compare) { try { await r.updateScreenshotCache(a, s); } catch (t) { e.logger.error(t); } e.logger.info(`screenshots compared: ${s.compare.diffs.length}`), "string" == typeof s.compare.url && e.logger.info(e.logger.magenta(s.compare.url)); } } } catch (t) { t instanceof Error ? e.logger.error(t, t.stack) : e.logger.error(t); } return c; } function createBuildId$1() { 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$1() { 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 toHaveClasses$1(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 }; } function compareHtml$1(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 jestSetupTestFramework$1() { global.resourcesUrl = "/build", expect.extend(expectExtend$1), expect.addSnapshotSerializer(HtmlSerializer$1), index_cjs.setupGlobal(global), setupMockFetch(global), beforeEach((() => { testing.resetPlatform(), testing.setErrorHandler(void 0), resetBuildConditionals(appData.BUILD), testing.modeResolutionChain.length = 0; })), afterEach((async () => { var e, t, r, s, n, o; global.__CLOSE_OPEN_PAGES__ && await global.__CLOSE_OPEN_PAGES__(), testing.stopAutoApplyChanges(); const i = null === (n = null === (s = null === (r = null === (t = null === (e = global.window) || void 0 === e ? void 0 : e.document) || void 0 === t ? void 0 : t.childNodes) || void 0 === r ? void 0 : r[1]) || void 0 === s ? void 0 : s.childNodes) || void 0 === n ? void 0 : n.find((e => "BODY" === e.nodeName)); null === (o = null == i ? void 0 : i.childNodes) || void 0 === o || o.forEach(removeDomNodes$1), index_cjs.teardownGlobal(global), global.resourcesUrl = "/build"; })), global.screenshotDescriptions = new Set; const e = process.env; if ("string" == typeof e.__STENCIL_DEFAULT_TIMEOUT__) { const t = parseInt(e.__STENCIL_DEFAULT_TIMEOUT__, 10); jest.setTimeout(1.5 * t); } if ("string" == typeof e.__STENCIL_ENV__) { const t = JSON.parse(e.__STENCIL_ENV__); Object.assign(appData.Env, t); } } function removeDomNodes$1(e) { var t, r; null != e && ((null === (t = e.childNodes) || void 0 === t ? void 0 : t.length) || e.remove(), null === (r = e.childNodes) || void 0 === r || r.forEach(removeDomNodes$1)); } function createJestPuppeteerEnvironment() { const e = require("jest-environment-node").TestEnvironment; return class extends e { constructor(e, t) { super(e, t), this.browser = null, this.pages = [], this.testPath = null, this.testPath = t.testPath; } async setup() { "true" === process.env.__STENCIL_E2E_TESTS__ && (this.global.__NEW_TEST_PAGE__ = this.newPuppeteerPage.bind(this), this.global.__CLOSE_OPEN_PAGES__ = this.closeOpenPages.bind(this)); } async handleTestEvent(e) { if ("test_start" === e.name) { const t = e.test; let r = t.name, s = t.parent; for (;s && s.name && "ROOT_DESCRIBE_BLOCK" != s.name; ) r = `${s.name} ${r}`, s = s.parent; this.global.currentSpec = { description: t.name, fullName: r, testPath: this.testPath }; } } async newPuppeteerPage() { this.browser || (this.browser = await connectBrowser()); const e = await newBrowserPage(this.browser); this.pages.push(e); const t = process.env; return "string" == typeof t.__STENCIL_DEFAULT_TIMEOUT__ && e.setDefaultTimeout(parseInt(t.__STENCIL_DEFAULT_TIMEOUT__, 10)), e; } async closeOpenPages() { await Promise.all(this.pages.map((e => e.close()))), this.pages.length = 0; } async teardown() { await super.teardown(), await this.closeOpenPages(), await disconnectBrowser(this.browser), this.browser = null; } getVmContext() { return super.getVmContext(); } }; } 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(loadTypeScriptDiagnostic(r.error))); const s = stencil_js.ts.parseJsonConfigFileContent(r.config, stencil_js.ts.sys, e, void 0, t); return _tsCompilerOptions = s.options, _tsCompilerOptions; } async function runJest(e, t) { let r = !1; try { const s = function s(e, t) { var r, s; let n = null !== (s = null === (r = e.emulate) || void 0 === r ? void 0 : r.slice()) && void 0 !== s ? s : []; if ("string" == typeof t.emulate) { const e = t.emulate.toLowerCase(); n = n.filter((t => "string" == typeof t.device && t.device.toLowerCase() === e || !("string" != typeof t.userAgent || !t.userAgent.toLowerCase().includes(e)))); } return n; }(e.testing, e.flags); t.__STENCIL_EMULATE_CONFIGS__ = JSON.stringify(s), t.__STENCIL_ENV__ = JSON.stringify(e.env), t.__STENCIL_TRANSPILE_PATHS__ = e.transformAliasedImportPaths ? "true" : "false", 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.knownArgs.slice(); r.some((e => e.startsWith("--max-workers") || e.startsWith("--maxWorkers"))) || r.push(`--max-workers=${e.maxConcurrentWorkers}`), e.flags.devtools && r.push("--runInBand"); const s = [ ...r, ...e.flags.unknownArgs ]; e.logger.info(e.logger.magenta(`jest args: ${s.join(" ")}`)); const n = t(s).argv; if (n.config = function o(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 = (new Jest29Stencil).getDefaultJestRunner(), JSON.stringify(n); }(e), "string" == typeof n.maxWorkers) try { n.maxWorkers = parseInt(n.maxWorkers, 10); } catch (e) {} return "string" == typeof n.ci && (n.ci = "true" === n.ci || "" === n.ci), n; }(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 createTestRunner() { class e extends TestRunner__default.default { async runTests(e, t, r) { const s = process.env; if (e = e.filter((e => function t(e, r) { const s = (e = e.toLowerCase().replace(/\\/g, "/")).includes(".e2e.") || e.includes("/e2e."); return !("true" !== r.__STENCIL_E2E_TESTS__ || !s) || "true" === r.__STENCIL_SPEC_TESTS__ && !s; }(e.path, s))), "true" === s.__STENCIL_SCREENSHOT__ && s.__STENCIL_EMULATE_CONFIGS__) { const n = JSON.parse(s.__STENCIL_EMULATE_CONFIGS__); for (let o = 0; o < n.length; o++) setScreenshotEmulateData(n[o], s), await super.runTests(e, t, r); } else await super.runTests(e, t, r); } } return e; } async function runJestScreenshot(e, t) { e.logger.debug(`screenshot connector: ${e.testing.screenshotConnector}`); const r = new (require(e.testing.screenshotConnector)), s = path$2.join(e.sys.getCompilerExecutingPath(), "..", "..", "screenshot", "pixel-match.js"); e.logger.debug(`pixelmatch module: ${s}`); const n = e.logger.createTimeSpan("screenshot, initBuild started", !0); await r.initBuild({ buildId: createBuildId(), buildMessage: createBuildMessage(), buildTimestamp: Date.now(), appNamespace: e.namespace, rootDir: e.rootDir, cacheDir: e.cacheDir, packageDir: path$2.join(e.sys.getCompilerExecutingPath(), "..", ".."), updateMaster: !!e.flags.updateScreenshot, logger: e.logger, allowableMismatchedPixels: e.testing.allowableMismatchedPixels, allowableMismatchedRatio: e.testing.allowableMismatchedRatio, pixelmatchThreshold: e.testing.pixelmatchThreshold, waitBeforeScreenshot: e.testing.waitBeforeScreenshot, pixelmatchModulePath: s }), e.flags.updateScreenshot || await r.pullMasterBuild(), n.finish("screenshot, initBuild finished"); const o = await Promise.all([ await r.getMasterBuild(), await r.getScreenshotCache() ]), i = o[0], a = o[1]; t.__STENCIL_SCREENSHOT_BUILD__ = r.toJson(i, a); const l = e.logger.createTimeSpan("screenshot, tests started", !0), c = await runJest(e, t); l.finish(`screenshot, tests finished, passed: ${c}`); try { const t = e.logger.createTimeSpan("screenshot, completeTimespan started", !0); let s = await r.completeBuild(i); if (t.finish("screenshot, completeTimespan finished"), s) { const t = e.logger.createTimeSpan("screenshot, publishBuild started", !0); if (s = await r.publishBuild(s), t.finish("screenshot, publishBuild finished"), e.flags.updateScreenshot) s.currentBuild && "string" == typeof s.currentBuild.previewUrl && e.logger.info(e.logger.magenta(s.currentBuild.previewUrl)); else if (s.compare) { try { await r.updateScreenshotCache(a, s); } catch (t) { e.logger.error(t); } e.logger.info(`screenshots compared: ${s.compare.diffs.length}`), "string" == typeof s.compare.url && e.logger.info(e.logger.magenta(s.compare.url)); } } } catch (t) { t instanceof Error ? e.logger.error(t, t.stack) : e.logger.error(t); } return c; } 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 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 }; } 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 jestSetupTestFramework() { global.resourcesUrl = "/build", expect.extend(expectExtend), expect.addSnapshotSerializer(HtmlSerializer), index_cjs.setupGlobal(global), setupMockFetch(global), beforeEach((() => { testing.resetPlatform(), testing.setErrorHandler(void 0), resetBuildConditionals(appData.BUILD), testing.modeResolutionChain.length = 0; })), afterEach((async () => { var e, t, r, s, n, o; global.__CLOSE_OPEN_PAGES__ && await global.__CLOSE_OPEN_PAGES__(), testing.stopAutoApplyChanges(); const i = null === (n = null === (s = null === (r = null === (t = null === (e = global.window) || void 0 === e ? void 0 : e.document) || void 0 === t ? void 0 : t.childNodes) || void 0 === r ? void 0 : r[1]) || void 0 === s ? void 0 : s.childNodes) || void 0 === n ? void 0 : n.find((e => "BODY" === e.nodeName)); null === (o = null == i ? void 0 : i.childNodes) || void 0 === o || o.forEach(removeDomNodes), index_cjs.teardownGlobal(global), global.resourcesUrl = "/build"; })), global.screenshotDescriptions = new Set; const e = process.env; if ("string" == typeof e.__STENCIL_DEFAULT_TIMEOUT__) { const t = parseInt(e.__STENCIL_DEFAULT_TIMEOUT__, 10); jest.setTimeout(1.5 * t); } if ("string" == typeof e.__STENCIL_ENV__) { const t = JSON.parse(e.__STENCIL_ENV__); Object.assign(appData.Env, t); } } function removeDomNodes(e) { var t, r; null != e && ((null === (t = e.childNodes) || void 0 === t ? void 0 : t.length) || e.remove(), null === (r = e.childNodes) || void 0 === r || r.forEach(removeDomNodes)); } 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 mockValidatedConfig(e = {}) { var t; const r = mockConfig(e), s = path__default.default.resolve("/"); return { ...r, devMode: !0, devServer: {}, extras: {}, flags: createConfigFlags(), fsNamespace: "testing", hydratedFlag: null, logLevel: "info", logger: mockLogger(), namespace: "Testing", outputTargets: null !== (t = r.outputTargets) && void 0 !== t ? t : [], packageJsonFilePath: path__default.default.join(s, "package.json"), rootDir: s, cacheDir: ".stencil", srcIndexHtml: "src/index.html", srcDir: "/src", sys: createTestingSystem(), testing: {}, transformAliasedImportPaths: !0, rollupConfig: { inputOptions: {}, outputOptions: {} }, validatePrimaryPackageOutputTarget: !1, ...e }; } function mockConfig(e = {}) { const t = path__default.default.resolve("/"); let {sys: r} = e; return r || (r = createTestingSystem()), r.getCurrentDirectory = () => t, { _isTesting: !0, buildAppCore: !1, buildDist: !0, buildEs5: !1, bundles: null, devMode: !0, enableCache: !1, extras: {}, flags: createConfigFlags(), globalScript: null, hashFileNames: !1, logger: new TestingLogger, maxConcurrentWorkers: 0, minifyCss: !1, minifyJs: !1, namespace: "Testing", nodeResolve: { customResolveOptions: {} }, outputTargets: null, rollupPlugins: { before: [], after: [] }, rootDir: t, sourceMap: !0, sys: r, testing: null, validateTypes: !1, ...e }; } function mockCompilerCtx(e) { const t = e || mockValidatedConfig(), r = { 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: buildEvents(), 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(t.sys) }; return Object.defineProperty(r, "fs", { get() { return null == this._fs && (this._fs = createInMemoryFs(t.sys)), this._fs; } }), Object.defineProperty(r, "cache", { get() { return null == this._cache && (this._cache = function e(t, r) { t.enableCache = !0; const s = new Cache(t, r.fs); return s.initCacheDir(), s; }(t, r)), this._cache; } }), r; } function mockLogger() { return new TestingLogger; } 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 = "undefined" != typeof jasmine && jasmine.DEFAULT_TIMEOUT_INTERVAL ? .5 * jasmine.DEFAULT_TIMEOUT_INTERVAL : 2500, 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._e2eEve