@unotest/web 0.6.2 → 0.9.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.
@@ -0,0 +1,18 @@
1
+ import { IDslLanguageService } from '@unotest/protocol';
2
+ import { a as LintSeverity } from '../linter-CM2CpIyW.js';
3
+ import '@unotest/dsl';
4
+
5
+ interface LinterSeverity {
6
+ ruleSeverity: Partial<Record<string, LintSeverity>>;
7
+ suppressed: Set<string>;
8
+ }
9
+
10
+ /** Build the service. `severity` carries the project's `linter.rules`
11
+ * overrides (computed from config by the launcher) so the editor's
12
+ * diagnostics match `unotest-web lint`. Omit for default severities. */
13
+ declare function createWebDslLanguageService(severity?: LinterSeverity): IDslLanguageService;
14
+ /** Default service (no project config) — used by the standalone-launch
15
+ * fallback where no config has been loaded. */
16
+ declare const webDslLanguageService: IDslLanguageService;
17
+
18
+ export { createWebDslLanguageService, webDslLanguageService as default, webDslLanguageService };
@@ -0,0 +1 @@
1
+ var _0x4ac7b8=_0x4767;(function(_0x8bc70f,_0x23b215){var _0x27bd4d={_0x192e28:0x1ff,_0x2c5179:0x13a,_0x3953ac:0x106,_0xe000cd:0x1ad},_0x915e55=_0x4767,_0x1db4ac=_0x8bc70f();while(!![]){try{var _0x5b2ff0=-parseInt(_0x915e55(0x18b))/0x1*(-parseInt(_0x915e55(_0x27bd4d._0x192e28))/0x2)+parseInt(_0x915e55(_0x27bd4d._0x2c5179))/0x3+-parseInt(_0x915e55(0x174))/0x4+-parseInt(_0x915e55(_0x27bd4d._0x3953ac))/0x5*(parseInt(_0x915e55(_0x27bd4d._0xe000cd))/0x6)+parseInt(_0x915e55(0xfb))/0x7+parseInt(_0x915e55(0x151))/0x8+-parseInt(_0x915e55(0x211))/0x9;if(_0x5b2ff0===_0x23b215)break;else _0x1db4ac['push'](_0x1db4ac['shift']());}catch(_0x1b7a08){_0x1db4ac['push'](_0x1db4ac['shift']());}}}(_0x1768,0x918e0));var __defProp=Object[_0x4ac7b8(0x185)],__name=(_0x4de840,_0x207bf6)=>__defProp(_0x4de840,_0x4ac7b8(0x1a8),{'value':_0x207bf6,'configurable':!![]});import{Lexer,Parser,ParseError}from'@unotest/dsl';import{validateDsl}from'@unotest/dsl/validator';function locatorAction(_0x4c2dba){var _0x535866={_0x429851:0x11a,_0x1bbd59:0x18d,_0xe0c57b:0x105,_0x573d93:0x197},_0x2d16ad=_0x4ac7b8;return{'name':_0x4c2dba,'signature':{'args':[{'kind':_0x2d16ad(_0x535866._0x429851),'required':!![],'label':_0x2d16ad(0x1da)},{'kind':_0x2d16ad(_0x535866._0x1bbd59),'required':![],'label':_0x2d16ad(0x191)}]},'support':'visual','returns':{'mode':_0x2d16ad(_0x535866._0xe0c57b),'kind':'void'},'locatorCapability':_0x2d16ad(_0x535866._0x573d93)};}__name(locatorAction,_0x4ac7b8(0xe0));var CLICK_CONTRACT=locatorAction(_0x4ac7b8(0x1d3)),DOUBLE_CLICK_CONTRACT=locatorAction(_0x4ac7b8(0x15d)),CHECK_CONTRACT=locatorAction(_0x4ac7b8(0x1b9)),UNCHECK_CONTRACT=locatorAction(_0x4ac7b8(0xea)),HOVER_CONTRACT=locatorAction('hover'),SCROLL_INTO_VIEW_CONTRACT=locatorAction(_0x4ac7b8(0x1d7)),FILL_CONTRACT={'name':'fill','signature':{'args':[{'kind':_0x4ac7b8(0x11a),'required':!![],'label':_0x4ac7b8(0x1da)},{'kind':_0x4ac7b8(0x17e),'required':!![],'label':'text'},{'kind':'any','required':![],'label':_0x4ac7b8(0x191)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x17b)},'locatorCapability':_0x4ac7b8(0x197)},PRESS_CONTRACT={'name':_0x4ac7b8(0x192),'signature':{'args':[{'kind':_0x4ac7b8(0x11a),'required':!![],'label':'locator'},{'kind':'stringLike','required':!![],'label':_0x4ac7b8(0x13c)},{'kind':_0x4ac7b8(0x18d),'required':![],'label':_0x4ac7b8(0x191)}]},'support':'visual','returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x17b)},'locatorCapability':_0x4ac7b8(0x197)},SELECT_OPTION_CONTRACT={'name':_0x4ac7b8(0x200),'signature':{'args':[{'kind':_0x4ac7b8(0x11a),'required':!![],'label':'locator'},{'kind':_0x4ac7b8(0x18d),'required':!![],'label':_0x4ac7b8(0x104)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x17b)},'locatorCapability':_0x4ac7b8(0x197)},DRAG_AND_DROP_CONTRACT={'name':_0x4ac7b8(0x1e1),'signature':{'args':[{'kind':_0x4ac7b8(0x11a),'required':!![],'label':_0x4ac7b8(0x10a)},{'kind':'locatorLike','required':!![],'label':_0x4ac7b8(0x1f6)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':'fixed','kind':_0x4ac7b8(0x17b)},'locatorCapability':_0x4ac7b8(0x197)},UPLOAD_FILE_CONTRACT={'name':'uploadFile','signature':{'args':[{'kind':'locatorLike','required':!![],'label':'input'},{'kind':_0x4ac7b8(0x18d),'required':!![],'label':'files'}]},'support':'visual','returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x17b)},'locatorCapability':_0x4ac7b8(0x197)},CLIPBOARD_PASTE_CONTRACT={'name':'clipboardPaste','signature':{'args':[{'kind':_0x4ac7b8(0x11a),'required':!![],'label':_0x4ac7b8(0x1f6)},{'kind':_0x4ac7b8(0x17e),'required':!![],'label':_0x4ac7b8(0x12f)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':'fixed','kind':'void'},'locatorCapability':_0x4ac7b8(0x197)},ACTION_CONTRACTS=[CLICK_CONTRACT,DOUBLE_CLICK_CONTRACT,CHECK_CONTRACT,UNCHECK_CONTRACT,HOVER_CONTRACT,SCROLL_INTO_VIEW_CONTRACT,FILL_CONTRACT,PRESS_CONTRACT,SELECT_OPTION_CONTRACT,DRAG_AND_DROP_CONTRACT,UPLOAD_FILE_CONTRACT,CLIPBOARD_PASTE_CONTRACT],ASSERT_TEXT_CONTRACT={'name':_0x4ac7b8(0x12b),'signature':{'args':[{'kind':_0x4ac7b8(0x11a),'required':!![],'label':_0x4ac7b8(0x1da)},{'kind':'stringLike','required':!![],'label':_0x4ac7b8(0x12f)},{'kind':'any','required':![],'label':_0x4ac7b8(0x191)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':'fixed','kind':_0x4ac7b8(0x17b)},'locatorCapability':_0x4ac7b8(0x197)},ASSERT_VISIBLE_CONTRACT={'name':_0x4ac7b8(0x221),'signature':{'args':[{'kind':'locatorLike','required':!![],'label':_0x4ac7b8(0x1da)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x17b)},'locatorCapability':_0x4ac7b8(0x197)},ASSERT_HIDDEN_CONTRACT={'name':_0x4ac7b8(0x157),'signature':{'args':[{'kind':_0x4ac7b8(0x11a),'required':!![],'label':'locator'}]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':'void'},'locatorCapability':_0x4ac7b8(0x197)},ASSERT_VALUE_CONTRACT={'name':_0x4ac7b8(0x206),'signature':{'args':[{'kind':'locatorLike','required':!![],'label':_0x4ac7b8(0x1da)},{'kind':_0x4ac7b8(0x17e),'required':!![],'label':_0x4ac7b8(0x104)}]},'support':'visual','returns':{'mode':'fixed','kind':_0x4ac7b8(0x17b)},'locatorCapability':_0x4ac7b8(0x197)},ASSERT_COUNT_CONTRACT={'name':_0x4ac7b8(0xf8),'signature':{'args':[{'kind':_0x4ac7b8(0x11a),'required':!![],'label':_0x4ac7b8(0x1da)},{'kind':_0x4ac7b8(0x14f),'required':!![],'label':_0x4ac7b8(0xf6)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':'void'},'locatorCapability':_0x4ac7b8(0x197)},ASSERT_URL_CONTRACT={'name':_0x4ac7b8(0x125),'signature':{'args':[{'kind':_0x4ac7b8(0x17e),'required':!![],'label':_0x4ac7b8(0x20f)}]},'support':'visual','returns':{'mode':_0x4ac7b8(0x105),'kind':'void'},'locatorCapability':_0x4ac7b8(0x197)},ASSERT_TRUE_CONTRACT={'name':_0x4ac7b8(0x148),'signature':{'args':[{'kind':_0x4ac7b8(0x213),'required':!![],'label':'condition'},{'kind':_0x4ac7b8(0x17e),'required':![],'label':_0x4ac7b8(0xf9)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':'fixed','kind':_0x4ac7b8(0x17b)},'locatorCapability':_0x4ac7b8(0x197)},ASSERTION_CONTRACTS=[ASSERT_TEXT_CONTRACT,ASSERT_VISIBLE_CONTRACT,ASSERT_HIDDEN_CONTRACT,ASSERT_VALUE_CONTRACT,ASSERT_COUNT_CONTRACT,ASSERT_URL_CONTRACT,ASSERT_TRUE_CONTRACT],FILTER_CONTRACT={'name':'filter','signature':{'args':[{'kind':_0x4ac7b8(0x11a),'required':![],'label':'receiver'},{'kind':'any','required':!![],'label':'options'}]},'support':'visual','returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x1da)},'locatorCapability':_0x4ac7b8(0x1df)},FIRST_CONTRACT={'name':_0x4ac7b8(0x146),'signature':{'args':[{'kind':_0x4ac7b8(0x11a),'required':![],'label':'receiver'}]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x1da)},'locatorCapability':_0x4ac7b8(0x1df)},LAST_CONTRACT={'name':'last','signature':{'args':[{'kind':'locatorLike','required':![],'label':_0x4ac7b8(0x1db)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':'locator'},'locatorCapability':_0x4ac7b8(0x1df)},NTH_CONTRACT={'name':_0x4ac7b8(0x131),'signature':{'args':[{'kind':_0x4ac7b8(0x11a),'required':![],'label':_0x4ac7b8(0x1db)},{'kind':_0x4ac7b8(0x14f),'required':!![],'label':_0x4ac7b8(0x144)}]},'support':'visual','returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x1da)},'locatorCapability':_0x4ac7b8(0x1df)},CHAIN_CONTRACTS=[FILTER_CONTRACT,FIRST_CONTRACT,LAST_CONTRACT,NTH_CONTRACT],EVALUATE_CONTRACT={'name':_0x4ac7b8(0xe5),'signature':{'args':[{'kind':_0x4ac7b8(0x17e),'required':!![],'label':_0x4ac7b8(0x199)}],'variadic':!![]},'support':'visual','returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0xdd)},'locatorCapability':_0x4ac7b8(0x197),'trusted':!![]},ESCAPE_HATCH_CONTRACTS=[EVALUATE_CONTRACT],SET_PAGE_CONTRACT={'name':_0x4ac7b8(0x21f),'signature':{'args':[{'kind':_0x4ac7b8(0x102),'required':!![],'label':_0x4ac7b8(0xe6)}]},'support':'visual','returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x17b)},'locatorCapability':_0x4ac7b8(0x197)},ENTER_FRAME_CONTRACT={'name':_0x4ac7b8(0x12a),'signature':{'args':[{'kind':'locatorLike','required':!![],'label':_0x4ac7b8(0x1b5)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x17b)},'locatorCapability':_0x4ac7b8(0x197)},EXIT_FRAME_CONTRACT={'name':_0x4ac7b8(0x208),'signature':{'args':[]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x17b)},'locatorCapability':_0x4ac7b8(0x197)},MULTI_CONTEXT_CONTRACTS=[SET_PAGE_CONTRACT,ENTER_FRAME_CONTRACT,EXIT_FRAME_CONTRACT],GOTO_CONTRACT={'name':_0x4ac7b8(0x127),'signature':{'args':[{'kind':_0x4ac7b8(0x17e),'required':!![],'label':_0x4ac7b8(0xe8)},{'kind':_0x4ac7b8(0x18d),'required':![],'label':_0x4ac7b8(0x191)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x17b)},'locatorCapability':_0x4ac7b8(0x197)},RELOAD_CONTRACT={'name':'reload','signature':{'args':[{'kind':_0x4ac7b8(0x18d),'required':![],'label':_0x4ac7b8(0x191)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':'fixed','kind':_0x4ac7b8(0x17b)},'locatorCapability':_0x4ac7b8(0x197)},GO_BACK_CONTRACT={'name':_0x4ac7b8(0x1d1),'signature':{'args':[]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x17b)},'locatorCapability':'none'},GO_FORWARD_CONTRACT={'name':_0x4ac7b8(0x179),'signature':{'args':[]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':'void'},'locatorCapability':_0x4ac7b8(0x197)},WAIT_FOR_URL_CONTRACT={'name':_0x4ac7b8(0x1fc),'signature':{'args':[{'kind':_0x4ac7b8(0x17e),'required':!![],'label':_0x4ac7b8(0x20f)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x17b)},'locatorCapability':_0x4ac7b8(0x197)},WAIT_FOR_NAVIGATION_CONTRACT={'name':'waitForNavigation','signature':{'args':[{'kind':_0x4ac7b8(0x18d),'required':![],'label':_0x4ac7b8(0x191)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':'fixed','kind':_0x4ac7b8(0x17b)},'locatorCapability':_0x4ac7b8(0x197)},NAVIGATION_CONTRACTS=[GOTO_CONTRACT,RELOAD_CONTRACT,GO_BACK_CONTRACT,GO_FORWARD_CONTRACT,WAIT_FOR_URL_CONTRACT,WAIT_FOR_NAVIGATION_CONTRACT],COUNT_CONTRACT={'name':'count','signature':{'args':[{'kind':'locatorLike','required':!![],'label':_0x4ac7b8(0x1da)}]},'support':'visual','returns':{'mode':'fixed','kind':'number'},'locatorCapability':_0x4ac7b8(0x197)},TEXT_CONTENT_CONTRACT={'name':_0x4ac7b8(0x1d0),'signature':{'args':[{'kind':_0x4ac7b8(0x11a),'required':!![],'label':'locator'}]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x1e4)},'locatorCapability':'none'},INPUT_VALUE_CONTRACT={'name':_0x4ac7b8(0x1f5),'signature':{'args':[{'kind':'locatorLike','required':!![],'label':_0x4ac7b8(0x1da)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':'fixed','kind':_0x4ac7b8(0x1e4)},'locatorCapability':_0x4ac7b8(0x197)},IS_VISIBLE_CONTRACT={'name':_0x4ac7b8(0x1cd),'signature':{'args':[{'kind':_0x4ac7b8(0x11a),'required':!![],'label':_0x4ac7b8(0x1da)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x1a3)},'locatorCapability':_0x4ac7b8(0x197)},READ_CONTRACTS=[COUNT_CONTRACT,TEXT_CONTENT_CONTRACT,INPUT_VALUE_CONTRACT,IS_VISIBLE_CONTRACT],SHELL_CONTRACT={'name':_0x4ac7b8(0x118),'signature':{'args':[{'kind':_0x4ac7b8(0x17e),'required':!![],'label':_0x4ac7b8(0x124)}],'variadic':!![]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0xdd)},'locatorCapability':_0x4ac7b8(0x197)},DB_QUERY_CONTRACT={'name':_0x4ac7b8(0x111),'signature':{'args':[{'kind':'stringLike','required':!![],'label':'sql'}],'variadic':!![]},'support':'visual','returns':{'mode':_0x4ac7b8(0x105),'kind':'unknown'},'locatorCapability':'none'},DB_EXEC_CONTRACT={'name':_0x4ac7b8(0x109),'signature':{'args':[{'kind':'stringLike','required':!![],'label':_0x4ac7b8(0x1a5)}],'variadic':!![]},'support':'visual','returns':{'mode':'fixed','kind':_0x4ac7b8(0x14f)},'locatorCapability':_0x4ac7b8(0x197)},API_CALL_CONTRACT={'name':_0x4ac7b8(0x1a1),'signature':{'args':[{'kind':{'enum':['GET',_0x4ac7b8(0x1dd),_0x4ac7b8(0x20b),_0x4ac7b8(0x17f),_0x4ac7b8(0x122),_0x4ac7b8(0x160),_0x4ac7b8(0x108)]},'required':!![],'label':_0x4ac7b8(0x20d)},{'kind':_0x4ac7b8(0x17e),'required':!![],'label':'path'},{'kind':_0x4ac7b8(0x18d),'required':![],'label':_0x4ac7b8(0x1f0)},{'kind':_0x4ac7b8(0x18d),'required':![],'label':'headers'}]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0xdd)},'locatorCapability':_0x4ac7b8(0x197)},SANDBOX_CONTRACTS=[SHELL_CONTRACT,DB_QUERY_CONTRACT,DB_EXEC_CONTRACT,API_CALL_CONTRACT],LOCATOR_CONTRACT={'name':_0x4ac7b8(0x1da),'signature':{'args':[{'kind':_0x4ac7b8(0x17e),'required':!![],'label':_0x4ac7b8(0x1f9)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x1da)},'locatorCapability':_0x4ac7b8(0x1df)},GET_BY_ROLE_CONTRACT={'name':_0x4ac7b8(0xe7),'signature':{'args':[{'kind':_0x4ac7b8(0x17e),'required':!![],'label':_0x4ac7b8(0x159)},{'kind':_0x4ac7b8(0x18d),'required':![],'label':_0x4ac7b8(0x191)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':'locator'},'locatorCapability':_0x4ac7b8(0x1df)};function textBuilderContract(_0x1ad925){var _0x5a36cf={_0x347e79:0x12f,_0x46230d:0x191,_0x30e7c3:0x143,_0x5e5305:0x105,_0x3c3c07:0x1df},_0x270ca6=_0x4ac7b8;return{'name':_0x1ad925,'signature':{'args':[{'kind':_0x270ca6(0x153),'required':!![],'label':_0x270ca6(_0x5a36cf._0x347e79)},{'kind':_0x270ca6(0x18d),'required':![],'label':_0x270ca6(_0x5a36cf._0x46230d)}]},'support':_0x270ca6(_0x5a36cf._0x30e7c3),'returns':{'mode':_0x270ca6(_0x5a36cf._0x5e5305),'kind':_0x270ca6(0x1da)},'locatorCapability':_0x270ca6(_0x5a36cf._0x3c3c07)};}__name(textBuilderContract,_0x4ac7b8(0x1bd));var GET_BY_TEXT_CONTRACT=textBuilderContract(_0x4ac7b8(0x189)),GET_BY_LABEL_CONTRACT=textBuilderContract(_0x4ac7b8(0x1f3)),GET_BY_PLACEHOLDER_CONTRACT=textBuilderContract(_0x4ac7b8(0xf4)),GET_BY_ALT_TEXT_CONTRACT=textBuilderContract(_0x4ac7b8(0x141)),GET_BY_TITLE_CONTRACT=textBuilderContract(_0x4ac7b8(0x142)),GET_BY_TEST_ID_CONTRACT={'name':_0x4ac7b8(0x20e),'signature':{'args':[{'kind':'stringLike','required':!![],'label':'id'}]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x1da)},'locatorCapability':_0x4ac7b8(0x1df)},CONTENT_FRAME_CONTRACT={'name':_0x4ac7b8(0x1ca),'signature':{'args':[{'kind':'locatorLike','required':![],'label':_0x4ac7b8(0x1b5)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x1da)},'locatorCapability':_0x4ac7b8(0x1df)},SELECTOR_CONTRACTS=[LOCATOR_CONTRACT,GET_BY_ROLE_CONTRACT,GET_BY_TEXT_CONTRACT,GET_BY_LABEL_CONTRACT,GET_BY_PLACEHOLDER_CONTRACT,GET_BY_ALT_TEXT_CONTRACT,GET_BY_TITLE_CONTRACT,GET_BY_TEST_ID_CONTRACT,CONTENT_FRAME_CONTRACT],GET_ATTRIBUTE_CONTRACT={'name':'getAttribute','signature':{'args':[{'kind':'locatorLike','required':!![],'label':_0x4ac7b8(0x1da)},{'kind':_0x4ac7b8(0x17e),'required':!![],'label':_0x4ac7b8(0x205)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':'fixed','kind':_0x4ac7b8(0x1e4)},'locatorCapability':_0x4ac7b8(0x197)},GET_INNER_TEXT_CONTRACT={'name':_0x4ac7b8(0x112),'signature':{'args':[{'kind':_0x4ac7b8(0x11a),'required':!![],'label':_0x4ac7b8(0x1da)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x1e4)},'locatorCapability':_0x4ac7b8(0x197)},GET_INPUT_VALUE_CONTRACT={'name':'getInputValue','signature':{'args':[{'kind':_0x4ac7b8(0x11a),'required':!![],'label':_0x4ac7b8(0x1da)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x1e4)},'locatorCapability':_0x4ac7b8(0x197)},GET_TITLE_CONTRACT={'name':_0x4ac7b8(0x15e),'signature':{'args':[]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x1e4)},'locatorCapability':_0x4ac7b8(0x197)},GET_URL_CONTRACT={'name':'getUrl','signature':{'args':[]},'support':_0x4ac7b8(0x143),'returns':{'mode':'fixed','kind':_0x4ac7b8(0x1e4)},'locatorCapability':_0x4ac7b8(0x197)},LOG_CONTRACT={'name':_0x4ac7b8(0x177),'signature':{'args':[{'kind':_0x4ac7b8(0x18d),'required':!![],'label':_0x4ac7b8(0xf9)}],'variadic':!![]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x17b)},'locatorCapability':'none'},STATE_CONTRACTS=[GET_ATTRIBUTE_CONTRACT,GET_INNER_TEXT_CONTRACT,GET_INPUT_VALUE_CONTRACT,GET_TITLE_CONTRACT,GET_URL_CONTRACT,LOG_CONTRACT],SET_LOCAL_STORAGE_CONTRACT={'name':_0x4ac7b8(0x150),'signature':{'args':[{'kind':_0x4ac7b8(0x17e),'required':!![],'label':_0x4ac7b8(0x13c)},{'kind':_0x4ac7b8(0x17e),'required':!![],'label':_0x4ac7b8(0x104)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x17b)},'locatorCapability':_0x4ac7b8(0x197)},GET_LOCAL_STORAGE_CONTRACT={'name':_0x4ac7b8(0x114),'signature':{'args':[{'kind':_0x4ac7b8(0x17e),'required':!![],'label':'key'}]},'support':'visual','returns':{'mode':'fixed','kind':_0x4ac7b8(0x1e4)},'locatorCapability':_0x4ac7b8(0x197)},SET_COOKIE_CONTRACT={'name':'setCookie','signature':{'args':[{'kind':_0x4ac7b8(0x17e),'required':!![],'label':_0x4ac7b8(0x1a8)},{'kind':_0x4ac7b8(0x17e),'required':!![],'label':_0x4ac7b8(0x104)},{'kind':_0x4ac7b8(0x18d),'required':![],'label':_0x4ac7b8(0x191)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':'fixed','kind':_0x4ac7b8(0x17b)},'locatorCapability':'none'},GET_COOKIE_CONTRACT={'name':_0x4ac7b8(0x1e6),'signature':{'args':[{'kind':_0x4ac7b8(0x17e),'required':!![],'label':_0x4ac7b8(0x1a8)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x1e4)},'locatorCapability':_0x4ac7b8(0x197)},STORAGE_CONTRACTS=[SET_LOCAL_STORAGE_CONTRACT,GET_LOCAL_STORAGE_CONTRACT,SET_COOKIE_CONTRACT,GET_COOKIE_CONTRACT],WAIT_FOR_CONTRACT={'name':_0x4ac7b8(0x186),'signature':{'args':[{'kind':_0x4ac7b8(0x11a),'required':!![],'label':_0x4ac7b8(0x1da)},{'kind':_0x4ac7b8(0x18d),'required':![],'label':_0x4ac7b8(0x191)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x17b)},'locatorCapability':'none'},WAIT_FOR_TEXT_CONTRACT={'name':_0x4ac7b8(0x183),'signature':{'args':[{'kind':_0x4ac7b8(0x17e),'required':!![],'label':'text'},{'kind':_0x4ac7b8(0x18d),'required':![],'label':_0x4ac7b8(0x191)}]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':_0x4ac7b8(0x17b)},'locatorCapability':_0x4ac7b8(0x197)},PAUSE_CONTRACT={'name':_0x4ac7b8(0x1fb),'signature':{'args':[{'kind':_0x4ac7b8(0x14f),'required':!![],'label':'ms'}]},'support':_0x4ac7b8(0x143),'returns':{'mode':_0x4ac7b8(0x105),'kind':'void'},'locatorCapability':_0x4ac7b8(0x197)},WAIT_CONTRACTS=[WAIT_FOR_CONTRACT,WAIT_FOR_TEXT_CONTRACT,PAUSE_CONTRACT],ALL_CONTRACTS=[...ACTION_CONTRACTS,...ASSERTION_CONTRACTS,...CHAIN_CONTRACTS,...ESCAPE_HATCH_CONTRACTS,...MULTI_CONTEXT_CONTRACTS,...NAVIGATION_CONTRACTS,...READ_CONTRACTS,...SANDBOX_CONTRACTS,...SELECTOR_CONTRACTS,...STATE_CONTRACTS,...STORAGE_CONTRACTS,...WAIT_CONTRACTS],WebDslRegistry=class{static{__name(this,'WebDslRegistry');}[_0x4ac7b8(0x1e3)];constructor(_0x1886a9){var _0x4e3db1={_0x31b59d:0x1e3},_0x1352f2=_0x4ac7b8;this[_0x1352f2(0x1e3)]=new Map();for(const _0x437f17 of _0x1886a9)this[_0x1352f2(_0x4e3db1._0x31b59d)][_0x1352f2(0x1a6)](_0x437f17[_0x1352f2(0x1a8)],_0x437f17);}[_0x4ac7b8(0x163)](_0xda8532){var _0x573815=_0x4ac7b8;return this[_0x573815(0x204)](_0xda8532);}['resolveContract'](_0x5bc970){var _0x1adebd={_0x21d91d:0x203,_0x95c37d:0x1e3,_0x30a2b5:0x1a4,_0x3aba29:0x1cc},_0x74d0ba=_0x4ac7b8;const _0x5246f8=this[_0x74d0ba(0x1e3)][_0x74d0ba(0x1e0)](_0x5bc970);if(_0x5246f8)return _0x5246f8;if(_0x5bc970[_0x74d0ba(0x129)](_0x74d0ba(_0x1adebd._0x21d91d)))return this[_0x74d0ba(_0x1adebd._0x95c37d)]['get'](_0x74d0ba(_0x1adebd._0x30a2b5))??null;if(_0x5bc970[_0x74d0ba(0x129)](_0x74d0ba(0x1c2)))return this[_0x74d0ba(0x1e3)][_0x74d0ba(0x1e0)](_0x74d0ba(_0x1adebd._0x3aba29))??null;return null;}[_0x4ac7b8(0x1e7)](_0x24e30a,_0x180fe){var _0x11dcf4={_0xdb28da:0x204,_0x39fbb9:0x1e9,_0x103e46:0x105,_0x16ec56:0x154,_0x3013dd:0x17b,_0x2d49e2:0x154,_0x1328d2:0x155},_0x3bc046=_0x4ac7b8;const _0x43e289=this[_0x3bc046(_0x11dcf4._0xdb28da)](_0x24e30a[_0x3bc046(0x1a8)]);if(!_0x43e289)return'unknown';const {returns:_0x3b21f6}=_0x43e289;if(_0x3b21f6[_0x3bc046(_0x11dcf4._0x39fbb9)]===_0x3bc046(_0x11dcf4._0x103e46)){if(_0x3b21f6[_0x3bc046(_0x11dcf4._0x16ec56)]===_0x3bc046(_0x11dcf4._0x3013dd))return _0x3bc046(0xdd);return _0x3b21f6[_0x3bc046(_0x11dcf4._0x2d49e2)];}return _0x3b21f6[_0x3bc046(_0x11dcf4._0x1328d2)](_0x24e30a,{'session':_0x180fe,'resolver':this});}};function helperContract(_0xdb46ed){var _0x139bc6={_0x51e94c:0xdd},_0x351fad=_0x4ac7b8;return{'name':_0xdb46ed,'signature':{'args':[],'variadic':!![]},'support':_0x351fad(0x143),'returns':{'mode':_0x351fad(0x105),'kind':_0x351fad(_0x139bc6._0x51e94c)},'locatorCapability':_0x351fad(0x197)};}__name(helperContract,_0x4ac7b8(0x1cf));var baseRegistry=null;function createWebDslRegistry(_0x58d1f8=[]){var _0x9b8441=_0x4ac7b8;if(_0x58d1f8[_0x9b8441(0x136)]===0x0)return baseRegistry??=new WebDslRegistry(ALL_CONTRACTS);return new WebDslRegistry([...ALL_CONTRACTS,..._0x58d1f8['map'](helperContract)]);}__name(createWebDslRegistry,_0x4ac7b8(0x180));import{MetaBlockStatement,AssignmentStatement,BinaryExpression,DoWhileStatement,ForStatement,FunctionDefineStatement,FunctionStatement,FunctionalExpression,IfStatement,MemberCallExpression,ObjectExpression,PropertyAccessExpression,RegExpExpression,ReturnStatement,StepStatement,ValueExpression,VariableExpression,WhileStatement}from'@unotest/dsl';import{StringValue}from'@unotest/dsl';function lintAst(_0x110d6d,_0x5d08bb={}){var _0x55339f={_0x1e5a90:0x196},_0x4018af=_0x4ac7b8;const _0x4578f6=[],_0x1d4946=new LintVisitor(_0x4578f6,_0x5d08bb);return _0x1d4946[_0x4018af(_0x55339f._0x1e5a90)](_0x110d6d),_0x4578f6;}__name(lintAst,_0x4ac7b8(0x1fd));var LintVisitor=class{constructor(_0x3be008,_0x3966de){var _0x1cf4fe=_0x4ac7b8;this[_0x1cf4fe(0x11b)]=_0x3be008,this['opts']=_0x3966de;}[_0x4ac7b8(0x11b)];['opts'];static{__name(this,'LintVisitor');}[_0x4ac7b8(0x196)](_0x450bbe){var _0x3b285e={_0xb99002:0x212},_0x25b983=_0x4ac7b8;for(const _0x5cb441 of _0x450bbe[_0x25b983(_0x3b285e._0xb99002)]){this['visitStatement'](_0x5cb441);}}[_0x4ac7b8(0x1a0)](_0xb5cba2){var _0x103347={_0x21ec05:0x1f0,_0x3b339f:0x12d,_0xb21a30:0x123,_0x208715:0x216,_0x34e3f0:0x1ac,_0x46451b:0x1a0,_0x5d174e:0x195,_0x14dec0:0x12d,_0x41796d:0x194,_0x53c0c1:0x1f0,_0x4928a8:0x212},_0xea3ea7=_0x4ac7b8;if(_0xb5cba2 instanceof FunctionDefineStatement){if(_0xb5cba2[_0xea3ea7(0x1f0)]instanceof class{}){}const _0x4c130c=_0xb5cba2[_0xea3ea7(_0x103347._0x21ec05)];this[_0xea3ea7(0x1a0)](_0x4c130c);return;}if(_0xb5cba2 instanceof FunctionStatement){const _0x281dbf=_0xb5cba2['functionalExpression'];this[_0xea3ea7(0x12d)](_0x281dbf);return;}if(_0xb5cba2 instanceof AssignmentStatement){this[_0xea3ea7(_0x103347._0x3b339f)](_0xb5cba2[_0xea3ea7(_0x103347._0xb21a30)]);return;}if(_0xb5cba2 instanceof IfStatement){this[_0xea3ea7(0x12d)](_0xb5cba2[_0xea3ea7(0x123)]),this[_0xea3ea7(0x1a0)](_0xb5cba2[_0xea3ea7(_0x103347._0x208715)]);if(_0xb5cba2[_0xea3ea7(_0x103347._0x34e3f0)])this[_0xea3ea7(0x1a0)](_0xb5cba2['elseStatement']);return;}if(_0xb5cba2 instanceof ReturnStatement){const _0x4af7ee=_0xb5cba2[_0xea3ea7(_0x103347._0xb21a30)];if(_0x4af7ee)this[_0xea3ea7(_0x103347._0x3b339f)](_0x4af7ee);return;}if(_0xb5cba2 instanceof ForStatement){this[_0xea3ea7(_0x103347._0x46451b)](_0xb5cba2[_0xea3ea7(_0x103347._0x5d174e)]),this[_0xea3ea7(_0x103347._0x14dec0)](_0xb5cba2['termination']),this['visitStatement'](_0xb5cba2[_0xea3ea7(0x1ec)]),this[_0xea3ea7(0x1a0)](_0xb5cba2['block']);return;}if(_0xb5cba2 instanceof WhileStatement||_0xb5cba2 instanceof DoWhileStatement){this[_0xea3ea7(0x12d)](_0xb5cba2['condition']),this[_0xea3ea7(0x1a0)](_0xb5cba2[_0xea3ea7(_0x103347._0x41796d)]);return;}if(_0xb5cba2 instanceof StepStatement){this[_0xea3ea7(_0x103347._0x46451b)](_0xb5cba2[_0xea3ea7(0x1f0)]);return;}if(_0xb5cba2 instanceof MetaBlockStatement){this[_0xea3ea7(_0x103347._0x46451b)](_0xb5cba2[_0xea3ea7(_0x103347._0x53c0c1)]);return;}if(_0xb5cba2[_0xea3ea7(_0x103347._0x4928a8)])for(const _0x356f48 of _0xb5cba2['statements']){this['visitStatement'](_0x356f48);}}[_0x4ac7b8(0x12d)](_0x18d07d){var _0x1f30a6={_0x17df9f:0x19c,_0xa82ea:0x19c,_0x566740:0x12d,_0x63bf4c:0x1db,_0x2a44d4:0x165,_0x32e945:0x13b,_0x5340ad:0x1c1},_0x54e032=_0x4ac7b8;if(_0x18d07d instanceof FunctionalExpression){this[_0x54e032(0x222)](_0x18d07d[_0x54e032(0x1a8)],_0x18d07d[_0x54e032(_0x1f30a6._0x17df9f)],_0x18d07d);for(const _0x5c7ab5 of _0x18d07d[_0x54e032(_0x1f30a6._0xa82ea)])this[_0x54e032(0x12d)](_0x5c7ab5);return;}if(_0x18d07d instanceof MemberCallExpression){this[_0x54e032(0x12d)](_0x18d07d[_0x54e032(0x1db)]),this[_0x54e032(0x222)](_0x18d07d['name'],_0x18d07d[_0x54e032(0x19c)],_0x18d07d);for(const _0x448c49 of _0x18d07d[_0x54e032(0x19c)])this[_0x54e032(_0x1f30a6._0x566740)](_0x448c49);return;}if(_0x18d07d instanceof PropertyAccessExpression){this[_0x54e032(_0x1f30a6._0x566740)](_0x18d07d[_0x54e032(_0x1f30a6._0x63bf4c)]);return;}if(_0x18d07d instanceof RegExpExpression){this[_0x54e032(_0x1f30a6._0x2a44d4)](_0x18d07d);return;}if(_0x18d07d instanceof ValueExpression){this[_0x54e032(_0x1f30a6._0x32e945)](_0x18d07d);return;}if(_0x18d07d instanceof ObjectExpression){for(const _0x3277b3 of _0x18d07d[_0x54e032(_0x1f30a6._0x5340ad)][_0x54e032(0x19f)]())this[_0x54e032(0x12d)](_0x3277b3);return;}}[_0x4ac7b8(0x222)](_0x3129ff,_0x2561d9,_0x1a41d5){var _0xb72bd7={_0x4f265c:0x210,_0x41398e:0xe5},_0x4ae1fb=_0x4ac7b8;if(_0x3129ff===_0x4ae1fb(0x1da))this[_0x4ae1fb(0x217)](_0x2561d9,_0x1a41d5);if(_0x3129ff===_0x4ae1fb(0x1fb))this[_0x4ae1fb(0x175)](_0x1a41d5);if(_0x3129ff===_0x4ae1fb(0x146)||_0x3129ff===_0x4ae1fb(_0xb72bd7._0x4f265c)||_0x3129ff===_0x4ae1fb(0x131))this[_0x4ae1fb(0x166)](_0x3129ff,_0x1a41d5);if(_0x3129ff===_0x4ae1fb(_0xb72bd7._0x41398e)||_0x3129ff===_0x4ae1fb(0x1c0))this['ruleEvaluateDiscouraged'](_0x3129ff,_0x1a41d5);if(_0x3129ff===_0x4ae1fb(0x127))this['ruleGotoConcat'](_0x2561d9,_0x1a41d5);}[_0x4ac7b8(0x103)](_0x4adaab,_0x542b12){var _0x411cde={_0x38399a:0x190,_0x4469bf:0x193,_0x4eaa3f:0x1f4},_0x3cc545=_0x4ac7b8;const _0x33ed70=_0x4adaab[0x0];if(!(_0x33ed70 instanceof BinaryExpression)||_0x33ed70['operation']!=='+')return;const _0x527f8f=_0x33ed70[_0x3cc545(_0x411cde._0x38399a)];if(!(_0x527f8f instanceof VariableExpression)||!/URL$/[_0x3cc545(0x181)](_0x527f8f[_0x3cc545(0x1a8)]))return;const {line:_0x2141b2,col:_0x5f061f}=locOf(_0x542b12);this[_0x3cc545(_0x411cde._0x4469bf)](_0x3cc545(0x187),_0x3cc545(0x167),_0x3cc545(0x21e)+_0x527f8f[_0x3cc545(0x1a8)]+'\x20+\x20…)\x20concatenates\x20the\x20base\x20URL.\x20'+_0x527f8f['name']+_0x3cc545(_0x411cde._0x4eaa3f),_0x2141b2,_0x5f061f);}['ruleMustacheInDsl'](_0x443fc6){var _0x4a329a={_0x503fe3:0x218,_0x4a0047:0x21b},_0x47367f=_0x4ac7b8;const _0x55cd2b=_0x443fc6[_0x47367f(0x104)];if(!(_0x55cd2b instanceof StringValue))return;const _0x587efe=_0x55cd2b[_0x47367f(0x110)](),_0x41768b=/\{\{\s*([A-Za-z_][A-Za-z0-9_]*)\s*\}\}/[_0x47367f(0x1c6)](_0x587efe);if(!_0x41768b)return;const {line:_0x49d490,col:_0x322749}=locOf(_0x443fc6);this['emit'](_0x47367f(_0x4a329a._0x503fe3),_0x47367f(_0x4a329a._0x4a0047),'\x22'+_0x587efe+_0x47367f(0x1d2)+_0x41768b[0x1]+_0x47367f(0x19e),_0x49d490,_0x322749);}[_0x4ac7b8(0x217)](_0x3adde2,_0x2435e5){var _0x1e5b5d={_0x283829:0x110,_0x5623bf:0x129,_0x262b4a:0x130,_0x210589:0x19d,_0x1f7c23:0x136,_0x48036c:0x167,_0x50cb02:0x117,_0x4afd29:0x1ab,_0x4f2711:0x1f8},_0x3f4201=_0x4ac7b8;const _0x1cc6a5=_0x3adde2[0x0];if(!(_0x1cc6a5 instanceof ValueExpression))return;const _0xd30911=_0x1cc6a5['value'];if(!(_0xd30911 instanceof StringValue))return;const _0x390f3b=_0xd30911[_0x3f4201(_0x1e5b5d._0x283829)](),{line:_0x3e32d3,col:_0x4d995d}=locOf(_0x2435e5);if(_0x390f3b[_0x3f4201(_0x1e5b5d._0x5623bf)]('//')||_0x390f3b[_0x3f4201(_0x1e5b5d._0x5623bf)](_0x3f4201(0x1ce))){this['emit']('lint:xpath','warning',_0x3f4201(_0x1e5b5d._0x262b4a),_0x3e32d3,_0x4d995d);return;}const _0x404e01=(_0x390f3b[_0x3f4201(_0x1e5b5d._0x210589)](/[ >+~]+/g)??[])[_0x3f4201(_0x1e5b5d._0x1f7c23)];_0x404e01>=0x3&&/[.#]/[_0x3f4201(0x181)](_0x390f3b)&&this[_0x3f4201(0x193)](_0x3f4201(0x1ae),_0x3f4201(_0x1e5b5d._0x48036c),_0x3f4201(_0x1e5b5d._0x50cb02)+_0x404e01+_0x3f4201(_0x1e5b5d._0x4afd29),_0x3e32d3,_0x4d995d),hasObfuscatedClass(_0x390f3b)&&this[_0x3f4201(0x193)](_0x3f4201(_0x1e5b5d._0x4f2711),_0x3f4201(0x167),'selector\x20contains\x20an\x20obfuscated\x20class\x20name\x20(CSS-modules\x20/\x20Tailwind\x20hash)\x20—\x20fragile\x20across\x20rebuilds.\x20Prefer\x20getByRole\x20/\x20getByTestId.',_0x3e32d3,_0x4d995d);}[_0x4ac7b8(0x175)](_0x23c947){var _0x3c8813=_0x4ac7b8;const {line:_0x4da080,col:_0x1e8f70}=locOf(_0x23c947);this[_0x3c8813(0x193)](_0x3c8813(0x16b),'warning',_0x3c8813(0xf1),_0x4da080,_0x1e8f70);}[_0x4ac7b8(0x166)](_0x24dc7a,_0x1d437c){var _0x332daf={_0x6f730a:0x220,_0x3cb7d5:0x1b2},_0x28202b=_0x4ac7b8;if(this[_0x28202b(_0x332daf._0x6f730a)][_0x28202b(_0x332daf._0x3cb7d5)])return;const {line:_0x542064,col:_0x10bb80}=locOf(_0x1d437c);this[_0x28202b(0x193)]('lint:disambig-by-index','info','disambiguation\x20by\x20index\x20('+_0x24dc7a+'())\x20—\x20consider\x20getByRole({name})\x20/\x20getByTestId\x20for\x20stability',_0x542064,_0x10bb80);}[_0x4ac7b8(0x1c7)](_0x454152,_0x5d3c56){var _0x2c4d92={_0x125855:0x17d,_0x37b5e2:0x167},_0x4ec04d=_0x4ac7b8;const {line:_0x35cb79,col:_0x1246ba}=locOf(_0x5d3c56);this[_0x4ec04d(0x193)](_0x4ec04d(_0x2c4d92._0x125855),_0x4ec04d(_0x2c4d92._0x37b5e2),_0x454152+_0x4ec04d(0x15c),_0x35cb79,_0x1246ba);}[_0x4ac7b8(0x165)](_0xe69400){var _0x372100={_0x10f9ae:0x21c,_0x58bf92:0x10a,_0x497ab1:0x12e,_0x3815a8:0xf9},_0x2030cd=_0x4ac7b8;const {line:_0x1fc2ae,col:_0x5b1ae2}=locOf(_0xe69400);try{new RegExp(_0xe69400['source']);}catch(_0x4c3bf3){this['emit'](_0x2030cd(0x10e),_0x2030cd(0x21b),_0x2030cd(_0x372100._0x10f9ae)+_0xe69400[_0x2030cd(_0x372100._0x58bf92)]+_0x2030cd(_0x372100._0x497ab1)+(_0x4c3bf3 instanceof Error?_0x4c3bf3[_0x2030cd(_0x372100._0x3815a8)]:String(_0x4c3bf3)),_0x1fc2ae,_0x5b1ae2);}}[_0x4ac7b8(0x193)](_0x579174,_0x438ed0,_0x47202e,_0x4295f0,_0xd177ff){var _0x345fa6={_0x1f1590:0x18a,_0xbead18:0x1b1},_0x258707=_0x4ac7b8;const _0x2efae6=this[_0x258707(0x220)][_0x258707(_0x345fa6._0x1f1590)]?.[_0x579174]??_0x438ed0;this[_0x258707(0x11b)][_0x258707(_0x345fa6._0xbead18)]({'rule':_0x579174,'severity':_0x2efae6,'message':_0x47202e,'line':_0x4295f0,'col':_0xd177ff});}};function locOf(_0x2d2e34){var _0x5005a9={_0x50d1ab:0xfe},_0x1b3e60=_0x4ac7b8;const _0x59ebb0=_0x2d2e34['token'];return{'line':_0x59ebb0?.[_0x1b3e60(0xe2)]?.()??0x0,'col':_0x59ebb0?.[_0x1b3e60(_0x5005a9._0x50d1ab)]?.()??0x0};}__name(locOf,_0x4ac7b8(0x145));function hasObfuscatedClass(_0x1fb063){var _0x325e93={_0x5f392c:0x181},_0xb776ba=_0x4ac7b8;const _0x35084f=_0x1fb063[_0xb776ba(0x19d)](/[._-][A-Za-z0-9_+/-]+/g)??[];for(const _0xdf4434 of _0x35084f){const _0x353b01=_0xdf4434[_0xb776ba(0x128)](0x1)[_0xb776ba(0x17a)](/[-_]+/);for(const _0x144565 of _0x353b01){if(_0x144565[_0xb776ba(0x136)]<0x6)continue;const _0x1d7141=/[0-9]/[_0xb776ba(_0x325e93._0x5f392c)](_0x144565),_0x3800bb=/[a-z]/['test'](_0x144565),_0x187e35=/[A-Z]/[_0xb776ba(_0x325e93._0x5f392c)](_0x144565);if(_0x1d7141&&_0x3800bb&&_0x187e35)return!![];}}return![];}__name(hasObfuscatedClass,_0x4ac7b8(0x14c));function validateSource(_0x455ff0,_0x3b64a5={}){var _0x2dd1e4={_0x4d8956:0x16d,_0x2f2e6f:0x21b,_0x3a2748:0x1cb,_0x81b209:0x219,_0x426589:0x1ea,_0x463397:0xf9,_0x44e531:0x140,_0x38bebc:0x167,_0x29d071:0x1be},_0xe8e24d=_0x4ac7b8;const {ruleSeverity:ruleSeverity={},suppressed:_0x4748ac,helperNames:_0x756d23,isWrapped:isWrapped=![]}=_0x3b64a5;let _0x40c16c;try{_0x40c16c=new Parser(new Lexer(_0x455ff0)[_0xe8e24d(0x17c)]())[_0xe8e24d(_0x2dd1e4._0x4d8956)]();}catch(_0x397043){return[{'severity':_0xe8e24d(_0x2dd1e4._0x2f2e6f),'source':_0xe8e24d(0x16d),'rule':'parse','line':_0x397043 instanceof ParseError?_0x397043[_0xe8e24d(0x10d)]:0x1,'column':_0x397043 instanceof ParseError?_0x397043[_0xe8e24d(_0x2dd1e4._0x3a2748)]:0x1,'message':_0x397043 instanceof Error?_0x397043['message']:String(_0x397043)}];}const _0x177610=[];for(const _0x1a6899 of lintAst(_0x40c16c,{'ruleSeverity':ruleSeverity})){if(_0x4748ac?.['has'](_0x1a6899[_0xe8e24d(_0x2dd1e4._0x81b209)]))continue;_0x177610['push']({'severity':_0x1a6899[_0xe8e24d(_0x2dd1e4._0x426589)],'source':'lint','rule':_0x1a6899[_0xe8e24d(0x219)],'line':_0x1a6899[_0xe8e24d(0x10d)],'column':_0x1a6899[_0xe8e24d(0x215)],'message':_0x1a6899[_0xe8e24d(_0x2dd1e4._0x463397)]});}const _0x5e9650=createWebDslRegistry(_0x756d23);for(const _0x5348db of validateDsl(_0x40c16c,_0x455ff0,isWrapped,_0x5e9650)){const _0x144cff=_0x5348db[_0xe8e24d(0xf9)]['startsWith']('Unknown\x20function:')?_0xe8e24d(0x11e):_0xe8e24d(_0x2dd1e4._0x44e531);if(_0x4748ac?.[_0xe8e24d(0x16a)](_0x144cff))continue;const _0x5a5390=ruleSeverity[_0x144cff]??(_0x5348db[_0xe8e24d(0x1ea)]===_0xe8e24d(_0x2dd1e4._0x38bebc)?'warning':_0xe8e24d(_0x2dd1e4._0x2f2e6f));_0x177610[_0xe8e24d(0x1b1)]({'severity':_0x5a5390,'source':_0xe8e24d(_0x2dd1e4._0x29d071),'rule':_0x144cff,'line':_0x5348db['line']??0x0,'column':_0x5348db[_0xe8e24d(_0x2dd1e4._0x3a2748)]??0x0,'message':_0x5348db[_0xe8e24d(0xf9)]});}return _0x177610[_0xe8e24d(0x1de)]((_0x55c6bd,_0x20a16b)=>_0x55c6bd[_0xe8e24d(0x10d)]-_0x20a16b[_0xe8e24d(0x10d)]||_0x55c6bd[_0xe8e24d(0x1cb)]-_0x20a16b[_0xe8e24d(0x1cb)]),_0x177610;}__name(validateSource,_0x4ac7b8(0x1e5));var ENTRIES=[{'sig':_0x4ac7b8(0x115),'desc':_0x4ac7b8(0x1e2)},{'sig':_0x4ac7b8(0x15b),'desc':'Reload\x20the\x20current\x20page.'},{'sig':_0x4ac7b8(0x19b),'desc':_0x4ac7b8(0x1fe)},{'sig':_0x4ac7b8(0xec),'desc':_0x4ac7b8(0x1ba)},{'sig':_0x4ac7b8(0x1e8),'desc':_0x4ac7b8(0xde)},{'sig':_0x4ac7b8(0xf2),'desc':_0x4ac7b8(0x176)},{'sig':'waitFor(locator,\x20{\x20state?,\x20timeout?\x20})','desc':_0x4ac7b8(0x120)},{'sig':_0x4ac7b8(0x1b7),'desc':_0x4ac7b8(0xed)},{'sig':_0x4ac7b8(0x1f1),'desc':_0x4ac7b8(0x14d)},{'sig':'getByTestId(id)','desc':_0x4ac7b8(0x152)},{'sig':'getByRole(role,\x20{\x20name?,\x20exact?\x20})','desc':'Match\x20by\x20ARIA\x20role\x20+\x20accessible\x20name.\x20`name`\x20accepts\x20a\x20string\x20or\x20`/regex/`.'},{'sig':_0x4ac7b8(0x13d),'desc':_0x4ac7b8(0x16e)},{'sig':'getByText(text,\x20{\x20exact?\x20})','desc':_0x4ac7b8(0x139)},{'sig':_0x4ac7b8(0x1bb),'desc':_0x4ac7b8(0x137)},{'sig':_0x4ac7b8(0x1fa),'desc':_0x4ac7b8(0x18c)},{'sig':_0x4ac7b8(0x19a),'desc':_0x4ac7b8(0x107)},{'sig':'locator(css)','desc':_0x4ac7b8(0x15a)},{'sig':_0x4ac7b8(0x10c),'desc':_0x4ac7b8(0x11c)},{'sig':_0x4ac7b8(0x100),'desc':_0x4ac7b8(0x1b4)},{'sig':_0x4ac7b8(0xfd),'desc':_0x4ac7b8(0x173)},{'sig':'nth(locator,\x20index)','desc':_0x4ac7b8(0x15f)},{'sig':_0x4ac7b8(0x168),'desc':'Resolve\x20an\x20`<iframe>`\x20element\x20to\x20its\x20content\x20frame.'},{'sig':_0x4ac7b8(0x16c),'desc':'Click\x20an\x20element.'},{'sig':'doubleClick(locator,\x20{\x20force?,\x20timeout?\x20})','desc':'Double-click\x20an\x20element.'},{'sig':_0x4ac7b8(0x21d),'desc':_0x4ac7b8(0x138)},{'sig':_0x4ac7b8(0x1a2),'desc':'Press\x20a\x20key\x20(e.g.\x20\x27Enter\x27,\x20\x27Control+A\x27).'},{'sig':_0x4ac7b8(0x214),'desc':_0x4ac7b8(0x121)},{'sig':_0x4ac7b8(0x1d9),'desc':_0x4ac7b8(0xdc)},{'sig':_0x4ac7b8(0x14b),'desc':'Hover\x20over\x20an\x20element.'},{'sig':_0x4ac7b8(0x202),'desc':'Select\x20option(s)\x20in\x20a\x20`<select>`.\x20`value`\x20is\x20a\x20string\x20or\x20string[].'},{'sig':_0x4ac7b8(0x1c5),'desc':'Scroll\x20an\x20element\x20into\x20the\x20viewport.'},{'sig':_0x4ac7b8(0x13e),'desc':_0x4ac7b8(0x11f)},{'sig':'uploadFile(locator,\x20files)','desc':'Set\x20files\x20on\x20a\x20file\x20input.\x20`files`\x20is\x20a\x20path\x20or\x20path[].'},{'sig':_0x4ac7b8(0x1eb),'desc':_0x4ac7b8(0x1b0)},{'sig':_0x4ac7b8(0x113),'desc':'Element\x27s\x20text\x20equals/contains\x20`expected`.'},{'sig':_0x4ac7b8(0x135),'desc':_0x4ac7b8(0xef)},{'sig':_0x4ac7b8(0xf0),'desc':_0x4ac7b8(0x133)},{'sig':_0x4ac7b8(0xfc),'desc':_0x4ac7b8(0x101)},{'sig':_0x4ac7b8(0xe3),'desc':'Number\x20of\x20matches\x20equals\x20`expected`.'},{'sig':_0x4ac7b8(0x1ef),'desc':'Current\x20URL\x20contains\x20`pattern`.'},{'sig':_0x4ac7b8(0x1bc),'desc':_0x4ac7b8(0xee)},{'sig':_0x4ac7b8(0x1dc),'desc':_0x4ac7b8(0x1ed)},{'sig':'textContent(locator)\x20→\x20string','desc':_0x4ac7b8(0x188)},{'sig':'inputValue(locator)\x20→\x20string','desc':'Current\x20input\x20value.'},{'sig':_0x4ac7b8(0x147),'desc':_0x4ac7b8(0x1b6)},{'sig':_0x4ac7b8(0x11d),'desc':'Attribute\x20value\x20(\x22\x22\x20if\x20missing).'},{'sig':_0x4ac7b8(0x170),'desc':_0x4ac7b8(0xeb)},{'sig':_0x4ac7b8(0x209),'desc':'Input\x20value\x20(alias\x20of\x20inputValue).'},{'sig':_0x4ac7b8(0x201),'desc':_0x4ac7b8(0xf3)},{'sig':_0x4ac7b8(0x132),'desc':'URL\x20of\x20the\x20active\x20page.'},{'sig':_0x4ac7b8(0xe1),'desc':_0x4ac7b8(0xe9)},{'sig':_0x4ac7b8(0x119),'desc':_0x4ac7b8(0x1b3)},{'sig':_0x4ac7b8(0x171),'desc':'Set\x20a\x20cookie\x20(options:\x20path,\x20domain,\x20expires,\x20httpOnly,\x20secure,\x20sameSite).'},{'sig':_0x4ac7b8(0x21a),'desc':'Read\x20a\x20cookie\x20value\x20(\x22\x22\x20if\x20missing).'},{'sig':_0x4ac7b8(0x169),'desc':_0x4ac7b8(0x161)},{'sig':_0x4ac7b8(0x1c4),'desc':_0x4ac7b8(0x18e)},{'sig':'exitFrame()','desc':_0x4ac7b8(0x18f)},{'sig':_0x4ac7b8(0x149),'desc':'Parameterized\x20SELECT.\x20Dialect\x20from\x20the\x20config\x20`database`\x20URL\x20(postgres/mysql/sqlite).'},{'sig':_0x4ac7b8(0x1f2),'desc':'Parameterized\x20INSERT/UPDATE/DELETE.\x20Returns\x20affected\x20row\x20count.'},{'sig':_0x4ac7b8(0xf7),'desc':'HTTP\x20call.\x20`path`\x20is\x20relative\x20—\x20base\x20is\x20the\x20config\x20`apiBaseUrl`.'},{'sig':_0x4ac7b8(0x134),'desc':_0x4ac7b8(0x12c)},{'sig':_0x4ac7b8(0x16f),'desc':_0x4ac7b8(0x1d8)},{'sig':_0x4ac7b8(0xff),'desc':_0x4ac7b8(0x10b)},{'sig':_0x4ac7b8(0x116),'desc':_0x4ac7b8(0x158)}];function nameOf(_0x16d662){var _0x4e301a=_0x4ac7b8;const _0x4d1a71=/^([A-Za-z_][A-Za-z0-9_]*)/[_0x4e301a(0x1c6)](_0x16d662);return _0x4d1a71?_0x4d1a71[0x1]:_0x16d662;}__name(nameOf,_0x4ac7b8(0x20a));var VOCAB_DOCS=new Map(ENTRIES[_0x4ac7b8(0x126)](_0x3f2f76=>[nameOf(_0x3f2f76['sig']),{'signature':_0x3f2f76[_0x4ac7b8(0x1c9)],'doc':_0x3f2f76[_0x4ac7b8(0x1f7)]}])),GROUPS=[[_0x4ac7b8(0x207),ACTION_CONTRACTS],['assertion',ASSERTION_CONTRACTS],['chain',CHAIN_CONTRACTS],[_0x4ac7b8(0x20c),ESCAPE_HATCH_CONTRACTS],[_0x4ac7b8(0x1a7),MULTI_CONTEXT_CONTRACTS],[_0x4ac7b8(0x1aa),NAVIGATION_CONTRACTS],[_0x4ac7b8(0x14a),READ_CONTRACTS],['sandbox',SANDBOX_CONTRACTS],[_0x4ac7b8(0x1f9),SELECTOR_CONTRACTS],[_0x4ac7b8(0x13f),STATE_CONTRACTS],[_0x4ac7b8(0xdf),STORAGE_CONTRACTS],['wait',WAIT_CONTRACTS]],KEYWORDS=[{'name':'step','category':_0x4ac7b8(0x182),'args':[{'label':_0x4ac7b8(0x1b8),'kind':_0x4ac7b8(0x1e4),'required':!![]}],'returns':_0x4ac7b8(0x17b),'insertText':'step(${1:\x22label\x22},\x20()\x20=>\x20{\x0a\x09$0\x0a})','doc':_0x4ac7b8(0x1d6)},{'name':'if','category':_0x4ac7b8(0x182),'args':[{'label':_0x4ac7b8(0x1ee),'kind':'boolLike','required':!![]}],'returns':_0x4ac7b8(0x17b),'insertText':_0x4ac7b8(0x164)},{'name':_0x4ac7b8(0x178),'category':_0x4ac7b8(0x182),'args':[],'returns':'void','insertText':_0x4ac7b8(0x172)},{'name':_0x4ac7b8(0xfa),'category':'keyword','args':[{'label':_0x4ac7b8(0x1ee),'kind':_0x4ac7b8(0x213),'required':!![]}],'returns':'void','insertText':'while\x20(${1:condition})\x20{\x0a\x09$0\x0a}'}];function kindLabel(_0x82412d){var _0x358754={_0x3cc37f:0x1e4},_0xf6c0aa=_0x4ac7b8;return typeof _0x82412d===_0xf6c0aa(_0x358754._0x3cc37f)?_0x82412d:'enum';}__name(kindLabel,'kindLabel');function toArg(_0x40a4df){var _0x3e8f60=_0x4ac7b8;return{'label':_0x40a4df[_0x3e8f60(0x1b8)],'kind':kindLabel(_0x40a4df[_0x3e8f60(0x154)]),'required':_0x40a4df[_0x3e8f60(0x1c3)]};}function _0x1768(){var _0x11436c=['revmrvrf','zxHWCMvZC2LVBG','y21K','yxnZzxj0vxjS','BwfW','z290BW','C2XPy2u','C3rHCNrZv2L0Aa','zw50zxjgCMfTzq','yxnZzxj0vgv4Da','uNvUigeGyMLUyxj5icHLEgvJrMLSzsWGBM8GC2HLBgWGAw50zxjWCMv0yxrPB24PlIbJD2qGzNjVBsbJB25MAwCGyhnOzwXSq3DKyc4','DMLZAxrfEhbYzxnZAw9U','lZOG','Dgv4Da','EhbHDgGGC2vSzwn0B3jZigfYzsbMCMfNAwXLiokaLcbWCMvMzxiGz2v0qNLsB2XLic8Gz2v0qNLuzxn0swqGlYbNzxrcEvrLEhq','BNrO','z2v0vxjSkcKG4OAsihn0CMLUzW','rwXLBwvUDcbPCYbOAwrKzw4GB3iGzgv0ywnOzwqU','C2HLBgWOy21KlcaUlI5HCMDZksdIHPiGEYbZDgrVDxqSihn0zgvYCIWGy29Kzsb9','yxnZzxj0vMLZAwjSzsHSB2nHDg9Ylcb7ihrPBwvVDxq/ih0P','BgvUz3rO','twf0y2GGyw4GAw5WDxqGyNKGAxrZihbSywnLAg9SzgvYlG','q2XLyxiGyw5Kihr5CguGysb2ywX1zsbPBNrVigfUigLUChv0lG','twf0y2GGyNKGDMLZAwjSzsb0zxH0ignVBNrLBNqU','mJaXodCXoeT4A2jZrq','CNvSzu11C3rHy2HLsw5eC2W','A2v5','z2v0qNLmywjLBcH0zxH0lcb7igv4ywn0pYb9kq','zhjHz0fUzerYB3aOzNjVBsWGDg8SihSGzM9Yy2u/lcb0Aw1LB3v0pYb9kq','C3rHDgu','DMfSAwrHDg9YoMrZBa','z2v0qNLbBhruzxH0','z2v0qNLuAxrSzq','DMLZDwfS','Aw5KzxG','Bg9Jt2y','zMLYC3q','AxnwAxnPyMXLkgXVy2f0B3iPiokgKIbIB29SzwfU','yxnZzxj0vhj1zq','zgjrDwvYEsHZCwWSic4UlNbHCMfTCYKG4OAsihjVD3nBxq','CMvHza','Ag92zxiOBg9JyxrVCIWGEYbMB3jJzt8SihrPBwvVDxq/ih0P','AgfZt2jMDxnJyxrLzenSyxnZ','rxHWBgLJAxqGzgvSyxKUierPC2nVDxjHz2vKiokaLcb0AguGBgLUDgvYihDHBNrZigeGyc8VihjLyxnVBJPGignVBw1LBNqUifbYzwzLCIbHigb3ywL0rM9YkMaU','yxjNCW','BNvTyMvY','C2v0tg9JywXtDg9YywDL','mZK4mdq0ohzqt3fQyW','twf0y2GGyNKGygrHDgeTDgvZDgLKyc4Gtw9ZDcbZDgfIBguG4OcuihbYzwzLCIb0AgLZlG','Bwf0y2HLCG','A2LUza','Aw5Mzxi','zg9J','yxnZzxj0sgLKzgvU','uNvUihjHDYbkuYbPBIb0AguGCgfNzsbJB250zxH0lIbmyxn0ihjLC29YDcdIGjqGChjLzMvYihr5CgvKigHLBhbLCNmUifjLDhvYBNmGsLnptI1ZzxjPywXPEMfIBguGDMfSDwvZig9UBhKU','CM9Szq','twf0y2GGyNKGCMf3ientuYbZzwXLy3rVCI4GtgfZDcbYzxnVCNqG4OcuihrOzsbSAw50zxiGD2fYBNmGB24GzgvLCc9ICML0DgXLientuY4','CMvSB2fKkhSGD2fPDfvUDgLSpYWGDgLTzw91Dd8GFsK','kcKGAxmGysbSyxn0lxjLC29YDcbLC2nHCguGAgf0y2GUienVBNnPzgvYihr5CgvKigDLDhrLCNm6igDLDef0DhjPyNv0zsaVigDLDeLUBMvYvgv4DcaVigDLDeLUChv0vMfSDwuGlYbNzxruAxrSzsaVigDLDfvYBc4','zg91yMXLq2XPy2S','z2v0vgL0Bgu','vgHLie4TDgGGBwf0y2GGkdaTAw5KzxHLzcKUieLUzgv4lw9UBhKGCMvMAw5LBwvUDcbPCYbMCMfNAwXLicHSAw50zxiGAw5MBYKU','sevbra','u3DPDgnOihrOzsbHy3rPDMuGDgfIl3bHz2uGyNKGAw5KzxGGkdaTyMfZzwqPlG','Bg9JyxrVCKnHCgfIAwXPDhK','CMvZB2X2zq','AwyGkcr7mtPJB25KAxrPB259ksb7cGKKmaP9','CNvSzvjLz2v4ugf0DgvYBG','CNvSzurPC2fTyMLNqNLjBMrLEa','D2fYBMLUzW','y29UDgvUDezYyw1LkgXVy2f0B3iP','C2v0ugfNzsHPBMrLEcK','AgfZ','BgLUDdPWyxvZzs1LEhbSAwnPDa','y2XPy2SOBg9JyxrVCIWGEYbMB3jJzt8SihrPBwvVDxq/lcbUB1DHAxrbzNrLCJ8GFsK','CgfYC2u','twf0y2GGysbMB3jTignVBNrYB2WGyNKGAxrZigfZC29JAwf0zwqGBgfIzwWU','C3rLCcHSywjLBcWGkcKGpt4GEYaUlI4GFsK','z2v0sw5UzxjuzxH0kgXVy2f0B3iPiokgKIbZDhjPBMC','C2v0q29VA2LLkg5HBwuSihzHBhvLlcbVChrPB25ZpYK','zM9YicGKEZe6Aw5PDh07icr7mJPJB25KAxrPB259oYaKEZm6C3rLCh0PihSkcsqWcN0','tgfZDcbTyxrJAc4','mJq0otGWEMvbveHO','CNvSzvbHDxnLrxHWBgLJAxq','v2fPDcbMB3iGDgHLig5LEhqGBMf2AwDHDgLVBIbLDMvUDc4','Bg9N','zM9Y','z29gB3j3yxjK','C3bSAxq','DM9Pza','Dg9Rzw5PEMu','BgLUDdPLDMfSDwf0zs1KAxnJB3vYywDLza','C3rYAw5NtgLRzq','uefuq0G','y3jLyxrLv2vIrhnSuMvNAxn0CNK','DgvZDa','A2v5D29Yza','D2fPDezVCLrLEhq','kcqWkq','zgvMAw5LuhjVCgvYDhK','D2fPDezVCG','BgLUDdPNB3rVlwnVBMnHDa','vgv4DcbJB250zw50icGIiIbPzIbUB25Lks4','z2v0qNLuzxH0','CNvSzvnLDMvYAxr5','nZG0DNvXC1zg','twf0y2GGyw4GAw1Hz2uGyNKGAxrZigbHBhrGihrLEhqU','yw55','u2nVCguGC3vIC2vXDwvUDcbJywXSCYb0BYbHBIbPzNjHBwuGkhbLCNnPC3rZihvUDgLSigv4AxrgCMfTzsKU','rxHPDcb0AguGAw5UzxjTB3n0igLMCMfTzsbZy29Wzs4','zxHWCJe','B3b0Aw9UCW','ChjLC3m','zw1PDa','C3rHDgvTzw50','Aw5PDgLHBgL6yxrPB24','DMLZAxrcBg9JAW','BM9Uzq','CMv0DxjUCW','ANncB2r5','z2v0qNLuAxrSzsH0zxH0lcb7igv4ywn0pYb9kq','z29cywnRkhSGDgLTzw91Dd8GFsK','yxjNDw1LBNrZ','Bwf0y2G','icHUBYbXDw90zxmSig5VigjYywnLCYKSihDOAwnOihrOzsbYDw50Aw1LihjLC29SDMvZigzYB20GlMvUDI8UC2vJCMv0CY4GvgHLihT7tKfnrx19igzVCM0GAxmGB25SEsbMB3iGzxHWBg9Yzv9ZDgvWihzHBhvLCY4','DMfSDwvZ','DMLZAxrtDgf0zw1LBNq','yxbPq2fSBa','ChjLC3mOBg9JyxrVCIWGA2v5lcb7igrLBgf5pYWGDgLTzw91Dd8GFsK','yM9VBa','DgvZDf8Q','C3fS','C2v0','BxvSDgKTy29UDgv4Da','BMfTzq','zMLSDgvY','BMf2AwDHDgLVBG','ignVBwjPBMf0B3jZks4GuhjLzMvYigDLDej5uM9SzsaVigDLDej5vgvZDeLKic8Gz2v0qNLuzxH0lG','zwXZzvn0yxrLBwvUDa','mtaYmZi0DM9JrwX0','BgLUDdPKzwvWlwnZCW','Dg9fBNrYEq','ugfZDguGDgv4Dc4Gu3LUDgHLDgLJlcbUB3qGysbUyxrPDMuGq2XPCgjVyxjKrxzLBNqU','ChvZAa','ywXSB3DeAxnHBwjPz0j5sw5KzxG','uMvHzcbHigXVy2fSu3rVCMfNzsbPDgvTicGIiIbPzIbTAxnZAw5Nks4','rMLYC3qGBwf0y2GU','zNjHBwu','v2HLDgHLCIb0AguGzwXLBwvUDcbPCYb2AxnPyMXLlG','D2fPDezVCLrLEhqODgv4DcWGEYb0Aw1LB3v0pYb9kq','BgfIzwW','y2HLy2S','tMf2AwDHDguGzM9YD2fYzcbPBIbOAxn0B3j5lG','z2v0qNLqBgfJzwHVBgrLCIH0zxH0lcb7igv4ywn0pYb9kq','yxnZzxj0vhj1zsHJB25KAxrPB24Sig1LC3nHz2u/kq','Dgv4Dej1AwXKzxjdB250CMfJDa','DMfSAwrHDgu','C3vWChjLC3nLza','zxzHBhvHDgvpBKXVy2f0B3i','ChjVCgvYDgLLCW','zMXVD18','CMvXDwLYzwq','zw50zxjgCMfTzsHSB2nHDg9Ykq','C2nYB2XSsw50B1zPzxCOBg9JyxrVCIK','zxHLyW','CNvSzuv2ywX1yxrLrgLZy291CMfNzwq','AM9PBG','C2LN','y29UDgvUDezYyw1L','y29SDw1U','zMXVD18Q','AxnwAxnPyMXL','EhbHDgG9','AgvSCgvYq29UDhjHy3q','Dgv4DenVBNrLBNq','z29cywnR','iIb1C2vZihT7lI4UFx0GDgvTCgXHDguGC3LUDgf4lIbjBIbHihnJzw5HCMLVlcbYzwzLCMvUy2uGysb2yxjPywjSzsbIEsbPDhmGyMfYzsbPzgvUDgLMAwvYiokaLcb3CML0zsa','y2XPy2S','C2LNBMf0DxjL','Aw5Zzxj0vgv4Da','r3jVDxaGC3rLChmGDw5KzxiGysbSywjLBgXLzcbIBg9JAYaOCMvXDwLYzwqGzM9YigrPCMvJDcbJAgLSzhjLBIbVzIb0zxn0xYOPlG','C2nYB2XSsw50B1zPzxC','uMvXDwLYzwqGyxjVDw5Kigv2zxj5igv4zwn1DgfIBguGC3rLCcbPBIbHigb0zxn0xYPGigz1BMn0Aw9UlIbGBgfIzwXGigLZihrOzsbODw1HBI1YzwfKywjSzsbPBNrLBNqGDgHLigfNzw50ihjLywrZihrVihjLCgfPCIb0AguGC3rLCc4','Dw5JAgvJAYHSB2nHDg9Ylcb7igzVCMnLpYWGDgLTzw91Dd8GFsK','Bg9JyxrVCG','CMvJzwL2zxi','y291BNqOBg9JyxrVCIKG4OAsig51BwjLCG','ue9tva','C29YDa','y2HHAw5HyMXLtg9JyxrVCG','z2v0','zhjHz0fUzerYB3a','tMf2AwDHDguGDg8GysbvuKWUigb3ywL0vw50AwXGoIaNBg9HzcCGFcaNzg9Ty29UDgvUDgXVywrLzcCGFcaNBMv0D29YA2LKBguNlIbszwXHDgL2zsbWyxrOCYbYzxnVBhzLigfNywLUC3qGygjHC2vvCMXGlG','yNLoyw1L','C3rYAw5N','DMfSAwrHDgvtB3vYy2u','z2v0q29VA2LL','Aw5Mzxjszxr1CM5lAw5K','D2fPDezVCLvYBcHWyxr0zxjUlcb7ihrPBwvVDxq/ih0P','Bw9Kzq','C2v2zxjPDhK','y2XPCgjVyxjKugfZDguOBg9JyxrVCIWGDgv4DcK','Aw5JCMvTzw50','tNvTyMvYig9Mig1HDgnOAw5NigvSzw1LBNrZlG','y29UzgL0Aw9U','yxnZzxj0vxjSkhbHDhrLCM4SihSGDgLTzw91Dd8GFsK','yM9KEq','Cgf1C2uOBxmP','zgjfEgvJkhnXBcWGlI4UCgfYyw1ZksdIHPiGBNvTyMvY','z2v0qNLmywjLBa','igzLzwrZifbSyxL3CMLNAhqNCYbIyxnLvvjmlcbZBYbWyxnZigeGCMvSyxrPDMuGCgf0AcbPBNn0zwfKiokaLcb3CML0zsbNB3rVkcCVCgf0AcCPlIbuzxn0CYb0AgvUigzVBgXVDYaTlwvUDIb3AxrOB3v0igvKAxrZlG','Aw5WDxrwywX1zq','DgfYz2v0','zgvZyW','BgLUDdPVyMz1C2nHDgvKlwnSyxnZ','C2vSzwn0B3i','z2v0qNLbBhruzxH0khrLEhqSihSGzxHHy3q/ih0P','Cgf1C2u','D2fPDezVCLvYBa','BgLUDefZDa','tMf2AwDHDguGyMfJAYbPBIbOAxn0B3j5lG','mJqWwM1evwjc','C2vSzwn0t3b0Aw9U','z2v0vgL0BguOksdIHPiGC3rYAw5N','C2vSzwn0t3b0Aw9UkgXVy2f0B3iSihzHBhvLlcb7ihrPBwvVDxq/ih0P','DgvZDf8','CMvZB2X2zunVBNrYywn0','yxr0CMLIDxrL','yxnZzxj0vMfSDwu','ywn0Aw9U','zxHPDezYyw1L','z2v0sw5WDxrwywX1zsHSB2nHDg9YksdIHPiGC3rYAw5N','BMfTzu9M','ufvu','zxnJyxbLlwHHDgnO','Bwv0Ag9K','z2v0qNLuzxn0swq','Cgf0DgvYBG','BgfZDa','odG5oti5A0ztu1z5','C3rHDgvTzw50CW','yM9VBeXPA2u','y2HLy2SOBg9JyxrVCIWGEYbMB3jJzt8SihrPBwvVDxq/ih0P','y29S','AwztDgf0zw1LBNq','CNvSzvnLBgvJDg9YuxvHBgL0Eq','BgLUDdPTDxn0ywnOzs1PBI1KC2W','CNvSzq','z2v0q29VA2LLkg5HBwuPiokgKIbZDhjPBMC','zxjYB3i','Aw52ywXPzcbYzwDLEcaV','zMLSBcHSB2nHDg9Ylcb2ywX1zsWGEYb0Aw1LB3v0pYWGBM9xywL0qwz0zxi/ih0P','z290BYG','C2v0ugfNzq','B3b0CW','yxnZzxj0vMLZAwjSzq','y2HLy2TdywXS','vw5JAgvJAYbHignOzwnRyM94lG','Dw5RBM93BG','v2fPDcb1BNrPBcb0AguGvvjmignVBNrHAw5ZigbWyxr0zxjUycaOC3vIC3rYAw5Nig1HDgnOks4','C3rVCMfNzq','Bg9JyxrVCKfJDgLVBG','C2v0tg9JywXtDg9YywDLkgTLEsWGDMfSDwuP','z2v0tgLUzq','yxnZzxj0q291BNqOBg9JyxrVCIWGzxHWzwn0zwqSihSGDgLTzw91Dd8GFsK','yNvPBgreC2XwB2nHyG','zxzHBhvHDgu','Aw5KzxHpCLrPDgXL','z2v0qNLsB2XL','DxjS','u2v0igeGBg9JywXtDg9YywDLigL0zw0U','Dw5JAgvJAW','uMvUzgvYzwqGAw5UzxiGDgv4Dc4','z29gB3j3yxjKkhSGDgLTzw91Dd8GFsK','v2fPDcb1BNrPBcbGDgv4DgaGyxbWzwfYCYbHBNL3AgvYzsbVBIb0AguGCgfNzs4','qxnZzxj0igeGyM9VBgvHBIbJB25KAxrPB24U','rwXLBwvUDcbPCYb2AxnPyMXLlG','yxnZzxj0sgLKzgvUkgXVy2f0B3iSihSGDgLTzw91Dd8GFsK','zxHWBgLJAxqGC2XLzxaG4OcuihvZzsb3ywL0rM9Yic8GD2fPDezVCLrLEhqGlYb3ywL0rM9YvxjSigLUC3rLywq','D2fPDezVCK5HDMLNyxrPB24OEYb0Aw1LB3v0pYb9kq','rg9JDw1LBNqGDgL0BguGB2yGDgHLigfJDgL2zsbWywDLlG','z2v0qNLqBgfJzwHVBgrLCG','y3jLyxrLv2vIrhnStgfUz3vHz2vtzxj2AwnL','y291BNq','yxbPq2fSBcHTzxrOB2qSihbHDgGSigjVzhK/lcbOzwfKzxjZpYKG4OAsihSGC3rHDhvZlcbIB2r5lcbOzwfKzxjZih0','yxnZzxj0q291BNq','BwvZC2fNzq','D2HPBgu','otC4nZK2r3vwuuXu','yxnZzxj0vMfSDwuOBg9JyxrVCIWGzxHWzwn0zwqSihSGDgLTzw91Dd8GFsK','BgfZDcHSB2nHDg9Ykq','z2v0q29SDw1U','Bg9Nkc4UlMfYz3mP','zMLYC3qOBg9JyxrVCIK','sw5WDxqNCYb2ywX1zsbLCxvHBhmGygv4CgvJDgvKyc4','C3rYAw5Nt3joDw1IzxjmAwTL','CNvSzuDVDg9dB25Jyxq','DMfSDwu','zML4zwq','mtKWD0TIBgTo','twf0y2GGyNKGyhrPDgXLycbHDhrYAwj1DguU','t1busu9ouW','zgjfEgvJ','C291CMnL','v3jPDguGDg8GDgHLihj1BIb0CMfJzs4','zMLSDgvYkgXVy2f0B3iSihSGAgfZvgv4Dd8SigHHC05VDfrLEhq/lcbOyxm/lcbOyxnoB3q/ih0P','BgLUzq','BgLUDdPYzwDLEc1PBNzHBgLK','AgvSCgvYtMfTzxm','yxntDhjPBMC','zgjrDwvYEq','z2v0sw5UzxjuzxH0','yxnZzxj0vgv4DcHSB2nHDg9YlcbLEhbLy3rLzcWGEYbLEgfJDd8SihrPBwvVDxq/ih0P','z2v0tg9JywXtDg9YywDL','z290BYH1CMWSihSGD2fPDfvUDgLSpYWGDgLTzw91Dd8GFsK','zxzHBhvHDguOANmSic4UlMfYz3mPiokgKIbHBNK','yNjPDhrSzsbZzwXLy3rVCIdIGjqGzgvLCcbdu1mGy2HHAw4Gka','C2HLBgW','z2v0tg9JywXtDg9YywDLkgTLEsKG4OAsihn0CMLUzW','Bg9JyxrVCKXPA2u','B3v0','s2vLCcbTyxrJAgvZigj5ignVBNrHAw5Lzcb0zxH0ig9YigeGBMvZDgvKignOAwXKigXVy2f0B3iU','z2v0qxr0CMLIDxrLkgXVy2f0B3iSig5HBwuPiokgKIbZDhjPBMC','DMfSAwrHDg9YoNvUA25VD24TzNvUy3rPB24','rhjHzYbVBMuGzwXLBwvUDcbVBNrVigfUB3rOzxiUifvZzxmGC3LUDgHLDgLJig1VDxnLigv2zw50CYaOBM90ig5HDgL2zsbive1mnsbeCMfNrxzLBNqPlG','v2fPDcbMB3iGyw4GzwXLBwvUDcbZDgf0ztOGj2f0DgfJAgvKjYb8icD2AxnPyMXLjYb8icDOAwrKzw4NlG','q2HLy2SGysbJAgvJA2jVEc9YywrPBY4'];_0x1768=function(){return _0x11436c;};return _0x1768();}__name(toArg,'toArg');function returnsLabel(_0x53553b){var _0x3c00f1={_0x6b0185:0x105,_0x1c55b4:0xdd},_0x254699=_0x4ac7b8;return _0x53553b[_0x254699(0x198)]['mode']===_0x254699(_0x3c00f1._0x6b0185)?_0x53553b['returns']['kind']:_0x254699(_0x3c00f1._0x1c55b4);}__name(returnsLabel,'returnsLabel');function insertText(_0x397584){var _0x48b9a5={_0x4dc5f5:0x1d4,_0x5edb72:0x126},_0x291565=_0x4ac7b8;const _0x24da54=_0x397584[_0x291565(_0x48b9a5._0x4dc5f5)][_0x291565(0x14e)][_0x291565(0x1a9)](_0x343892=>_0x343892[_0x291565(0x1c3)]);if(_0x24da54[_0x291565(0x136)]===0x0)return _0x397584['name']+_0x291565(0x184);const _0x378ec7=_0x24da54[_0x291565(_0x48b9a5._0x5edb72)]((_0xbef72d,_0x25e669)=>'${'+(_0x25e669+0x1)+':'+_0xbef72d['label']+'}')[_0x291565(0x1c8)](',\x20');return _0x397584[_0x291565(0x1a8)]+'('+_0x378ec7+')';}__name(insertText,_0x4ac7b8(0x1d5));function toEntry(_0x18a0da,_0x34b4ba){var _0x10e246={_0x5054a6:0x1a8,_0x587dac:0x14e,_0x3d6ab5:0x126,_0x31c442:0x156,_0x464a91:0x162},_0x50e620=_0x4ac7b8;const _0xbd7853=VOCAB_DOCS[_0x50e620(0x1e0)](_0x34b4ba[_0x50e620(_0x10e246._0x5054a6)]);return{'name':_0x34b4ba[_0x50e620(_0x10e246._0x5054a6)],'category':_0x18a0da,'args':_0x34b4ba[_0x50e620(0x1d4)][_0x50e620(_0x10e246._0x587dac)][_0x50e620(_0x10e246._0x3d6ab5)](toArg),'returns':returnsLabel(_0x34b4ba),'insertText':insertText(_0x34b4ba),'signature':_0xbd7853?.[_0x50e620(0x1d4)],'doc':_0xbd7853?.[_0x50e620(_0x10e246._0x31c442)],'locatorCapability':_0x34b4ba[_0x50e620(_0x10e246._0x464a91)]};}__name(toEntry,_0x4ac7b8(0x1af));function buildDslVocab(){var _0x26eacd={_0x4fa4ed:0x1b1,_0x3da1b4:0x156},_0x339bb5=_0x4ac7b8;const _0x535ba2=[];for(const [_0x4ef1a8,_0x28e8f7]of GROUPS){for(const _0x135bcf of _0x28e8f7)_0x535ba2[_0x339bb5(_0x26eacd._0x4fa4ed)](toEntry(_0x4ef1a8,_0x135bcf));}for(const _0x328461 of KEYWORDS){const _0x25cc37=VOCAB_DOCS[_0x339bb5(0x1e0)](_0x328461[_0x339bb5(0x1a8)]);_0x535ba2[_0x339bb5(0x1b1)](_0x25cc37?{..._0x328461,'signature':_0x25cc37['signature'],'doc':_0x25cc37[_0x339bb5(_0x26eacd._0x3da1b4)]}:_0x328461);}return _0x535ba2;}function _0x4767(_0x32452e,_0x25c4ee){_0x32452e=_0x32452e-0xdc;var _0x176840=_0x1768();var _0x47672c=_0x176840[_0x32452e];if(_0x4767['BGojWr']===undefined){var _0x17115c=function(_0x520108){var _0x482635='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x4de840='',_0x207bf6='';for(var _0x4c2dba=0x0,_0x1ad925,_0x1886a9,_0x437f17=0x0;_0x1886a9=_0x520108['charAt'](_0x437f17++);~_0x1886a9&&(_0x1ad925=_0x4c2dba%0x4?_0x1ad925*0x40+_0x1886a9:_0x1886a9,_0x4c2dba++%0x4)?_0x4de840+=String['fromCharCode'](0xff&_0x1ad925>>(-0x2*_0x4c2dba&0x6)):0x0){_0x1886a9=_0x482635['indexOf'](_0x1886a9);}for(var _0xda8532=0x0,_0x5bc970=_0x4de840['length'];_0xda8532<_0x5bc970;_0xda8532++){_0x207bf6+='%'+('00'+_0x4de840['charCodeAt'](_0xda8532)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x207bf6);};_0x4767['TfJthP']=_0x17115c,_0x4767['XdLjsQ']={},_0x4767['BGojWr']=!![];}var _0x342263=_0x176840[0x0],_0x3d6baf=_0x32452e+_0x342263,_0x256b75=_0x4767['XdLjsQ'][_0x3d6baf];return!_0x256b75?(_0x47672c=_0x4767['TfJthP'](_0x47672c),_0x4767['XdLjsQ'][_0x3d6baf]=_0x47672c):_0x47672c=_0x256b75,_0x47672c;}__name(buildDslVocab,_0x4ac7b8(0xe4));function createWebDslLanguageService(_0x189da0){let _0x43dee1=null;return{'getVocab'(){return _0x43dee1??=buildDslVocab();},'validate'(_0x6caddb,_0x5ce3dd){var _0x564a62=_0x4767;return validateSource(_0x6caddb,{'helperNames':_0x5ce3dd?.[_0x564a62(0x10f)],'ruleSeverity':_0x189da0?.[_0x564a62(0x18a)],'suppressed':_0x189da0?.[_0x564a62(0x1bf)]});}};}__name(createWebDslLanguageService,_0x4ac7b8(0xf5));var webDslLanguageService=createWebDslLanguageService(),web_dsl_language_service_default=webDslLanguageService;export{createWebDslLanguageService,web_dsl_language_service_default as default,webDslLanguageService};
@@ -1,3 +1,5 @@
1
+ import { PickerMode } from '@unotest/protocol';
2
+
1
3
  /**
2
4
  * Discriminator for SemanticRegion. Fixed set of bucket kinds that downstream
3
5
  * consumers (projection, assertion-suggester, etc.) can filter by.
@@ -303,6 +305,48 @@ interface AriaTree {
303
305
 
304
306
  declare function ariaSnapshotAlgorithm(): AriaTree;
305
307
 
308
+ /** What the picked gesture maps to. In capture-only the mode dictates it
309
+ * (`locator`/`assertText`/`assertVisible`); in execute the gesture does
310
+ * (`click`/`fill`/`press`/`selectOption`/`check`/`uncheck`). The node side
311
+ * renders each to a DSL line via `buildActionSnippet`. */
312
+ type RecordedAction = "locator" | "assertText" | "assertVisible" | "click" | "fill" | "press" | "selectOption" | "check" | "uncheck";
313
+ /** One captured pick. `text` is normalized textContent (for `assertText`);
314
+ * `value` is the typed/selected value (`fill`/`selectOption`); `key` is the
315
+ * pressed key (`press`). `placement` tells the viewer where to drop it. */
316
+ interface PickedRef {
317
+ ref: string;
318
+ mode: PickerMode;
319
+ action: RecordedAction;
320
+ text: string;
321
+ value?: string;
322
+ key?: string;
323
+ placement: "cursor" | "append";
324
+ }
325
+ /** Result of a drain. `alive` is false once the overlay's in-page state is
326
+ * gone (the document was replaced by a reload / SPA route change) — the
327
+ * signal the node side uses to re-stamp refs and re-inject (self-heal). */
328
+ interface DrainResult {
329
+ alive: boolean;
330
+ picks: PickedRef[];
331
+ }
332
+ /** Operations the injected overlay understands. Carried into the page as
333
+ * JSON; the algorithm dispatches on `kind`. `execute` toggles capture-only
334
+ * vs. the Playwright-style action recorder. */
335
+ type PickerOp = {
336
+ kind: "install";
337
+ mode: PickerMode;
338
+ execute: boolean;
339
+ } | {
340
+ kind: "setMode";
341
+ mode: PickerMode;
342
+ execute: boolean;
343
+ } | {
344
+ kind: "drain";
345
+ } | {
346
+ kind: "uninstall";
347
+ };
348
+ declare function pickerOverlayAlgorithm(op: PickerOp): DrainResult | void;
349
+
306
350
  declare function serializeRuntimeDom(): string;
307
351
 
308
352
  interface FindElementMatch {
@@ -392,4 +436,4 @@ declare function readOuterHtml(el: Element): string;
392
436
  * tag + ARIA, accname approximated). Returns a structured raw hint. */
393
437
  declare function inspectElementRaw(el: Element): ElementHintRaw;
394
438
 
395
- export { type ElementHintRaw, ariaSnapshotAlgorithm, findElementAlgorithm, inspectElementRaw, outlineAlgorithm, pasteValue, readOuterHtml, semanticDomAlgorithm, serializeRuntimeDom };
439
+ export { type ElementHintRaw, ariaSnapshotAlgorithm, findElementAlgorithm, inspectElementRaw, outlineAlgorithm, pasteValue, pickerOverlayAlgorithm, readOuterHtml, semanticDomAlgorithm, serializeRuntimeDom };
@@ -2208,6 +2208,8 @@ function outlineAlgorithm(assignRefs) {
2208
2208
  if (el.getAttribute("data-unotest-ref-kind") !== "i") continue;
2209
2209
  el.removeAttribute("data-unotest-ref");
2210
2210
  el.removeAttribute("data-unotest-ref-kind");
2211
+ el.removeAttribute("data-unotest-ref-role");
2212
+ el.removeAttribute("data-unotest-ref-name");
2211
2213
  }
2212
2214
  html.setAttribute("data-unotest-ref-counter", String(refCounter));
2213
2215
  }
@@ -2227,9 +2229,14 @@ function outlineAlgorithm(assignRefs) {
2227
2229
  const h = shortenedHref(el.getAttribute("href"));
2228
2230
  if (h) href = h;
2229
2231
  }
2232
+ const role = computeRole(el) ?? (tag === "tr" ? "row" : tag === "li" ? "listitem" : null);
2233
+ if (assignRefs && refByElement.has(el)) {
2234
+ el.setAttribute("data-unotest-ref-role", role ?? tag);
2235
+ el.setAttribute("data-unotest-ref-name", name);
2236
+ }
2230
2237
  entries.push({
2231
2238
  el,
2232
- role: computeRole(el) ?? (tag === "tr" ? "row" : tag === "li" ? "listitem" : null),
2239
+ role,
2233
2240
  name,
2234
2241
  testId: testIdOf(el),
2235
2242
  dataId: stableDataAttr(el),
@@ -2825,8 +2832,10 @@ function ariaSnapshotAlgorithm() {
2825
2832
  return false;
2826
2833
  }
2827
2834
  __name(shouldInclude, "shouldInclude");
2828
- function makeRef(el, role, refPrefix) {
2835
+ function makeRef(el, role, name, refPrefix) {
2829
2836
  const localRef = ensureRef(el, role);
2837
+ el.setAttribute("data-unotest-ref-role", role);
2838
+ el.setAttribute("data-unotest-ref-name", name);
2830
2839
  totalRefs += 1;
2831
2840
  return refPrefix ? `${refPrefix}${localRef}` : localRef;
2832
2841
  }
@@ -2889,7 +2898,7 @@ function ariaSnapshotAlgorithm() {
2889
2898
  const tag = el.tagName.toLowerCase();
2890
2899
  if (tag === "iframe") {
2891
2900
  const name2 = accname(el);
2892
- const ref = makeRef(el, "iframe", refPrefix);
2901
+ const ref = makeRef(el, "iframe", name2, refPrefix);
2893
2902
  const node2 = { role: "iframe", name: name2, ref, children: [] };
2894
2903
  let inner = null;
2895
2904
  try {
@@ -2909,7 +2918,7 @@ function ariaSnapshotAlgorithm() {
2909
2918
  const role = computeRole(el);
2910
2919
  const name = accname(el);
2911
2920
  const node = { role, name, children: [] };
2912
- node.ref = makeRef(el, role, refPrefix);
2921
+ node.ref = makeRef(el, role, name, refPrefix);
2913
2922
  if (role === "link") {
2914
2923
  const url = normaliseHref(
2915
2924
  el.getAttribute("href")
@@ -3013,6 +3022,245 @@ function ariaSnapshotAlgorithm() {
3013
3022
  }
3014
3023
  __name(ariaSnapshotAlgorithm, "ariaSnapshotAlgorithm");
3015
3024
 
3025
+ // src/inspection/picker-overlay.ts
3026
+ import { pickerOverlayAlgorithm as pickerOverlayInjectable } from "@unotest/web/internal/page-inject";
3027
+ function pickerOverlayAlgorithm(op) {
3028
+ const REF_ATTR = "data-unotest-ref";
3029
+ const KIND_ATTR = "data-unotest-ref-kind";
3030
+ const w = window;
3031
+ if (op.kind === "drain") {
3032
+ const s = w.__unotestPicker;
3033
+ if (!s) return { alive: false, picks: [] };
3034
+ const out = s.picks;
3035
+ s.picks = [];
3036
+ return { alive: true, picks: out };
3037
+ }
3038
+ if (op.kind === "setMode") {
3039
+ if (w.__unotestPicker) {
3040
+ w.__unotestPicker.mode = op.mode;
3041
+ w.__unotestPicker.execute = op.execute;
3042
+ }
3043
+ return;
3044
+ }
3045
+ if (op.kind === "uninstall") {
3046
+ const s = w.__unotestPicker;
3047
+ if (!s) return;
3048
+ document.removeEventListener("pointermove", s.onMove, true);
3049
+ document.removeEventListener("mousedown", s.onDown, true);
3050
+ document.removeEventListener("mouseup", s.onUp, true);
3051
+ document.removeEventListener("click", s.onClick, true);
3052
+ document.removeEventListener("input", s.onInput, true);
3053
+ document.removeEventListener("change", s.onChange, true);
3054
+ document.removeEventListener("keydown", s.onKeydown, true);
3055
+ document.removeEventListener("scroll", s.onScroll, true);
3056
+ s.box.remove();
3057
+ s.label.remove();
3058
+ delete w.__unotestPicker;
3059
+ return;
3060
+ }
3061
+ if (w.__unotestPicker) {
3062
+ w.__unotestPicker.mode = op.mode;
3063
+ w.__unotestPicker.execute = op.execute;
3064
+ return;
3065
+ }
3066
+ const box = document.createElement("div");
3067
+ box.style.cssText = "position:fixed;z-index:2147483646;pointer-events:none;border:2px solid #6366f1;background:rgba(99,102,241,0.15);border-radius:3px;display:none;box-sizing:border-box;";
3068
+ const label = document.createElement("div");
3069
+ label.style.cssText = "position:fixed;z-index:2147483647;pointer-events:none;background:#6366f1;color:#fff;font:12px ui-monospace,SFMono-Regular,Menlo,monospace;padding:2px 6px;border-radius:3px;display:none;white-space:nowrap;max-width:90vw;overflow:hidden;text-overflow:ellipsis;";
3070
+ document.documentElement.appendChild(box);
3071
+ document.documentElement.appendChild(label);
3072
+ const state = {
3073
+ mode: op.mode,
3074
+ execute: op.execute,
3075
+ picks: [],
3076
+ box,
3077
+ label,
3078
+ current: null,
3079
+ pendingFill: null,
3080
+ onMove: /* @__PURE__ */ __name(() => {
3081
+ }, "onMove"),
3082
+ onDown: /* @__PURE__ */ __name(() => {
3083
+ }, "onDown"),
3084
+ onUp: /* @__PURE__ */ __name(() => {
3085
+ }, "onUp"),
3086
+ onClick: /* @__PURE__ */ __name(() => {
3087
+ }, "onClick"),
3088
+ onInput: /* @__PURE__ */ __name(() => {
3089
+ }, "onInput"),
3090
+ onChange: /* @__PURE__ */ __name(() => {
3091
+ }, "onChange"),
3092
+ onKeydown: /* @__PURE__ */ __name(() => {
3093
+ }, "onKeydown"),
3094
+ onScroll: /* @__PURE__ */ __name(() => {
3095
+ }, "onScroll")
3096
+ };
3097
+ const norm = /* @__PURE__ */ __name((s) => (s ?? "").replace(/\s+/g, " ").trim(), "norm");
3098
+ const targetFrom = /* @__PURE__ */ __name((el) => {
3099
+ if (!el) return null;
3100
+ const sel = state.mode === "locator" ? `[${KIND_ATTR}="i"]` : `[${REF_ATTR}]`;
3101
+ return el.closest(sel);
3102
+ }, "targetFrom");
3103
+ const refOf = /* @__PURE__ */ __name((el) => el instanceof Element ? el.closest(`[${REF_ATTR}]`) : null, "refOf");
3104
+ const push = /* @__PURE__ */ __name((node, action, extra) => {
3105
+ const ref = node.getAttribute(REF_ATTR);
3106
+ if (!ref) return;
3107
+ state.picks.push({
3108
+ ref,
3109
+ mode: state.mode,
3110
+ action,
3111
+ text: norm(node.textContent).slice(0, 200),
3112
+ placement: extra.placement,
3113
+ ...extra.value !== void 0 ? { value: extra.value } : {},
3114
+ ...extra.key !== void 0 ? { key: extra.key } : {}
3115
+ });
3116
+ }, "push");
3117
+ const commitFill = /* @__PURE__ */ __name(() => {
3118
+ const node = state.pendingFill;
3119
+ state.pendingFill = null;
3120
+ if (!node) return;
3121
+ const value = node.value ?? "";
3122
+ push(node, "fill", { placement: "append", value });
3123
+ }, "commitFill");
3124
+ const describe = /* @__PURE__ */ __name((node) => {
3125
+ const role = node.getAttribute(`${REF_ATTR}-role`) ?? node.tagName.toLowerCase();
3126
+ const name = node.getAttribute(`${REF_ATTR}-name`) ?? "";
3127
+ return name ? `${role} "${name}"` : role;
3128
+ }, "describe");
3129
+ const showHighlight = /* @__PURE__ */ __name((node) => {
3130
+ const r = node.getBoundingClientRect();
3131
+ box.style.left = `${r.left}px`;
3132
+ box.style.top = `${r.top}px`;
3133
+ box.style.width = `${r.width}px`;
3134
+ box.style.height = `${r.height}px`;
3135
+ box.style.display = "block";
3136
+ label.textContent = describe(node);
3137
+ label.style.left = `${r.left}px`;
3138
+ label.style.top = `${r.top - 22 < 0 ? r.bottom + 2 : r.top - 22}px`;
3139
+ label.style.display = "block";
3140
+ }, "showHighlight");
3141
+ const clearHighlight = /* @__PURE__ */ __name(() => {
3142
+ box.style.display = "none";
3143
+ label.style.display = "none";
3144
+ state.current = null;
3145
+ }, "clearHighlight");
3146
+ state.onMove = (e) => {
3147
+ if (!e.isTrusted) return;
3148
+ const node = targetFrom(document.elementFromPoint(e.clientX, e.clientY));
3149
+ if (!node) {
3150
+ clearHighlight();
3151
+ return;
3152
+ }
3153
+ state.current = node;
3154
+ showHighlight(node);
3155
+ };
3156
+ const overTarget = /* @__PURE__ */ __name((e) => targetFrom(document.elementFromPoint(e.clientX, e.clientY)), "overTarget");
3157
+ const swallow = /* @__PURE__ */ __name((e) => {
3158
+ e.preventDefault();
3159
+ e.stopPropagation();
3160
+ e.stopImmediatePropagation();
3161
+ }, "swallow");
3162
+ const captureClick = /* @__PURE__ */ __name(() => state.mode !== "locator" || !state.execute, "captureClick");
3163
+ state.onDown = (e) => {
3164
+ if (e.isTrusted && captureClick() && overTarget(e)) swallow(e);
3165
+ };
3166
+ state.onUp = (e) => {
3167
+ if (e.isTrusted && captureClick() && overTarget(e)) swallow(e);
3168
+ };
3169
+ state.onClick = (e) => {
3170
+ if (!e.isTrusted) return;
3171
+ const node = overTarget(e);
3172
+ if (!node) return;
3173
+ if (captureClick()) swallow(e);
3174
+ if (state.mode === "text") {
3175
+ push(node, "assertText", { placement: "cursor" });
3176
+ return;
3177
+ }
3178
+ if (state.mode === "visibility") {
3179
+ push(node, "assertVisible", { placement: "cursor" });
3180
+ return;
3181
+ }
3182
+ if (!state.execute) {
3183
+ push(node, "locator", { placement: "cursor" });
3184
+ return;
3185
+ }
3186
+ const tag = node.tagName.toLowerCase();
3187
+ const type = (node.getAttribute("type") ?? "").toLowerCase();
3188
+ if (tag === "input" && (type === "checkbox" || type === "radio")) {
3189
+ push(node, node.checked ? "check" : "uncheck", {
3190
+ placement: "append"
3191
+ });
3192
+ } else {
3193
+ push(node, "click", { placement: "append" });
3194
+ }
3195
+ };
3196
+ const NON_TEXT = [
3197
+ "checkbox",
3198
+ "radio",
3199
+ "button",
3200
+ "submit",
3201
+ "reset",
3202
+ "file",
3203
+ "range",
3204
+ "color",
3205
+ "image",
3206
+ "hidden"
3207
+ ];
3208
+ const isTextEntry = /* @__PURE__ */ __name((el) => {
3209
+ if (!(el instanceof HTMLElement)) return false;
3210
+ if (el.isContentEditable) return true;
3211
+ const tag = el.tagName.toLowerCase();
3212
+ if (tag === "textarea") return true;
3213
+ if (tag !== "input") return false;
3214
+ return NON_TEXT.indexOf((el.getAttribute("type") ?? "text").toLowerCase()) < 0;
3215
+ }, "isTextEntry");
3216
+ state.onInput = (e) => {
3217
+ if (!e.isTrusted || !state.execute) return;
3218
+ if (!isTextEntry(e.target)) return;
3219
+ const node = refOf(e.target);
3220
+ if (node) state.pendingFill = node;
3221
+ };
3222
+ state.onChange = (e) => {
3223
+ if (!e.isTrusted || !state.execute) return;
3224
+ const node = refOf(e.target);
3225
+ if (!node) return;
3226
+ if (node.tagName.toLowerCase() === "select") {
3227
+ state.pendingFill = null;
3228
+ push(node, "selectOption", {
3229
+ placement: "append",
3230
+ value: node.value
3231
+ });
3232
+ return;
3233
+ }
3234
+ if (state.pendingFill === node) commitFill();
3235
+ };
3236
+ state.onKeydown = (e) => {
3237
+ if (!e.isTrusted || !state.execute) return;
3238
+ const key = e.key;
3239
+ if (key === "Enter" && state.pendingFill) commitFill();
3240
+ const special = key === "Enter" || key === "Escape" || key === "Tab" || key === "Backspace" || key === "Delete" || key === "Home" || key === "End" || key === "PageUp" || key === "PageDown" || key.indexOf("Arrow") === 0;
3241
+ const hasMod = e.ctrlKey || e.metaKey || e.altKey;
3242
+ if (!special && !hasMod) return;
3243
+ const mods = (e.ctrlKey ? "Control+" : "") + (e.metaKey ? "Meta+" : "") + (e.altKey ? "Alt+" : "") + (e.shiftKey && key.length > 1 ? "Shift+" : "");
3244
+ const node = refOf(document.activeElement);
3245
+ if (node) push(node, "press", { placement: "append", key: mods + key });
3246
+ };
3247
+ state.onScroll = (e) => {
3248
+ if (!e.isTrusted) return;
3249
+ if (state.current && state.current.isConnected) showHighlight(state.current);
3250
+ else clearHighlight();
3251
+ };
3252
+ document.addEventListener("pointermove", state.onMove, true);
3253
+ document.addEventListener("mousedown", state.onDown, true);
3254
+ document.addEventListener("mouseup", state.onUp, true);
3255
+ document.addEventListener("click", state.onClick, true);
3256
+ document.addEventListener("input", state.onInput, true);
3257
+ document.addEventListener("change", state.onChange, true);
3258
+ document.addEventListener("keydown", state.onKeydown, true);
3259
+ document.addEventListener("scroll", state.onScroll, true);
3260
+ w.__unotestPicker = state;
3261
+ }
3262
+ __name(pickerOverlayAlgorithm, "pickerOverlayAlgorithm");
3263
+
3016
3264
  // src/inspection/full-html-capture.ts
3017
3265
  import { serializeRuntimeDom as serializeRuntimeDomInjectable } from "@unotest/web/internal/page-inject";
3018
3266
  function serializeRuntimeDom() {
@@ -3526,6 +3774,7 @@ export {
3526
3774
  inspectElementRaw,
3527
3775
  outlineAlgorithm,
3528
3776
  pasteValue,
3777
+ pickerOverlayAlgorithm,
3529
3778
  readOuterHtml,
3530
3779
  semanticDomAlgorithm,
3531
3780
  serializeRuntimeDom
@@ -73,6 +73,11 @@ interface LaunchOptions {
73
73
  headless?: boolean;
74
74
  /** Slow each operation by N ms — for dev debugging. Default: 0. */
75
75
  slowMo?: number;
76
+ /** Launch as a Playwright server (`launchServer`) so a second process can
77
+ * `connect()` to the SAME browser — collaborative debug sessions (human +
78
+ * agent share one browser). Exposes `wsEndpoint()` after launch. Default:
79
+ * false (normal in-process launch). */
80
+ share?: boolean;
76
81
  }
77
82
  interface Viewport {
78
83
  width: number;
@@ -211,6 +216,33 @@ interface WebDriver {
211
216
  * `finally` blocks).
212
217
  */
213
218
  close(): Promise<void>;
219
+ /**
220
+ * Collaborative debug (Slice 1). `wsEndpoint()` returns the Playwright
221
+ * `connect()` endpoint when launched in share mode (else undefined);
222
+ * `connectShared()` attaches to a browser another process owns; after it,
223
+ * `attachExisting()` wraps that browser's live context as a DriverContext.
224
+ * Drivers that don't support sharing throw from connect/attach.
225
+ */
226
+ wsEndpoint(): string | undefined;
227
+ connectShared(wsEndpoint: string, browser: LaunchOptions["browser"]): Promise<void>;
228
+ attachExisting(): DriverContext;
229
+ }
230
+ /** One captured network request/response, recorded only under
231
+ * `UNOTEST_NETWORK`. `status`/`ok` come from the response; `failureText`
232
+ * is set instead when the request failed (DNS, refused, aborted). */
233
+ interface NetworkEntry {
234
+ method: string;
235
+ url: string;
236
+ resourceType: string;
237
+ status?: number;
238
+ ok?: boolean;
239
+ failureText?: string;
240
+ /** Response body size from `content-length` (bytes); absent for cached /
241
+ * chunked responses. */
242
+ sizeBytes?: number;
243
+ /** Total request→response-end time (ms), from Playwright request timing. */
244
+ durationMs?: number;
245
+ timestamp: string;
214
246
  }
215
247
  interface DriverContext {
216
248
  /** Currently-open tabs/windows in this context. Index 0 = first opened. */
@@ -270,6 +302,13 @@ interface DriverContext {
270
302
  text: string;
271
303
  timestamp: string;
272
304
  }>;
305
+ /**
306
+ * Snapshot of network request/response entries captured since context
307
+ * creation, oldest first. Populated only when `UNOTEST_NETWORK` is on (else
308
+ * empty — zero overhead). Used by failure-bundle capture to write
309
+ * `network.json` for the viewer's Network tab.
310
+ */
311
+ networkEntries(): ReadonlyArray<NetworkEntry>;
273
312
  /** Close all pages in this context. Idempotent. */
274
313
  close(): Promise<void>;
275
314
  }
@@ -404,4 +443,4 @@ interface AncestorHint {
404
443
  className?: string;
405
444
  }
406
445
 
407
- export { type ActionTimeout as A, type ContextOptions as C, type DriverContext as D, type ElementHint as E, type FillOptions as F, type GotoOptions as G, type HoverOptions as H, type LaunchOptions as L, type NavigationOptions as N, type PressOptions as P, type ReloadOptions as R, type ScreenshotOptions as S, type Viewport as V, type WebDriver as W, type CheckOptions as a, type ClickOptions as b, type CookieOptions as c, type DriverPage as d, type SelectOptions as e, type WaitOptions as f, type WaitState as g, type LocatorValue as h, type LocatorStep as i, appendStep as j, describeLocator as k, isLocatorValue as l, rootedAt as r };
446
+ export { type ActionTimeout as A, type ContextOptions as C, type DriverContext as D, type ElementHint as E, type FillOptions as F, type GotoOptions as G, type HoverOptions as H, type LaunchOptions as L, type NetworkEntry as N, type PressOptions as P, type ReloadOptions as R, type ScreenshotOptions as S, type Viewport as V, type WebDriver as W, type CheckOptions as a, type ClickOptions as b, type CookieOptions as c, type DriverPage as d, type NavigationOptions as e, type SelectOptions as f, type WaitOptions as g, type WaitState as h, type LocatorValue as i, type LocatorStep as j, appendStep as k, describeLocator as l, isLocatorValue as m, rootedAt as r };
@@ -18,4 +18,4 @@ interface LintOptions {
18
18
  }
19
19
  declare function lintAst(ast: BlockStatement, opts?: LintOptions): LintDiagnostic[];
20
20
 
21
- export { type LintDiagnostic as L, type LintOptions as a, type LintSeverity as b, lintAst as l };
21
+ export { type LintDiagnostic as L, type LintSeverity as a, type LintOptions as b, lintAst as l };