@wdio/browser-runner 9.0.0-alpha.78 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/build/browser/driver.js +249 -234
  2. package/build/browser/expect.js +107 -148
  3. package/build/browser/frameworks/mocha.d.ts.map +1 -1
  4. package/build/browser/integrations/stencil.js +370 -407
  5. package/build/browser/mock.d.ts +3 -2
  6. package/build/browser/mock.d.ts.map +1 -1
  7. package/build/browser/mock.js +78 -34
  8. package/build/browser/setup.js +313 -37
  9. package/build/browser/spy.d.ts.map +1 -1
  10. package/build/browser/spy.js +29 -40
  11. package/build/browser/utils.d.ts +7 -0
  12. package/build/browser/utils.d.ts.map +1 -1
  13. package/build/index.d.ts.map +1 -1
  14. package/build/index.js +1465 -171
  15. package/build/types.d.ts +19 -2
  16. package/build/types.d.ts.map +1 -1
  17. package/build/utils.d.ts +3 -3
  18. package/build/utils.d.ts.map +1 -1
  19. package/build/vite/constants.d.ts +3 -0
  20. package/build/vite/constants.d.ts.map +1 -1
  21. package/build/vite/plugins/esbuild.d.ts.map +1 -1
  22. package/build/vite/plugins/testrunner.d.ts.map +1 -1
  23. package/build/vite/server.d.ts +0 -1
  24. package/build/vite/server.d.ts.map +1 -1
  25. package/build/vite/utils.d.ts.map +1 -1
  26. package/package.json +57 -26
  27. package/build/browser/commands/debug.js +0 -6
  28. package/build/browser/frameworks/mocha.js +0 -320
  29. package/build/browser/utils.js +0 -61
  30. package/build/communicator.js +0 -82
  31. package/build/constants.js +0 -89
  32. package/build/types.js +0 -1
  33. package/build/utils.js +0 -86
  34. package/build/vite/constants.js +0 -55
  35. package/build/vite/frameworks/index.js +0 -19
  36. package/build/vite/frameworks/nuxt.js +0 -61
  37. package/build/vite/frameworks/stencil.js +0 -165
  38. package/build/vite/frameworks/tailwindcss.js +0 -28
  39. package/build/vite/mock.js +0 -50
  40. package/build/vite/plugins/esbuild.js +0 -25
  41. package/build/vite/plugins/mockHoisting.js +0 -312
  42. package/build/vite/plugins/testrunner.js +0 -152
  43. package/build/vite/plugins/worker.js +0 -12
  44. package/build/vite/server.js +0 -104
  45. package/build/vite/types.js +0 -1
  46. package/build/vite/utils.js +0 -223
  47. /package/{LICENSE-MIT → LICENSE} +0 -0
@@ -10,9 +10,9 @@ export declare const locatorStrategy: {};
10
10
  export declare class EventEmitter {
11
11
  }
12
12
  export declare const URL: {
13
- new (url: string | URL, base?: string | URL | undefined): URL;
13
+ new (url: string | URL, base?: string | URL): URL;
14
14
  prototype: URL;
15
- canParse(url: string | URL, base?: string | undefined): boolean;
15
+ canParse(url: string | URL, base?: string): boolean;
16
16
  createObjectURL(obj: Blob | MediaSource): string;
17
17
  revokeObjectURL(url: string): void;
18
18
  };
@@ -36,6 +36,7 @@ export declare const type = "browser";
36
36
  export declare const sync: () => void;
37
37
  export declare const locateChrome: () => void;
38
38
  export declare const locateFirefox: () => void;
39
+ export declare const locateApp: () => void;
39
40
  declare const _default: () => void;
40
41
  export default _default;
41
42
  //# sourceMappingURL=mock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/browser/mock.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,aAAa;;;CAIzB,CAAA;AAED,eAAO,MAAM,iBAAiB,SAAK,CAAA;AACnC,eAAO,MAAM,eAAe,IAAK,CAAA;AACjC,qBAAa,YAAY;CAAG;AAC5B,eAAO,MAAM,GAAG;;;;;;CAAa,CAAA;AAC7B,eAAO,MAAM,aAAa,cAAW,CAAA;AACrC,eAAO,MAAM,aAAa,cAAW,CAAA;AACrC,eAAO,MAAM,OAAO,cAAW,CAAA;AAC/B,eAAO,MAAM,OAAO,cAAW,CAAA;AAC/B,eAAO,MAAM,QAAQ,cAAW,CAAA;AAChC,eAAO,MAAM,YAAY,cAAW,CAAA;AACpC,eAAO,MAAM,GAAG,MAAM,CAAA;AACtB,eAAO,MAAM,KAAK,YAAW,CAAA;AAC7B,eAAO,MAAM,OAAO,YAAW,CAAA;AAC/B,eAAO,MAAM,qBAAqB,YAAW,CAAA;AAC7C,eAAO,MAAM,OAAO,YAAW,CAAA;AAC/B,eAAO,MAAM,oBAAoB,YAAW,CAAA;AAC5C,eAAO,MAAM,WAAW,YAAW,CAAA;AACnC,eAAO,MAAM,cAAc,YAAW,CAAA;AACtC,eAAO,MAAM,oBAAoB,YAAW,CAAA;AAC5C,eAAO,MAAM,qBAAqB,YAAW,CAAA;AAC7C,eAAO,MAAM,IAAI,YAAY,CAAA;AAC7B,eAAO,MAAM,IAAI,YAAW,CAAA;AAC5B,eAAO,MAAM,YAAY,YAAW,CAAA;AACpC,eAAO,MAAM,aAAa,YAAW,CAAA;;AACrC,wBAAuB"}
