@vforsh/argus-watcher 0.1.2 → 0.1.4
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.
- package/README.md +67 -14
- package/dist/.tsbuildinfo +1 -1
- package/dist/artifacts.d.ts +13 -0
- package/dist/artifacts.d.ts.map +1 -0
- package/dist/artifacts.js +27 -0
- package/dist/artifacts.js.map +1 -0
- package/dist/buffer/LogBuffer.d.ts +8 -3
- package/dist/buffer/LogBuffer.d.ts.map +1 -1
- package/dist/buffer/LogBuffer.js +9 -1
- package/dist/buffer/LogBuffer.js.map +1 -1
- package/dist/buffer/NetBuffer.d.ts +29 -0
- package/dist/buffer/NetBuffer.d.ts.map +1 -0
- package/dist/buffer/NetBuffer.js +85 -0
- package/dist/buffer/NetBuffer.js.map +1 -0
- package/dist/cdp/accessibility.d.ts +18 -0
- package/dist/cdp/accessibility.d.ts.map +1 -0
- package/dist/cdp/accessibility.js +300 -0
- package/dist/cdp/accessibility.js.map +1 -0
- package/dist/cdp/connection.d.ts +39 -0
- package/dist/cdp/connection.d.ts.map +1 -0
- package/dist/cdp/connection.js +131 -0
- package/dist/cdp/connection.js.map +1 -0
- package/dist/cdp/dom/fill.d.ts +22 -0
- package/dist/cdp/dom/fill.d.ts.map +1 -0
- package/dist/cdp/dom/fill.js +59 -0
- package/dist/cdp/dom/fill.js.map +1 -0
- package/dist/cdp/dom/info.d.ts +14 -0
- package/dist/cdp/dom/info.d.ts.map +1 -0
- package/dist/cdp/dom/info.js +52 -0
- package/dist/cdp/dom/info.js.map +1 -0
- package/dist/cdp/dom/insert.d.ts +19 -0
- package/dist/cdp/dom/insert.d.ts.map +1 -0
- package/dist/cdp/dom/insert.js +30 -0
- package/dist/cdp/dom/insert.js.map +1 -0
- package/dist/cdp/dom/modify.d.ts +50 -0
- package/dist/cdp/dom/modify.d.ts.map +1 -0
- package/dist/cdp/dom/modify.js +100 -0
- package/dist/cdp/dom/modify.js.map +1 -0
- package/dist/cdp/dom/remove.d.ts +17 -0
- package/dist/cdp/dom/remove.d.ts.map +1 -0
- package/dist/cdp/dom/remove.js +27 -0
- package/dist/cdp/dom/remove.js.map +1 -0
- package/dist/cdp/dom/selector.d.ts +19 -0
- package/dist/cdp/dom/selector.d.ts.map +1 -0
- package/dist/cdp/dom/selector.js +86 -0
- package/dist/cdp/dom/selector.js.map +1 -0
- package/dist/cdp/dom/setFile.d.ts +21 -0
- package/dist/cdp/dom/setFile.d.ts.map +1 -0
- package/dist/cdp/dom/setFile.js +25 -0
- package/dist/cdp/dom/setFile.js.map +1 -0
- package/dist/cdp/dom/submit.d.ts +15 -0
- package/dist/cdp/dom/submit.d.ts.map +1 -0
- package/dist/cdp/dom/submit.js +130 -0
- package/dist/cdp/dom/submit.js.map +1 -0
- package/dist/cdp/dom/tree.d.ts +16 -0
- package/dist/cdp/dom/tree.d.ts.map +1 -0
- package/dist/cdp/dom/tree.js +100 -0
- package/dist/cdp/dom/tree.js.map +1 -0
- package/dist/cdp/dom/types.d.ts +15 -0
- package/dist/cdp/dom/types.d.ts.map +1 -0
- package/dist/cdp/dom/types.js +2 -0
- package/dist/cdp/dom/types.js.map +1 -0
- package/dist/cdp/dom.d.ts +15 -0
- package/dist/cdp/dom.d.ts.map +1 -0
- package/dist/cdp/dom.js +9 -0
- package/dist/cdp/dom.js.map +1 -0
- package/dist/cdp/editor.d.ts +23 -0
- package/dist/cdp/editor.d.ts.map +1 -0
- package/dist/cdp/editor.js +266 -0
- package/dist/cdp/editor.js.map +1 -0
- package/dist/cdp/emulation.d.ts +16 -0
- package/dist/cdp/emulation.d.ts.map +1 -0
- package/dist/cdp/emulation.js +40 -0
- package/dist/cdp/emulation.js.map +1 -0
- package/dist/cdp/eval.d.ts +11 -0
- package/dist/cdp/eval.d.ts.map +1 -0
- package/dist/cdp/eval.js +79 -0
- package/dist/cdp/eval.js.map +1 -0
- package/dist/cdp/keyboard.d.ts +38 -0
- package/dist/cdp/keyboard.d.ts.map +1 -0
- package/dist/cdp/keyboard.js +148 -0
- package/dist/cdp/keyboard.js.map +1 -0
- package/dist/cdp/mouse.d.ts +49 -0
- package/dist/cdp/mouse.d.ts.map +1 -0
- package/dist/cdp/mouse.js +203 -0
- package/dist/cdp/mouse.js.map +1 -0
- package/dist/cdp/networkCapture.d.ts +11 -0
- package/dist/cdp/networkCapture.d.ts.map +1 -0
- package/dist/cdp/networkCapture.js +99 -0
- package/dist/cdp/networkCapture.js.map +1 -0
- package/dist/cdp/pageIndicator.d.ts +41 -0
- package/dist/cdp/pageIndicator.d.ts.map +1 -0
- package/dist/cdp/pageIndicator.js +395 -0
- package/dist/cdp/pageIndicator.js.map +1 -0
- package/dist/cdp/redaction.d.ts +3 -0
- package/dist/cdp/redaction.d.ts.map +1 -0
- package/dist/cdp/redaction.js +35 -0
- package/dist/cdp/redaction.js.map +1 -0
- package/dist/cdp/remoteObject.d.ts +6 -0
- package/dist/cdp/remoteObject.d.ts.map +1 -0
- package/dist/cdp/remoteObject.js +94 -0
- package/dist/cdp/remoteObject.js.map +1 -0
- package/dist/cdp/screenshot.d.ts +10 -0
- package/dist/cdp/screenshot.d.ts.map +1 -0
- package/dist/cdp/screenshot.js +83 -0
- package/dist/cdp/screenshot.js.map +1 -0
- package/dist/cdp/storageLocal.d.ts +8 -0
- package/dist/cdp/storageLocal.d.ts.map +1 -0
- package/dist/cdp/storageLocal.js +70 -0
- package/dist/cdp/storageLocal.js.map +1 -0
- package/dist/cdp/text-filter.d.ts +6 -0
- package/dist/cdp/text-filter.d.ts.map +1 -0
- package/dist/cdp/text-filter.js +36 -0
- package/dist/cdp/text-filter.js.map +1 -0
- package/dist/cdp/throttle.d.ts +6 -0
- package/dist/cdp/throttle.d.ts.map +1 -0
- package/dist/cdp/throttle.js +9 -0
- package/dist/cdp/throttle.js.map +1 -0
- package/dist/cdp/tracing.d.ts +15 -0
- package/dist/cdp/tracing.d.ts.map +1 -0
- package/dist/cdp/tracing.js +159 -0
- package/dist/cdp/tracing.js.map +1 -0
- package/dist/cdp/watcher.d.ts +17 -2
- package/dist/cdp/watcher.d.ts.map +1 -1
- package/dist/cdp/watcher.js +124 -175
- package/dist/cdp/watcher.js.map +1 -1
- package/dist/emulation/EmulationController.d.ts +12 -0
- package/dist/emulation/EmulationController.d.ts.map +1 -0
- package/dist/emulation/EmulationController.js +83 -0
- package/dist/emulation/EmulationController.js.map +1 -0
- package/dist/events.d.ts +86 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +2 -0
- package/dist/events.js.map +1 -0
- package/dist/fileLogs/WatcherFileLogger.d.ts +5 -2
- package/dist/fileLogs/WatcherFileLogger.d.ts.map +1 -1
- package/dist/fileLogs/WatcherFileLogger.js +30 -12
- package/dist/fileLogs/WatcherFileLogger.js.map +1 -1
- package/dist/http/httpUtils.d.ts +25 -0
- package/dist/http/httpUtils.d.ts.map +1 -0
- package/dist/http/httpUtils.js +170 -0
- package/dist/http/httpUtils.js.map +1 -0
- package/dist/http/router.d.ts +5 -0
- package/dist/http/router.d.ts.map +1 -0
- package/dist/http/router.js +85 -0
- package/dist/http/router.js.map +1 -0
- package/dist/http/routes/getEmulation.d.ts +3 -0
- package/dist/http/routes/getEmulation.d.ts.map +1 -0
- package/dist/http/routes/getEmulation.js +8 -0
- package/dist/http/routes/getEmulation.js.map +1 -0
- package/dist/http/routes/getLogs.d.ts +3 -0
- package/dist/http/routes/getLogs.d.ts.map +1 -0
- package/dist/http/routes/getLogs.js +28 -0
- package/dist/http/routes/getLogs.js.map +1 -0
- package/dist/http/routes/getNet.d.ts +3 -0
- package/dist/http/routes/getNet.d.ts.map +1 -0
- package/dist/http/routes/getNet.js +17 -0
- package/dist/http/routes/getNet.js.map +1 -0
- package/dist/http/routes/getNetTail.d.ts +3 -0
- package/dist/http/routes/getNetTail.d.ts.map +1 -0
- package/dist/http/routes/getNetTail.js +18 -0
- package/dist/http/routes/getNetTail.js.map +1 -0
- package/dist/http/routes/getStatus.d.ts +3 -0
- package/dist/http/routes/getStatus.d.ts.map +1 -0
- package/dist/http/routes/getStatus.js +21 -0
- package/dist/http/routes/getStatus.js.map +1 -0
- package/dist/http/routes/getTail.d.ts +3 -0
- package/dist/http/routes/getTail.d.ts.map +1 -0
- package/dist/http/routes/getTail.js +28 -0
- package/dist/http/routes/getTail.js.map +1 -0
- package/dist/http/routes/getTargets.d.ts +3 -0
- package/dist/http/routes/getTargets.d.ts.map +1 -0
- package/dist/http/routes/getTargets.js +16 -0
- package/dist/http/routes/getTargets.js.map +1 -0
- package/dist/http/routes/getThrottle.d.ts +3 -0
- package/dist/http/routes/getThrottle.d.ts.map +1 -0
- package/dist/http/routes/getThrottle.js +8 -0
- package/dist/http/routes/getThrottle.js.map +1 -0
- package/dist/http/routes/postAttach.d.ts +3 -0
- package/dist/http/routes/postAttach.d.ts.map +1 -0
- package/dist/http/routes/postAttach.js +24 -0
- package/dist/http/routes/postAttach.js.map +1 -0
- package/dist/http/routes/postCodeEdit.d.ts +3 -0
- package/dist/http/routes/postCodeEdit.d.ts.map +1 -0
- package/dist/http/routes/postCodeEdit.js +32 -0
- package/dist/http/routes/postCodeEdit.js.map +1 -0
- package/dist/http/routes/postCodeGrep.d.ts +3 -0
- package/dist/http/routes/postCodeGrep.d.ts.map +1 -0
- package/dist/http/routes/postCodeGrep.js +26 -0
- package/dist/http/routes/postCodeGrep.js.map +1 -0
- package/dist/http/routes/postCodeList.d.ts +3 -0
- package/dist/http/routes/postCodeList.d.ts.map +1 -0
- package/dist/http/routes/postCodeList.js +20 -0
- package/dist/http/routes/postCodeList.js.map +1 -0
- package/dist/http/routes/postCodeRead.d.ts +3 -0
- package/dist/http/routes/postCodeRead.d.ts.map +1 -0
- package/dist/http/routes/postCodeRead.js +30 -0
- package/dist/http/routes/postCodeRead.js.map +1 -0
- package/dist/http/routes/postDetach.d.ts +3 -0
- package/dist/http/routes/postDetach.d.ts.map +1 -0
- package/dist/http/routes/postDetach.js +24 -0
- package/dist/http/routes/postDetach.js.map +1 -0
- package/dist/http/routes/postDomAdd.d.ts +7 -0
- package/dist/http/routes/postDomAdd.d.ts.map +1 -0
- package/dist/http/routes/postDomAdd.js +97 -0
- package/dist/http/routes/postDomAdd.js.map +1 -0
- package/dist/http/routes/postDomClick.d.ts +3 -0
- package/dist/http/routes/postDomClick.d.ts.map +1 -0
- package/dist/http/routes/postDomClick.js +85 -0
- package/dist/http/routes/postDomClick.js.map +1 -0
- package/dist/http/routes/postDomFill.d.ts +3 -0
- package/dist/http/routes/postDomFill.d.ts.map +1 -0
- package/dist/http/routes/postDomFill.js +58 -0
- package/dist/http/routes/postDomFill.js.map +1 -0
- package/dist/http/routes/postDomFocus.d.ts +3 -0
- package/dist/http/routes/postDomFocus.d.ts.map +1 -0
- package/dist/http/routes/postDomFocus.js +40 -0
- package/dist/http/routes/postDomFocus.js.map +1 -0
- package/dist/http/routes/postDomHover.d.ts +3 -0
- package/dist/http/routes/postDomHover.d.ts.map +1 -0
- package/dist/http/routes/postDomHover.js +40 -0
- package/dist/http/routes/postDomHover.js.map +1 -0
- package/dist/http/routes/postDomInfo.d.ts +3 -0
- package/dist/http/routes/postDomInfo.d.ts.map +1 -0
- package/dist/http/routes/postDomInfo.js +40 -0
- package/dist/http/routes/postDomInfo.js.map +1 -0
- package/dist/http/routes/postDomKeydown.d.ts +3 -0
- package/dist/http/routes/postDomKeydown.d.ts.map +1 -0
- package/dist/http/routes/postDomKeydown.js +36 -0
- package/dist/http/routes/postDomKeydown.js.map +1 -0
- package/dist/http/routes/postDomModify.d.ts +3 -0
- package/dist/http/routes/postDomModify.d.ts.map +1 -0
- package/dist/http/routes/postDomModify.js +45 -0
- package/dist/http/routes/postDomModify.js.map +1 -0
- package/dist/http/routes/postDomRemove.d.ts +3 -0
- package/dist/http/routes/postDomRemove.d.ts.map +1 -0
- package/dist/http/routes/postDomRemove.js +39 -0
- package/dist/http/routes/postDomRemove.js.map +1 -0
- package/dist/http/routes/postDomScroll.d.ts +3 -0
- package/dist/http/routes/postDomScroll.d.ts.map +1 -0
- package/dist/http/routes/postDomScroll.js +75 -0
- package/dist/http/routes/postDomScroll.js.map +1 -0
- package/dist/http/routes/postDomScrollTo.d.ts +3 -0
- package/dist/http/routes/postDomScrollTo.d.ts.map +1 -0
- package/dist/http/routes/postDomScrollTo.js +69 -0
- package/dist/http/routes/postDomScrollTo.js.map +1 -0
- package/dist/http/routes/postDomSetFile.d.ts +3 -0
- package/dist/http/routes/postDomSetFile.d.ts.map +1 -0
- package/dist/http/routes/postDomSetFile.js +58 -0
- package/dist/http/routes/postDomSetFile.js.map +1 -0
- package/dist/http/routes/postDomSubmit.d.ts +3 -0
- package/dist/http/routes/postDomSubmit.d.ts.map +1 -0
- package/dist/http/routes/postDomSubmit.js +49 -0
- package/dist/http/routes/postDomSubmit.js.map +1 -0
- package/dist/http/routes/postDomTree.d.ts +3 -0
- package/dist/http/routes/postDomTree.d.ts.map +1 -0
- package/dist/http/routes/postDomTree.js +41 -0
- package/dist/http/routes/postDomTree.js.map +1 -0
- package/dist/http/routes/postEmulation.d.ts +3 -0
- package/dist/http/routes/postEmulation.d.ts.map +1 -0
- package/dist/http/routes/postEmulation.js +70 -0
- package/dist/http/routes/postEmulation.js.map +1 -0
- package/dist/http/routes/postEval.d.ts +3 -0
- package/dist/http/routes/postEval.d.ts.map +1 -0
- package/dist/http/routes/postEval.js +27 -0
- package/dist/http/routes/postEval.js.map +1 -0
- package/dist/http/routes/postReload.d.ts +3 -0
- package/dist/http/routes/postReload.d.ts.map +1 -0
- package/dist/http/routes/postReload.js +20 -0
- package/dist/http/routes/postReload.js.map +1 -0
- package/dist/http/routes/postScreenshot.d.ts +3 -0
- package/dist/http/routes/postScreenshot.d.ts.map +1 -0
- package/dist/http/routes/postScreenshot.js +17 -0
- package/dist/http/routes/postScreenshot.js.map +1 -0
- package/dist/http/routes/postShutdown.d.ts +3 -0
- package/dist/http/routes/postShutdown.d.ts.map +1 -0
- package/dist/http/routes/postShutdown.js +13 -0
- package/dist/http/routes/postShutdown.js.map +1 -0
- package/dist/http/routes/postSnapshot.d.ts +3 -0
- package/dist/http/routes/postSnapshot.d.ts.map +1 -0
- package/dist/http/routes/postSnapshot.js +28 -0
- package/dist/http/routes/postSnapshot.js.map +1 -0
- package/dist/http/routes/postStorageLocal.d.ts +3 -0
- package/dist/http/routes/postStorageLocal.d.ts.map +1 -0
- package/dist/http/routes/postStorageLocal.js +31 -0
- package/dist/http/routes/postStorageLocal.js.map +1 -0
- package/dist/http/routes/postThrottle.d.ts +3 -0
- package/dist/http/routes/postThrottle.d.ts.map +1 -0
- package/dist/http/routes/postThrottle.js +38 -0
- package/dist/http/routes/postThrottle.js.map +1 -0
- package/dist/http/routes/postTraceStart.d.ts +3 -0
- package/dist/http/routes/postTraceStart.d.ts.map +1 -0
- package/dist/http/routes/postTraceStart.js +17 -0
- package/dist/http/routes/postTraceStart.js.map +1 -0
- package/dist/http/routes/postTraceStop.d.ts +3 -0
- package/dist/http/routes/postTraceStop.d.ts.map +1 -0
- package/dist/http/routes/postTraceStop.js +17 -0
- package/dist/http/routes/postTraceStop.js.map +1 -0
- package/dist/http/routes/types.d.ts +9 -0
- package/dist/http/routes/types.d.ts.map +1 -0
- package/dist/http/routes/types.js +10 -0
- package/dist/http/routes/types.js.map +1 -0
- package/dist/http/server.d.ts +42 -1
- package/dist/http/server.d.ts.map +1 -1
- package/dist/http/server.js +3 -82
- package/dist/http/server.js.map +1 -1
- package/dist/index.d.ts +117 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +349 -44
- package/dist/index.js.map +1 -1
- package/dist/native-messaging/messaging.d.ts +18 -0
- package/dist/native-messaging/messaging.d.ts.map +1 -0
- package/dist/native-messaging/messaging.js +94 -0
- package/dist/native-messaging/messaging.js.map +1 -0
- package/dist/native-messaging/session-manager.d.ts +108 -0
- package/dist/native-messaging/session-manager.d.ts.map +1 -0
- package/dist/native-messaging/session-manager.js +267 -0
- package/dist/native-messaging/session-manager.js.map +1 -0
- package/dist/native-messaging/types.d.ts +112 -0
- package/dist/native-messaging/types.d.ts.map +1 -0
- package/dist/native-messaging/types.js +6 -0
- package/dist/native-messaging/types.js.map +1 -0
- package/dist/registry/registry.d.ts +9 -2
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +53 -9
- package/dist/registry/registry.js.map +1 -1
- package/dist/scripts/install-host.d.ts +10 -0
- package/dist/scripts/install-host.d.ts.map +1 -0
- package/dist/scripts/install-host.js +189 -0
- package/dist/scripts/install-host.js.map +1 -0
- package/dist/sources/cdp-source.d.ts +24 -0
- package/dist/sources/cdp-source.d.ts.map +1 -0
- package/dist/sources/cdp-source.js +49 -0
- package/dist/sources/cdp-source.js.map +1 -0
- package/dist/sources/extension-frame-state.d.ts +64 -0
- package/dist/sources/extension-frame-state.d.ts.map +1 -0
- package/dist/sources/extension-frame-state.js +117 -0
- package/dist/sources/extension-frame-state.js.map +1 -0
- package/dist/sources/extension-log-events.d.ts +15 -0
- package/dist/sources/extension-log-events.d.ts.map +1 -0
- package/dist/sources/extension-log-events.js +101 -0
- package/dist/sources/extension-log-events.js.map +1 -0
- package/dist/sources/extension-source.d.ts +15 -0
- package/dist/sources/extension-source.d.ts.map +1 -0
- package/dist/sources/extension-source.js +487 -0
- package/dist/sources/extension-source.js.map +1 -0
- package/dist/sources/types.d.ts +109 -0
- package/dist/sources/types.d.ts.map +1 -0
- package/dist/sources/types.js +7 -0
- package/dist/sources/types.js.map +1 -0
- package/dist/throttle/ThrottleController.d.ts +12 -0
- package/dist/throttle/ThrottleController.d.ts.map +1 -0
- package/dist/throttle/ThrottleController.js +67 -0
- package/dist/throttle/ThrottleController.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/cdp/connection.ts"],"names":[],"mappings":"AA0CA,IAAI,MAAM,GAAG,CAAC,CAAA;AAQd,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAyB,EAAE;IAChE,IAAI,UAAU,GAAyB,IAAI,CAAA;IAC3C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAgC,CAAA;IAExD,MAAM,OAAO,GAAqB;QACjC,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC;QACrC,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;YAC9C,IAAI,CAAC,UAAU,EAAE,CAAC;gBACjB,MAAM,yBAAyB,EAAE,CAAA;YAClC,CAAC;YACD,OAAO,UAAU,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;QACvD,CAAC;QACD,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;YAC5B,IAAI,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YACjC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,MAAM,GAAG,IAAI,GAAG,EAAE,CAAA;gBAClB,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YAC7B,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACnB,OAAO,GAAG,EAAE;gBACX,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;YACxB,CAAC,CAAA;QACF,CAAC;KACD,CAAA;IAED,MAAM,MAAM,GAAG,CAAC,MAAiB,EAAiB,EAAE;QACnD,MAAM,eAAe,GAAG,IAAI,GAAG,EAA0B,CAAA;QAEzD,MAAM,WAAW,GAAG,KAAK,EAAE,MAAc,EAAE,MAAgC,EAAE,OAAwB,EAAoB,EAAE;YAC1H,MAAM,EAAE,GAAG,MAAM,EAAE,CAAA;YACnB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACtC,MAAM,OAAO,GAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;gBACnD,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;oBACxB,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;wBAC/B,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;wBAC1B,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,CAAA;oBACxE,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;gBACtB,CAAC;gBACD,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;gBAChC,IAAI,CAAC;oBACJ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;gBACpD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;oBAC1B,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;wBACnB,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;oBAC5B,CAAC;oBACD,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBAClE,CAAC;YACF,CAAC,CAAC,CAAA;QACH,CAAC,CAAA;QAED,MAAM,aAAa,GAAG,CAAC,IAAa,EAAQ,EAAE;YAC7C,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;YAClC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC7C,OAAM;YACP,CAAC;YAED,MAAM,OAAO,GAAG,OAMf,CAAA;YAED,IAAI,OAAO,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;gBACxB,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;gBAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACd,OAAM;gBACP,CAAC;gBACD,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;gBAClC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBACnB,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;gBAC5B,CAAC;gBACD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBACnB,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,oBAAoB,CAAC,CAAC,CAAA;oBACxE,OAAM;gBACP,CAAC;gBACD,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;gBAC/B,OAAM;YACP,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpB,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;gBAC3C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBAClC,OAAM;gBACP,CAAC;gBACD,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;oBAC9B,IAAI,CAAC;wBACJ,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;oBAC7C,CAAC;oBAAC,MAAM,CAAC;wBACR,oDAAoD;oBACrD,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC,CAAA;QAED,MAAM,KAAK,GAAG,CAAC,MAAe,EAAQ,EAAE;YACvC,KAAK,MAAM,OAAO,IAAI,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC;gBAChD,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,uBAAuB,CAAC,CAAC,CAAA;gBAC5D,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBACnB,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;gBAC5B,CAAC;YACF,CAAC;YACD,eAAe,CAAC,KAAK,EAAE,CAAA;QACxB,CAAC,CAAA;QAED,MAAM,cAAc,GAAkB;YACrC,WAAW;YACX,aAAa;YACb,KAAK;SACL,CAAA;QAED,UAAU,GAAG,cAAc,CAAA;QAC3B,OAAO,cAAc,CAAA;IACtB,CAAC,CAAA;IAED,MAAM,MAAM,GAAG,CAAC,MAAe,EAAQ,EAAE;QACxC,IAAI,UAAU,EAAE,CAAC;YAChB,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACzB,CAAC;QACD,UAAU,GAAG,IAAI,CAAA;IAClB,CAAC,CAAA;IAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;AACnC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAU,EAAE;IACpD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAC9D;IAAC,KAAmC,CAAC,IAAI,GAAG,kBAAkB,CAAA;IAC/D,OAAO,KAAK,CAAA;AACb,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,IAAa,EAAW,EAAE;IAC/C,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC;YACJ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACxB,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,IAAI,CAAA;QACZ,CAAC;IACF,CAAC;IAED,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;QACjC,OAAO,YAAY,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;IACpD,CAAC;IAED,OAAO,IAAI,CAAA;AACZ,CAAC,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { CdpSessionHandle } from '../connection.js';
|
|
2
|
+
/** Options for filling input/textarea/contenteditable elements. */
|
|
3
|
+
export type FillElementsOptions = {
|
|
4
|
+
selector: string;
|
|
5
|
+
value: string;
|
|
6
|
+
all?: boolean;
|
|
7
|
+
text?: string;
|
|
8
|
+
};
|
|
9
|
+
/** Result of fillElements operation. */
|
|
10
|
+
export type FillElementsResult = {
|
|
11
|
+
allNodeIds: number[];
|
|
12
|
+
filledCount: number;
|
|
13
|
+
};
|
|
14
|
+
/** Fill pre-resolved node IDs with a value. Skips selector resolution. */
|
|
15
|
+
export declare const fillResolvedNodes: (session: CdpSessionHandle, nodeIds: number[], value: string) => Promise<number>;
|
|
16
|
+
/**
|
|
17
|
+
* Fill input/textarea/contenteditable element(s) with a value.
|
|
18
|
+
* Uses the native setter trick to bypass framework property wrappers,
|
|
19
|
+
* then dispatches input + change events so React/Vue/Angular detect the change.
|
|
20
|
+
*/
|
|
21
|
+
export declare const fillElements: (session: CdpSessionHandle, options: FillElementsOptions) => Promise<FillElementsResult>;
|
|
22
|
+
//# sourceMappingURL=fill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fill.d.ts","sourceRoot":"","sources":["../../../src/cdp/dom/fill.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAGxD,mEAAmE;AACnE,MAAM,MAAM,mBAAmB,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,wCAAwC;AACxC,MAAM,MAAM,kBAAkB,GAAG;IAChC,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;CACnB,CAAA;AA6BD,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,GAAU,SAAS,gBAAgB,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,MAAM,CAkBnH,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAU,SAAS,gBAAgB,EAAE,SAAS,mBAAmB,KAAG,OAAO,CAAC,kBAAkB,CAQtH,CAAA"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { getDomRootId, resolveSelectorMatches } from './selector.js';
|
|
2
|
+
/**
|
|
3
|
+
* Browser-context function that sets the element value using the native
|
|
4
|
+
* prototype setter (to bypass React/Vue/Angular property wrappers) and
|
|
5
|
+
* dispatches input + change events so framework change detection fires.
|
|
6
|
+
*/
|
|
7
|
+
const FILL_FUNCTION = `function(value) {
|
|
8
|
+
var el = this;
|
|
9
|
+
if (el.isContentEditable) {
|
|
10
|
+
el.focus();
|
|
11
|
+
el.textContent = value;
|
|
12
|
+
el.dispatchEvent(new Event('input', { bubbles: true }));
|
|
13
|
+
el.dispatchEvent(new Event('change', { bubbles: true }));
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
var proto = el.tagName === 'TEXTAREA' ? HTMLTextAreaElement.prototype
|
|
17
|
+
: el.tagName === 'SELECT' ? HTMLSelectElement.prototype
|
|
18
|
+
: HTMLInputElement.prototype;
|
|
19
|
+
var nativeSetter = Object.getOwnPropertyDescriptor(proto, 'value');
|
|
20
|
+
if (nativeSetter && nativeSetter.set) {
|
|
21
|
+
nativeSetter.set.call(el, value);
|
|
22
|
+
} else {
|
|
23
|
+
el.value = value;
|
|
24
|
+
}
|
|
25
|
+
el.dispatchEvent(new Event('input', { bubbles: true }));
|
|
26
|
+
el.dispatchEvent(new Event('change', { bubbles: true }));
|
|
27
|
+
}`;
|
|
28
|
+
/** Fill pre-resolved node IDs with a value. Skips selector resolution. */
|
|
29
|
+
export const fillResolvedNodes = async (session, nodeIds, value) => {
|
|
30
|
+
if (nodeIds.length === 0)
|
|
31
|
+
return 0;
|
|
32
|
+
for (const nodeId of nodeIds) {
|
|
33
|
+
const resolved = (await session.sendAndWait('DOM.resolveNode', { nodeId }));
|
|
34
|
+
const objectId = resolved.object?.objectId;
|
|
35
|
+
if (!objectId)
|
|
36
|
+
continue;
|
|
37
|
+
await session.sendAndWait('Runtime.callFunctionOn', {
|
|
38
|
+
objectId,
|
|
39
|
+
functionDeclaration: FILL_FUNCTION,
|
|
40
|
+
arguments: [{ value }],
|
|
41
|
+
awaitPromise: false,
|
|
42
|
+
returnByValue: true,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return nodeIds.length;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Fill input/textarea/contenteditable element(s) with a value.
|
|
49
|
+
* Uses the native setter trick to bypass framework property wrappers,
|
|
50
|
+
* then dispatches input + change events so React/Vue/Angular detect the change.
|
|
51
|
+
*/
|
|
52
|
+
export const fillElements = async (session, options) => {
|
|
53
|
+
await session.sendAndWait('DOM.enable');
|
|
54
|
+
const rootId = await getDomRootId(session);
|
|
55
|
+
const { allNodeIds, nodeIds } = await resolveSelectorMatches(session, rootId, options.selector, options.all ?? false, options.text);
|
|
56
|
+
const filledCount = await fillResolvedNodes(session, nodeIds, options.value);
|
|
57
|
+
return { allNodeIds, filledCount };
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=fill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fill.js","sourceRoot":"","sources":["../../../src/cdp/dom/fill.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAgBpE;;;;GAIG;AACH,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;EAoBpB,CAAA;AAEF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,OAAyB,EAAE,OAAiB,EAAE,KAAa,EAAmB,EAAE;IACvH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IAElC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAuC,CAAA;QACjH,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAA;QAC1C,IAAI,CAAC,QAAQ;YAAE,SAAQ;QAEvB,MAAM,OAAO,CAAC,WAAW,CAAC,wBAAwB,EAAE;YACnD,QAAQ;YACR,mBAAmB,EAAE,aAAa;YAClC,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;YACtB,YAAY,EAAE,KAAK;YACnB,aAAa,EAAE,IAAI;SACnB,CAAC,CAAA;IACH,CAAC;IAED,OAAO,OAAO,CAAC,MAAM,CAAA;AACtB,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,OAAyB,EAAE,OAA4B,EAA+B,EAAE;IAC1H,MAAM,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;IAEvC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAA;IAC1C,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IAEnI,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;IAC5E,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAA;AACnC,CAAC,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DomInfoResponse } from '@vforsh/argus-core';
|
|
2
|
+
import type { CdpSessionHandle } from '../connection.js';
|
|
3
|
+
/** Options for fetching DOM element info by selector. */
|
|
4
|
+
export type FetchDomInfoOptions = {
|
|
5
|
+
selector: string;
|
|
6
|
+
all?: boolean;
|
|
7
|
+
outerHtmlMaxChars?: number;
|
|
8
|
+
text?: string;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Fetch detailed info for element(s) matching a CSS selector.
|
|
12
|
+
*/
|
|
13
|
+
export declare const fetchDomInfoBySelector: (session: CdpSessionHandle, options: FetchDomInfoOptions) => Promise<DomInfoResponse>;
|
|
14
|
+
//# sourceMappingURL=info.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/cdp/dom/info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAWxD,yDAAyD;AACzD,MAAM,MAAM,mBAAmB,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,GAAU,SAAS,gBAAgB,EAAE,SAAS,mBAAmB,KAAG,OAAO,CAAC,eAAe,CAuD7H,CAAA"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { getDomRootId, resolveSelectorMatches, toAttributesRecord, countElementChildren, clamp } from './selector.js';
|
|
2
|
+
const DEFAULT_OUTER_HTML_MAX_CHARS = 50_000;
|
|
3
|
+
const MAX_OUTER_HTML_CHARS = 500_000;
|
|
4
|
+
/**
|
|
5
|
+
* Fetch detailed info for element(s) matching a CSS selector.
|
|
6
|
+
*/
|
|
7
|
+
export const fetchDomInfoBySelector = async (session, options) => {
|
|
8
|
+
const all = options.all ?? false;
|
|
9
|
+
const maxChars = clamp(options.outerHtmlMaxChars ?? DEFAULT_OUTER_HTML_MAX_CHARS, 0, MAX_OUTER_HTML_CHARS);
|
|
10
|
+
await session.sendAndWait('DOM.enable');
|
|
11
|
+
const rootId = await getDomRootId(session);
|
|
12
|
+
const { allNodeIds, nodeIds } = await resolveSelectorMatches(session, rootId, options.selector, all, options.text);
|
|
13
|
+
if (allNodeIds.length === 0) {
|
|
14
|
+
return { ok: true, matches: 0, elements: [] };
|
|
15
|
+
}
|
|
16
|
+
const elements = [];
|
|
17
|
+
for (const nodeId of nodeIds) {
|
|
18
|
+
const describeResult = (await session.sendAndWait('DOM.describeNode', {
|
|
19
|
+
nodeId,
|
|
20
|
+
depth: 1, // Just enough to get child count
|
|
21
|
+
}));
|
|
22
|
+
if (!describeResult.node) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
const node = describeResult.node;
|
|
26
|
+
const attributes = toAttributesRecord(node.attributes);
|
|
27
|
+
const childElementCount = countElementChildren(node.children);
|
|
28
|
+
let outerHTML = null;
|
|
29
|
+
let outerHTMLTruncated = false;
|
|
30
|
+
try {
|
|
31
|
+
const htmlResult = (await session.sendAndWait('DOM.getOuterHTML', { nodeId }));
|
|
32
|
+
outerHTML = htmlResult.outerHTML ?? null;
|
|
33
|
+
if (outerHTML && outerHTML.length > maxChars) {
|
|
34
|
+
outerHTML = outerHTML.slice(0, maxChars);
|
|
35
|
+
outerHTMLTruncated = true;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// getOuterHTML can fail for certain nodes; leave as null
|
|
40
|
+
}
|
|
41
|
+
elements.push({
|
|
42
|
+
nodeId,
|
|
43
|
+
tag: (node.localName ?? node.nodeName).toLowerCase(),
|
|
44
|
+
attributes,
|
|
45
|
+
childElementCount,
|
|
46
|
+
outerHTML,
|
|
47
|
+
outerHTMLTruncated,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
return { ok: true, matches: allNodeIds.length, elements };
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/cdp/dom/info.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAErH,MAAM,4BAA4B,GAAG,MAAM,CAAA;AAC3C,MAAM,oBAAoB,GAAG,OAAO,CAAA;AAcpC;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,OAAyB,EAAE,OAA4B,EAA4B,EAAE;IACjI,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,KAAK,CAAA;IAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,iBAAiB,IAAI,4BAA4B,EAAE,CAAC,EAAE,oBAAoB,CAAC,CAAA;IAE1G,MAAM,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;IAEvC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAA;IAC1C,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IAElH,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;IAC9C,CAAC;IAED,MAAM,QAAQ,GAAqB,EAAE,CAAA;IAErC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,MAAM,cAAc,GAAG,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,kBAAkB,EAAE;YACrE,MAAM;YACN,KAAK,EAAE,CAAC,EAAE,iCAAiC;SAC3C,CAAC,CAAsB,CAAA;QAExB,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YAC1B,SAAQ;QACT,CAAC;QAED,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAA;QAChC,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACtD,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAE7D,IAAI,SAAS,GAAkB,IAAI,CAAA;QACnC,IAAI,kBAAkB,GAAG,KAAK,CAAA;QAE9B,IAAI,CAAC;YACJ,MAAM,UAAU,GAAG,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAuB,CAAA;YACpG,SAAS,GAAG,UAAU,CAAC,SAAS,IAAI,IAAI,CAAA;YAExC,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;gBAC9C,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;gBACxC,kBAAkB,GAAG,IAAI,CAAA;YAC1B,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,yDAAyD;QAC1D,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC;YACb,MAAM;YACN,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE;YACpD,UAAU;YACV,iBAAiB;YACjB,SAAS;YACT,kBAAkB;SAClB,CAAC,CAAA;IACH,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAA;AAC1D,CAAC,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { DomInsertPosition } from '@vforsh/argus-core';
|
|
2
|
+
import type { CdpSessionHandle } from '../connection.js';
|
|
3
|
+
/** Options for inserting HTML adjacent to matched elements. */
|
|
4
|
+
export type InsertAdjacentHtmlOptions = {
|
|
5
|
+
nodeIds: number[];
|
|
6
|
+
html: string;
|
|
7
|
+
position?: DomInsertPosition;
|
|
8
|
+
text?: boolean;
|
|
9
|
+
};
|
|
10
|
+
/** Result of insertAdjacentHtml operation. */
|
|
11
|
+
export type InsertAdjacentHtmlResult = {
|
|
12
|
+
insertedCount: number;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Insert HTML adjacent to element(s) matching a CSS selector.
|
|
16
|
+
* Uses insertAdjacentHTML on each matched element.
|
|
17
|
+
*/
|
|
18
|
+
export declare const insertAdjacentHtml: (session: CdpSessionHandle, options: InsertAdjacentHtmlOptions) => Promise<InsertAdjacentHtmlResult>;
|
|
19
|
+
//# sourceMappingURL=insert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insert.d.ts","sourceRoot":"","sources":["../../../src/cdp/dom/insert.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAExD,+DAA+D;AAC/D,MAAM,MAAM,yBAAyB,GAAG;IACvC,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,iBAAiB,CAAA;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAA;CACd,CAAA;AAED,8CAA8C;AAC9C,MAAM,MAAM,wBAAwB,GAAG;IACtC,aAAa,EAAE,MAAM,CAAA;CACrB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAU,SAAS,gBAAgB,EAAE,SAAS,yBAAyB,KAAG,OAAO,CAAC,wBAAwB,CA6BxI,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Insert HTML adjacent to element(s) matching a CSS selector.
|
|
3
|
+
* Uses insertAdjacentHTML on each matched element.
|
|
4
|
+
*/
|
|
5
|
+
export const insertAdjacentHtml = async (session, options) => {
|
|
6
|
+
await session.sendAndWait('DOM.enable');
|
|
7
|
+
if (options.nodeIds.length === 0) {
|
|
8
|
+
return { insertedCount: 0 };
|
|
9
|
+
}
|
|
10
|
+
const position = options.position ?? 'beforeend';
|
|
11
|
+
const functionDeclaration = options.text
|
|
12
|
+
? 'function(pos, value) { this.insertAdjacentText(pos, value); }'
|
|
13
|
+
: 'function(pos, html) { this.insertAdjacentHTML(pos, html); }';
|
|
14
|
+
for (const nodeId of options.nodeIds) {
|
|
15
|
+
const resolved = (await session.sendAndWait('DOM.resolveNode', { nodeId }));
|
|
16
|
+
const objectId = resolved.object?.objectId;
|
|
17
|
+
if (!objectId) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
await session.sendAndWait('Runtime.callFunctionOn', {
|
|
21
|
+
objectId,
|
|
22
|
+
functionDeclaration,
|
|
23
|
+
arguments: [{ value: position }, { value: options.html }],
|
|
24
|
+
awaitPromise: false,
|
|
25
|
+
returnByValue: true,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return { insertedCount: options.nodeIds.length };
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=insert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insert.js","sourceRoot":"","sources":["../../../src/cdp/dom/insert.ts"],"names":[],"mappings":"AAgBA;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,OAAyB,EAAE,OAAkC,EAAqC,EAAE;IAC5I,MAAM,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;IAEvC,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,CAAA;IAC5B,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,WAAW,CAAA;IAChD,MAAM,mBAAmB,GAAG,OAAO,CAAC,IAAI;QACvC,CAAC,CAAC,+DAA+D;QACjE,CAAC,CAAC,6DAA6D,CAAA;IAEhE,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAuC,CAAA;QACjH,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAA;QAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,SAAQ;QACT,CAAC;QAED,MAAM,OAAO,CAAC,WAAW,CAAC,wBAAwB,EAAE;YACnD,QAAQ;YACR,mBAAmB;YACnB,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;YACzD,YAAY,EAAE,KAAK;YACnB,aAAa,EAAE,IAAI;SACnB,CAAC,CAAA;IACH,CAAC;IAED,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAA;AACjD,CAAC,CAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { CdpSessionHandle } from '../connection.js';
|
|
2
|
+
/** Base options for modifying matched elements. */
|
|
3
|
+
type ModifyElementsBaseOptions = {
|
|
4
|
+
selector: string;
|
|
5
|
+
all?: boolean;
|
|
6
|
+
text?: string;
|
|
7
|
+
};
|
|
8
|
+
/** Attribute modification options. */
|
|
9
|
+
type ModifyAttrOptions = ModifyElementsBaseOptions & {
|
|
10
|
+
type: 'attr';
|
|
11
|
+
set?: Record<string, string | true>;
|
|
12
|
+
remove?: string[];
|
|
13
|
+
};
|
|
14
|
+
/** Class modification options. */
|
|
15
|
+
type ModifyClassOptions = ModifyElementsBaseOptions & {
|
|
16
|
+
type: 'class';
|
|
17
|
+
add?: string[];
|
|
18
|
+
remove?: string[];
|
|
19
|
+
toggle?: string[];
|
|
20
|
+
};
|
|
21
|
+
/** Style modification options. */
|
|
22
|
+
type ModifyStyleOptions = ModifyElementsBaseOptions & {
|
|
23
|
+
type: 'style';
|
|
24
|
+
set?: Record<string, string>;
|
|
25
|
+
remove?: string[];
|
|
26
|
+
};
|
|
27
|
+
/** Text content modification options. */
|
|
28
|
+
type ModifyTextOptions = ModifyElementsBaseOptions & {
|
|
29
|
+
type: 'text';
|
|
30
|
+
value: string;
|
|
31
|
+
};
|
|
32
|
+
/** HTML content modification options. */
|
|
33
|
+
type ModifyHtmlOptions = ModifyElementsBaseOptions & {
|
|
34
|
+
type: 'html';
|
|
35
|
+
value: string;
|
|
36
|
+
};
|
|
37
|
+
/** Options for modifying matched elements. */
|
|
38
|
+
export type ModifyElementsOptions = ModifyAttrOptions | ModifyClassOptions | ModifyStyleOptions | ModifyTextOptions | ModifyHtmlOptions;
|
|
39
|
+
/** Result of modifyElements operation. */
|
|
40
|
+
export type ModifyElementsResult = {
|
|
41
|
+
allNodeIds: number[];
|
|
42
|
+
modifiedCount: number;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Modify element(s) matching a CSS selector.
|
|
46
|
+
* Supports attribute, class, style, text, and HTML modifications.
|
|
47
|
+
*/
|
|
48
|
+
export declare const modifyElements: (session: CdpSessionHandle, options: ModifyElementsOptions) => Promise<ModifyElementsResult>;
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=modify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modify.d.ts","sourceRoot":"","sources":["../../../src/cdp/dom/modify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAOxD,mDAAmD;AACnD,KAAK,yBAAyB,GAAG;IAChC,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,sCAAsC;AACtC,KAAK,iBAAiB,GAAG,yBAAyB,GAAG;IACpD,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAA;IACnC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB,CAAA;AAED,kCAAkC;AAClC,KAAK,kBAAkB,GAAG,yBAAyB,GAAG;IACrD,IAAI,EAAE,OAAO,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB,CAAA;AAED,kCAAkC;AAClC,KAAK,kBAAkB,GAAG,yBAAyB,GAAG;IACrD,IAAI,EAAE,OAAO,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB,CAAA;AAED,yCAAyC;AACzC,KAAK,iBAAiB,GAAG,yBAAyB,GAAG;IACpD,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACb,CAAA;AAED,yCAAyC;AACzC,KAAK,iBAAiB,GAAG,yBAAyB,GAAG;IACpD,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACb,CAAA;AAED,8CAA8C;AAC9C,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,iBAAiB,CAAA;AAEvI,0CAA0C;AAC1C,MAAM,MAAM,oBAAoB,GAAG;IAClC,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;CACrB,CAAA;AAMD;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAU,SAAS,gBAAgB,EAAE,SAAS,qBAAqB,KAAG,OAAO,CAAC,oBAAoB,CA6B5H,CAAA"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { getDomRootId, resolveSelectorMatches } from './selector.js';
|
|
2
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
3
|
+
// Public API
|
|
4
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
5
|
+
/**
|
|
6
|
+
* Modify element(s) matching a CSS selector.
|
|
7
|
+
* Supports attribute, class, style, text, and HTML modifications.
|
|
8
|
+
*/
|
|
9
|
+
export const modifyElements = async (session, options) => {
|
|
10
|
+
await session.sendAndWait('DOM.enable');
|
|
11
|
+
const rootId = await getDomRootId(session);
|
|
12
|
+
const { allNodeIds, nodeIds } = await resolveSelectorMatches(session, rootId, options.selector, options.all ?? false, options.text);
|
|
13
|
+
if (nodeIds.length === 0) {
|
|
14
|
+
return { allNodeIds, modifiedCount: 0 };
|
|
15
|
+
}
|
|
16
|
+
const fn = buildModifyFunction(options);
|
|
17
|
+
for (const nodeId of nodeIds) {
|
|
18
|
+
const resolved = (await session.sendAndWait('DOM.resolveNode', { nodeId }));
|
|
19
|
+
const objectId = resolved.object?.objectId;
|
|
20
|
+
if (!objectId) {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
await session.sendAndWait('Runtime.callFunctionOn', {
|
|
24
|
+
objectId,
|
|
25
|
+
functionDeclaration: fn.code,
|
|
26
|
+
arguments: fn.args,
|
|
27
|
+
awaitPromise: false,
|
|
28
|
+
returnByValue: true,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
return { allNodeIds, modifiedCount: nodeIds.length };
|
|
32
|
+
};
|
|
33
|
+
const buildModifyFunction = (options) => {
|
|
34
|
+
switch (options.type) {
|
|
35
|
+
case 'attr':
|
|
36
|
+
return {
|
|
37
|
+
code: `function(toSet, toRemove) {
|
|
38
|
+
if (toSet) {
|
|
39
|
+
for (const [name, value] of Object.entries(toSet)) {
|
|
40
|
+
if (value === true) {
|
|
41
|
+
this.setAttribute(name, '');
|
|
42
|
+
} else {
|
|
43
|
+
this.setAttribute(name, value);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (toRemove) {
|
|
48
|
+
for (const name of toRemove) {
|
|
49
|
+
this.removeAttribute(name);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}`,
|
|
53
|
+
args: [{ value: options.set ?? null }, { value: options.remove ?? null }],
|
|
54
|
+
};
|
|
55
|
+
case 'class':
|
|
56
|
+
return {
|
|
57
|
+
code: `function(toAdd, toRemove, toToggle) {
|
|
58
|
+
if (toAdd) {
|
|
59
|
+
this.classList.add(...toAdd);
|
|
60
|
+
}
|
|
61
|
+
if (toRemove) {
|
|
62
|
+
this.classList.remove(...toRemove);
|
|
63
|
+
}
|
|
64
|
+
if (toToggle) {
|
|
65
|
+
for (const cls of toToggle) {
|
|
66
|
+
this.classList.toggle(cls);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}`,
|
|
70
|
+
args: [{ value: options.add ?? null }, { value: options.remove ?? null }, { value: options.toggle ?? null }],
|
|
71
|
+
};
|
|
72
|
+
case 'style':
|
|
73
|
+
return {
|
|
74
|
+
code: `function(toSet, toRemove) {
|
|
75
|
+
if (toSet) {
|
|
76
|
+
for (const [prop, value] of Object.entries(toSet)) {
|
|
77
|
+
this.style.setProperty(prop, value);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (toRemove) {
|
|
81
|
+
for (const prop of toRemove) {
|
|
82
|
+
this.style.removeProperty(prop);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}`,
|
|
86
|
+
args: [{ value: options.set ?? null }, { value: options.remove ?? null }],
|
|
87
|
+
};
|
|
88
|
+
case 'text':
|
|
89
|
+
return {
|
|
90
|
+
code: `function(value) { this.textContent = value; }`,
|
|
91
|
+
args: [{ value: options.value }],
|
|
92
|
+
};
|
|
93
|
+
case 'html':
|
|
94
|
+
return {
|
|
95
|
+
code: `function(value) { this.innerHTML = value; }`,
|
|
96
|
+
args: [{ value: options.value }],
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
//# sourceMappingURL=modify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modify.js","sourceRoot":"","sources":["../../../src/cdp/dom/modify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { CdpSessionHandle } from '../connection.js';
|
|
2
|
+
/** Options for removing matched elements. */
|
|
3
|
+
export type RemoveElementsOptions = {
|
|
4
|
+
selector: string;
|
|
5
|
+
all?: boolean;
|
|
6
|
+
text?: string;
|
|
7
|
+
};
|
|
8
|
+
/** Result of removeElements operation. */
|
|
9
|
+
export type RemoveElementsResult = {
|
|
10
|
+
allNodeIds: number[];
|
|
11
|
+
removedCount: number;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Remove element(s) matching a CSS selector from the DOM.
|
|
15
|
+
*/
|
|
16
|
+
export declare const removeElements: (session: CdpSessionHandle, options: RemoveElementsOptions) => Promise<RemoveElementsResult>;
|
|
17
|
+
//# sourceMappingURL=remove.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../../src/cdp/dom/remove.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAGxD,6CAA6C;AAC7C,MAAM,MAAM,qBAAqB,GAAG;IACnC,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,0CAA0C;AAC1C,MAAM,MAAM,oBAAoB,GAAG;IAClC,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,GAAU,SAAS,gBAAgB,EAAE,SAAS,qBAAqB,KAAG,OAAO,CAAC,oBAAoB,CA0B5H,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { getDomRootId, resolveSelectorMatches } from './selector.js';
|
|
2
|
+
/**
|
|
3
|
+
* Remove element(s) matching a CSS selector from the DOM.
|
|
4
|
+
*/
|
|
5
|
+
export const removeElements = async (session, options) => {
|
|
6
|
+
await session.sendAndWait('DOM.enable');
|
|
7
|
+
const rootId = await getDomRootId(session);
|
|
8
|
+
const { allNodeIds, nodeIds } = await resolveSelectorMatches(session, rootId, options.selector, options.all ?? false, options.text);
|
|
9
|
+
if (nodeIds.length === 0) {
|
|
10
|
+
return { allNodeIds, removedCount: 0 };
|
|
11
|
+
}
|
|
12
|
+
for (const nodeId of nodeIds) {
|
|
13
|
+
const resolved = (await session.sendAndWait('DOM.resolveNode', { nodeId }));
|
|
14
|
+
const objectId = resolved.object?.objectId;
|
|
15
|
+
if (!objectId) {
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
await session.sendAndWait('Runtime.callFunctionOn', {
|
|
19
|
+
objectId,
|
|
20
|
+
functionDeclaration: 'function() { this.remove(); }',
|
|
21
|
+
awaitPromise: false,
|
|
22
|
+
returnByValue: true,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
return { allNodeIds, removedCount: nodeIds.length };
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=remove.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/cdp/dom/remove.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAepE;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,OAAyB,EAAE,OAA8B,EAAiC,EAAE;IAChI,MAAM,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;IAEvC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAA;IAC1C,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IAEnI,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,EAAE,CAAA;IACvC,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAuC,CAAA;QACjH,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAA;QAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,SAAQ;QACT,CAAC;QAED,MAAM,OAAO,CAAC,WAAW,CAAC,wBAAwB,EAAE;YACnD,QAAQ;YACR,mBAAmB,EAAE,+BAA+B;YACpD,YAAY,EAAE,KAAK;YACnB,aAAa,EAAE,IAAI;SACnB,CAAC,CAAA;IACH,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,MAAM,EAAE,CAAA;AACpD,CAAC,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { CdpNode } from './types.js';
|
|
2
|
+
import type { CdpSessionHandle } from '../connection.js';
|
|
3
|
+
export type SelectorMatchResult = {
|
|
4
|
+
/** All matched node IDs. */
|
|
5
|
+
allNodeIds: number[];
|
|
6
|
+
/** Node IDs to process (respects `all` flag). */
|
|
7
|
+
nodeIds: number[];
|
|
8
|
+
};
|
|
9
|
+
export declare const getDomRootId: (session: CdpSessionHandle) => Promise<number>;
|
|
10
|
+
export declare const resolveSelectorMatches: (session: CdpSessionHandle, rootId: number, selector: string, all: boolean, text?: string) => Promise<SelectorMatchResult>;
|
|
11
|
+
/**
|
|
12
|
+
* Poll for selector matches until at least one is found or the deadline is reached.
|
|
13
|
+
* Returns the last resolution result (which may have zero matches on timeout).
|
|
14
|
+
*/
|
|
15
|
+
export declare const waitForSelectorMatches: (session: CdpSessionHandle, selector: string, all: boolean, text: string | undefined, waitMs: number, intervalMs?: number) => Promise<SelectorMatchResult>;
|
|
16
|
+
export declare const toAttributesRecord: (attributes?: string[]) => Record<string, string>;
|
|
17
|
+
export declare const countElementChildren: (children?: CdpNode[]) => number;
|
|
18
|
+
export declare const clamp: (value: number, min: number, max: number) => number;
|
|
19
|
+
//# sourceMappingURL=selector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selector.d.ts","sourceRoot":"","sources":["../../../src/cdp/dom/selector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAmBxD,MAAM,MAAM,mBAAmB,GAAG;IACjC,4BAA4B;IAC5B,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,iDAAiD;IACjD,OAAO,EAAE,MAAM,EAAE,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,YAAY,GAAU,SAAS,gBAAgB,KAAG,OAAO,CAAC,MAAM,CAkC5E,CAAA;AAED,eAAO,MAAM,sBAAsB,GAClC,SAAS,gBAAgB,EACzB,QAAQ,MAAM,EACd,UAAU,MAAM,EAChB,KAAK,OAAO,EACZ,OAAO,MAAM,KACX,OAAO,CAAC,mBAAmB,CAa7B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GAClC,SAAS,gBAAgB,EACzB,UAAU,MAAM,EAChB,KAAK,OAAO,EACZ,MAAM,MAAM,GAAG,SAAS,EACxB,QAAQ,MAAM,EACd,mBAAgB,KACd,OAAO,CAAC,mBAAmB,CAU7B,CAAA;AAMD,eAAO,MAAM,kBAAkB,GAAI,aAAa,MAAM,EAAE,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAc/E,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,WAAW,OAAO,EAAE,KAAG,MAK3D,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,KAAG,MAE/D,CAAA"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { filterNodesByText } from '../text-filter.js';
|
|
2
|
+
export const getDomRootId = async (session) => {
|
|
3
|
+
const targetContext = session.getTargetContext?.();
|
|
4
|
+
if (targetContext?.kind === 'frame') {
|
|
5
|
+
// Extension mode keeps one tab-level debugger session and switches the active frame via
|
|
6
|
+
// executionContextId. Resolving `document` in that context gives us the right DOM root.
|
|
7
|
+
if (targetContext.executionContextId == null) {
|
|
8
|
+
throw new Error(`Selected frame is not ready yet: ${targetContext.frameId}`);
|
|
9
|
+
}
|
|
10
|
+
const evaluated = (await session.sendAndWait('Runtime.evaluate', {
|
|
11
|
+
expression: 'document',
|
|
12
|
+
contextId: targetContext.executionContextId,
|
|
13
|
+
returnByValue: false,
|
|
14
|
+
}));
|
|
15
|
+
const objectId = evaluated.result?.objectId;
|
|
16
|
+
if (!objectId) {
|
|
17
|
+
throw new Error(`Unable to resolve document root for frame: ${targetContext.frameId}`);
|
|
18
|
+
}
|
|
19
|
+
const requested = (await session.sendAndWait('DOM.requestNode', { objectId }));
|
|
20
|
+
if (!requested.nodeId) {
|
|
21
|
+
throw new Error(`Unable to resolve DOM root for frame: ${targetContext.frameId}`);
|
|
22
|
+
}
|
|
23
|
+
return requested.nodeId;
|
|
24
|
+
}
|
|
25
|
+
const result = (await session.sendAndWait('DOM.getDocument', { depth: 1 }));
|
|
26
|
+
const rootId = result.root?.nodeId;
|
|
27
|
+
if (!rootId) {
|
|
28
|
+
throw new Error('Unable to resolve DOM root');
|
|
29
|
+
}
|
|
30
|
+
return rootId;
|
|
31
|
+
};
|
|
32
|
+
export const resolveSelectorMatches = async (session, rootId, selector, all, text) => {
|
|
33
|
+
// Always use querySelectorAll to get the true match count
|
|
34
|
+
const result = (await session.sendAndWait('DOM.querySelectorAll', { nodeId: rootId, selector }));
|
|
35
|
+
let allNodeIds = result.nodeIds ?? [];
|
|
36
|
+
if (text != null) {
|
|
37
|
+
allNodeIds = await filterNodesByText(session, allNodeIds, text);
|
|
38
|
+
}
|
|
39
|
+
// If all=false, only return the first match (if any)
|
|
40
|
+
const nodeIds = all ? allNodeIds : allNodeIds.slice(0, 1);
|
|
41
|
+
return { allNodeIds, nodeIds };
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Poll for selector matches until at least one is found or the deadline is reached.
|
|
45
|
+
* Returns the last resolution result (which may have zero matches on timeout).
|
|
46
|
+
*/
|
|
47
|
+
export const waitForSelectorMatches = async (session, selector, all, text, waitMs, intervalMs = 100) => {
|
|
48
|
+
const deadline = Date.now() + waitMs;
|
|
49
|
+
while (true) {
|
|
50
|
+
const rootId = await getDomRootId(session);
|
|
51
|
+
const result = await resolveSelectorMatches(session, rootId, selector, all, text);
|
|
52
|
+
if (result.allNodeIds.length > 0)
|
|
53
|
+
return result;
|
|
54
|
+
const remaining = deadline - Date.now();
|
|
55
|
+
if (remaining <= 0)
|
|
56
|
+
return result;
|
|
57
|
+
await new Promise((r) => setTimeout(r, Math.min(intervalMs, remaining)));
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
61
|
+
// Shared helpers
|
|
62
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
63
|
+
export const toAttributesRecord = (attributes) => {
|
|
64
|
+
if (!attributes || attributes.length === 0) {
|
|
65
|
+
return {};
|
|
66
|
+
}
|
|
67
|
+
const record = {};
|
|
68
|
+
for (let i = 0; i < attributes.length; i += 2) {
|
|
69
|
+
const key = attributes[i];
|
|
70
|
+
const value = attributes[i + 1] ?? '';
|
|
71
|
+
if (key) {
|
|
72
|
+
record[key] = value;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return record;
|
|
76
|
+
};
|
|
77
|
+
export const countElementChildren = (children) => {
|
|
78
|
+
if (!children) {
|
|
79
|
+
return 0;
|
|
80
|
+
}
|
|
81
|
+
return children.filter((c) => c.nodeType === 1).length;
|
|
82
|
+
};
|
|
83
|
+
export const clamp = (value, min, max) => {
|
|
84
|
+
return Math.max(min, Math.min(max, value));
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selector.js","sourceRoot":"","sources":["../../../src/cdp/dom/selector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAyBrD,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,OAAyB,EAAmB,EAAE;IAChF,MAAM,aAAa,GAAG,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAA;IAClD,IAAI,aAAa,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;QACrC,wFAAwF;QACxF,wFAAwF;QACxF,IAAI,aAAa,CAAC,kBAAkB,IAAI,IAAI,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,oCAAoC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAA;QAC7E,CAAC;QAED,MAAM,SAAS,GAAG,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,kBAAkB,EAAE;YAChE,UAAU,EAAE,UAAU;YACtB,SAAS,EAAE,aAAa,CAAC,kBAAkB;YAC3C,aAAa,EAAE,KAAK;SACpB,CAAC,CAAuC,CAAA;QAEzC,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAA;QAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,8CAA8C,aAAa,CAAC,OAAO,EAAE,CAAC,CAAA;QACvF,CAAC;QAED,MAAM,SAAS,GAAG,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAwB,CAAA;QACrG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,yCAAyC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAA;QAClF,CAAC;QAED,OAAO,SAAS,CAAC,MAAM,CAAA;IACxB,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAsB,CAAA;IAChG,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,CAAA;IAClC,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;IAC9C,CAAC;IACD,OAAO,MAAM,CAAA;AACd,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAC1C,OAAyB,EACzB,MAAc,EACd,QAAgB,EAChB,GAAY,EACZ,IAAa,EACkB,EAAE;IACjC,0DAA0D;IAC1D,MAAM,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAsB,CAAA;IACrH,IAAI,UAAU,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAA;IAErC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QAClB,UAAU,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;IAChE,CAAC;IAED,qDAAqD;IACrD,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAEzD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAA;AAC/B,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAC1C,OAAyB,EACzB,QAAgB,EAChB,GAAY,EACZ,IAAwB,EACxB,MAAc,EACd,UAAU,GAAG,GAAG,EACe,EAAE;IACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAA;IACpC,OAAO,IAAI,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAA;QAC1C,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QACjF,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,MAAM,CAAA;QAC/C,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACvC,IAAI,SAAS,IAAI,CAAC;YAAE,OAAO,MAAM,CAAA;QACjC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAA;IACzE,CAAC;AACF,CAAC,CAAA;AAED,gFAAgF;AAChF,iBAAiB;AACjB,gFAAgF;AAEhF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,UAAqB,EAA0B,EAAE;IACnF,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO,EAAE,CAAA;IACV,CAAC;IAED,MAAM,MAAM,GAA2B,EAAE,CAAA;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;QACzB,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;QACrC,IAAI,GAAG,EAAE,CAAC;YACT,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACpB,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAA;AACd,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,QAAoB,EAAU,EAAE;IACpE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,OAAO,CAAC,CAAA;IACT,CAAC;IACD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,MAAM,CAAA;AACvD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW,EAAU,EAAE;IACxE,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAA;AAC3C,CAAC,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CdpSessionHandle } from '../connection.js';
|
|
2
|
+
/** Options for setting files on file input elements. */
|
|
3
|
+
export type SetFileInputFilesOptions = {
|
|
4
|
+
selector: string;
|
|
5
|
+
files: string[];
|
|
6
|
+
all?: boolean;
|
|
7
|
+
text?: string;
|
|
8
|
+
};
|
|
9
|
+
/** Result of setFileInputFiles operation. */
|
|
10
|
+
export type SetFileInputFilesResult = {
|
|
11
|
+
allNodeIds: number[];
|
|
12
|
+
updatedCount: number;
|
|
13
|
+
};
|
|
14
|
+
/** Set files on pre-resolved node IDs. Skips selector resolution. */
|
|
15
|
+
export declare const setFileOnResolvedNodes: (session: CdpSessionHandle, nodeIds: number[], files: string[]) => Promise<number>;
|
|
16
|
+
/**
|
|
17
|
+
* Set files on `<input type="file">` element(s) matching a CSS selector.
|
|
18
|
+
* Uses CDP's `DOM.setFileInputFiles` which reads files directly from disk.
|
|
19
|
+
*/
|
|
20
|
+
export declare const setFileInputFiles: (session: CdpSessionHandle, options: SetFileInputFilesOptions) => Promise<SetFileInputFilesResult>;
|
|
21
|
+
//# sourceMappingURL=setFile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setFile.d.ts","sourceRoot":"","sources":["../../../src/cdp/dom/setFile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAGxD,wDAAwD;AACxD,MAAM,MAAM,wBAAwB,GAAG;IACtC,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,6CAA6C;AAC7C,MAAM,MAAM,uBAAuB,GAAG;IACrC,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,qEAAqE;AACrE,eAAO,MAAM,sBAAsB,GAAU,SAAS,gBAAgB,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,MAAM,EAAE,KAAG,OAAO,CAAC,MAAM,CAW1H,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAU,SAAS,gBAAgB,EAAE,SAAS,wBAAwB,KAAG,OAAO,CAAC,uBAAuB,CAQrI,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { getDomRootId, resolveSelectorMatches } from './selector.js';
|
|
2
|
+
/** Set files on pre-resolved node IDs. Skips selector resolution. */
|
|
3
|
+
export const setFileOnResolvedNodes = async (session, nodeIds, files) => {
|
|
4
|
+
if (nodeIds.length === 0)
|
|
5
|
+
return 0;
|
|
6
|
+
for (const nodeId of nodeIds) {
|
|
7
|
+
await session.sendAndWait('DOM.setFileInputFiles', {
|
|
8
|
+
files,
|
|
9
|
+
nodeId,
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
return nodeIds.length;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Set files on `<input type="file">` element(s) matching a CSS selector.
|
|
16
|
+
* Uses CDP's `DOM.setFileInputFiles` which reads files directly from disk.
|
|
17
|
+
*/
|
|
18
|
+
export const setFileInputFiles = async (session, options) => {
|
|
19
|
+
await session.sendAndWait('DOM.enable');
|
|
20
|
+
const rootId = await getDomRootId(session);
|
|
21
|
+
const { allNodeIds, nodeIds } = await resolveSelectorMatches(session, rootId, options.selector, options.all ?? false, options.text);
|
|
22
|
+
const updatedCount = await setFileOnResolvedNodes(session, nodeIds, options.files);
|
|
23
|
+
return { allNodeIds, updatedCount };
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=setFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setFile.js","sourceRoot":"","sources":["../../../src/cdp/dom/setFile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAgBpE,qEAAqE;AACrE,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,OAAyB,EAAE,OAAiB,EAAE,KAAe,EAAmB,EAAE;IAC9H,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IAElC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,MAAM,OAAO,CAAC,WAAW,CAAC,uBAAuB,EAAE;YAClD,KAAK;YACL,MAAM;SACN,CAAC,CAAA;IACH,CAAC;IAED,OAAO,OAAO,CAAC,MAAM,CAAA;AACtB,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,OAAyB,EAAE,OAAiC,EAAoC,EAAE;IACzI,MAAM,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;IAEvC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAA;IAC1C,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IAEnI,MAAM,YAAY,GAAG,MAAM,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;IAClF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAA;AACpC,CAAC,CAAA"}
|