1
+ {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/browser/mock.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,aAAa;;;CAIzB,CAAA;AAED,eAAO,MAAM,iBAAiB,SAAK,CAAA;AACnC,eAAO,MAAM,eAAe,IAAK,CAAA;AACjC,qBAAa,YAAY;CAAG;AAC5B,eAAO,MAAM,GAAG;;;;;;CAAa,CAAA;AAC7B,eAAO,MAAM,aAAa,cAAW,CAAA;AACrC,eAAO,MAAM,aAAa,cAAW,CAAA;AACrC,eAAO,MAAM,OAAO,cAAW,CAAA;AAC/B,eAAO,MAAM,OAAO,cAAW,CAAA;AAC/B,eAAO,MAAM,QAAQ,cAAW,CAAA;AAChC,eAAO,MAAM,YAAY,cAAW,CAAA;AACpC,eAAO,MAAM,GAAG,MAAM,CAAA;AACtB,eAAO,MAAM,KAAK,YAAW,CAAA;AAC7B,eAAO,MAAM,OAAO,YAAW,CAAA;AAC/B,eAAO,MAAM,qBAAqB,YAAW,CAAA;AAC7C,eAAO,MAAM,OAAO,YAAW,CAAA;AAC/B,eAAO,MAAM,oBAAoB,YAAW,CAAA;AAC5C,eAAO,MAAM,WAAW,YAAW,CAAA;AACnC,eAAO,MAAM,cAAc,YAAW,CAAA;AACtC,eAAO,MAAM,oBAAoB,YAAW,CAAA;AAC5C,eAAO,MAAM,qBAAqB,YAAW,CAAA;AAC7C,eAAO,MAAM,IAAI,YAAY,CAAA;AAC7B,eAAO,MAAM,IAAI,YAAW,CAAA;AAC5B,eAAO,MAAM,YAAY,YAAW,CAAA;AACpC,eAAO,MAAM,aAAa,YAAW,CAAA;AACrC,eAAO,MAAM,SAAS,YAAW,CAAA;;AACjC,wBAAuB"}
@@ -1,34 +1,78 @@
1
- /**
2
- * this file content is assigned to modules we mock out for browser compatibility
3
- */
4
- export const createRequire = () => {
5
- const require = () => { };
6
- require.resolve = () => { };
7
- return require;
8
- };
9
- export const SUPPORTED_BROWSER = [];
10
- export const locatorStrategy = {};
11
- export class EventEmitter {
12
- }
13
- export const URL = window.URL;
14
- export const pathToFileURL = () => '';
15
- export const fileURLToPath = () => '';
16
- export const dirname = () => '';
17
- export const resolve = () => '';
18
- export const download = () => '';
19
- export const findEdgePath = () => '';
20
- export const sep = '/';
21
- export const start = () => { };
22
- export const install = () => { };
23
- export const computeExecutablePath = () => { };
24
- export const Browser = () => { };
25
- export const getInstalledBrowsers = () => { };
26
- export const canDownload = () => { };
27
- export const resolveBuildId = () => { };
28
- export const ChromeReleaseChannel = () => { };
29
- export const detectBrowserPlatform = () => { };
30
- export const type = 'browser';
31
- export const sync = () => { };
32
- export const locateChrome = () => { };
33
- export const locateFirefox = () => { };
34
- export default () => { };
1
+ // src/browser/mock.ts
2
+ var createRequire = () => {
3
+ const require2 = () => {
4
+ };
5
+ require2.resolve = () => {
6
+ };
7
+ return require2;
8
+ };
9
+ var SUPPORTED_BROWSER = [];
10
+ var locatorStrategy = {};
11
+ var EventEmitter = class {
12
+ };
13
+ var URL = window.URL;
14
+ var pathToFileURL = () => "";
15
+ var fileURLToPath = () => "";
16
+ var dirname = () => "";
17
+ var resolve = () => "";
18
+ var download = () => "";
19
+ var findEdgePath = () => "";
20
+ var sep = "/";
21
+ var start = () => {
22
+ };
23
+ var install = () => {
24
+ };
25
+ var computeExecutablePath = () => {
26
+ };
27
+ var Browser = () => {
28
+ };
29
+ var getInstalledBrowsers = () => {
30
+ };
31
+ var canDownload = () => {
32
+ };
33
+ var resolveBuildId = () => {
34
+ };
35
+ var ChromeReleaseChannel = () => {
36
+ };
37
+ var detectBrowserPlatform = () => {
38
+ };
39
+ var type = "browser";
40
+ var sync = () => {
41
+ };
42
+ var locateChrome = () => {
43
+ };
44
+ var locateFirefox = () => {
45
+ };
46
+ var locateApp = () => {
47
+ };
48
+ var mock_default = () => {
49
+ };
50
+ export {
51
+ Browser,
52
+ ChromeReleaseChannel,
53
+ EventEmitter,
54
+ SUPPORTED_BROWSER,
55
+ URL,
56
+ canDownload,
57
+ computeExecutablePath,
58
+ createRequire,
59
+ mock_default as default,
60
+ detectBrowserPlatform,
61
+ dirname,
62
+ download,
63
+ fileURLToPath,
64
+ findEdgePath,
65
+ getInstalledBrowsers,
66
+ install,
67
+ locateApp,
68
+ locateChrome,
69
+ locateFirefox,
70
+ locatorStrategy,
71
+ pathToFileURL,
72
+ resolve,
73
+ resolveBuildId,
74
+ sep,
75
+ start,
76
+ sync,
77
+ type
78
+ };
@@ -1,41 +1,317 @@
1
- /// <reference types="vite/client" />
2
- import { automationProtocolPath } from 'virtual:wdio';
3
- import { expect } from 'expect-webdriverio';
4
- import { remote } from 'webdriverio';
5
- import { _setGlobal } from '@wdio/globals';
6
- import './frameworks/mocha.js';
7
- import { showPopupWarning } from './utils.js';
8
- globalThis.alert = showPopupWarning('alert', undefined);
9
- globalThis.confirm = showPopupWarning('confirm', false, true);
10
- globalThis.prompt = showPopupWarning('prompt', null, 'your value');
11
- /**
12
- * Setup fake browser instance and attach to global scope if necessary
13
- */
14
- const browser = await remote({
15
- automationProtocol: automationProtocolPath,
16
- capabilities: window.__wdioEnv__.capabilities
1
+ var __typeError = (msg) => {
2
+ throw TypeError(msg);
3
+ };
4
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
5
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
6
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
7
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
8
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
9
+
10
+ // src/browser/setup.ts
11
+ import { automationProtocolPath } from "virtual:wdio";
12
+ import { expect } from "expect-webdriverio";
13
+ import { remote } from "webdriverio";
14
+ import { _setGlobal } from "@wdio/globals";
15
+
16
+ // src/browser/frameworks/mocha.ts
17
+ import safeStringify from "safe-stringify";
18
+ import { setupEnv, formatMessage } from "@wdio/mocha-framework/common";
19
+ import { MESSAGE_TYPES } from "@wdio/types";
20
+
21
+ // src/browser/utils.ts
22
+ function getCID() {
23
+ var _a;
24
+ const urlParamString = new URLSearchParams(window.location.search);
25
+ const cid = (
26
+ // initial request contains cid as query parameter
27
+ urlParamString.get("cid") || // if not provided check for document cookie, set by `@wdio/runner` package
28
+ ((_a = (document.cookie.split(";") || []).find((c) => c.includes("WDIO_CID"))) == null ? void 0 : _a.trim().split("=").pop())
29
+ );
30
+ if (!cid) {
31
+ throw new Error('"cid" query parameter is missing');
32
+ }
33
+ return cid;
34
+ }
35
+ var showPopupWarning = (name, value, defaultValue) => (...params) => {
36
+ const formatedParams = params.map((p) => JSON.stringify(p)).join(", ");
37
+ console.warn("WebdriverIO encountered a `".concat(name, "(").concat(formatedParams, ")` call that it cannot handle by default, so it returned `").concat(value, "`. Read more in https://webdriver.io/docs/runner#limitations.\n If needed, mock the `").concat(name, '` call manually like:\n ```\n import { spyOn } from "@wdio/browser-runner"\n spyOn(window, "').concat(name, '")').concat(defaultValue ? ".mockReturnValue(".concat(JSON.stringify(defaultValue), ")") : "", "\n ").concat(name, "(").concat(formatedParams, ")\n expect(").concat(name, ").toHaveBeenCalledWith(").concat(formatedParams, ")\n ```"));
38
+ return value;
39
+ };
40
+ var pick = (keys, obj) => {
41
+ return Object.fromEntries(
42
+ Object.entries(obj).filter(([k]) => keys.includes(k))
43
+ );
44
+ };
45
+ var RELEVANT_TEST_PROPS = ["type", "title", "body", "async", "sync", "timedOut", "pending", "parent", "test"];
46
+ function filterTestArgument(arg, file) {
47
+ if (!arg) {
48
+ return arg;
49
+ }
50
+ const newArgs = pick(RELEVANT_TEST_PROPS, arg);
51
+ return {
52
+ ...newArgs,
53
+ file: arg.file || file,
54
+ test: filterTestArgument(newArgs.test, file),
55
+ parent: filterTestArgument(newArgs.parent, file)
56
+ };
57
+ }
58
+
59
+ // src/constants.ts
60
+ var WDIO_EVENT_NAME = "wdio:workerMessage";
61
+ var EVENTS = {
62
+ "suite": "suite:start",
63
+ "suite end": "suite:end",
64
+ "test": "test:start",
65
+ "test end": "test:end",
66
+ "hook": "hook:start",
67
+ "hook end": "hook:end",
68
+ "pass": "test:pass",
69
+ "fail": "test:fail",
70
+ "retry": "test:retry",
71
+ "pending": "test:pending"
72
+ };
73
+
74
+ // src/browser/frameworks/mocha.ts
75
+ var startTime = Date.now();
76
+ if (!window.Mocha) {
77
+ throw new Error("Can't find Mocha attached to the `window` scope, was it installed? Run `npm install mocha` and run again!");
78
+ }
79
+ var BaseReporter = window.Mocha.reporters.html;
80
+ var HTMLReporter = class extends BaseReporter {
81
+ constructor(runner, options) {
82
+ const getElementById = document.getElementById.bind(document);
83
+ document.getElementById = () => {
84
+ var _a, _b;
85
+ return (_b = (_a = document.querySelector("mocha-framework")) == null ? void 0 : _a.shadowRoot) == null ? void 0 : _b.querySelector("#mocha");
86
+ };
87
+ super(runner, options);
88
+ document.getElementById = getElementById;
89
+ }
90
+ addCodeToggle() {
91
+ }
92
+ };
93
+ var _root, _spec, _require, _hookResolver, _runnerEvents, _isMinified, _MochaFramework_instances, onFinish_fn, handleSocketMessage_fn, handleHookResult_fn, getHook_fn, hookTrigger_fn, sendTestReport_fn;
94
+ var MochaFramework = class extends HTMLElement {
95
+ constructor() {
96
+ super();
97
+ __privateAdd(this, _MochaFramework_instances);
98
+ __privateAdd(this, _root);
99
+ __privateAdd(this, _spec);
100
+ __privateAdd(this, _require);
101
+ __privateAdd(this, _hookResolver, /* @__PURE__ */ new Map());
102
+ __privateAdd(this, _runnerEvents, []);
103
+ __privateAdd(this, _isMinified, false);
104
+ __privateSet(this, _root, this.attachShadow({ mode: "open" }));
105
+ __privateSet(this, _spec, this.getAttribute("spec"));
106
+ __privateSet(this, _require, window.__wdioEnv__.args.require || []);
107
+ delete window.__wdioEnv__.args.require;
108
+ if (!__privateGet(this, _spec)) {
109
+ throw new Error('"spec" attribute required but not set');
110
+ }
111
+ mocha.setup({
112
+ ...window.__wdioEnv__.args,
113
+ reporter: HTMLReporter
114
+ });
115
+ }
116
+ static get observedAttributes() {
117
+ return ["minified"];
118
+ }
119
+ get spec() {
120
+ return __privateGet(this, _spec);
121
+ }
122
+ connectedCallback() {
123
+ var _a;
124
+ __privateGet(this, _root).appendChild(template.content.cloneNode(true));
125
+ (_a = __privateGet(this, _root).querySelector(".btnCollapseExpand")) == null ? void 0 : _a.addEventListener("click", () => {
126
+ if (__privateGet(this, _isMinified)) {
127
+ this.shadowRoot.host.removeAttribute("minified");
128
+ } else {
129
+ this.shadowRoot.host.setAttribute("minified", "minified");
130
+ }
131
+ });
132
+ }
133
+ attributeChangedCallback(name, oldValue, newValue) {
134
+ if (name === "minified") {
135
+ __privateSet(this, _isMinified, typeof newValue === "string");
136
+ const reporterElem = __privateGet(this, _root).querySelector(".reporter");
137
+ if (reporterElem) {
138
+ reporterElem.className = __privateGet(this, _isMinified) ? "reporter minified" : "reporter";
139
+ }
140
+ document.body.style.width = "calc(100% - ".concat(__privateGet(this, _isMinified) ? "65px" : "500px", ")");
141
+ }
142
+ }
143
+ async run() {
144
+ var _a;
145
+ const globalTeardownScripts = [];
146
+ const globalSetupScripts = [];
147
+ for (const r of __privateGet(this, _require)) {
148
+ const { mochaGlobalSetup, mochaGlobalTeardown } = await import(r) || {};
149
+ if (typeof mochaGlobalSetup === "function") {
150
+ globalSetupScripts.push(mochaGlobalSetup);
151
+ }
152
+ if (typeof mochaGlobalTeardown === "function") {
153
+ globalTeardownScripts.push(mochaGlobalTeardown);
154
+ }
155
+ }
156
+ const cid = getCID();
157
+ if (!cid) {
158
+ throw new Error('"cid" query parameter is missing');
159
+ }
160
+ const beforeHook = __privateMethod(this, _MochaFramework_instances, getHook_fn).call(this, "beforeHook");
161
+ const beforeTest = __privateMethod(this, _MochaFramework_instances, getHook_fn).call(this, "beforeTest");
162
+ const afterHook = __privateMethod(this, _MochaFramework_instances, getHook_fn).call(this, "afterHook");
163
+ const afterTest = __privateMethod(this, _MochaFramework_instances, getHook_fn).call(this, "afterTest");
164
+ setupEnv(cid, window.__wdioEnv__.args, beforeTest, beforeHook, afterTest, afterHook);
165
+ const file = __privateGet(this, _spec);
166
+ await import(file);
167
+ for (const setupScript of globalSetupScripts) {
168
+ await setupScript();
169
+ }
170
+ (_a = import.meta.hot) == null ? void 0 : _a.on(WDIO_EVENT_NAME, __privateMethod(this, _MochaFramework_instances, handleSocketMessage_fn).bind(this));
171
+ const self = this;
172
+ const mochaBeforeHook = globalThis.before || globalThis.suiteSetup;
173
+ mochaBeforeHook(async function() {
174
+ var _a2, _b, _c;
175
+ const { title, tests, pending, delayed } = ((_b = (_a2 = this.test) == null ? void 0 : _a2.parent) == null ? void 0 : _b.suites[0]) || {};
176
+ await __privateMethod(_c = self, _MochaFramework_instances, getHook_fn).call(_c, "beforeSuite")({
177
+ ...{ title, tests, pending, delayed },
178
+ file
179
+ });
180
+ });
181
+ const mochaAfterHook = globalThis.after || globalThis.suiteTeardown;
182
+ mochaAfterHook(async function() {
183
+ var _a2, _b, _c;
184
+ const { title, tests, pending, delayed } = ((_b = (_a2 = this.test) == null ? void 0 : _a2.parent) == null ? void 0 : _b.suites[0]) || {};
185
+ await __privateMethod(_c = self, _MochaFramework_instances, getHook_fn).call(_c, "afterSuite")({
186
+ ...{ title, tests, pending, delayed },
187
+ file,
188
+ duration: Date.now() - startTime
189
+ });
190
+ });
191
+ const spinner = __privateGet(this, _root).querySelector(".lds-ring");
192
+ if (spinner) {
193
+ spinner.remove();
194
+ }
195
+ const runner = mocha.run(async (failures) => {
196
+ await __privateMethod(this, _MochaFramework_instances, onFinish_fn).call(this, failures);
197
+ for (const teardownScript of globalTeardownScripts) {
198
+ await teardownScript();
199
+ }
200
+ });
201
+ Object.entries(EVENTS).map(([mochaEvent, wdioEvent]) => runner.on(mochaEvent, (payload) => {
202
+ __privateGet(this, _runnerEvents).push(formatMessage({ type: wdioEvent, payload, err: payload.err }));
203
+ }));
204
+ }
205
+ };
206
+ _root = new WeakMap();
207
+ _spec = new WeakMap();
208
+ _require = new WeakMap();
209
+ _hookResolver = new WeakMap();
210
+ _runnerEvents = new WeakMap();
211
+ _isMinified = new WeakMap();
212
+ _MochaFramework_instances = new WeakSet();
213
+ onFinish_fn = async function(failures) {
214
+ await __privateMethod(this, _MochaFramework_instances, getHook_fn).call(this, "after")(failures, window.__wdioEnv__.capabilities, [__privateGet(this, _spec)]);
215
+ __privateMethod(this, _MochaFramework_instances, sendTestReport_fn).call(this, { failures, events: __privateGet(this, _runnerEvents) });
216
+ console.log("[WDIO] Finished test suite in ".concat(Date.now() - startTime, "ms"));
217
+ };
218
+ handleSocketMessage_fn = function(message) {
219
+ if (message.type === MESSAGE_TYPES.hookResultMessage) {
220
+ return __privateMethod(this, _MochaFramework_instances, handleHookResult_fn).call(this, message.value);
221
+ }
222
+ };
223
+ handleHookResult_fn = function(result) {
224
+ const resolver = __privateGet(this, _hookResolver).get(result.id);
225
+ if (!resolver) {
226
+ return console.warn("[WDIO] couldn't find resolve for id \"".concat(result.id, '"'));
227
+ }
228
+ __privateGet(this, _hookResolver).delete(result.id);
229
+ if (result.error) {
230
+ return resolver.reject(result.error);
231
+ }
232
+ return resolver.resolve();
233
+ };
234
+ getHook_fn = function(name) {
235
+ return (...args) => new Promise((resolve, reject) => {
236
+ var _a;
237
+ const id = __privateGet(this, _hookResolver).size + 1;
238
+ const cid = getCID();
239
+ if (!cid) {
240
+ return reject(new Error('"cid" query parameter is missing'));
241
+ }
242
+ __privateGet(this, _hookResolver).set(id, { resolve, reject });
243
+ args = args.map((arg) => {
244
+ if (typeof arg !== "object") {
245
+ return arg;
246
+ }
247
+ if ("error" in arg && arg.error instanceof Error) {
248
+ const errorObject = {
249
+ // Pull all enumerable properties, supporting properties on custom Errors
250
+ ...arg.error,
251
+ // Explicitly pull Error's non-enumerable properties
252
+ message: arg.error.message,
253
+ name: arg.error.name,
254
+ stack: arg.error.stack,
255
+ type: arg.error.type || arg.error.name,
256
+ matcherResult: arg.error.matcherResult,
257
+ expected: arg.error.expected,
258
+ actual: arg.error.actual
259
+ };
260
+ return {
261
+ ...arg,
262
+ error: errorObject
263
+ };
264
+ }
265
+ return {
266
+ ...filterTestArgument(arg, __privateGet(this, _spec)),
267
+ ..."type" in arg && "title" in arg ? { parent: arg.parent } : {},
268
+ ..."test" in arg && arg.test ? { test: filterTestArgument(arg.test, __privateGet(this, _spec)) } : {},
269
+ ..."currentTest" in arg && arg.currentTest ? { currentTest: filterTestArgument(arg.currentTest, __privateGet(this, _spec)) } : {}
270
+ };
271
+ });
272
+ (_a = import.meta.hot) == null ? void 0 : _a.send(WDIO_EVENT_NAME, __privateMethod(this, _MochaFramework_instances, hookTrigger_fn).call(this, { name, id, cid, args }));
273
+ });
274
+ };
275
+ hookTrigger_fn = function(value) {
276
+ return {
277
+ type: MESSAGE_TYPES.hookTriggerMessage,
278
+ value: JSON.parse(safeStringify(value))
279
+ };
280
+ };
281
+ sendTestReport_fn = function(value) {
282
+ var _a;
283
+ (_a = import.meta.hot) == null ? void 0 : _a.send(WDIO_EVENT_NAME, {
284
+ type: MESSAGE_TYPES.browserTestResult,
285
+ value: JSON.parse(safeStringify(value))
286
+ });
287
+ };
288
+ var template = document.createElement("template");
289
+ template.innerHTML = /*html*/
290
+ '\n<style>\n @import "/node_modules/mocha/mocha.css";\n\n .reporter {\n transition: width .3s;\n box-shadow: -5px 0px 10px rgb(0 0 0 / 30%);\n position: absolute;\n top: 0;\n right: 0;\n width: 500px;\n height: 100%;\n margin: 0;\n color: var(--mocha-color);\n background-color: var(--mocha-bg-color);\n background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNjRweCIgaGVpZ2h0PSI2NHB4IiB2aWV3Qm94PSIwIDAgNjQgNjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8dGl0bGU+TG9nbyBSZWd1bGFyPC90aXRsZT4KICAgIDxnIGlkPSJMb2dvLVJlZ3VsYXIiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxyZWN0IGlkPSJSZWN0YW5nbGUiIGZpbGw9IiNFQTU5MDYiIHg9IjAiIHk9IjAiIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgcng9IjUiPjwvcmVjdD4KICAgICAgICA8cGF0aCBkPSJNOCwxNiBMOCw0OCBMNiw0OCBMNiwxNiBMOCwxNiBaIE00MywxNiBDNTEuODM2NTU2LDE2IDU5LDIzLjE2MzQ0NCA1OSwzMiBDNTksNDAuODM2NTU2IDUxLjgzNjU1Niw0OCA0Myw0OCBDMzQuMTYzNDQ0LDQ4IDI3LDQwLjgzNjU1NiAyNywzMiBDMjcsMjMuMTYzNDQ0IDM0LjE2MzQ0NCwxNiA0MywxNiBaIE0yNywxNiBMMTQuMTA2LDQ3Ljk5OTIwNzggTDExLjk5OSw0Ny45OTkyMDc4IEwyNC44OTQsMTYgTDI3LDE2IFogTTQzLDE4IEMzNS4yNjgwMTM1LDE4IDI5LDI0LjI2ODAxMzUgMjksMzIgQzI5LDM5LjczMTk4NjUgMzUuMjY4MDEzNSw0NiA0Myw0NiBDNTAuNzMxOTg2NSw0NiA1NywzOS43MzE5ODY1IDU3LDMyIEM1NywyNC4yNjgwMTM1IDUwLjczMTk4NjUsMTggNDMsMTggWiIgaWQ9IkNvbWJpbmVkLVNoYXBlIiBmaWxsPSIjRkZGRkZGIj48L3BhdGg+CiAgICA8L2c+Cjwvc3ZnPg==);\n background-repeat: no-repeat;\n background-size: 30px;\n background-position: 15px 20px;\n }\n .lds-ring {\n display: inline-block;\n position: absolute;\n top: calc(50% - 40px);\n left: calc(50% - 40px);\n width: 80px;\n height: 80px;\n }\n .lds-ring div {\n box-sizing: border-box;\n display: block;\n position: absolute;\n width: 64px;\n height: 64px;\n margin: 8px;\n border: 4px solid #EA5907;\n border-radius: 50%;\n animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-color: #EA5907 transparent transparent transparent;\n }\n .lds-ring div:nth-child(1) {\n animation-delay: -0.45s;\n }\n .lds-ring div:nth-child(2) {\n animation-delay: -0.3s;\n }\n .lds-ring div:nth-child(3) {\n animation-delay: -0.15s;\n }\n @keyframes lds-ring {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n .reporter.minified {\n width: 65px;\n }\n\n #mocha {\n margin: 0;\n }\n ul#mocha-report {\n transition: opacity .3s;\n opacity: 1;\n padding: 50px 15px 0 0;\n }\n .minified ul#mocha-report {\n opacity: 0;\n }\n .minified .progress {\n display: block;\n float: none;\n }\n .minified #mocha-stats {\n width: 50px;\n padding-top: 60px;\n }\n .minified #mocha-stats li {\n font-size: .9em;\n }\n\n @keyframes fadeOutIn {\n 0% { opacity: 1; }\n 20% { opacity: 0; }\n 100% { opacity: 1; }\n }\n\n .btnCollapseExpand {\n display: block;\n width: 50px;\n position: absolute;\n height: 50px;\n bottom: 0;\n right: 0;\n transition: transform .3s;\n transform: scale(1) translateX(-434px);\n margin: 10px 8px;\n background: transparent;\n border: 0;\n cursor: pointer;\n }\n .minified .btnCollapseExpand {\n transform: scale(-1) translateX(0px);\n animation-name: fadeOutIn;\n animation-duration: .3s;\n }\n</style>\n<div class="reporter">\n <div id="mocha"></div>\n <div class="lds-ring"><div></div><div></div><div></div><div></div></div>\n <button class="btnCollapseExpand">\n <svg width="50" height="40" viewBox="2 0 32 32" xmlns="http://www.w3.org/2000/svg">\n <path fill="#fff" d="M13.11 29.113c7.243 0 13.113-5.871 13.113-13.113S20.353 2.887 13.11 2.887C5.868 2.887-.003 8.758-.003 16S5.868 29.113 13.11 29.113zm0-25.177c6.652 0 12.064 5.412 12.064 12.064S19.762 28.064 13.11 28.064C6.457 28.064 1.046 22.652 1.046 16S6.457 3.936 13.11 3.936z"/>\n <path fill="#fff" d="m13.906 21.637.742.742L21.026 16l-6.378-6.379-.742.742 5.112 5.112H6.291v1.049h12.727z"/>\n </svg>\n </button>\n</div>\n';
291
+ customElements.define("mocha-framework", MochaFramework);
292
+
293
+ // src/browser/setup.ts
294
+ globalThis.alert = showPopupWarning("alert", void 0);
295
+ globalThis.confirm = showPopupWarning("confirm", false, true);
296
+ globalThis.prompt = showPopupWarning("prompt", null, "your value");
297
+ var browser = await remote({
298
+ automationProtocol: automationProtocolPath,
299
+ capabilities: window.__wdioEnv__.capabilities
17
300
  });
18
- _setGlobal('browser', browser, window.__wdioEnv__.injectGlobals);
19
- _setGlobal('driver', browser, window.__wdioEnv__.injectGlobals);
20
- _setGlobal('expect', expect, window.__wdioEnv__.injectGlobals);
21
- _setGlobal('$', browser.$.bind(browser), window.__wdioEnv__.injectGlobals);
22
- _setGlobal('$$', browser.$$.bind(browser), window.__wdioEnv__.injectGlobals);
23
- /**
24
- * run framework immediately on page load
25
- */
26
- const mochaFramework = document.querySelector('mocha-framework');
301
+ _setGlobal("browser", browser, window.__wdioEnv__.injectGlobals);
302
+ _setGlobal("driver", browser, window.__wdioEnv__.injectGlobals);
303
+ _setGlobal("expect", expect, window.__wdioEnv__.injectGlobals);
304
+ _setGlobal("$", browser.$.bind(browser), window.__wdioEnv__.injectGlobals);
305
+ _setGlobal("$$", browser.$$.bind(browser), window.__wdioEnv__.injectGlobals);
306
+ var mochaFramework = document.querySelector("mocha-framework");
27
307
  if (mochaFramework) {
28
- mochaFramework.run().catch((err) => {
29
- /**
30
- * On MacOS importing the spec file might fail with a null error object.
31
- * This is Vite doing a hot reload and the error is not relevant for us.
32
- */
33
- if (!err.stack) {
34
- return;
35
- }
36
- return window.__wdioErrors__.push({
37
- message: `${err.message}: ${err.stack}`,
38
- filename: mochaFramework.spec
39
- });
308
+ mochaFramework.run().catch((err) => {
309
+ if (!err.stack) {
310
+ return;
311
+ }
312
+ return window.__wdioErrors__.push({
313
+ message: "".concat(err.message, ": ").concat(err.stack),
314
+ filename: mochaFramework.spec
40
315
  });
316
+ });
41
317
  }
@@ -1 +1 @@
1
- {"version":3,"file":"spy.d.ts","sourceRoot":"","sources":["../../src/browser/spy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAExD;;GAEG;AACH,cAAc,aAAa,CAAA;AAS3B,wBAAsB,IAAI,CAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,iBA2BxE;AAGD,wBAAgB,MAAM,CAAC,UAAU,EAAE,MAAM,QAExC;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,kBAA0C"}
1
+ {"version":3,"file":"spy.d.ts","sourceRoot":"","sources":["../../src/browser/spy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAExD;;GAEG;AACH,cAAc,aAAa,CAAA;AAS3B,wBAAsB,IAAI,CAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,iBA2BxE;AAGD,wBAAgB,MAAM,CAAC,UAAU,EAAE,MAAM,QAExC;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAA0B,WAAW,CAAC,CAAC,CAAC,CAAE"}
@@ -1,44 +1,33 @@
1
- /**
2
- * re-export mock module
3
- */
4
- export * from '@vitest/spy';
5
- const a = document.createElement('a');
1
+ // src/browser/spy.ts
2
+ export * from "@vitest/spy";
3
+ var a = document.createElement("a");
6
4
  function resolveUrl(path) {
7
- a.href = path;
8
- return a.href;
5
+ a.href = path;
6
+ return a.href;
9
7
  }
10
- const ERROR_MESSAGE = '[wdio] There was an error, when mocking a module. If you are using the "mock" factory, make sure there are no top level variables inside, since this call is hoisted to top of the file. Read more: https://webdriver.io/docs/component-testing/mocking';
11
- export async function mock(path, factory) {
12
- /**
13
- * mock calls without factory parameter should get removed from the source code
14
- * by the mock hoisting plugin
15
- */
16
- if (!factory || typeof factory !== 'function') {
17
- return;
18
- }
19
- /**
20
- * parameter is added by hoisting plugin if factory comes with a parameter
21
- */
22
- const actualImport = arguments[2];
23
- const mockLocalFile = path.startsWith('/') || path.startsWith('./') || path.startsWith('../');
24
- const mockPath = mockLocalFile
25
- // use absolute path for local files without extension
26
- ? (new URL(resolveUrl(window.__wdioSpec__.split('/').slice(0, -1).join('/') + '/' + path))).pathname.replace(/\.[^/.]+$/, '')
27
- : path;
28
- try {
29
- const resolvedMock = await factory(actualImport);
30
- window.__wdioMockCache__.set(mockPath, resolvedMock);
31
- }
32
- catch (err) {
33
- const error = err;
34
- throw new Error(`${ERROR_MESSAGE}\n${error.message}: ${error.stack}`);
35
- }
8
+ var ERROR_MESSAGE = '[wdio] There was an error, when mocking a module. If you are using the "mock" factory, make sure there are no top level variables inside, since this call is hoisted to top of the file. Read more: https://webdriver.io/docs/component-testing/mocking';
9
+ async function mock(path, factory) {
10
+ if (!factory || typeof factory !== "function") {
11
+ return;
12
+ }
13
+ const actualImport = arguments[2];
14
+ const mockLocalFile = path.startsWith("/") || path.startsWith("./") || path.startsWith("../");
15
+ const mockPath = mockLocalFile ? new URL(resolveUrl(window.__wdioSpec__.split("/").slice(0, -1).join("/") + "/" + path)).pathname.replace(/\.[^/.]+$/, "") : path;
16
+ try {
17
+ const resolvedMock = await factory(actualImport);
18
+ window.__wdioMockCache__.set(mockPath, resolvedMock);
19
+ } catch (err) {
20
+ const error = err;
21
+ throw new Error("".concat(ERROR_MESSAGE, "\n").concat(error.message, ": ").concat(error.stack));
22
+ }
36
23
  }
37
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
38
- export function unmock(moduleName) {
39
- // NO-OP: call gets removed by recast
24
+ function unmock(moduleName) {
40
25
  }
41
- /**
42
- * utility helper for type conversions
43
- */
44
- export function mocked(item) { return item; }
26
+ function mocked(item) {
27
+ return item;
28
+ }
29
+ export {
30
+ mock,
31
+ mocked,
32
+ unmock
33
+ };
@@ -1,4 +1,11 @@
1
1
  export declare function getCID(): string;
2
2
  export declare const showPopupWarning: <T>(name: string, value: T, defaultValue?: T) => (...params: any[]) => T;
3
3
  export declare function sanitizeConsoleArgs(args: unknown[]): any[];
4
+ /**
5
+ * Filter test argument to only contain relevant information
6
+ * @param arg hook parameter that may contain a test object from Mocha or Jasmine
7
+ * @param file file path of the test
8
+ * @returns test object with only relevant information
9
+ */
10
+ export declare function filterTestArgument(arg: any, file: string): any;
4
11
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/browser/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,MAAM,WAkBrB;AAED,eAAO,MAAM,gBAAgB,YAAa,MAAM,SAAS,CAAC,iBAAiB,CAAC,iBAAiB,GAAG,EAAE,MAYjG,CAAA;AAED,wBAAgB,mBAAmB,CAAE,IAAI,EAAE,OAAO,EAAE,SAkCnD"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/browser/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,MAAM,WAkBrB;AAED,eAAO,MAAM,gBAAgB,GAAI,CAAC,QAAQ,MAAM,SAAS,CAAC,iBAAiB,CAAC,iBAAiB,GAAG,EAAE,MAYjG,CAAA;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,SAkClD;AAWD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,CAY9D"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,WAAW,MAAM,oBAAoB,CAAA;AAK5C,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAU/G,OAAO,KAAK,EAAE,oBAAoB,IAAI,0BAA0B,EAAmB,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAI5H,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;;IAU9C,OAAO,CAAC,OAAO;IACf,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU;gBAD7B,OAAO,EAAE,0BAA0B,EACjC,OAAO,EAAE,OAAO,CAAC,UAAU;IAwBzC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAgB;IAEhC;;OAEG;IACG,UAAU;IAsBV,GAAG,CAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAuBrD;;;;OAIG;IACG,QAAQ;YAQA,wBAAwB;CAiEzC;AAED,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,WAAW,CAAC;QAClB,UAAU,oBAAqB,SAAQ,0BAA0B;SAAG;KACvE;CACJ;AAED;;GAEG;AACH,cAAc,aAAa,CAAA;AAE3B;;;GAGG;AAEH;;;;;;;;;;;;GAYG;AAEH,wBAAgB,IAAI,CAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,QAAI;AAEvE;;;;GAIG;AAEH,wBAAgB,MAAM,CAAC,UAAU,EAAE,MAAM,QAAI;AAE7C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;AACnE,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;AACpE,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE;IACxC,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,IAAI,CAAC,EAAE,KAAK,CAAC;CAChB,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AACnB,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE;IACxC,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;CACd,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;AACvB,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE;IACxC,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,CAAC,EAAE,KAAK,CAAC;CAChB,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;AAC5B,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE;IACxC,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,IAAI,CAAC;CACd,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,WAAW,MAAM,oBAAoB,CAAA;AAK5C,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAS/G,OAAO,KAAK,EAAE,oBAAoB,IAAI,0BAA0B,EAAmB,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAI5H,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;;IAU9C,OAAO,CAAC,OAAO;IACf,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU;gBAD7B,OAAO,EAAE,0BAA0B,EACjC,OAAO,EAAE,OAAO,CAAC,UAAU;IAwBzC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAgB;IAEhC;;OAEG;IACG,UAAU;IAsBV,GAAG,CAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAwBrD;;;;OAIG;IACG,QAAQ;YAQA,wBAAwB;CAiEzC;AAED,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,WAAW,CAAC;QAClB,UAAU,oBAAqB,SAAQ,0BAA0B;SAAG;KACvE;CACJ;AAED;;GAEG;AACH,cAAc,aAAa,CAAA;AAE3B;;;GAGG;AAEH;;;;;;;;;;;;GAYG;AAEH,wBAAgB,IAAI,CAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,QAAI;AAEvE;;;;GAIG;AAEH,wBAAgB,MAAM,CAAC,UAAU,EAAE,MAAM,QAAI;AAE7C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;AACnE,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;AACpE,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE;IACxC,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,IAAI,CAAC,EAAE,KAAK,CAAC;CAChB,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AACnB,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE;IACxC,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;CACd,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;AACvB,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE;IACxC,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,CAAC,EAAE,KAAK,CAAC;CAChB,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;AAC5B,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE;IACxC,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,IAAI,CAAC;CACd,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAA"}