@jshookmcp/jshook 0.3.2 → 0.3.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 +19 -4
- package/README.zh.md +19 -4
- package/dist/AntiCheatDetector-B-mz4DK_.mjs +1 -0
- package/dist/{BrowserSessionCoordinator-BJ-HOxo0.mjs → BrowserSessionCoordinator-Cdic8FsH.mjs} +1 -1
- package/dist/CodeAnalyzerDataFlow-a-NkwcaG.mjs +2 -0
- package/dist/CodeInjector-B099WO6x.mjs +1 -0
- package/dist/ConsoleMonitor-BZRqrBH-.mjs +306 -0
- package/dist/CpuEngine-BC8jayy9.mjs +1 -0
- package/dist/DartAotExecutor-B7WVTKsd.mjs +1 -0
- package/dist/DartAotLoader-BxdhW-K2.mjs +2 -0
- package/dist/DarwinAPI-DzojdfjF.mjs +1 -0
- package/dist/DetailedDataManager-Dgh402Gp.mjs +5 -0
- package/dist/ExecutionSandbox-QbWQmzuC.mjs +45 -0
- package/dist/ExtensionManager.tools-D3h818Xs.mjs +1 -0
- package/dist/FingerprintManager-D9Zlr6be.mjs +1 -0
- package/dist/HardwareBreakpoint-C_lJ22bj.mjs +1 -0
- package/dist/HeapAnalyzer-bJbLvzp6.mjs +1 -0
- package/dist/HookPatternScanner-yx4vJ9sd.mjs +1 -0
- package/dist/InstrumentationSession-Cv1wikLA.mjs +1 -0
- package/dist/IntegrityScanner-BB7sw-SA.mjs +1 -0
- package/dist/JScramblerDeobfuscator-NVR5VatT.mjs +1 -0
- package/dist/MCPServer.activation.ttl-C2wOCMLV.mjs +1 -0
- package/dist/MCPServer.search.helpers-DlassAew.mjs +2 -0
- package/dist/MCPServer.search.validation-DnifPCCv.mjs +1 -0
- package/dist/MemoryController-CCsGuGJS.mjs +2 -0
- package/dist/{MemoryScanSession-DG_F-PjE.mjs → MemoryScanSession-BZ2A9Ph1.mjs} +1 -1
- package/dist/MemoryScanner-DAxsq7Sx.mjs +1 -0
- package/dist/NativeMemoryManager.impl-BIJzXMqH.mjs +1 -0
- package/dist/{NativeMemoryManager.utils-BHy1P_jM.mjs → NativeMemoryManager.utils-CMoul2an.mjs} +1 -1
- package/dist/PEAnalyzer-CB_kaTis.mjs +1 -0
- package/dist/PackerDeobfuscator-BpwGjxDL.mjs +7 -0
- package/dist/PointerChainEngine-B6SYv6ZM.mjs +1 -0
- package/dist/ProcessRegistry-C5W1Tkn9.mjs +1 -0
- package/dist/{handlers-mPFiNPe8.mjs → QuickJSSandbox-CIde-jzG.mjs} +2 -5
- package/dist/{ResponseBuilder-BfWP-uaT.mjs → ResponseBuilder-BLicSCjn.mjs} +1 -1
- package/dist/ReverseEvidenceGraph-DJzk0GQz.mjs +2 -0
- package/dist/ServerRuntimeState-DGXNv8Ji.mjs +1 -0
- package/dist/Speedhack-MGoeq1ZS.mjs +1 -0
- package/dist/StructureAnalyzer-CCTWAXR3.mjs +2 -0
- package/dist/ToolHandlerMap-C40EmuLT.mjs +1 -0
- package/dist/{ToolProbe-C7ZU2x7M.mjs → ToolProbe-B02GC3ZY.mjs} +1 -1
- package/dist/ToolRegistry-CzqQxFqf.mjs +1 -0
- package/dist/ToolRouter.policy-Bgb3S8jc.mjs +4 -0
- package/dist/TraceRecorder-BfeCTQUj.mjs +407 -0
- package/dist/VMDeobfuscator-BHtkV850.mjs +1 -0
- package/dist/Win32API-G7QPyckq.mjs +1 -0
- package/dist/{Win32Debug-CYrIQBvr.mjs → Win32Debug-6yzmtv5b.mjs} +1 -1
- package/dist/allocation-track-CiI-CnaI.mjs +1 -0
- package/dist/analysis-CojUzwX-.mjs +27 -0
- package/dist/antidebug-CgU84TE1.mjs +1 -0
- package/dist/apk-DrPBsOq8.mjs +1 -0
- package/dist/artifactRetention-Bk6fW2uF.mjs +1 -0
- package/dist/artifacts-Bx9GLx4J.mjs +1 -0
- package/dist/ast-bridge-BlOrmVAv.mjs +1 -0
- package/dist/ast-utils-B9E5k_v1.mjs +1 -0
- package/dist/{betterSqlite3-Brtq-SIQ.mjs → betterSqlite3-Bdo_ifuJ.mjs} +1 -1
- package/dist/binary-instrument-DiE1BP0x.mjs +12 -0
- package/dist/boringssl-inspector-C6M3sOga.mjs +2 -0
- package/dist/browser-QDUu5ML9.mjs +29 -0
- package/dist/{handlers-yo_xYzT8.mjs → canvas-g5kmLdY-.mjs} +1098 -24
- package/dist/{capabilities-CyXuKUl1.mjs → capabilities-DwzyxL2w.mjs} +1 -1
- package/dist/cdp-session-Dy4OwMOP.mjs +1 -0
- package/dist/collector-Cld4i-E4.mjs +1 -0
- package/dist/config-5ODJ3Aj0.mjs +3 -0
- package/dist/constants-nvsLpSri.mjs +1 -0
- package/dist/coordination-C6y2gM9O.mjs +98 -0
- package/dist/coverage-and-block--cWjjEe5.mjs +1 -0
- package/dist/dart-inspector-D4IKxZ6u.mjs +0 -0
- package/dist/debugger-C2SpiXoO.mjs +1 -0
- package/dist/definitions-0mtilYzG.mjs +1 -0
- package/dist/definitions-9csunmeX.mjs +1 -0
- package/dist/definitions-B11MudW_.mjs +1 -0
- package/dist/definitions-BKpRDjcI.mjs +1 -0
- package/dist/definitions-BXE3H4re.mjs +1 -0
- package/dist/definitions-BlPHe5DX.mjs +1 -0
- package/dist/definitions-Bob4XMxI.mjs +27 -0
- package/dist/definitions-BpIQN2nm.mjs +1 -0
- package/dist/definitions-BvolWeSu.mjs +1 -0
- package/dist/definitions-C-6j3Ejl.mjs +1 -0
- package/dist/definitions-C-AdFfFu.mjs +1 -0
- package/dist/definitions-CArdw_9T.mjs +1 -0
- package/dist/definitions-CCvIcRrT.mjs +1 -0
- package/dist/definitions-CJPE5PIl.mjs +1 -0
- package/dist/definitions-CbqeW06u.mjs +1 -0
- package/dist/definitions-Cexmkypg.mjs +1 -0
- package/dist/definitions-D1dxl8qt.mjs +1 -0
- package/dist/definitions-D3uT-ZbU.mjs +1 -0
- package/dist/definitions-DtOY5iUc.mjs +1 -0
- package/dist/{definitions-DxFNRQNK2.mjs → definitions-DvrYdDCJ2.mjs} +1 -1
- package/dist/{definitions-Cenu6mxo.mjs → definitions-aeRd5DAR.mjs} +1 -1
- package/dist/definitions-ihxOqOC4.mjs +1 -0
- package/dist/deopt-trace-qnAcC931.mjs +17 -0
- package/dist/disasm-DoxSucGp.mjs +1 -0
- package/dist/dumpsys-parser-Du-5ruEe.mjs +2 -0
- package/dist/encoding-UMtwgy4M.mjs +2 -0
- package/dist/ensure-browser-core-BP70x0TB.mjs +285 -0
- package/dist/factory-BeND77hf.mjs +2 -0
- package/dist/graphql-CF7QKJME.mjs +68 -0
- package/dist/grpc-raw-Dp7ps2sv.mjs +1 -0
- package/dist/handlers--qCl9vNv.mjs +1 -0
- package/dist/handlers-BHIu1LqA.mjs +1 -0
- package/dist/{antidebug-7L3ygj_9.mjs → handlers-BQ4K8Jbr.mjs} +2 -2
- package/dist/handlers-BxQv-wtf.mjs +8 -0
- package/dist/handlers-ByYG27-5.mjs +1 -0
- package/dist/handlers-C0I9-BtX.mjs +5 -0
- package/dist/handlers-CL0Iokmw.mjs +1 -0
- package/dist/handlers-CNbhIdSK.mjs +4 -0
- package/dist/handlers-CnTTSJFs.mjs +109 -0
- package/dist/handlers-CoDx6akJ2.mjs +49 -0
- package/dist/{handlers-0yKLRIfo.mjs → handlers-DASJI0Pn.mjs} +1 -1
- package/dist/handlers-DRKMaA-_.mjs +74 -0
- package/dist/handlers-Dalu0olz.mjs +2 -0
- package/dist/handlers-KY0g31ny.mjs +9 -0
- package/dist/handlers-oGo60aVv.mjs +1 -0
- package/dist/handlers.impl-BTXLw6Qc.mjs +1 -0
- package/dist/heap-sampling-BqdiU-5j.mjs +1 -0
- package/dist/{hooks-D4XLfgtV.mjs → hooks-COK3t5rT.mjs} +52 -33
- package/dist/index.mjs +11 -11
- package/dist/logger-BGCcd-jJ.mjs +1 -0
- package/dist/macro-nUYUjKNZ.mjs +2 -0
- package/dist/maintenance-CfnE7ZKU.mjs +4 -0
- package/dist/manifest-7EOTUc0D.mjs +1 -0
- package/dist/manifest-B5ujuQmf.mjs +1 -0
- package/dist/manifest-BErXl3zn.mjs +1 -0
- package/dist/manifest-BKA-mD3J.mjs +1 -0
- package/dist/manifest-BUXj23bX.mjs +1 -0
- package/dist/manifest-BfXt9cau.mjs +1 -0
- package/dist/manifest-Bx-tpURK.mjs +1 -0
- package/dist/manifest-C0owVAdq.mjs +1 -0
- package/dist/manifest-C5XqYc9o.mjs +1 -0
- package/dist/manifest-CVKzLjsA.mjs +1 -0
- package/dist/manifest-CaeFjdhj.mjs +1 -0
- package/dist/manifest-CegBgip0.mjs +1 -0
- package/dist/manifest-CoJHqlgS.mjs +1 -0
- package/dist/manifest-D0dbtDqd.mjs +1 -0
- package/dist/manifest-D5Gr8ujd.mjs +12 -0
- package/dist/manifest-D82z-5og.mjs +1 -0
- package/dist/manifest-DA2afIwh.mjs +1 -0
- package/dist/manifest-DAbiFP5o.mjs +1 -0
- package/dist/manifest-DEY0s1O72.mjs +1 -0
- package/dist/manifest-DTOqNqiA.mjs +1 -0
- package/dist/manifest-DZ6ELNgX.mjs +1 -0
- package/dist/manifest-DjHkjddT.mjs +1 -0
- package/dist/manifest-DocA_itf2.mjs +1 -0
- package/dist/manifest-Dpnhvfq0.mjs +1 -0
- package/dist/manifest-DucPMG_a.mjs +1 -0
- package/dist/manifest-Dw5yYEac.mjs +1 -0
- package/dist/manifest-Ic_Cg66S.mjs +1 -0
- package/dist/manifest-JHaG6GMN.mjs +1 -0
- package/dist/manifest-QdkIzmYM.mjs +1 -0
- package/dist/manifest-YZqaCe25.mjs +1 -0
- package/dist/manifest-f0lUeXwq.mjs +1 -0
- package/dist/manifest-h-Ebisf8.mjs +1 -0
- package/dist/manifest-oOfTymBS.mjs +1 -0
- package/dist/manifest-qXqrO6KC.mjs +2 -0
- package/dist/mapsParser-DrJoeC0c.mjs +1 -0
- package/dist/modules-CC_ADmwi.mjs +333 -0
- package/dist/mojo-ipc-kVztXYw-.mjs +140 -0
- package/dist/native-D9ouskXO.mjs +961 -0
- package/dist/native-bridge-Dzd7hYoq.mjs +1 -0
- package/dist/network-C5Y-S87J.mjs +7 -0
- package/dist/one-gadget-CiWFE17F.mjs +1 -0
- package/dist/outputPaths-CHtELDyi.mjs +1 -0
- package/dist/parse-args-B6dwWc9k.mjs +1 -0
- package/dist/platform-BIXgJaM3.mjs +94 -0
- package/dist/process-aDIfLC0v.mjs +6 -0
- package/dist/proxy-DsHsQ1I4.mjs +2 -0
- package/dist/registry-7h8jJ9y9.mjs +1 -0
- package/dist/{registry-DH4sc1dt.mjs → registry-DJDnkQW2.mjs} +1 -1
- package/dist/response-R8ghbZSb.mjs +1 -0
- package/dist/retry-policy-DtYv0kDi.mjs +1 -0
- package/dist/reverseEngineeringConfig-BhZLOa3C.mjs +1 -0
- package/dist/safeOutput-Dt4mfjXA.mjs +1 -0
- package/dist/search-defaults-BBRJNAzC.mjs +1 -0
- package/dist/server/plugin-api.mjs +1 -1
- package/dist/server/search/EmbeddingWorker.d.mts +1 -0
- package/dist/server/search/EmbeddingWorker.mjs +1 -0
- package/dist/shared-BKtWZDGN.mjs +1 -0
- package/dist/sourcemap-2VIeVeKw.mjs +3 -0
- package/dist/streaming-DkpE3GGU.mjs +15 -0
- package/dist/syscall-DGZoYM_U.mjs +1 -0
- package/dist/transform-BJqsBC_-.mjs +105 -0
- package/dist/turbofan-graph-CbGHNVtl.mjs +1 -0
- package/dist/turbofan-inspect--NdCuYXi.mjs +23 -0
- package/dist/types-CWSvzmIh.mjs +1 -0
- package/dist/v8-inspector-CTJo08-K.mjs +297 -0
- package/dist/wasm-DX4Qm2Vs.mjs +235 -0
- package/dist/weakrefs-inspect-CnhaF-rN.mjs +57 -0
- package/dist/webgpu-D4-DxbxZ.mjs +6 -0
- package/dist/workflow-DHktRNF2.mjs +108 -0
- package/package.json +33 -27
- package/dist/AntiCheatDetector-B6d4Qe9D.mjs +0 -1
- package/dist/CodeInjector-Cll_7bLJ.mjs +0 -1
- package/dist/ConsoleMonitor-CxDJV15E.mjs +0 -306
- package/dist/DOMInspector-C19J4zeq.mjs +0 -95
- package/dist/DarwinAPI-ZfQdpLNI.mjs +0 -1
- package/dist/DetailedDataManager-DmQ1LT-W.mjs +0 -1
- package/dist/ExtensionManager-BD724zkO.mjs +0 -1
- package/dist/ExtensionManager.tools-oVMJgPcN.mjs +0 -1
- package/dist/FingerprintManager-DT0EAUEo.mjs +0 -1
- package/dist/HardwareBreakpoint-BUfPdp0f.mjs +0 -1
- package/dist/HeapAnalyzer-B_aqY8oj.mjs +0 -1
- package/dist/InstrumentationSession-D_G1ZPyd.mjs +0 -1
- package/dist/MCPServer.search.handlers.domain-BbS-6LnX.mjs +0 -1
- package/dist/MemoryController-X1XNSn1n.mjs +0 -2
- package/dist/MemoryScanner-g1_L1ub5.mjs +0 -1
- package/dist/NativeMemoryManager.impl-DniBe2wf.mjs +0 -1
- package/dist/NetworkMonitor-B_-au6aV.mjs +0 -185
- package/dist/PEAnalyzer-yWQaGrcx.mjs +0 -1
- package/dist/PageController-Dfsm1_o7.mjs +0 -1
- package/dist/PointerChainEngine-BhCUkmxY.mjs +0 -1
- package/dist/PrerequisiteError-BjCQA-gK.mjs +0 -1
- package/dist/ProcessRegistry-C-bN48oR.mjs +0 -1
- package/dist/ReverseEvidenceGraph-BhSYYdiI.mjs +0 -2
- package/dist/ScriptManager-LWGPTdvD.mjs +0 -7
- package/dist/ServerRuntimeState-D2bWHqEE.mjs +0 -1
- package/dist/Speedhack-yseDPSZ9.mjs +0 -1
- package/dist/StructureAnalyzer-C5lpuZkg.mjs +0 -2
- package/dist/ToolCatalog-CYdD9F5f.mjs +0 -1
- package/dist/ToolRegistry-C5oB8KP8.mjs +0 -1
- package/dist/ToolRouter.policy-CfhJczkt.mjs +0 -4
- package/dist/TraceRecorder-BiJWBXHX.mjs +0 -272
- package/dist/VersionDetector-CHT36Az0.mjs +0 -9
- package/dist/Win32API-eUCF57l_.mjs +0 -1
- package/dist/WorkflowEngine-D876meOO.mjs +0 -1
- package/dist/analysis-D4swdMvq.mjs +0 -6
- package/dist/apk-packer-BqXcInnX.mjs +0 -1
- package/dist/artifactRetention-BCPQASm7.mjs +0 -1
- package/dist/artifacts-CkodUM4j.mjs +0 -1
- package/dist/binary-instrument-DU7V6TUM.mjs +0 -7
- package/dist/binary-secrets-PdMVoyt0.mjs +0 -1
- package/dist/boringssl-inspector-BBaJwwkU.mjs +0 -2
- package/dist/browser-Qqco2rOT.mjs +0 -11
- package/dist/collector-Bpl6qy2L.mjs +0 -1
- package/dist/constants-BYj8Xek8.mjs +0 -1
- package/dist/coordination-CWXW1o8K.mjs +0 -1
- package/dist/dart-inspector-7AkPeZ_Q.mjs +0 -0
- package/dist/debugger-DyALjYMk.mjs +0 -1
- package/dist/definitions-BWxBke3r.mjs +0 -1
- package/dist/definitions-BYwATKc-.mjs +0 -1
- package/dist/definitions-B_83XfNQ.mjs +0 -1
- package/dist/definitions-Bf3H1EwV.mjs +0 -1
- package/dist/definitions-BftdXgXI.mjs +0 -1
- package/dist/definitions-Bio5XJYy.mjs +0 -1
- package/dist/definitions-C3qNgSn1.mjs +0 -1
- package/dist/definitions-CB6vmOer.mjs +0 -1
- package/dist/definitions-CMZRSy3k.mjs +0 -1
- package/dist/definitions-CQd7yCQH.mjs +0 -1
- package/dist/definitions-CT8ln6GQ.mjs +0 -1
- package/dist/definitions-D4g-MS10.mjs +0 -1
- package/dist/definitions-D5wl_8HN.mjs +0 -1
- package/dist/definitions-DAQm1Xar.mjs +0 -1
- package/dist/definitions-DP1vgxEY.mjs +0 -1
- package/dist/definitions-Ibci7e_L.mjs +0 -1
- package/dist/definitions-OeLvmlQy.mjs +0 -1
- package/dist/definitions-RZYGD_Ey.mjs +0 -1
- package/dist/definitions-Tls8c0A0.mjs +0 -1
- package/dist/definitions-bybDvnG0.mjs +0 -26
- package/dist/definitions-l7TjdE6V.mjs +0 -1
- package/dist/encoding-ycOaz8Vr.mjs +0 -2
- package/dist/ensure-browser-core-DxWC-NTp.mjs +0 -1
- package/dist/factory-CKr4fAE1.mjs +0 -1
- package/dist/flat-target-session-DvcQX7J5.mjs +0 -1
- package/dist/graphql-B2TiPEow.mjs +0 -62
- package/dist/handlers-8zN_vBIz.mjs +0 -1
- package/dist/handlers-B62K4FTc.mjs +0 -1
- package/dist/handlers-BpDlVVVU.mjs +0 -1
- package/dist/handlers-CMJK7m1c.mjs +0 -31
- package/dist/handlers-D2ZOul9p.mjs +0 -54
- package/dist/handlers-D5E40ssn.mjs +0 -5
- package/dist/handlers-DGbdQAgD.mjs +0 -4
- package/dist/handlers-DHO3rjsW.mjs +0 -1
- package/dist/handlers-FJ80VzUI.mjs +0 -2
- package/dist/handlers-VHWrxbM_.mjs +0 -1
- package/dist/handlers-l8QIKqBj.mjs +0 -2
- package/dist/handlers.impl-D9Hh8Bgl.mjs +0 -1
- package/dist/jadx-search-B_Yse0Zh.mjs +0 -5
- package/dist/logger-sBC6IdRT.mjs +0 -1
- package/dist/maintenance-BUpIukhg.mjs +0 -1
- package/dist/manifest-0Jpt_AQa.mjs +0 -1
- package/dist/manifest-B3fZbSWR.mjs +0 -1
- package/dist/manifest-B7NB2rh2.mjs +0 -1
- package/dist/manifest-BDi4nbH1.mjs +0 -1
- package/dist/manifest-BLDfkE7n.mjs +0 -1
- package/dist/manifest-BcXbB4gf.mjs +0 -1
- package/dist/manifest-Bdnc_vrc.mjs +0 -1
- package/dist/manifest-BuYKgCnp.mjs +0 -1
- package/dist/manifest-CBfNnGPV.mjs +0 -1
- package/dist/manifest-CPS1Xv69.mjs +0 -1
- package/dist/manifest-CQH9FhwI.mjs +0 -1
- package/dist/manifest-CRryuZF4.mjs +0 -1
- package/dist/manifest-CctIumog.mjs +0 -1
- package/dist/manifest-CvTe5ZGV2.mjs +0 -1
- package/dist/manifest-D-5GH0DV.mjs +0 -1
- package/dist/manifest-D3Ssf3IC.mjs +0 -1
- package/dist/manifest-D5ck3NvC.mjs +0 -1
- package/dist/manifest-D9jUUJAu.mjs +0 -1
- package/dist/manifest-DCx6w2XV.mjs +0 -1
- package/dist/manifest-DG19q-Ld.mjs +0 -1
- package/dist/manifest-DLMlD0Zc.mjs +0 -1
- package/dist/manifest-DYpn8w_h.mjs +0 -1
- package/dist/manifest-DYzWI8Xs.mjs +0 -1
- package/dist/manifest-D_obs5F4.mjs +0 -1
- package/dist/manifest-DujQqEQR.mjs +0 -2
- package/dist/manifest-DwL2ik8P.mjs +0 -1
- package/dist/manifest-ItF5P8A12.mjs +0 -1
- package/dist/manifest-KZphqIyX.mjs +0 -1
- package/dist/manifest-LG42zPLY2.mjs +0 -1
- package/dist/manifest-LLdI5m4T.mjs +0 -1
- package/dist/manifest-QYbQXJn0.mjs +0 -1
- package/dist/manifest-RcpX_MyZ.mjs +0 -123
- package/dist/manifest-YgVd8Sgz.mjs +0 -1
- package/dist/manifest-Zy7Odg5J.mjs +0 -1
- package/dist/manifest-ff1H7Pdp.mjs +0 -1
- package/dist/manifest-iuhF6pTL2.mjs +0 -1
- package/dist/manifest-nXHmtMSp2.mjs +0 -1
- package/dist/manifest-xWfu6iLo.mjs +0 -1
- package/dist/manifest-yC16OhL2.mjs +0 -1
- package/dist/manifest-ztWJoXy4.mjs +0 -1
- package/dist/matchesWildcardPattern-BAG6LvX5.mjs +0 -1
- package/dist/modules-BPBcSaM-.mjs +0 -333
- package/dist/mojo-ipc-BhwsdVUW.mjs +0 -9
- package/dist/native-j8l473zn.mjs +0 -961
- package/dist/network-T0VRwNPd.mjs +0 -7
- package/dist/outputPaths-B4Ic4RZh.mjs +0 -2
- package/dist/parse-args-Bw413PlW.mjs +0 -1
- package/dist/platform-CzaQtISh.mjs +0 -93
- package/dist/playwright-cdp-fallback-DqFdx9-s.mjs +0 -1
- package/dist/process-CWhsCWrf.mjs +0 -2
- package/dist/proxy-DZFlDsG3.mjs +0 -2
- package/dist/renderer-pid-9tJnZ_9N.mjs +0 -1
- package/dist/response-C7rKQst4.mjs +0 -1
- package/dist/search-defaults-lYBVn_3L.mjs +0 -1
- package/dist/shared-state-board-BSjXLUV1.mjs +0 -1
- package/dist/sourcemap-Dh3Ai_ur.mjs +0 -1
- package/dist/streaming-BcJ0B6ao.mjs +0 -1
- package/dist/transform-DOxzeWPB.mjs +0 -103
- package/dist/types-D9EiE5o9.mjs +0 -1
- package/dist/wasm-CZ_HTfKR.mjs +0 -174
- package/dist/webcrack-C1iYG_EX.mjs +0 -46
- package/dist/workflow-BdwQmARn.mjs +0 -101
- /package/dist/{CacheAdapters-CsNtQIR8.mjs → CacheAdapters-BlDrQg8f.mjs} +0 -0
- /package/dist/{EventBus-DL8iLA09.mjs → EventBus-Cm-t-B65.mjs} +0 -0
- /package/dist/{EvidenceGraphBridge-BtbwXsLC.mjs → EvidenceGraphBridge-DBDc0wUA.mjs} +0 -0
- /package/dist/{HookGeneratorBuilders.core.generators.storage-DzD6dIJd.mjs → HookGeneratorBuilders.core.generators.storage-CWaWpOHa.mjs} +0 -0
- /package/dist/{RingBuffer-Dm54ELKT.mjs → RingBuffer-B6RTHmij.mjs} +0 -0
- /package/dist/{StealthVerifier-BmcxfwSF.mjs → StealthVerifier-DMBrtkhN.mjs} +0 -0
- /package/dist/{ToolError-DWU_z7gp.mjs → ToolError-g3rjWzhx.mjs} +0 -0
- /package/dist/{authorization-schema-BOFwSXUN.mjs → authorization-schema-Jtikc5Yt.mjs} +0 -0
- /package/dist/{bind-helpers-m2U8glkF.mjs → bind-helpers-D0mGAOof.mjs} +0 -0
- /package/dist/{concurrency-DCr8WQ2M.mjs → concurrency-Dehnw4JC.mjs} +0 -0
- /package/dist/{evidence-graph-bridge-CV_UdYqj.mjs → evidence-graph-bridge-eT9icP6a.mjs} +0 -0
- /package/dist/{formatAddress-vLA_hOJt.mjs → formatAddress-DAcw4Ckg.mjs} +0 -0
- /package/dist/{chunk-C_pMuVsO.mjs → rolldown-runtime-88NL7fhV.mjs} +0 -0
- /package/dist/{ssrf-policy-CsIJGkpd.mjs → ssrf-policy-B72vdy23.mjs} +0 -0
- /package/dist/{tool-builder-qif8M9-K.mjs → tool-builder-CpLh-UQd.mjs} +0 -0
- /package/dist/{types-Fz69RzbZ.mjs → types-BzPBzmVB.mjs} +0 -0
|
@@ -1,4 +1,487 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{t as e}from"./ToolError-g3rjWzhx.mjs";import{n as t}from"./response-R8ghbZSb.mjs";import{c as n,i as r,l as i,n as a,r as o}from"./parse-args-B6dwWc9k.mjs";import{r as s}from"./ResponseBuilder-BLicSCjn.mjs";import{r as c}from"./capabilities-DwzyxL2w.mjs";import"./definitions-CArdw_9T.mjs";function l(e){let t=e.maxDepth??20,n=e.onlyInteractive??!1;return`(function() {
|
|
2
|
+
function safeProp(obj, key, fallback) {
|
|
3
|
+
try { var v = obj[key]; return v === undefined || v === null ? fallback : v; } catch(e) { return fallback; }
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
function nodeId(node, idx) {
|
|
7
|
+
try {
|
|
8
|
+
if (node.uniqueId !== undefined && node.uniqueId !== null) return 'babylon_' + node.uniqueId;
|
|
9
|
+
} catch(e) {}
|
|
10
|
+
try {
|
|
11
|
+
if (node.id !== undefined && node.id !== null && node.id !== '') return 'babylon_id_' + node.id;
|
|
12
|
+
} catch(e) {}
|
|
13
|
+
var name = node.name || (node.constructor ? node.constructor.name : 'BabylonNode');
|
|
14
|
+
return String(name).replace(/\\s+/g, '_') + '_' + idx;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function getType(node) {
|
|
18
|
+
try {
|
|
19
|
+
var t = node.getClassName ? node.getClassName() : null;
|
|
20
|
+
if (t) return t;
|
|
21
|
+
} catch(e) {}
|
|
22
|
+
return node.constructor ? node.constructor.name : 'BabylonNode';
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function getVec3(node, key) {
|
|
26
|
+
try {
|
|
27
|
+
var v = node[key];
|
|
28
|
+
if (v && typeof v.x === 'number') return { x: v.x, y: v.y, z: v.z };
|
|
29
|
+
} catch(e) {}
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function getMaterialName(node) {
|
|
34
|
+
try {
|
|
35
|
+
var mat = node.material;
|
|
36
|
+
if (!mat) return undefined;
|
|
37
|
+
return mat.name || (mat.getClassName ? mat.getClassName() : (mat.constructor ? mat.constructor.name : 'Material'));
|
|
38
|
+
} catch(e) { return undefined; }
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function getVertexCount(node) {
|
|
42
|
+
try {
|
|
43
|
+
var geom = node.geometry;
|
|
44
|
+
if (geom && geom.getVerticesData) {
|
|
45
|
+
var positions = geom.getVerticesData('position');
|
|
46
|
+
if (positions && positions.length > 0) return positions.length / 3;
|
|
47
|
+
}
|
|
48
|
+
// Fallback for older API: vertexCount stored on geometry
|
|
49
|
+
if (geom && typeof geom.vertexCount === 'number') return geom.vertexCount;
|
|
50
|
+
} catch(e) {}
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function findScene() {
|
|
55
|
+
var BABYLON = window.BABYLON;
|
|
56
|
+
if (!BABYLON || !BABYLON.Engine) return null;
|
|
57
|
+
|
|
58
|
+
// Engine.Instances is the canonical registry
|
|
59
|
+
var instances = BABYLON.Engine.Instances;
|
|
60
|
+
if (instances && instances.length > 0) {
|
|
61
|
+
for (var i = instances.length - 1; i >= 0; i--) {
|
|
62
|
+
var engine = instances[i];
|
|
63
|
+
if (engine && engine.scenes && engine.scenes.length > 0) {
|
|
64
|
+
return engine.scenes[engine.scenes.length - 1];
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// LastCreatedScene convenience (older API)
|
|
69
|
+
try {
|
|
70
|
+
var last = BABYLON.Engine.LastCreatedScene;
|
|
71
|
+
if (last) return last;
|
|
72
|
+
} catch(e) {}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
var totalNodes = 0;
|
|
77
|
+
|
|
78
|
+
function makeNode(node, depth, path, typeOverride) {
|
|
79
|
+
if (!node || depth > ${t}) return null;
|
|
80
|
+
totalNodes++;
|
|
81
|
+
|
|
82
|
+
var visible = safeProp(node, 'isVisible', true);
|
|
83
|
+
if (visible === undefined || visible === null) visible = safeProp(node, 'enabled', true);
|
|
84
|
+
var enabled = safeProp(node, 'isEnabled', true);
|
|
85
|
+
var interactive = !!(safeProp(node, 'isPickable', true));
|
|
86
|
+
|
|
87
|
+
if (${e.onlyVisible??!1} && (visible === false || enabled === false)) return null;
|
|
88
|
+
if (${n} && !interactive) return null;
|
|
89
|
+
|
|
90
|
+
var name = safeProp(node, 'name', undefined);
|
|
91
|
+
var pos = getVec3(node, 'position') || { x: 0, y: 0, z: 0 };
|
|
92
|
+
var rot = getVec3(node, 'rotation') || { x: 0, y: 0, z: 0 };
|
|
93
|
+
var scaling = getVec3(node, 'scaling') || { x: 1, y: 1, z: 1 };
|
|
94
|
+
|
|
95
|
+
// Bounds approximation: Babylon meshes expose boundingInfo in world space
|
|
96
|
+
var wb = { x: pos.x, y: pos.y, width: Math.abs(scaling.x), height: Math.abs(scaling.y) };
|
|
97
|
+
try {
|
|
98
|
+
var bi = node.getBoundingInfo ? node.getBoundingInfo() : null;
|
|
99
|
+
if (bi && bi.boundingBox && bi.boundingBox.minimumWorld && bi.boundingBox.maximumWorld) {
|
|
100
|
+
var mn = bi.boundingBox.minimumWorld;
|
|
101
|
+
var mx = bi.boundingBox.maximumWorld;
|
|
102
|
+
wb.x = mn.x; wb.y = mn.y;
|
|
103
|
+
wb.width = Math.abs(mx.x - mn.x);
|
|
104
|
+
wb.height = Math.abs(mx.y - mn.y);
|
|
105
|
+
}
|
|
106
|
+
} catch(e) {}
|
|
107
|
+
|
|
108
|
+
var result = {
|
|
109
|
+
id: nodeId(node, 0),
|
|
110
|
+
type: typeOverride || getType(node),
|
|
111
|
+
name: name || undefined,
|
|
112
|
+
visible: !!(visible !== false && enabled !== false),
|
|
113
|
+
interactive: interactive,
|
|
114
|
+
alpha: safeProp(node, 'alpha', 1),
|
|
115
|
+
x: pos.x,
|
|
116
|
+
y: pos.y,
|
|
117
|
+
width: wb.width,
|
|
118
|
+
height: wb.height,
|
|
119
|
+
worldBounds: wb,
|
|
120
|
+
path: path || nodeId(node, 0),
|
|
121
|
+
customData: {
|
|
122
|
+
uniqueId: safeProp(node, 'uniqueId', undefined) || undefined,
|
|
123
|
+
posX: pos.x, posY: pos.y, posZ: pos.z,
|
|
124
|
+
rotX: rot.x, rotY: rot.y, rotZ: rot.z,
|
|
125
|
+
scaleX: scaling.x, scaleY: scaling.y, scaleZ: scaling.z,
|
|
126
|
+
materialName: getMaterialName(node),
|
|
127
|
+
vertexCount: getVertexCount(node),
|
|
128
|
+
isEnabled: enabled,
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
if (result.name === undefined) delete result.name;
|
|
133
|
+
if (result.customData.uniqueId === undefined) delete result.customData.uniqueId;
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function traverseTransform(parent, parentPath, depthAcc) {
|
|
138
|
+
// Walk child transform nodes (Babylon's TransformNode hierarchy)
|
|
139
|
+
var children = null;
|
|
140
|
+
try {
|
|
141
|
+
var childTransforms = parent.getChildTransformNodes ? parent.getChildTransformNodes() : null;
|
|
142
|
+
if (childTransforms && childTransforms.length > 0) {
|
|
143
|
+
children = [];
|
|
144
|
+
for (var i = 0; i < childTransforms.length; i++) {
|
|
145
|
+
var ct = childTransforms[i];
|
|
146
|
+
if (!ct) continue;
|
|
147
|
+
var childPath = parentPath + '/' + nodeId(ct, i);
|
|
148
|
+
var node = makeNode(ct, depthAcc + 1, childPath, 'TransformNode');
|
|
149
|
+
if (node) {
|
|
150
|
+
var sub = traverseTransform(ct, childPath, depthAcc + 1);
|
|
151
|
+
if (sub && sub.length > 0) node.children = sub;
|
|
152
|
+
children.push(node);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
} catch(e) {}
|
|
157
|
+
return children;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
var BABYLON = window.BABYLON;
|
|
161
|
+
if (!BABYLON || !BABYLON.Engine) {
|
|
162
|
+
return {
|
|
163
|
+
engine: 'Babylon.js',
|
|
164
|
+
version: undefined,
|
|
165
|
+
canvas: { width: 0, height: 0, dpr: 1, contextType: 'unknown' },
|
|
166
|
+
sceneTree: null,
|
|
167
|
+
totalNodes: 0,
|
|
168
|
+
completeness: 'partial',
|
|
169
|
+
error: 'window.BABYLON or BABYLON.Engine is undefined'
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
var version = BABYLON.Engine.Version || BABYLON.Engine.EngineVersion || undefined;
|
|
174
|
+
var scene = findScene();
|
|
175
|
+
|
|
176
|
+
var canvasEl = document.querySelector('canvas');
|
|
177
|
+
var canvasInfo = {
|
|
178
|
+
width: canvasEl ? canvasEl.width : 0,
|
|
179
|
+
height: canvasEl ? canvasEl.height : 0,
|
|
180
|
+
dpr: window.devicePixelRatio || 1,
|
|
181
|
+
contextType: 'unknown'
|
|
182
|
+
};
|
|
183
|
+
if (canvasEl) {
|
|
184
|
+
var gl = canvasEl.getContext('webgl2') || canvasEl.getContext('webgl');
|
|
185
|
+
canvasInfo.contextType = gl ? (gl instanceof WebGL2RenderingContext ? 'webgl2' : 'webgl') : '2d';
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
if (!scene) {
|
|
189
|
+
return {
|
|
190
|
+
engine: 'Babylon.js',
|
|
191
|
+
version: version,
|
|
192
|
+
canvas: canvasInfo,
|
|
193
|
+
sceneTree: null,
|
|
194
|
+
totalNodes: 0,
|
|
195
|
+
completeness: 'partial',
|
|
196
|
+
error: 'No Babylon scene found in Engine.Instances or LastCreatedScene'
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
var sceneNode = makeNode(scene, 0, 'Babylon.Scene', 'Scene');
|
|
201
|
+
var sceneChildren = [];
|
|
202
|
+
|
|
203
|
+
// Meshes
|
|
204
|
+
var meshes = safeProp(scene, 'meshes', []);
|
|
205
|
+
if (Array.isArray(meshes)) {
|
|
206
|
+
for (var mi = 0; mi < meshes.length; mi++) {
|
|
207
|
+
var mesh = meshes[mi];
|
|
208
|
+
if (!mesh) continue;
|
|
209
|
+
var meshPath = 'Babylon.Scene/' + nodeId(mesh, mi);
|
|
210
|
+
var meshNode = makeNode(mesh, 1, meshPath, null);
|
|
211
|
+
if (meshNode) {
|
|
212
|
+
var meshKids = traverseTransform(mesh, meshPath, 1);
|
|
213
|
+
if (meshKids && meshKids.length > 0) meshNode.children = meshKids;
|
|
214
|
+
sceneChildren.push(meshNode);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// TransformNodes (root-level ones not parented to a mesh)
|
|
220
|
+
var tns = safeProp(scene, 'transformNodes', []);
|
|
221
|
+
if (Array.isArray(tns)) {
|
|
222
|
+
for (var ti = 0; ti < tns.length; ti++) {
|
|
223
|
+
var tn = tns[ti];
|
|
224
|
+
if (!tn) continue;
|
|
225
|
+
var tnPath = 'Babylon.Scene/' + nodeId(tn, ti);
|
|
226
|
+
var tnNode = makeNode(tn, 1, tnPath, 'TransformNode');
|
|
227
|
+
if (tnNode) sceneChildren.push(tnNode);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// Cameras
|
|
232
|
+
var cams = safeProp(scene, 'cameras', []);
|
|
233
|
+
if (Array.isArray(cams)) {
|
|
234
|
+
for (var ci = 0; ci < cams.length; ci++) {
|
|
235
|
+
var cam = cams[ci];
|
|
236
|
+
if (!cam) continue;
|
|
237
|
+
var camPath = 'Babylon.Scene/' + nodeId(cam, ci);
|
|
238
|
+
// typeOverride null → makeNode falls back to getClassName() which returns
|
|
239
|
+
// the specific camera subclass (ArcRotateCamera, FreeCamera, ...).
|
|
240
|
+
var camNode = makeNode(cam, 1, camPath, null);
|
|
241
|
+
if (camNode) sceneChildren.push(camNode);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// Lights
|
|
246
|
+
var lts = safeProp(scene, 'lights', []);
|
|
247
|
+
if (Array.isArray(lts)) {
|
|
248
|
+
for (var li = 0; li < lts.length; li++) {
|
|
249
|
+
var light = lts[li];
|
|
250
|
+
if (!light) continue;
|
|
251
|
+
var lightPath = 'Babylon.Scene/' + nodeId(light, li);
|
|
252
|
+
// typeOverride null → makeNode falls back to getClassName() which returns
|
|
253
|
+
// the specific light subclass (HemisphericLight, DirectionalLight, ...).
|
|
254
|
+
var lightNode = makeNode(light, 1, lightPath, null);
|
|
255
|
+
if (lightNode) sceneChildren.push(lightNode);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
if (sceneNode) {
|
|
260
|
+
if (sceneChildren.length > 0) sceneNode.children = sceneChildren;
|
|
261
|
+
} else if (sceneChildren.length > 0) {
|
|
262
|
+
sceneNode = sceneChildren[0];
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
return {
|
|
266
|
+
engine: 'Babylon.js',
|
|
267
|
+
version: version,
|
|
268
|
+
canvas: canvasInfo,
|
|
269
|
+
sceneTree: sceneNode,
|
|
270
|
+
totalNodes: totalNodes,
|
|
271
|
+
completeness: sceneNode ? 'full' : 'partial'
|
|
272
|
+
};
|
|
273
|
+
})()`}function u(e){let t=e.x,n=e.y,r=e.canvasId;return`(function() {
|
|
274
|
+
function safeProp(obj, key, fallback) {
|
|
275
|
+
try { var v = obj[key]; return v === undefined || v === null ? fallback : v; } catch(e) { return fallback; }
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
function nodeId(node, idx) {
|
|
279
|
+
try {
|
|
280
|
+
if (node.uniqueId !== undefined && node.uniqueId !== null) return 'babylon_' + node.uniqueId;
|
|
281
|
+
} catch(e) {}
|
|
282
|
+
try {
|
|
283
|
+
if (node.id !== undefined && node.id !== null && node.id !== '') return 'babylon_id_' + node.id;
|
|
284
|
+
} catch(e) {}
|
|
285
|
+
var name = node.name || (node.constructor ? node.constructor.name : 'BabylonNode');
|
|
286
|
+
return String(name).replace(/\\s+/g, '_') + '_' + idx;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
function getType(node) {
|
|
290
|
+
try {
|
|
291
|
+
var t = node.getClassName ? node.getClassName() : null;
|
|
292
|
+
if (t) return t;
|
|
293
|
+
} catch(e) {}
|
|
294
|
+
return node.constructor ? node.constructor.name : 'BabylonNode';
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
function findScene() {
|
|
298
|
+
var BABYLON = window.BABYLON;
|
|
299
|
+
if (!BABYLON || !BABYLON.Engine) return null;
|
|
300
|
+
var instances = BABYLON.Engine.Instances;
|
|
301
|
+
if (instances && instances.length > 0) {
|
|
302
|
+
for (var i = instances.length - 1; i >= 0; i--) {
|
|
303
|
+
var engine = instances[i];
|
|
304
|
+
if (engine && engine.scenes && engine.scenes.length > 0) {
|
|
305
|
+
return engine.scenes[engine.scenes.length - 1];
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
try {
|
|
310
|
+
var last = BABYLON.Engine.LastCreatedScene;
|
|
311
|
+
if (last) return last;
|
|
312
|
+
} catch(e) {}
|
|
313
|
+
return null;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
var sx = ${t}, sy = ${n};
|
|
317
|
+
|
|
318
|
+
var canvases = Array.from(document.querySelectorAll('canvas'));
|
|
319
|
+
var targetCanvas = null;
|
|
320
|
+
${r?`targetCanvas = document.getElementById(${JSON.stringify(r)}) || canvases[parseInt(${JSON.stringify(r)})] || null;`:`
|
|
321
|
+
for (var ci = canvases.length - 1; ci >= 0; ci--) {
|
|
322
|
+
var r = canvases[ci].getBoundingClientRect();
|
|
323
|
+
if (sx >= r.left && sx <= r.right && sy >= r.top && sy <= r.bottom) {
|
|
324
|
+
targetCanvas = canvases[ci];
|
|
325
|
+
break;
|
|
326
|
+
}
|
|
327
|
+
}`}
|
|
328
|
+
|
|
329
|
+
if (!window.BABYLON || !window.BABYLON.Engine) {
|
|
330
|
+
return { success: false, picked: null, candidates: [], coordinates: {
|
|
331
|
+
screen: { x: sx, y: sy }, canvas: { x: sx, y: sy } }, hitTestMethod: 'none' };
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
var scene = findScene();
|
|
335
|
+
if (!scene) {
|
|
336
|
+
return { success: false, picked: null, candidates: [], coordinates: {
|
|
337
|
+
screen: { x: sx, y: sy }, canvas: { x: sx, y: sy } }, hitTestMethod: 'none' };
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
var canvasX = sx, canvasY = sy;
|
|
341
|
+
if (targetCanvas) {
|
|
342
|
+
var rect = targetCanvas.getBoundingClientRect();
|
|
343
|
+
canvasX = (sx - rect.left) * (targetCanvas.width / rect.width);
|
|
344
|
+
canvasY = (sy - rect.top) * (targetCanvas.height / rect.height);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
var candidates = [];
|
|
348
|
+
var hitTestMethod = 'none';
|
|
349
|
+
var enginePicked = null;
|
|
350
|
+
|
|
351
|
+
// Try scene.pick() — Babylon's native raycast
|
|
352
|
+
try {
|
|
353
|
+
if (typeof scene.pick === 'function') {
|
|
354
|
+
var pickInfo = scene.pick(canvasX, canvasY);
|
|
355
|
+
if (pickInfo && pickInfo.hit && pickInfo.pickedMesh) {
|
|
356
|
+
enginePicked = pickInfo.pickedMesh;
|
|
357
|
+
hitTestMethod = 'engine';
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
} catch(e) {}
|
|
361
|
+
|
|
362
|
+
// DFS fallback over meshes using boundingInfo
|
|
363
|
+
function meshBounds(mesh) {
|
|
364
|
+
var pos = mesh.position || { x: 0, y: 0 };
|
|
365
|
+
var scaling = mesh.scaling || { x: 1, y: 1 };
|
|
366
|
+
try {
|
|
367
|
+
var bi = mesh.getBoundingInfo ? mesh.getBoundingInfo() : null;
|
|
368
|
+
if (bi && bi.boundingBox && bi.boundingBox.minimumWorld && bi.boundingBox.maximumWorld) {
|
|
369
|
+
var mn = bi.boundingBox.minimumWorld;
|
|
370
|
+
var mx = bi.boundingBox.maximumWorld;
|
|
371
|
+
return { x: mn.x, y: mn.y, width: Math.abs(mx.x - mn.x), height: Math.abs(mx.y - mn.y) };
|
|
372
|
+
}
|
|
373
|
+
} catch(e) {}
|
|
374
|
+
return { x: pos.x, y: pos.y, width: Math.abs(scaling.x), height: Math.abs(scaling.y) };
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
function hitTestDfs(node, depth, accPath) {
|
|
378
|
+
if (!node) return;
|
|
379
|
+
var visible = safeProp(node, 'isVisible', true);
|
|
380
|
+
var enabled = safeProp(node, 'isEnabled', true);
|
|
381
|
+
if (visible === false || enabled === false) return;
|
|
382
|
+
|
|
383
|
+
var wb = meshBounds(node);
|
|
384
|
+
if (wb.width > 0 && wb.height > 0) {
|
|
385
|
+
var inBounds = canvasX >= wb.x && canvasX <= wb.x + wb.width &&
|
|
386
|
+
canvasY >= wb.y && canvasY <= wb.y + wb.height;
|
|
387
|
+
var interactive = !!(safeProp(node, 'isPickable', true));
|
|
388
|
+
if (inBounds && interactive) {
|
|
389
|
+
candidates.push({
|
|
390
|
+
node: {
|
|
391
|
+
id: nodeId(node, 0),
|
|
392
|
+
type: getType(node),
|
|
393
|
+
name: safeProp(node, 'name', undefined) || undefined,
|
|
394
|
+
visible: true,
|
|
395
|
+
interactive: true,
|
|
396
|
+
alpha: safeProp(node, 'alpha', 1),
|
|
397
|
+
x: wb.x, y: wb.y,
|
|
398
|
+
width: wb.width, height: wb.height,
|
|
399
|
+
worldBounds: wb,
|
|
400
|
+
path: accPath || nodeId(node, 0)
|
|
401
|
+
},
|
|
402
|
+
depth: depth
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
// Recurse into child meshes (Babylon meshes can have child meshes / transform nodes)
|
|
408
|
+
try {
|
|
409
|
+
var kids = node.getChildMeshes ? node.getChildMeshes(false) : null;
|
|
410
|
+
if (kids && Array.isArray(kids)) {
|
|
411
|
+
for (var i = 0; i < kids.length; i++) {
|
|
412
|
+
var cm = kids[i];
|
|
413
|
+
if (!cm) continue;
|
|
414
|
+
var childPath = accPath ? accPath + '/' + nodeId(cm, i) : nodeId(cm, i);
|
|
415
|
+
hitTestDfs(cm, depth + 1, childPath);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
} catch(e) {}
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
// Walk top-level meshes
|
|
422
|
+
var meshes = safeProp(scene, 'meshes', []);
|
|
423
|
+
if (Array.isArray(meshes)) {
|
|
424
|
+
for (var mi = 0; mi < meshes.length; mi++) {
|
|
425
|
+
var mesh = meshes[mi];
|
|
426
|
+
if (!mesh) continue;
|
|
427
|
+
// Skip meshes that have a parent — they'll be reached via DFS
|
|
428
|
+
if (mesh.parent) continue;
|
|
429
|
+
var meshPath = 'Babylon.Scene/' + nodeId(mesh, mi);
|
|
430
|
+
hitTestDfs(mesh, 1, meshPath);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
var picked = enginePicked ? {
|
|
435
|
+
id: nodeId(enginePicked, 0),
|
|
436
|
+
type: getType(enginePicked),
|
|
437
|
+
name: safeProp(enginePicked, 'name', undefined) || undefined,
|
|
438
|
+
visible: !!(safeProp(enginePicked, 'isVisible', true)),
|
|
439
|
+
interactive: !!(safeProp(enginePicked, 'isPickable', true)),
|
|
440
|
+
alpha: safeProp(enginePicked, 'alpha', 1),
|
|
441
|
+
x: meshBounds(enginePicked).x,
|
|
442
|
+
y: meshBounds(enginePicked).y,
|
|
443
|
+
width: meshBounds(enginePicked).width,
|
|
444
|
+
height: meshBounds(enginePicked).height,
|
|
445
|
+
worldBounds: meshBounds(enginePicked),
|
|
446
|
+
path: 'Babylon.Scene/pick/' + nodeId(enginePicked, 0)
|
|
447
|
+
} : null;
|
|
448
|
+
|
|
449
|
+
if (!picked && candidates.length > 0) {
|
|
450
|
+
candidates.sort(function(a, b) { return a.depth - b.depth; });
|
|
451
|
+
picked = candidates[0].node;
|
|
452
|
+
hitTestMethod = 'manual';
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
return {
|
|
456
|
+
success: !!picked,
|
|
457
|
+
picked: picked,
|
|
458
|
+
candidates: candidates,
|
|
459
|
+
coordinates: {
|
|
460
|
+
screen: { x: sx, y: sy },
|
|
461
|
+
canvas: { x: canvasX, y: canvasY }
|
|
462
|
+
},
|
|
463
|
+
hitTestMethod: hitTestMethod
|
|
464
|
+
};
|
|
465
|
+
})()`}var d=class{id=`babylon`;engine=`Babylon.js`;version;constructor(){this.version=void 0}async detect(e){try{let t=await e.pageController.evaluate(`
|
|
466
|
+
(function() {
|
|
467
|
+
var BABYLON = window.BABYLON;
|
|
468
|
+
if (!BABYLON || !BABYLON.Engine) return { present: false, hasScene: false };
|
|
469
|
+
var version = BABYLON.Engine.Version || BABYLON.Engine.EngineVersion || undefined;
|
|
470
|
+
var hasScene = false;
|
|
471
|
+
var instances = BABYLON.Engine.Instances;
|
|
472
|
+
if (instances && instances.length > 0) {
|
|
473
|
+
for (var i = 0; i < instances.length; i++) {
|
|
474
|
+
if (instances[i] && instances[i].scenes && instances[i].scenes.length > 0) {
|
|
475
|
+
hasScene = true; break;
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
if (!hasScene) {
|
|
480
|
+
try { if (BABYLON.Engine.LastCreatedScene) hasScene = true; } catch(e) {}
|
|
481
|
+
}
|
|
482
|
+
return { present: true, version: version, hasScene: hasScene };
|
|
483
|
+
})()
|
|
484
|
+
`);if(!t.present)return null;let n=[`window.BABYLON detected`,`BABYLON.Engine present`];return t.version&&n.push(`Babylon version: `+t.version),t.hasScene?n.push(`Scene reachable via Engine.Instances / LastCreatedScene`):n.push(`No active scene found in Engine.Instances`),{engine:this.engine,version:t.version,confidence:t.hasScene?.95:.9,evidence:n,adapterId:this.id}}catch{return null}}async dumpScene(e,t){let n=l(t),r=await e.pageController.evaluate(n);return{engine:r.engine,version:r.version,canvas:r.canvas,sceneTree:r.sceneTree??{id:`empty`,type:`Scene`,visible:!0,interactive:!1,alpha:1,x:0,y:0,width:r.canvas?.width??0,height:r.canvas?.height??0,worldBounds:{x:0,y:0,width:r.canvas?.width??0,height:r.canvas?.height??0},path:`Babylon.Scene`},totalNodes:r.totalNodes,completeness:r.completeness===`full`?`full`:`partial`}}async pickAt(e,t){let n=u(t),r=await e.pageController.evaluate(n);return{success:r.success,picked:r.picked,candidates:r.candidates,coordinates:r.coordinates,hitTestMethod:r.hitTestMethod}}};function f(e){let t=e.maxDepth??20,n=e.onlyInteractive??!1;return`(function() {
|
|
2
485
|
function getChildren(node) {
|
|
3
486
|
if (!node) return [];
|
|
4
487
|
// v3 uses node.children, v2 uses node._children
|
|
@@ -294,7 +777,7 @@ import{n as e}from"./response-C7rKQst4.mjs";import{r as t}from"./parse-args-Bw41
|
|
|
294
777
|
completeness: sceneTree ? 'full' : 'partial',
|
|
295
778
|
_meta: { isV3: isV3 }
|
|
296
779
|
};
|
|
297
|
-
})()`}function
|
|
780
|
+
})()`}function p(e){let t=e.x,n=e.y,r=e.canvasId;return`(function() {
|
|
298
781
|
function getChildren(node) {
|
|
299
782
|
if (!node) return [];
|
|
300
783
|
if (node.children && Array.isArray(node.children)) return node.children;
|
|
@@ -581,7 +1064,7 @@ import{n as e}from"./response-C7rKQst4.mjs";import{r as t}from"./parse-args-Bw41
|
|
|
581
1064
|
},
|
|
582
1065
|
hitTestMethod: finalMethod
|
|
583
1066
|
};
|
|
584
|
-
})()`}var
|
|
1067
|
+
})()`}var m=class{id=`cocos`;engine=`CocosCreator`;version;constructor(){this.version=void 0}async detect(e){try{let t=await e.pageController.evaluate(`
|
|
585
1068
|
(function() {
|
|
586
1069
|
if (typeof window.cc === 'undefined' || window.cc === null) {
|
|
587
1070
|
return { present: false, hasDirector: false };
|
|
@@ -598,7 +1081,7 @@ import{n as e}from"./response-C7rKQst4.mjs";import{r as t}from"./parse-args-Bw41
|
|
|
598
1081
|
versionMajor: major
|
|
599
1082
|
};
|
|
600
1083
|
})()
|
|
601
|
-
`);if(!t.present||!t.hasDirector)return null;let n=[`window.cc detected`,`cc.director present`];return t.versionMajor===2?n.push(`Cocos Creator v2 API`):t.versionMajor===3&&n.push(`Cocos Creator v3 API`),{engine:this.engine,version:t.version,confidence:.95,evidence:n,adapterId:this.id}}catch{return null}}async dumpScene(e,t){let
|
|
1084
|
+
`);if(!t.present||!t.hasDirector)return null;let n=[`window.cc detected`,`cc.director present`];return t.versionMajor===2?n.push(`Cocos Creator v2 API`):t.versionMajor===3&&n.push(`Cocos Creator v3 API`),{engine:this.engine,version:t.version,confidence:.95,evidence:n,adapterId:this.id}}catch{return null}}async dumpScene(e,t){let n=f(t),r=await e.pageController.evaluate(n);return{engine:r.engine,version:r.version,canvas:r.canvas,sceneTree:r.sceneTree??{id:`empty`,type:`Scene`,visible:!0,interactive:!1,alpha:1,x:0,y:0,width:r.canvas?.width??0,height:r.canvas?.height??0,worldBounds:{x:0,y:0,width:r.canvas?.width??0,height:r.canvas?.height??0},path:`cc.director.getScene()`},totalNodes:r.totalNodes,completeness:r.completeness===`full`?`full`:`partial`}}async pickAt(e,t){let n=p(t),r=await e.pageController.evaluate(n);return{success:r.success,picked:r.picked,candidates:r.candidates,coordinates:r.coordinates,hitTestMethod:r.hitTestMethod}}};function h(e){let t=e.maxDepth??20,n=e.onlyInteractive??!1;return`(function() {
|
|
602
1085
|
function getChildren(node) {
|
|
603
1086
|
if (!node) return [];
|
|
604
1087
|
if (node.children && node.numChildren !== undefined) return node.children;
|
|
@@ -731,7 +1214,7 @@ import{n as e}from"./response-C7rKQst4.mjs";import{r as t}from"./parse-args-Bw41
|
|
|
731
1214
|
completeness: 'full',
|
|
732
1215
|
_meta: { isLaya3: isLaya3, scaleX: scaleX, scaleY: scaleY }
|
|
733
1216
|
};
|
|
734
|
-
})()`}function
|
|
1217
|
+
})()`}function g(e){let t=e.x,n=e.y,r=e.canvasId;return`(function() {
|
|
735
1218
|
function getChildren(node) {
|
|
736
1219
|
if (!node) return [];
|
|
737
1220
|
if (node.children && node.numChildren !== undefined) return node.children;
|
|
@@ -918,7 +1401,7 @@ import{n as e}from"./response-C7rKQst4.mjs";import{r as t}from"./parse-args-Bw41
|
|
|
918
1401
|
},
|
|
919
1402
|
hitTestMethod: finalMethod
|
|
920
1403
|
};
|
|
921
|
-
})()`}var
|
|
1404
|
+
})()`}var ee=class{id=`laya`;engine=`LayaAir`;version;constructor(){this.version=void 0}async detect(e){try{let t=await e.pageController.evaluate(`
|
|
922
1405
|
(function() {
|
|
923
1406
|
if (typeof window.Laya === 'undefined' || window.Laya === null) {
|
|
924
1407
|
return { present: false, hasStage: false, laya2: false, laya3: false };
|
|
@@ -931,7 +1414,7 @@ import{n as e}from"./response-C7rKQst4.mjs";import{r as t}from"./parse-args-Bw41
|
|
|
931
1414
|
return { present: true, hasStage: hasStage, version: version,
|
|
932
1415
|
laya2: laya2, laya3: laya3 };
|
|
933
1416
|
})()
|
|
934
|
-
`);if(!t.present||!t.hasStage)return null;let n=[`window.Laya is defined`];return t.laya2&&n.push(`Laya.MouseManager detected (LayaAir 2.x)`),t.laya3&&n.push(`Laya.InputManager detected (LayaAir 3.x)`),n.push(`Laya.stage is present`),{engine:this.engine,version:t.version,confidence:.95,evidence:n,adapterId:this.id}}catch{return null}}async dumpScene(e,t){let n=
|
|
1417
|
+
`);if(!t.present||!t.hasStage)return null;let n=[`window.Laya is defined`];return t.laya2&&n.push(`Laya.MouseManager detected (LayaAir 2.x)`),t.laya3&&n.push(`Laya.InputManager detected (LayaAir 3.x)`),n.push(`Laya.stage is present`),{engine:this.engine,version:t.version,confidence:.95,evidence:n,adapterId:this.id}}catch{return null}}async dumpScene(e,t){let n=h(t),r=await e.pageController.evaluate(n);return{engine:r.engine,version:r.version,canvas:r.canvas,sceneTree:r.sceneTree??{id:`empty`,type:`Stage`,visible:!0,interactive:!1,alpha:1,x:0,y:0,width:r.canvas?.width??0,height:r.canvas?.height??0,worldBounds:{x:0,y:0,width:r.canvas?.width??0,height:r.canvas?.height??0},path:`Laya.stage`},totalNodes:r.totalNodes,completeness:r.completeness===`full`?`full`:`partial`}}async pickAt(e,t){let n=g(t),r=await e.pageController.evaluate(n);return{success:r.success,picked:r.picked,candidates:r.candidates,coordinates:r.coordinates,hitTestMethod:r.hitTestMethod}}async traceClick(e,t,n){let{debuggerManager:r,traceRecorder:i,evidenceStore:a}=n,o=`no-recording`;try{o=(await i.start(null,null,{recordMemoryDeltas:!1})).sessionId}catch{}await r.enable(),await r.ensureAdvancedFeatures();let s=await e.pageController.evaluate(`
|
|
935
1418
|
(function() {
|
|
936
1419
|
var k = Symbol.for('__laya_event_patched');
|
|
937
1420
|
var instrumented = [];
|
|
@@ -980,7 +1463,7 @@ import{n as e}from"./response-C7rKQst4.mjs";import{r as t}from"./parse-args-Bw41
|
|
|
980
1463
|
events.push(${JSON.stringify(c)});
|
|
981
1464
|
return events;
|
|
982
1465
|
})()
|
|
983
|
-
`),u=await r.waitForPaused(5e3),d=u?.callFrames?u.callFrames.slice(0,t.maxFrames??50).map(e=>({functionName:e.functionName||`(anonymous)`,scriptUrl:e.url,lineNumber:e.location?.lineNumber,columnNumber:e.location?.columnNumber})):[];await r.resume(),a.addNode(`function`,`laya-click-trace:${o}`,{engine:this.engine,version:this.version,handlersFound:d.length,instrumentedPrototypes:s?.instrumented??[]});try{await i.stop()}catch{}return{inputFlow:l,hitTarget:null,domEventChain:d.map(e=>({type:c,target:e.scriptUrl,phase:`at-target`})),engineDispatchChain:s?.instrumented??[],handlerFrames:d,handlersTriggered:d.map(e=>({functionName:e.functionName,scriptUrl:e.scriptUrl,lineNumber:e.lineNumber})),networkEmitted:[]}}};function
|
|
1466
|
+
`),u=await r.waitForPaused(5e3),d=u?.callFrames?u.callFrames.slice(0,t.maxFrames??50).map(e=>({functionName:e.functionName||`(anonymous)`,scriptUrl:e.url,lineNumber:e.location?.lineNumber,columnNumber:e.location?.columnNumber})):[];await r.resume(),a.addNode(`function`,`laya-click-trace:${o}`,{engine:this.engine,version:this.version,handlersFound:d.length,instrumentedPrototypes:s?.instrumented??[]});try{await i.stop()}catch{}return{inputFlow:l,hitTarget:null,domEventChain:d.map(e=>({type:c,target:e.scriptUrl,phase:`at-target`})),engineDispatchChain:s?.instrumented??[],handlerFrames:d,handlersTriggered:d.map(e=>({functionName:e.functionName,scriptUrl:e.scriptUrl,lineNumber:e.lineNumber})),networkEmitted:[]}}};function te(e){let t=e.maxDepth??20,n=e.onlyInteractive??!1;return`(function() {
|
|
984
1467
|
function getChildren(node) {
|
|
985
1468
|
if (!node) return [];
|
|
986
1469
|
if (node.list && Array.isArray(node.list)) return node.list;
|
|
@@ -1127,7 +1610,7 @@ import{n as e}from"./response-C7rKQst4.mjs";import{r as t}from"./parse-args-Bw41
|
|
|
1127
1610
|
totalNodes: totalNodes,
|
|
1128
1611
|
completeness: sceneTree ? 'full' : 'partial',
|
|
1129
1612
|
};
|
|
1130
|
-
})()`}function
|
|
1613
|
+
})()`}function ne(e){let t=e.x,n=e.y,r=e.canvasId;return`(function() {
|
|
1131
1614
|
function getChildren(node) {
|
|
1132
1615
|
if (!node) return [];
|
|
1133
1616
|
if (node.list && Array.isArray(node.list)) return node.list;
|
|
@@ -1340,7 +1823,7 @@ import{n as e}from"./response-C7rKQst4.mjs";import{r as t}from"./parse-args-Bw41
|
|
|
1340
1823
|
},
|
|
1341
1824
|
hitTestMethod: hitTestMethod
|
|
1342
1825
|
};
|
|
1343
|
-
})()`}var
|
|
1826
|
+
})()`}var re=class{id=`phaser`;engine=`Phaser`;version;constructor(){this.version=void 0}async detect(e){try{let t=await e.pageController.evaluate(`
|
|
1344
1827
|
(function() {
|
|
1345
1828
|
if (typeof window.Phaser === 'undefined' || window.Phaser === null) {
|
|
1346
1829
|
return { present: false, hasGames: false };
|
|
@@ -1352,7 +1835,7 @@ import{n as e}from"./response-C7rKQst4.mjs";import{r as t}from"./parse-args-Bw41
|
|
|
1352
1835
|
version: window.Phaser.VERSION || undefined,
|
|
1353
1836
|
};
|
|
1354
1837
|
})()
|
|
1355
|
-
`);if(!t.present||!t.hasGames)return null;let n=[`window.Phaser detected`];return n.push(`Phaser.GAMES has entries`),{engine:this.engine,version:t.version,confidence:.95,evidence:n,adapterId:this.id}}catch{return null}}async dumpScene(e,t){let n=
|
|
1838
|
+
`);if(!t.present||!t.hasGames)return null;let n=[`window.Phaser detected`];return n.push(`Phaser.GAMES has entries`),{engine:this.engine,version:t.version,confidence:.95,evidence:n,adapterId:this.id}}catch{return null}}async dumpScene(e,t){let n=te(t),r=await e.pageController.evaluate(n);return{engine:r.engine,version:r.version,canvas:r.canvas,sceneTree:r.sceneTree??{id:`empty`,type:`Game`,visible:!0,interactive:!1,alpha:1,x:0,y:0,width:r.canvas?.width??0,height:r.canvas?.height??0,worldBounds:{x:0,y:0,width:r.canvas?.width??0,height:r.canvas?.height??0},path:`Phaser.Game`},totalNodes:r.totalNodes,completeness:r.completeness===`full`?`full`:`partial`}}async pickAt(e,t){let n=ne(t),r=await e.pageController.evaluate(n);return{success:r.success,picked:r.picked,candidates:r.candidates,coordinates:r.coordinates,hitTestMethod:r.hitTestMethod}}};function ie(e){let t=e.maxDepth??20,n=e.onlyInteractive??!1;return`(function() {
|
|
1356
1839
|
function getChildren(node) {
|
|
1357
1840
|
if (!node) return [];
|
|
1358
1841
|
if (node.children && node.numChildren !== undefined) return node.children;
|
|
@@ -1503,7 +1986,7 @@ import{n as e}from"./response-C7rKQst4.mjs";import{r as t}from"./parse-args-Bw41
|
|
|
1503
1986
|
totalNodes: totalNodes,
|
|
1504
1987
|
completeness: 'full'
|
|
1505
1988
|
};
|
|
1506
|
-
})()`}function
|
|
1989
|
+
})()`}function ae(e){let t=e.x,n=e.y,r=e.canvasId;return`(function() {
|
|
1507
1990
|
function getChildren(node) {
|
|
1508
1991
|
if (!node) return [];
|
|
1509
1992
|
if (node.children && node.numChildren !== undefined) return node.children;
|
|
@@ -1720,7 +2203,7 @@ import{n as e}from"./response-C7rKQst4.mjs";import{r as t}from"./parse-args-Bw41
|
|
|
1720
2203
|
},
|
|
1721
2204
|
hitTestMethod: finalMethod
|
|
1722
2205
|
};
|
|
1723
|
-
})()`}var
|
|
2206
|
+
})()`}var oe=class{id=`pixi`;engine=`PixiJS`;version;constructor(){this.version=void 0}async detect(e){try{let t=await e.pageController.evaluate(`
|
|
1724
2207
|
(function() {
|
|
1725
2208
|
if (typeof window.PIXI === 'undefined' || window.PIXI === null) {
|
|
1726
2209
|
return { present: false, hasApp: false };
|
|
@@ -1730,10 +2213,601 @@ import{n as e}from"./response-C7rKQst4.mjs";import{r as t}from"./parse-args-Bw41
|
|
|
1730
2213
|
var version = pixi.VERSION || pixi.version;
|
|
1731
2214
|
return { present: true, hasApp: hasApp, version: version };
|
|
1732
2215
|
})()
|
|
1733
|
-
`);if(!t.present||!t.hasApp)return null;let n=[`window.PIXI detected`];return t.version&&n.push(`PIXI.VERSION: `+t.version),n.push(`PIXI.Application detected`),{engine:this.engine,version:t.version,confidence:.95,evidence:n,adapterId:this.id}}catch{return null}}async dumpScene(e,t){let n=
|
|
2216
|
+
`);if(!t.present||!t.hasApp)return null;let n=[`window.PIXI detected`];return t.version&&n.push(`PIXI.VERSION: `+t.version),n.push(`PIXI.Application detected`),{engine:this.engine,version:t.version,confidence:.95,evidence:n,adapterId:this.id}}catch{return null}}async dumpScene(e,t){let n=ie(t),r=await e.pageController.evaluate(n);return{engine:r.engine,version:r.version,canvas:r.canvas,sceneTree:r.sceneTree??{id:`empty`,type:`Container`,visible:!0,interactive:!1,alpha:1,x:0,y:0,width:r.canvas?.width??0,height:r.canvas?.height??0,worldBounds:{x:0,y:0,width:r.canvas?.width??0,height:r.canvas?.height??0},path:`PIXI.Application.stage`},totalNodes:r.totalNodes,completeness:r.completeness===`full`?`full`:`partial`}}async pickAt(e,t){let n=ae(t),r=await e.pageController.evaluate(n);return{success:r.success,picked:r.picked,candidates:r.candidates,coordinates:r.coordinates,hitTestMethod:r.hitTestMethod}}};function _(e){let t=e.maxDepth??20,n=e.onlyInteractive??!1;return`(function() {
|
|
2217
|
+
var THREE = window.THREE;
|
|
2218
|
+
|
|
2219
|
+
function safeProp(obj, key, fallback) {
|
|
2220
|
+
try { var v = obj[key]; return v === undefined || v === null ? fallback : v; } catch(e) { return fallback; }
|
|
2221
|
+
}
|
|
2222
|
+
|
|
2223
|
+
function nodeId(obj, idx) {
|
|
2224
|
+
try {
|
|
2225
|
+
if (obj.uuid !== undefined && obj.uuid !== null && obj.uuid !== '') return 'three_' + obj.uuid;
|
|
2226
|
+
} catch(e) {}
|
|
2227
|
+
try {
|
|
2228
|
+
if (obj.id !== undefined && obj.id !== null) return 'three_id_' + obj.id;
|
|
2229
|
+
} catch(e) {}
|
|
2230
|
+
var t = obj.type || (obj.constructor ? obj.constructor.name : 'Object3D');
|
|
2231
|
+
return t + '_' + idx;
|
|
2232
|
+
}
|
|
2233
|
+
|
|
2234
|
+
function getType(obj) {
|
|
2235
|
+
try {
|
|
2236
|
+
if (obj.type && typeof obj.type === 'string' && obj.type !== '') return obj.type;
|
|
2237
|
+
} catch(e) {}
|
|
2238
|
+
return obj.constructor ? obj.constructor.name : 'Object3D';
|
|
2239
|
+
}
|
|
2240
|
+
|
|
2241
|
+
function decomposeMatrix(matrix) {
|
|
2242
|
+
var r = { posX: 0, posY: 0, posZ: 0, rotX: 0, rotY: 0, rotZ: 0, scaleX: 1, scaleY: 1, scaleZ: 1 };
|
|
2243
|
+
try {
|
|
2244
|
+
if (THREE && THREE.Vector3 && THREE.Quaternion && THREE.Euler && typeof matrix.decompose === 'function') {
|
|
2245
|
+
var pos = new THREE.Vector3();
|
|
2246
|
+
var quat = new THREE.Quaternion();
|
|
2247
|
+
var scale = new THREE.Vector3();
|
|
2248
|
+
matrix.decompose(pos, quat, scale);
|
|
2249
|
+
var euler = new THREE.Euler();
|
|
2250
|
+
euler.setFromQuaternion(quat);
|
|
2251
|
+
r.posX = pos.x; r.posY = pos.y; r.posZ = pos.z;
|
|
2252
|
+
r.rotX = euler.x; r.rotY = euler.y; r.rotZ = euler.z;
|
|
2253
|
+
r.scaleX = scale.x; r.scaleY = scale.y; r.scaleZ = scale.z;
|
|
2254
|
+
return r;
|
|
2255
|
+
}
|
|
2256
|
+
} catch(e) {}
|
|
2257
|
+
// Fallback: read local transform properties
|
|
2258
|
+
r.posX = safeProp(matrix, 'elements', null) ? 0 : safeProp(matrix, 'posX', 0);
|
|
2259
|
+
return r;
|
|
2260
|
+
}
|
|
2261
|
+
|
|
2262
|
+
function getTransform(obj) {
|
|
2263
|
+
var mw = safeProp(obj, 'matrixWorld', null);
|
|
2264
|
+
if (mw && typeof mw.decompose === 'function') {
|
|
2265
|
+
return decomposeMatrix(mw);
|
|
2266
|
+
}
|
|
2267
|
+
// Fallback to local transform props
|
|
2268
|
+
return {
|
|
2269
|
+
posX: safeProp(obj, 'posX', 0) || (obj.position ? safeProp(obj.position, 'x', 0) : 0),
|
|
2270
|
+
posY: safeProp(obj, 'posY', 0) || (obj.position ? safeProp(obj.position, 'y', 0) : 0),
|
|
2271
|
+
posZ: safeProp(obj, 'posZ', 0) || (obj.position ? safeProp(obj.position, 'z', 0) : 0),
|
|
2272
|
+
rotX: obj.rotation ? safeProp(obj.rotation, 'x', 0) : 0,
|
|
2273
|
+
rotY: obj.rotation ? safeProp(obj.rotation, 'y', 0) : 0,
|
|
2274
|
+
rotZ: obj.rotation ? safeProp(obj.rotation, 'z', 0) : 0,
|
|
2275
|
+
scaleX: obj.scale ? safeProp(obj.scale, 'x', 1) : 1,
|
|
2276
|
+
scaleY: obj.scale ? safeProp(obj.scale, 'y', 1) : 1,
|
|
2277
|
+
scaleZ: obj.scale ? safeProp(obj.scale, 'z', 1) : 1,
|
|
2278
|
+
};
|
|
2279
|
+
}
|
|
2280
|
+
|
|
2281
|
+
function getWorldBounds(obj, t) {
|
|
2282
|
+
try {
|
|
2283
|
+
var geom = obj.geometry;
|
|
2284
|
+
if (geom) {
|
|
2285
|
+
if (!geom.boundingBox) {
|
|
2286
|
+
try { geom.computeBoundingBox(); } catch(e) {}
|
|
2287
|
+
}
|
|
2288
|
+
if (geom.boundingBox) {
|
|
2289
|
+
var bb = geom.boundingBox;
|
|
2290
|
+
var minX = bb.min.x * t.scaleX + t.posX;
|
|
2291
|
+
var minY = bb.min.y * t.scaleY + t.posY;
|
|
2292
|
+
var w = Math.abs((bb.max.x - bb.min.x) * t.scaleX);
|
|
2293
|
+
var h = Math.abs((bb.max.y - bb.min.y) * t.scaleY);
|
|
2294
|
+
if (w > 0 || h > 0) {
|
|
2295
|
+
return { x: minX, y: minY, width: w, height: h };
|
|
2296
|
+
}
|
|
2297
|
+
}
|
|
2298
|
+
}
|
|
2299
|
+
} catch(e) {}
|
|
2300
|
+
return {
|
|
2301
|
+
x: t.posX,
|
|
2302
|
+
y: t.posY,
|
|
2303
|
+
width: Math.max(1, Math.abs(t.scaleX)),
|
|
2304
|
+
height: Math.max(1, Math.abs(t.scaleY))
|
|
2305
|
+
};
|
|
2306
|
+
}
|
|
2307
|
+
|
|
2308
|
+
function getMaterialInfo(obj) {
|
|
2309
|
+
try {
|
|
2310
|
+
var mat = obj.material;
|
|
2311
|
+
if (!mat) return undefined;
|
|
2312
|
+
if (Array.isArray(mat)) {
|
|
2313
|
+
return mat.map(function(m) {
|
|
2314
|
+
return m && m.type ? m.type : (m && m.constructor ? m.constructor.name : 'Material');
|
|
2315
|
+
});
|
|
2316
|
+
}
|
|
2317
|
+
return mat.type || (mat.constructor ? mat.constructor.name : 'Material');
|
|
2318
|
+
} catch(e) { return undefined; }
|
|
2319
|
+
}
|
|
2320
|
+
|
|
2321
|
+
function getVertexCount(obj) {
|
|
2322
|
+
try {
|
|
2323
|
+
var geom = obj.geometry;
|
|
2324
|
+
if (geom && geom.attributes && geom.attributes.position) {
|
|
2325
|
+
return geom.attributes.position.count;
|
|
2326
|
+
}
|
|
2327
|
+
} catch(e) {}
|
|
2328
|
+
return undefined;
|
|
2329
|
+
}
|
|
2330
|
+
|
|
2331
|
+
function isSceneLike(value) {
|
|
2332
|
+
if (!value || typeof value !== 'object') return false;
|
|
2333
|
+
try {
|
|
2334
|
+
if (value.isScene === true) return true;
|
|
2335
|
+
} catch(e) {}
|
|
2336
|
+
try {
|
|
2337
|
+
if (value.constructor && value.constructor.name === 'Scene') return true;
|
|
2338
|
+
} catch(e) {}
|
|
2339
|
+
return false;
|
|
2340
|
+
}
|
|
2341
|
+
|
|
2342
|
+
function findScene() {
|
|
2343
|
+
// 1. Dev-tool conventions
|
|
2344
|
+
try {
|
|
2345
|
+
if (window.__threeScene && isSceneLike(window.__threeScene)) return window.__threeScene;
|
|
2346
|
+
} catch(e) {}
|
|
2347
|
+
try {
|
|
2348
|
+
var reg = window.__THREE_DEVTOOLS__;
|
|
2349
|
+
if (reg && reg.scenes && reg.scenes.length > 0 && isSceneLike(reg.scenes[0])) {
|
|
2350
|
+
return reg.scenes[0];
|
|
2351
|
+
}
|
|
2352
|
+
} catch(e) {}
|
|
2353
|
+
// 2. Shallow scan window for a scene-like value (skip DOM nodes / window itself)
|
|
2354
|
+
var seen = new Set();
|
|
2355
|
+
try {
|
|
2356
|
+
var keys = Object.keys(window);
|
|
2357
|
+
for (var i = 0; i < keys.length; i++) {
|
|
2358
|
+
var k = keys[i];
|
|
2359
|
+
try {
|
|
2360
|
+
var v = window[k];
|
|
2361
|
+
if (!v || v === window || v.nodeType || seen.has(v)) continue;
|
|
2362
|
+
seen.add(v);
|
|
2363
|
+
if (isSceneLike(v)) return v;
|
|
2364
|
+
} catch(e) {}
|
|
2365
|
+
}
|
|
2366
|
+
} catch(e) {}
|
|
2367
|
+
return null;
|
|
2368
|
+
}
|
|
2369
|
+
|
|
2370
|
+
var totalNodes = 0;
|
|
2371
|
+
|
|
2372
|
+
function traverse(obj, depth, path) {
|
|
2373
|
+
if (!obj || depth > ${t}) return null;
|
|
2374
|
+
totalNodes++;
|
|
2375
|
+
|
|
2376
|
+
var visible = !!(safeProp(obj, 'visible', true));
|
|
2377
|
+
var interactive = !!(
|
|
2378
|
+
obj.userData && (obj.userData.interactive || obj.userData.clickable || obj.userData.pickable)
|
|
2379
|
+
);
|
|
2380
|
+
|
|
2381
|
+
if (${e.onlyVisible??!1} && !visible) return null;
|
|
2382
|
+
if (${n} && !interactive) return null;
|
|
2383
|
+
|
|
2384
|
+
var childrenArr = safeProp(obj, 'children', []);
|
|
2385
|
+
if (!Array.isArray(childrenArr)) childrenArr = [];
|
|
2386
|
+
var children = null;
|
|
2387
|
+
|
|
2388
|
+
if (childrenArr.length > 0) {
|
|
2389
|
+
children = [];
|
|
2390
|
+
for (var i = 0; i < childrenArr.length; i++) {
|
|
2391
|
+
var cn = childrenArr[i];
|
|
2392
|
+
if (!cn) continue;
|
|
2393
|
+
var childPath = path ? path + '/' + nodeId(cn, i) : nodeId(cn, i);
|
|
2394
|
+
var sub = traverse(cn, depth + 1, childPath);
|
|
2395
|
+
if (sub) children.push(sub);
|
|
2396
|
+
}
|
|
2397
|
+
}
|
|
2398
|
+
|
|
2399
|
+
var t = getTransform(obj);
|
|
2400
|
+
var wb = getWorldBounds(obj, t);
|
|
2401
|
+
var result = {
|
|
2402
|
+
id: nodeId(obj, 0),
|
|
2403
|
+
type: getType(obj),
|
|
2404
|
+
name: safeProp(obj, 'name', undefined) || undefined,
|
|
2405
|
+
visible: visible,
|
|
2406
|
+
interactive: interactive,
|
|
2407
|
+
alpha: 1,
|
|
2408
|
+
x: t.posX,
|
|
2409
|
+
y: t.posY,
|
|
2410
|
+
width: wb.width,
|
|
2411
|
+
height: wb.height,
|
|
2412
|
+
worldBounds: wb,
|
|
2413
|
+
path: path || nodeId(obj, 0),
|
|
2414
|
+
customData: {
|
|
2415
|
+
posX: t.posX, posY: t.posY, posZ: t.posZ,
|
|
2416
|
+
rotX: t.rotX, rotY: t.rotY, rotZ: t.rotZ,
|
|
2417
|
+
scaleX: t.scaleX, scaleY: t.scaleY, scaleZ: t.scaleZ,
|
|
2418
|
+
uuid: safeProp(obj, 'uuid', undefined) || undefined,
|
|
2419
|
+
materialType: getMaterialInfo(obj),
|
|
2420
|
+
vertexCount: getVertexCount(obj),
|
|
2421
|
+
}
|
|
2422
|
+
};
|
|
2423
|
+
|
|
2424
|
+
if (result.name === undefined) delete result.name;
|
|
2425
|
+
if (children && children.length > 0) result.children = children;
|
|
2426
|
+
return result;
|
|
2427
|
+
}
|
|
2428
|
+
|
|
2429
|
+
if (!THREE) {
|
|
2430
|
+
return {
|
|
2431
|
+
engine: 'Three.js',
|
|
2432
|
+
version: undefined,
|
|
2433
|
+
canvas: { width: 0, height: 0, dpr: 1, contextType: 'unknown' },
|
|
2434
|
+
sceneTree: null,
|
|
2435
|
+
totalNodes: 0,
|
|
2436
|
+
completeness: 'partial',
|
|
2437
|
+
error: 'window.THREE is undefined'
|
|
2438
|
+
};
|
|
2439
|
+
}
|
|
2440
|
+
|
|
2441
|
+
var threeVersion = THREE.REVISION ? ('r' + THREE.REVISION) : (THREE.VERSION || undefined);
|
|
2442
|
+
var scene = findScene();
|
|
2443
|
+
|
|
2444
|
+
var canvasEl = document.querySelector('canvas');
|
|
2445
|
+
var canvasInfo = {
|
|
2446
|
+
width: canvasEl ? canvasEl.width : 0,
|
|
2447
|
+
height: canvasEl ? canvasEl.height : 0,
|
|
2448
|
+
dpr: window.devicePixelRatio || 1,
|
|
2449
|
+
contextType: 'unknown'
|
|
2450
|
+
};
|
|
2451
|
+
if (canvasEl) {
|
|
2452
|
+
var gl = canvasEl.getContext('webgl2') || canvasEl.getContext('webgl');
|
|
2453
|
+
canvasInfo.contextType = gl ? (gl instanceof WebGL2RenderingContext ? 'webgl2' : 'webgl') : '2d';
|
|
2454
|
+
}
|
|
2455
|
+
|
|
2456
|
+
if (!scene) {
|
|
2457
|
+
return {
|
|
2458
|
+
engine: 'Three.js',
|
|
2459
|
+
version: threeVersion,
|
|
2460
|
+
canvas: canvasInfo,
|
|
2461
|
+
sceneTree: null,
|
|
2462
|
+
totalNodes: 0,
|
|
2463
|
+
completeness: 'partial',
|
|
2464
|
+
error: 'THREE.Scene not reachable from window — app likely scopes scene to a module closure'
|
|
2465
|
+
};
|
|
2466
|
+
}
|
|
2467
|
+
|
|
2468
|
+
var sceneTree = traverse(scene, 0, 'THREE.Scene');
|
|
2469
|
+
|
|
2470
|
+
return {
|
|
2471
|
+
engine: 'Three.js',
|
|
2472
|
+
version: threeVersion,
|
|
2473
|
+
canvas: canvasInfo,
|
|
2474
|
+
sceneTree: sceneTree,
|
|
2475
|
+
totalNodes: totalNodes,
|
|
2476
|
+
completeness: sceneTree ? 'full' : 'partial'
|
|
2477
|
+
};
|
|
2478
|
+
})()`}function v(e){let t=e.x,n=e.y,r=e.canvasId;return`(function() {
|
|
2479
|
+
var THREE = window.THREE;
|
|
2480
|
+
|
|
2481
|
+
function safeProp(obj, key, fallback) {
|
|
2482
|
+
try { var v = obj[key]; return v === undefined || v === null ? fallback : v; } catch(e) { return fallback; }
|
|
2483
|
+
}
|
|
2484
|
+
|
|
2485
|
+
function nodeId(obj, idx) {
|
|
2486
|
+
try {
|
|
2487
|
+
if (obj.uuid !== undefined && obj.uuid !== null && obj.uuid !== '') return 'three_' + obj.uuid;
|
|
2488
|
+
} catch(e) {}
|
|
2489
|
+
try {
|
|
2490
|
+
if (obj.id !== undefined && obj.id !== null) return 'three_id_' + obj.id;
|
|
2491
|
+
} catch(e) {}
|
|
2492
|
+
var t = obj.type || (obj.constructor ? obj.constructor.name : 'Object3D');
|
|
2493
|
+
return t + '_' + idx;
|
|
2494
|
+
}
|
|
2495
|
+
|
|
2496
|
+
function getType(obj) {
|
|
2497
|
+
try {
|
|
2498
|
+
if (obj.type && typeof obj.type === 'string' && obj.type !== '') return obj.type;
|
|
2499
|
+
} catch(e) {}
|
|
2500
|
+
return obj.constructor ? obj.constructor.name : 'Object3D';
|
|
2501
|
+
}
|
|
2502
|
+
|
|
2503
|
+
function isSceneLike(value) {
|
|
2504
|
+
if (!value || typeof value !== 'object') return false;
|
|
2505
|
+
try { if (value.isScene === true) return true; } catch(e) {}
|
|
2506
|
+
try { if (value.constructor && value.constructor.name === 'Scene') return true; } catch(e) {}
|
|
2507
|
+
return false;
|
|
2508
|
+
}
|
|
2509
|
+
|
|
2510
|
+
function findScene() {
|
|
2511
|
+
try { if (window.__threeScene && isSceneLike(window.__threeScene)) return window.__threeScene; } catch(e) {}
|
|
2512
|
+
try {
|
|
2513
|
+
var reg = window.__THREE_DEVTOOLS__;
|
|
2514
|
+
if (reg && reg.scenes && reg.scenes.length > 0 && isSceneLike(reg.scenes[0])) return reg.scenes[0];
|
|
2515
|
+
} catch(e) {}
|
|
2516
|
+
var seen = new Set();
|
|
2517
|
+
try {
|
|
2518
|
+
var keys = Object.keys(window);
|
|
2519
|
+
for (var i = 0; i < keys.length; i++) {
|
|
2520
|
+
try {
|
|
2521
|
+
var v = window[keys[i]];
|
|
2522
|
+
if (!v || v === window || v.nodeType || seen.has(v)) continue;
|
|
2523
|
+
seen.add(v);
|
|
2524
|
+
if (isSceneLike(v)) return v;
|
|
2525
|
+
} catch(e) {}
|
|
2526
|
+
}
|
|
2527
|
+
} catch(e) {}
|
|
2528
|
+
return null;
|
|
2529
|
+
}
|
|
2530
|
+
|
|
2531
|
+
var sx = ${t}, sy = ${n};
|
|
2532
|
+
|
|
2533
|
+
var canvases = Array.from(document.querySelectorAll('canvas'));
|
|
2534
|
+
var targetCanvas = null;
|
|
2535
|
+
${r?`targetCanvas = document.getElementById(${JSON.stringify(r)}) || canvases[parseInt(${JSON.stringify(r)})] || null;`:`
|
|
2536
|
+
for (var ci = canvases.length - 1; ci >= 0; ci--) {
|
|
2537
|
+
var r = canvases[ci].getBoundingClientRect();
|
|
2538
|
+
if (sx >= r.left && sx <= r.right && sy >= r.top && sy <= r.bottom) {
|
|
2539
|
+
targetCanvas = canvases[ci];
|
|
2540
|
+
break;
|
|
2541
|
+
}
|
|
2542
|
+
}`}
|
|
2543
|
+
|
|
2544
|
+
if (!THREE) {
|
|
2545
|
+
return { success: false, picked: null, candidates: [], coordinates: {
|
|
2546
|
+
screen: { x: sx, y: sy }, canvas: { x: sx, y: sy } }, hitTestMethod: 'none' };
|
|
2547
|
+
}
|
|
2548
|
+
|
|
2549
|
+
var scene = findScene();
|
|
2550
|
+
if (!scene) {
|
|
2551
|
+
return { success: false, picked: null, candidates: [], coordinates: {
|
|
2552
|
+
screen: { x: sx, y: sy }, canvas: { x: sx, y: sy } }, hitTestMethod: 'none' };
|
|
2553
|
+
}
|
|
2554
|
+
|
|
2555
|
+
var canvasX = sx, canvasY = sy;
|
|
2556
|
+
if (targetCanvas) {
|
|
2557
|
+
var rect = targetCanvas.getBoundingClientRect();
|
|
2558
|
+
canvasX = (sx - rect.left) * (targetCanvas.width / rect.width);
|
|
2559
|
+
canvasY = (sy - rect.top) * (targetCanvas.height / rect.height);
|
|
2560
|
+
}
|
|
2561
|
+
|
|
2562
|
+
var candidates = [];
|
|
2563
|
+
var hitTestMethod = 'none';
|
|
2564
|
+
var enginePicked = null;
|
|
2565
|
+
|
|
2566
|
+
// Try THREE.Raycaster (native) — most accurate
|
|
2567
|
+
try {
|
|
2568
|
+
if (THREE.Vector3 && THREE.Raycaster) {
|
|
2569
|
+
var cam = scene.children.find(function(c) { return c && c.isCamera; }) || null;
|
|
2570
|
+
// Also check cameras stored elsewhere on the scene
|
|
2571
|
+
if (!cam) {
|
|
2572
|
+
for (var ci2 = 0; ci2 < scene.children.length; ci2++) {
|
|
2573
|
+
if (scene.children[ci2] && scene.children[ci2].isCamera) { cam = scene.children[ci2]; break; }
|
|
2574
|
+
}
|
|
2575
|
+
}
|
|
2576
|
+
if (cam) {
|
|
2577
|
+
var ndcX = (canvasX / (targetCanvas ? targetCanvas.width : window.innerWidth)) * 2 - 1;
|
|
2578
|
+
var ndcY = -(canvasY / (targetCanvas ? targetCanvas.height : window.innerHeight)) * 2 + 1;
|
|
2579
|
+
var ray = new THREE.Raycaster();
|
|
2580
|
+
ray.setFromCamera({ x: ndcX, y: ndcY }, cam);
|
|
2581
|
+
var hits = ray.intersectObjects(scene.children, true);
|
|
2582
|
+
if (hits && hits.length > 0 && hits[0].object) {
|
|
2583
|
+
enginePicked = hits[0].object;
|
|
2584
|
+
hitTestMethod = 'engine';
|
|
2585
|
+
}
|
|
2586
|
+
}
|
|
2587
|
+
}
|
|
2588
|
+
} catch(e) {}
|
|
2589
|
+
|
|
2590
|
+
// DFS fallback: world-bounds check
|
|
2591
|
+
function decomposeMatrix(matrix) {
|
|
2592
|
+
var r = { posX: 0, posY: 0, scaleX: 1, scaleY: 1 };
|
|
2593
|
+
try {
|
|
2594
|
+
if (THREE.Vector3 && THREE.Quaternion && typeof matrix.decompose === 'function') {
|
|
2595
|
+
var pos = new THREE.Vector3();
|
|
2596
|
+
var quat = new THREE.Quaternion();
|
|
2597
|
+
var scale = new THREE.Vector3();
|
|
2598
|
+
matrix.decompose(pos, quat, scale);
|
|
2599
|
+
r.posX = pos.x; r.posY = pos.y; r.scaleX = scale.x; r.scaleY = scale.y;
|
|
2600
|
+
}
|
|
2601
|
+
} catch(e) {}
|
|
2602
|
+
return r;
|
|
2603
|
+
}
|
|
2604
|
+
|
|
2605
|
+
function nodeBounds(obj) {
|
|
2606
|
+
var mw = safeProp(obj, 'matrixWorld', null);
|
|
2607
|
+
var t = (mw && typeof mw.decompose === 'function') ? decomposeMatrix(mw) :
|
|
2608
|
+
{ posX: obj.position ? safeProp(obj.position, 'x', 0) : 0,
|
|
2609
|
+
posY: obj.position ? safeProp(obj.position, 'y', 0) : 0,
|
|
2610
|
+
scaleX: obj.scale ? safeProp(obj.scale, 'x', 1) : 1,
|
|
2611
|
+
scaleY: obj.scale ? safeProp(obj.scale, 'y', 1) : 1 };
|
|
2612
|
+
try {
|
|
2613
|
+
var geom = obj.geometry;
|
|
2614
|
+
if (geom) {
|
|
2615
|
+
if (!geom.boundingBox) { try { geom.computeBoundingBox(); } catch(e) {} }
|
|
2616
|
+
if (geom.boundingBox) {
|
|
2617
|
+
var bb = geom.boundingBox;
|
|
2618
|
+
return {
|
|
2619
|
+
x: bb.min.x * t.scaleX + t.posX,
|
|
2620
|
+
y: bb.min.y * t.scaleY + t.posY,
|
|
2621
|
+
width: Math.abs((bb.max.x - bb.min.x) * t.scaleX),
|
|
2622
|
+
height: Math.abs((bb.max.y - bb.min.y) * t.scaleY)
|
|
2623
|
+
};
|
|
2624
|
+
}
|
|
2625
|
+
}
|
|
2626
|
+
} catch(e) {}
|
|
2627
|
+
return { x: t.posX, y: t.posY, width: Math.abs(t.scaleX), height: Math.abs(t.scaleY) };
|
|
2628
|
+
}
|
|
2629
|
+
|
|
2630
|
+
function hitTestDfs(obj, depth, accPath) {
|
|
2631
|
+
if (!obj) return;
|
|
2632
|
+
var visible = safeProp(obj, 'visible', true);
|
|
2633
|
+
if (!visible) return;
|
|
2634
|
+
|
|
2635
|
+
var wb = nodeBounds(obj);
|
|
2636
|
+
if (wb.width > 0 && wb.height > 0) {
|
|
2637
|
+
var inBounds = canvasX >= wb.x && canvasX <= wb.x + wb.width &&
|
|
2638
|
+
canvasY >= wb.y && canvasY <= wb.y + wb.height;
|
|
2639
|
+
var interactive = !!(
|
|
2640
|
+
obj.userData && (obj.userData.interactive || obj.userData.clickable || obj.userData.pickable)
|
|
2641
|
+
);
|
|
2642
|
+
if (inBounds && interactive) {
|
|
2643
|
+
candidates.push({
|
|
2644
|
+
node: {
|
|
2645
|
+
id: nodeId(obj, 0),
|
|
2646
|
+
type: getType(obj),
|
|
2647
|
+
name: safeProp(obj, 'name', undefined) || undefined,
|
|
2648
|
+
visible: true,
|
|
2649
|
+
interactive: true,
|
|
2650
|
+
alpha: 1,
|
|
2651
|
+
x: wb.x, y: wb.y,
|
|
2652
|
+
width: wb.width, height: wb.height,
|
|
2653
|
+
worldBounds: wb,
|
|
2654
|
+
path: accPath || nodeId(obj, 0)
|
|
2655
|
+
},
|
|
2656
|
+
depth: depth
|
|
2657
|
+
});
|
|
2658
|
+
}
|
|
2659
|
+
}
|
|
2660
|
+
|
|
2661
|
+
var childrenArr = safeProp(obj, 'children', []);
|
|
2662
|
+
if (Array.isArray(childrenArr)) {
|
|
2663
|
+
for (var i = 0; i < childrenArr.length; i++) {
|
|
2664
|
+
var cn = childrenArr[i];
|
|
2665
|
+
if (!cn) continue;
|
|
2666
|
+
var childPath = accPath ? accPath + '/' + nodeId(cn, i) : nodeId(cn, i);
|
|
2667
|
+
hitTestDfs(cn, depth + 1, childPath);
|
|
2668
|
+
}
|
|
2669
|
+
}
|
|
2670
|
+
}
|
|
2671
|
+
|
|
2672
|
+
hitTestDfs(scene, 0, 'THREE.Scene');
|
|
2673
|
+
|
|
2674
|
+
var picked = enginePicked ? {
|
|
2675
|
+
id: nodeId(enginePicked, 0),
|
|
2676
|
+
type: getType(enginePicked),
|
|
2677
|
+
name: safeProp(enginePicked, 'name', undefined) || undefined,
|
|
2678
|
+
visible: !!(safeProp(enginePicked, 'visible', true)),
|
|
2679
|
+
interactive: !!(enginePicked.userData &&
|
|
2680
|
+
(enginePicked.userData.interactive || enginePicked.userData.clickable)),
|
|
2681
|
+
alpha: 1,
|
|
2682
|
+
x: nodeBounds(enginePicked).x,
|
|
2683
|
+
y: nodeBounds(enginePicked).y,
|
|
2684
|
+
width: nodeBounds(enginePicked).width,
|
|
2685
|
+
height: nodeBounds(enginePicked).height,
|
|
2686
|
+
worldBounds: nodeBounds(enginePicked),
|
|
2687
|
+
path: 'THREE.Scene/raycast/' + nodeId(enginePicked, 0)
|
|
2688
|
+
} : null;
|
|
2689
|
+
|
|
2690
|
+
if (!picked && candidates.length > 0) {
|
|
2691
|
+
candidates.sort(function(a, b) { return a.depth - b.depth; });
|
|
2692
|
+
picked = candidates[0].node;
|
|
2693
|
+
hitTestMethod = 'manual';
|
|
2694
|
+
}
|
|
2695
|
+
|
|
2696
|
+
return {
|
|
2697
|
+
success: !!picked,
|
|
2698
|
+
picked: picked,
|
|
2699
|
+
candidates: candidates,
|
|
2700
|
+
coordinates: {
|
|
2701
|
+
screen: { x: sx, y: sy },
|
|
2702
|
+
canvas: { x: canvasX, y: canvasY }
|
|
2703
|
+
},
|
|
2704
|
+
hitTestMethod: hitTestMethod
|
|
2705
|
+
};
|
|
2706
|
+
})()`}var y=class{id=`three`;engine=`Three.js`;version;constructor(){this.version=void 0}async detect(e){try{let t=await e.pageController.evaluate(`
|
|
2707
|
+
(function() {
|
|
2708
|
+
var THREE = window.THREE;
|
|
2709
|
+
if (!THREE) return { present: false, hasScene: false };
|
|
2710
|
+
var version = THREE.REVISION ? ('r' + THREE.REVISION) : (THREE.VERSION || undefined);
|
|
2711
|
+
function isSceneLike(v) {
|
|
2712
|
+
if (!v || typeof v !== 'object') return false;
|
|
2713
|
+
try { if (v.isScene === true) return true; } catch(e) {}
|
|
2714
|
+
try { if (v.constructor && v.constructor.name === 'Scene') return true; } catch(e) {}
|
|
2715
|
+
return false;
|
|
2716
|
+
}
|
|
2717
|
+
var hasScene = false;
|
|
2718
|
+
try { if (window.__threeScene && isSceneLike(window.__threeScene)) hasScene = true; } catch(e) {}
|
|
2719
|
+
if (!hasScene) {
|
|
2720
|
+
try {
|
|
2721
|
+
var reg = window.__THREE_DEVTOOLS__;
|
|
2722
|
+
if (reg && reg.scenes && reg.scenes.length > 0 && isSceneLike(reg.scenes[0])) hasScene = true;
|
|
2723
|
+
} catch(e) {}
|
|
2724
|
+
}
|
|
2725
|
+
if (!hasScene) {
|
|
2726
|
+
var keys = Object.keys(window);
|
|
2727
|
+
for (var i = 0; i < keys.length; i++) {
|
|
2728
|
+
try {
|
|
2729
|
+
var v = window[keys[i]];
|
|
2730
|
+
if (!v || v === window || v.nodeType) continue;
|
|
2731
|
+
if (isSceneLike(v)) { hasScene = true; break; }
|
|
2732
|
+
} catch(e) {}
|
|
2733
|
+
}
|
|
2734
|
+
}
|
|
2735
|
+
return { present: true, version: version, hasScene: hasScene };
|
|
2736
|
+
})()
|
|
2737
|
+
`);if(!t.present)return null;let n=[`window.THREE detected`];return t.version&&n.push(`THREE.REVISION: `+t.version),t.hasScene?n.push(`THREE.Scene reachable from window`):n.push(`THREE.Scene not reachable from window (scene may be in module closure)`),{engine:this.engine,version:t.version,confidence:t.hasScene?.95:.9,evidence:n,adapterId:this.id}}catch{return null}}async dumpScene(e,t){let n=_(t),r=await e.pageController.evaluate(n);return{engine:r.engine,version:r.version,canvas:r.canvas,sceneTree:r.sceneTree??{id:`empty`,type:`Scene`,visible:!0,interactive:!1,alpha:1,x:0,y:0,width:r.canvas?.width??0,height:r.canvas?.height??0,worldBounds:{x:0,y:0,width:r.canvas?.width??0,height:r.canvas?.height??0},path:`THREE.Scene`},totalNodes:r.totalNodes,completeness:r.completeness===`full`?`full`:`partial`}}async pickAt(e,t){let n=v(t),r=await e.pageController.evaluate(n);return{success:r.success,picked:r.picked,candidates:r.candidates,coordinates:r.coordinates,hitTestMethod:r.hitTestMethod}}async dumpGpuResources(e,t){let n=b();return await e.pageController.evaluate(n)}};function b(){return`(function(){
|
|
2738
|
+
var THREE=window.THREE; if(!THREE) return null;
|
|
2739
|
+
|
|
2740
|
+
function findScene(){
|
|
2741
|
+
try{ if(window.__threeScene&&window.__threeScene.isScene===true) return window.__threeScene; }catch(e){}
|
|
2742
|
+
try{ var dev=window.__THREE_DEVTOOLS__; if(dev&&dev.scenes&&dev.scenes.length>0&&dev.scenes[0].isScene===true) return dev.scenes[0]; }catch(e){}
|
|
2743
|
+
var keys=Object.keys(window);
|
|
2744
|
+
for(var i=0;i<keys.length;i++){
|
|
2745
|
+
try{ var v=window[keys[i]]; if(v&&v.isScene===true) return v; }catch(e){}
|
|
2746
|
+
}
|
|
2747
|
+
return null;
|
|
2748
|
+
}
|
|
2749
|
+
|
|
2750
|
+
function findRenderer(){
|
|
2751
|
+
try{ if(window.__threeRenderer&&window.__threeRenderer.isWebGLRenderer===true) return window.__threeRenderer; }catch(e){}
|
|
2752
|
+
var keys=Object.keys(window);
|
|
2753
|
+
for(var i=0;i<keys.length;i++){
|
|
2754
|
+
try{ var v=window[keys[i]]; if(v&&v.isWebGLRenderer===true) return v; }catch(e){}
|
|
2755
|
+
}
|
|
2756
|
+
return null;
|
|
2757
|
+
}
|
|
2758
|
+
|
|
2759
|
+
var textures=[],programs=[],geometries=[];
|
|
2760
|
+
var renderer=findRenderer();
|
|
2761
|
+
|
|
2762
|
+
if(renderer&&renderer.info&&renderer.info.programs){
|
|
2763
|
+
var progs=renderer.info.programs;
|
|
2764
|
+
for(var i=0;i<Math.min(progs.length,200);i++){
|
|
2765
|
+
var p=progs[i];
|
|
2766
|
+
var pData={ name: p.name||undefined, vertexShader:'', fragmentShader:'', uniforms:{} };
|
|
2767
|
+
try{
|
|
2768
|
+
var gl=renderer.getContext();
|
|
2769
|
+
var dbg=gl.getExtension('WEBGL_debug_shaders');
|
|
2770
|
+
if(dbg&&p.program){
|
|
2771
|
+
try{ pData.vertexShader=dbg.getTranslatedShaderSource(p.vertexShader)||''; }catch(e){}
|
|
2772
|
+
try{ pData.fragmentShader=dbg.getTranslatedShaderSource(p.fragmentShader)||''; }catch(e){}
|
|
2773
|
+
}
|
|
2774
|
+
} catch(e){}
|
|
2775
|
+
programs.push(pData);
|
|
2776
|
+
}
|
|
2777
|
+
}
|
|
2778
|
+
|
|
2779
|
+
if(renderer&&renderer.info&&renderer.info.textures){
|
|
2780
|
+
var texs=renderer.info.textures;
|
|
2781
|
+
for(var i=0;i<Math.min(texs.length,200);i++){
|
|
2782
|
+
var t=texs[i];
|
|
2783
|
+
textures.push({ name:t.name||undefined, width:t.width||0, height:t.height||0, format:'rgba', type:'unsigned_byte' });
|
|
2784
|
+
}
|
|
2785
|
+
}
|
|
2786
|
+
|
|
2787
|
+
var scene=findScene();
|
|
2788
|
+
if(scene){
|
|
2789
|
+
(function walk(obj){
|
|
2790
|
+
if(!obj) return;
|
|
2791
|
+
if(obj.isMesh&&obj.geometry){
|
|
2792
|
+
var g=obj.geometry, attrs=[];
|
|
2793
|
+
if(g.attributes){
|
|
2794
|
+
if(g.attributes.position) attrs.push('position');
|
|
2795
|
+
if(g.attributes.normal) attrs.push('normal');
|
|
2796
|
+
if(g.attributes.uv) attrs.push('uv');
|
|
2797
|
+
}
|
|
2798
|
+
var vc=g.attributes&&g.attributes.position?g.attributes.position.count:0;
|
|
2799
|
+
var tc=g.index?Math.floor(g.index.count/3):Math.floor(vc/3);
|
|
2800
|
+
geometries.push({ name:obj.name||undefined, vertexCount:vc, triangleCount:tc, attributes:attrs });
|
|
2801
|
+
}
|
|
2802
|
+
if(obj.children) for(var j=0;j<obj.children.length;j++) walk(obj.children[j]);
|
|
2803
|
+
})(scene);
|
|
2804
|
+
}
|
|
2805
|
+
|
|
2806
|
+
return { textures:textures, programs:programs, geometries:geometries };
|
|
2807
|
+
})()`}const x=[{pattern:`Laya`,adapterId:`laya`,engine:`LayaAir`},{pattern:`PIXI`,adapterId:`pixi`,engine:`PixiJS`},{pattern:`Phaser`,adapterId:`phaser`,engine:`Phaser`},{pattern:`cc`,adapterId:`cocos`,engine:`CocosCreator`},{pattern:`legacyCC`,adapterId:`cocos`,engine:`CocosCreator`},{pattern:`BABYLON`,adapterId:`babylon`,engine:`Babylon.js`},{pattern:`THREE`,adapterId:`three`,engine:`Three.js`},{pattern:`createUnityInstance`,adapterId:`unity`,engine:`UnityWebGL`}],S=new Map,se={laya:()=>new ee,pixi:()=>new oe,phaser:()=>new re,cocos:()=>new m,three:()=>new y,babylon:()=>new d};function C(e){if(!e)return null;if(S.has(e.adapterId))return S.get(e.adapterId);let t=se[e.adapterId];if(!t)return null;let n=t();return S.set(e.adapterId,n),n}function w(e){return{pageController:e,cdpSession:null,tabId:`default`}}async function T(e,t){try{let n=await e.evaluate(`
|
|
1734
2808
|
(function() {
|
|
1735
2809
|
const hits = [];
|
|
1736
|
-
${
|
|
2810
|
+
${x.map(({pattern:e,adapterId:t,engine:n})=>`
|
|
1737
2811
|
try {
|
|
1738
2812
|
if (window[${JSON.stringify(e)}] !== undefined) {
|
|
1739
2813
|
const v = window[${JSON.stringify(e)}];
|
|
@@ -1837,10 +2911,10 @@ import{n as e}from"./response-C7rKQst4.mjs";import{r as t}from"./parse-args-Bw41
|
|
|
1837
2911
|
|
|
1838
2912
|
return { hits: hits, selected: hits[0] || null, selectedEvidence: [] };
|
|
1839
2913
|
})()
|
|
1840
|
-
`);if(!n.selected)return null;let r=n.selected;return{engine:r.engine,version:r.version,confidence:n.selectedEvidence.length>0?.95:.9,evidence:[`window global detected`,...n.selectedEvidence],adapterId:r.adapterId}}catch{return null}}async function
|
|
2914
|
+
`);if(!n.selected)return null;let r=n.selected;return{engine:r.engine,version:r.version,confidence:n.selectedEvidence.length>0?.95:.9,evidence:[`window global detected`,...n.selectedEvidence],adapterId:r.adapterId}}catch{return null}}async function ce(e,t){let n=t.canvasId,r=await e.evaluate(`
|
|
1841
2915
|
(function() {
|
|
1842
2916
|
const results = [];
|
|
1843
|
-
${
|
|
2917
|
+
${x.map(({pattern:e,adapterId:t,engine:n})=>`
|
|
1844
2918
|
try {
|
|
1845
2919
|
const global = window[${JSON.stringify(e)}];
|
|
1846
2920
|
if (global !== undefined) {
|
|
@@ -1878,7 +2952,7 @@ import{n as e}from"./response-C7rKQst4.mjs";import{r as t}from"./parse-args-Bw41
|
|
|
1878
2952
|
`);return await e.evaluate(`
|
|
1879
2953
|
!!(requestAnimationFrame.toString().includes('[native]') &&
|
|
1880
2954
|
(window.__canvasEngineHint || document.querySelector('[data-engine]')))
|
|
1881
|
-
`)&&i.length===0&&i.push({engine:`Unknown Canvas Engine`,confidence:.3,evidence:[`requestAnimationFrame hook detected`,`canvas elements found`],adapterId:`none`}),{candidates:i,canvasCount:a.length,canvasDetails:n===void 0?a:a.filter(e=>e.id===n||a.indexOf(e).toString()===n),fingerprintComplete:i.length>0}}async function
|
|
2955
|
+
`)&&i.length===0&&i.push({engine:`Unknown Canvas Engine`,confidence:.3,evidence:[`requestAnimationFrame hook detected`,`canvas elements found`],adapterId:`none`}),{candidates:i,canvasCount:a.length,canvasDetails:n===void 0?a:a.filter(e=>e.id===n||a.indexOf(e).toString()===n),fingerprintComplete:i.length>0}}async function le(e,t){let n=t.canvasId,r=t.maxDepth??20,i=t.onlyInteractive??!1,a=t.onlyVisible??!1,o=t.includeGPUResources??!1,s={canvasId:n,maxDepth:r,onlyInteractive:i,onlyVisible:a,includeGPUResources:o},c=await T(e,n);if(!c)return D(e,n,null);let l=C(c);if(!l)return D(e,n,c);let u=await l.dumpScene(w(e),s);if(o&&l.dumpGpuResources){let t=await l.dumpGpuResources(w(e),s);t&&(u.gpuResources=t)}return u}function E(e){return e.adapterId===`unity`?{reason:`Unity WebGL adapter not yet available; the engine was detected but scene tree extraction is unsupported.`,fix:`Use page_evaluate with unityInstance.SendMessage to inspect the Unity runtime manually.`}:{reason:`${e.engine||e.adapterId||`unknown engine`} was fingerprinted but no scene-dump adapter is registered for adapterId "${e.adapterId}". Only DOM canvas metadata returned.`,fix:`Use page_evaluate to inspect the engine directly, or request an adapter for this engine.`}}async function D(e,t,n=null){let r=await e.evaluate(`
|
|
1882
2956
|
(function() {
|
|
1883
2957
|
return Array.from(document.querySelectorAll('canvas')).map(function(c, i) {
|
|
1884
2958
|
var ctx2d = c.getContext('2d');
|
|
@@ -1892,7 +2966,7 @@ import{n as e}from"./response-C7rKQst4.mjs";import{r as t}from"./parse-args-Bw41
|
|
|
1892
2966
|
};
|
|
1893
2967
|
});
|
|
1894
2968
|
})()
|
|
1895
|
-
`)
|
|
2969
|
+
`),i=(t?r.filter(e=>e.id===t||r.indexOf(e).toString()===t):r)[0]??{id:t??``,width:0,height:0,dpr:1,contextType:`unknown`},a=n!==null,o=n?.engine??`unknown`,s=n?.version,l=n?.adapterId,u=a?E(n).reason:`No canvas engine detected — only DOM canvas metadata returned`,d=c({tool:`canvas_scene_dump`,stubType:`partial`,reason:u,fix:a?E(n).fix:`Ensure a supported canvas engine is loaded (Pixi, Phaser, Laya, Cocos, Three.js, Babylon.js)`,data:{engine:o,version:s,adapterId:l,canvas:i,sceneTree:null,totalNodes:0,completeness:`partial`,partialReason:u}});return{engine:d.engine,version:d.version,adapterId:d.adapterId,canvas:d.canvas,sceneTree:d.sceneTree,totalNodes:d.totalNodes,completeness:d.completeness,partialReason:d.partialReason,stubType:d.stubType,reason:d.reason,fix:d.fix}}async function ue(e,t){let n=t.x,r=t.y,i=t.canvasId,a=t.highlight??!1,o={x:n,y:r,canvasId:i},s=await e.evaluate(`
|
|
1896
2970
|
(function() {
|
|
1897
2971
|
var sx = ${n}, sy = ${r};
|
|
1898
2972
|
var canvases = Array.from(document.querySelectorAll('canvas'));
|
|
@@ -1916,7 +2990,7 @@ import{n as e}from"./response-C7rKQst4.mjs";import{r as t}from"./parse-args-Bw41
|
|
|
1916
2990
|
canvasY: (sy - rect.top) * (target.height / rect.height)
|
|
1917
2991
|
};
|
|
1918
2992
|
})()
|
|
1919
|
-
`),c=await
|
|
2993
|
+
`),c=await T(e,i);if(!c)return{success:!1,picked:null,candidates:[],coordinates:{screen:s.screen,canvas:{x:s.canvasX,y:s.canvasY}},hitTestMethod:`none`};let l=C(c);if(!l)return{success:!1,picked:null,candidates:[],coordinates:{screen:s.screen,canvas:{x:s.canvasX,y:s.canvasY}},hitTestMethod:`none`};let u=await l.pickAt(w(e),o);return a&&u.picked&&await O(e,u.picked.worldBounds).catch(()=>{}),u}async function O(e,t){await e.evaluate(`
|
|
1920
2994
|
(function() {
|
|
1921
2995
|
var existing = document.getElementById('__canvas-highlight');
|
|
1922
2996
|
if (existing) existing.remove();
|
|
@@ -1931,7 +3005,7 @@ import{n as e}from"./response-C7rKQst4.mjs";import{r as t}from"./parse-args-Bw41
|
|
|
1931
3005
|
document.body.appendChild(div);
|
|
1932
3006
|
setTimeout(function() { div.remove(); }, 3000);
|
|
1933
3007
|
})()
|
|
1934
|
-
`)}async function
|
|
3008
|
+
`)}async function k(e,t,n,r){let i=r.x,a=r.y,o=r.canvasId,s=r.maxFrames??50,c=r.breakpointType??`click`;await t.enable(),await t.ensureAdvancedFeatures();let l=t.getEventManager(),u=await l.setEventListenerBreakpoint(c);await new Promise(e=>setTimeout(e,50));let d,f,p,m,h;try{let r=await A(e,i,a,o,c),l=r.result;f=r.completion,d=l.cleanupToken;let u=await t.waitForPaused(5e3),p=[];u?.callFrames&&(p=u.callFrames.slice(0,s).map(e=>({functionName:e.functionName||`(anonymous)`,scriptUrl:e.url,lineNumber:e.location?.lineNumber,columnNumber:e.location?.columnNumber}))),F(n,`canvas_trace`,{engine:l.engine??`unknown`,x:i,y:a,handlerCount:p.length}),h={inputFlow:l.domEventChain??[],hitTarget:null,domEventChain:p.map(e=>({type:c,target:e.scriptUrl,phase:`at-target`})),engineDispatchChain:l.engineChain??[],handlerFrames:p,handlersTriggered:p.map(e=>({functionName:e.functionName,scriptUrl:e.scriptUrl,lineNumber:e.lineNumber})),networkEmitted:[]}}catch(e){p=e}finally{try{await t.resume()}catch{}if(f)try{await f}catch(e){p||(m=e)}if(await N(e,d),typeof l.removeEventListenerBreakpoint==`function`)try{await l.removeEventListenerBreakpoint(u)}catch{}}if(p)throw p;if(m)throw m;if(!h)throw Error(`Canvas trace did not produce a result.`);return h}async function A(e,t,n,r,i=`click`){return i===`click`&&typeof e.click==`function`?j(e,t,n,r,i):M(e,t,n,r,i)}async function j(e,t,n,r,i=`click`){let a=P(i),o=`jshook-trace-${Date.now()}-${Math.random().toString(36).slice(2,10)}`,s=await e.evaluate(`
|
|
1935
3009
|
(function() {
|
|
1936
3010
|
var canvases = ${r?`[document.getElementById(${JSON.stringify(r)})]`:`Array.from(document.querySelectorAll("canvas"))`};
|
|
1937
3011
|
var target = null;
|
|
@@ -1962,7 +3036,7 @@ import{n as e}from"./response-C7rKQst4.mjs";import{r as t}from"./parse-args-Bw41
|
|
|
1962
3036
|
offset: { x: offsetX, y: offsetY }
|
|
1963
3037
|
};
|
|
1964
3038
|
})()
|
|
1965
|
-
`);return!s.selector||!s.offset?{result:s,completion:Promise.resolve()}:{result:s,completion:e.click?.(s.selector,{button:`left`,clickCount:1,offset:s.offset})??Promise.resolve()}}async function
|
|
3039
|
+
`);return!s.selector||!s.offset?{result:s,completion:Promise.resolve()}:{result:s,completion:e.click?.(s.selector,{button:`left`,clickCount:1,offset:s.offset})??Promise.resolve()}}async function M(e,t,n,r,i=`click`){let a=P(i),o=`
|
|
1966
3040
|
(function() {
|
|
1967
3041
|
var canvases = ${r?`[document.getElementById(${JSON.stringify(r)})]`:`Array.from(document.querySelectorAll("canvas"))`};
|
|
1968
3042
|
var target = null;
|
|
@@ -2008,7 +3082,7 @@ import{n as e}from"./response-C7rKQst4.mjs";import{r as t}from"./parse-args-Bw41
|
|
|
2008
3082
|
engineChain: []
|
|
2009
3083
|
};
|
|
2010
3084
|
})()
|
|
2011
|
-
`;return{result:await e.evaluate(o),completion:Promise.resolve()}}async function
|
|
3085
|
+
`;return{result:await e.evaluate(o),completion:Promise.resolve()}}async function N(e,t){if(t)try{await e.evaluate(`
|
|
2012
3086
|
(function() {
|
|
2013
3087
|
var target = document.querySelector('canvas[data-jshook-trace-token="${t}"]');
|
|
2014
3088
|
if (target) {
|
|
@@ -2016,4 +3090,4 @@ import{n as e}from"./response-C7rKQst4.mjs";import{r as t}from"./parse-args-Bw41
|
|
|
2016
3090
|
}
|
|
2017
3091
|
return true;
|
|
2018
3092
|
})()
|
|
2019
|
-
`)}catch{}}function A(e){return e===`mousedown`?[`pointerdown`,`mousedown`]:e===`pointerdown`?[`pointerdown`]:[`pointerdown`,`mousedown`,`pointerup`,`mouseup`,`click`]}function j(e,t,n){try{return e.addNode(`function`,t,n).id}catch{return`evidence-unavailable`}}var M=class{pageController;debuggerManager;evidenceStore;constructor(e){this.pageController=e.pageController,this.debuggerManager=e.debuggerManager,this.evidenceStore=e.evidenceStore}async handleFingerprint(t){return e(await b(this.pageController,t))}async handleSceneDump(t){return e(await x(this.pageController,t))}async handlePick(n){let r=t(n,`x`,0),i=t(n,`y`,0);return e(await C(this.pageController,{...n,x:r,y:i}))}async handleTraceClick(t){return e(await T(this.pageController,this.debuggerManager,this.evidenceStore,t))}};export{M as CanvasToolHandlers};
|
|
3093
|
+
`)}catch{}}function P(e){return e===`mousedown`?[`pointerdown`,`mousedown`]:e===`pointerdown`?[`pointerdown`]:[`pointerdown`,`mousedown`,`pointerup`,`mouseup`,`click`]}function F(e,t,n){try{return e.addNode(`function`,t,n).id}catch{return`evidence-unavailable`}}const I=new Set([`name`,`type`,`id`,`children`,`parent`,`x`,`y`,`width`,`height`]),L=new Set([`eq`,`contains`,`gt`,`lt`]);function R(e){return typeof e==`string`?e:e==null?``:String(e)}function z(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function B(e){if(Array.isArray(e))return e.filter(z);if(!z(e))return[];if(e.name!==void 0||e.type!==void 0)return[e];for(let t of[`root`,`tree`,`scene`,`nodes`,`children`]){let n=e[t];if(z(n))return[n];if(Array.isArray(n)){let e=n.filter(z);if(e.length>0)return e}}return[]}function V(e){let t={};for(let[n,r]of Object.entries(e))I.has(n)||(t[n]=r);return t}function H(e){if(e==null)return null;if(!z(e))return{error:`propertyFilter must be an object`};let t=e.key,n=e.op,r=e.value;return typeof t!=`string`||t.length===0?{error:`propertyFilter.key must be a non-empty string`}:typeof n!=`string`||!L.has(n)?{error:`propertyFilter.op must be one of: ${[...L].join(`, `)}`}:r===void 0?{error:`propertyFilter.value is required`}:{key:t,op:n,value:r}}function U(e,t){let n=e[t.key];if(n===void 0)return!1;if(t.op===`eq`)return n===t.value||String(n)===String(t.value);if(t.op===`contains`)return String(n).includes(String(t.value));let r=Number(n),i=Number(t.value);return!Number.isFinite(r)||!Number.isFinite(i)?!1:t.op===`gt`?r>i:r<i}function de(e){if(e==null)return null;if(!z(e))return{error:`bounds must be an object`};let t=e.x,n=e.y,r=e.width,i=e.height;return[t,n,r,i].every(e=>typeof e==`number`&&Number.isFinite(e))?{x:t,y:n,width:r,height:i}:{error:`bounds requires numeric x, y, width, height`}}function W(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function fe(e,t){let n=W(e,`x`),r=W(e,`y`),i=W(e,`width`),a=W(e,`height`);return n===void 0||r===void 0||i===void 0||a===void 0?!1:n<t.x+t.width&&n+i>t.x&&r<t.y+t.height&&r+a>t.y}async function pe(e){let n=e.sceneTree;if(n==null)return t({success:!1,error:`sceneTree is required (pass the output of canvas_scene_dump)`});let r=typeof e.namePattern==`string`?e.namePattern:void 0,i=typeof e.typeFilter==`string`?e.typeFilter:void 0,a=typeof e.maxResults==`number`&&e.maxResults>0?e.maxResults:100,o=H(e.propertyFilter);if(o&&`error`in o)return t({success:!1,error:o.error});let s=o,c=de(e.bounds);if(c&&`error`in c)return t({success:!1,error:c.error});let l=c,u;if(r)try{u=new RegExp(r,`i`)}catch{return t({success:!1,error:`Invalid namePattern regex: ${r}`})}let d=B(n);if(d.length===0)return t({success:!1,error:`sceneTree did not contain any recognizable scene nodes`});let f=[],p=0,m=(e,t,n)=>{p++;let r=R(e.name),a=R(e.type),o=!u||u.test(r),c=!i||a.toLowerCase()===i.toLowerCase(),d=!s||U(e,s),h=!l||fe(e,l);if(o&&c&&d&&h&&(u||i||s||l)&&f.push({name:r,type:a,path:[...t,r||a||`<anonymous>`],depth:n,...typeof e.id==`string`||typeof e.id==`number`?{id:String(e.id)}:{},properties:V(e)}),Array.isArray(e.children)){let i=[...t,r||a||`<anonymous>`];for(let t of e.children)z(t)&&m(t,i,n+1)}};for(let e of d)if(m(e,[],0),f.length>=a)break;let h=f.length>a,g=f.slice(0,a);return t({success:!0,matchedCount:f.length,truncated:h,matches:g,nodesScanned:p})}const me=new Set([`install`,`read`,`uninstall`]);function he(e){return`(function(){var MAX=${Math.max(1,Math.floor(e))};if(window.__jshookDrawHookInstalled){return{installed:true,alreadyInstalled:true,entryCount:(window.__jshookDrawLog||[]).length};}var log=[];window.__jshookDrawLog=log;var orig={};function ser(args){var out=[];for(var i=0;i<Math.min(args.length,6);i++){var v=args[i];var t=typeof v;if(t==="string"){out.push(v.length>200?v.slice(0,200)+"…":v);}else if(t==="number"||t==="boolean"){out.push(v);}else if(v==null){out.push(null);}else{out.push("["+t+"]");}}return out;}function record(kind,args,ctx){if(log.length>=MAX){log.shift();}var entry={kind:kind,args:ser(args),t:Date.now()};var canvas=ctx&&ctx.canvas;if(canvas&&canvas.id){entry.canvasId=canvas.id;}log.push(entry);}var c2d=window.CanvasRenderingContext2D&&window.CanvasRenderingContext2D.prototype;if(c2d){["drawImage","fillText","strokeText"].forEach(function(fn){if(typeof c2d[fn]!=="function"){return;}orig[fn]=c2d[fn];c2d[fn]=function(){try{record(fn,arguments,this);}catch(e){}return orig[fn].apply(this,arguments);};});}function hookGL(Ctor,name){if(!Ctor||!Ctor.prototype){return;}var p=Ctor.prototype;["drawArrays","drawElements"].forEach(function(fn){if(typeof p[fn]!=="function"){return;}var key=name+"."+fn;orig[key]=p[fn];p[fn]=function(){try{record(fn,arguments,this);}catch(e){}return orig[key].apply(this,arguments);};});}hookGL(window.WebGLRenderingContext,"webgl");hookGL(window.WebGL2RenderingContext,"webgl2");window.__jshookDrawOrig=orig;window.__jshookDrawHookInstalled=true;return{installed:true};})()`}function ge(e){return`(function(){var log=window.__jshookDrawLog||[];var copy=log.slice();if(${e}){log.length=0;}return{entries:copy,count:copy.length,installed:!!window.__jshookDrawHookInstalled};})()`}function _e(){return`(function(){if(!window.__jshookDrawHookInstalled){return{uninstalled:false,notInstalled:true};}var orig=window.__jshookDrawOrig||{};var c2d=window.CanvasRenderingContext2D&&window.CanvasRenderingContext2D.prototype;if(c2d){["drawImage","fillText","strokeText"].forEach(function(fn){if(orig[fn]){c2d[fn]=orig[fn];}});}["webgl","webgl2"].forEach(function(name){var Ctor=name==="webgl"?window.WebGLRenderingContext:window.WebGL2RenderingContext;var p=Ctor&&Ctor.prototype;if(!p){return;}["drawArrays","drawElements"].forEach(function(fn){var key=name+"."+fn;if(orig[key]){p[fn]=orig[key];}});});window.__jshookDrawHookInstalled=false;return{uninstalled:true};})()`}async function ve(e,n){let i=o(n,`action`,me,`install`),s=a(n,`persistent`,!1),c=r(n,`maxEntries`,1e3),l=a(n,`clear`,!1);try{if(i===`install`){let n=he(c),r=e,i=s&&typeof r.evaluateOnNewDocument==`function`;return i&&await r.evaluateOnNewDocument(n),t({action:`install`,persistent:i,...await e.evaluate(n),...s&&!i?{persistentNote:`evaluateOnNewDocument unavailable on this controller; hook installed for the current page only`}:{}})}return t(i===`read`?{action:`read`,clear:l,...await e.evaluate(ge(l))}:{action:`uninstall`,...await e.evaluate(_e())})}catch(e){return t({action:i,success:!1,error:e instanceof Error?e.message:String(e)})}}var ye=class{pageController;debuggerManager;evidenceStore;constructor(e){this.pageController=e.pageController,this.debuggerManager=e.debuggerManager,this.evidenceStore=e.evidenceStore}async handleFingerprintTool(e){return s(async()=>await this.handleFingerprint(e))}async handleSceneDumpTool(e){return s(async()=>await this.handleSceneDump(e))}async handlePickTool(e){return s(async()=>await this.handlePick(e))}async handleTraceClickTool(e){return s(async()=>await this.handleTraceClick(e))}async handleSceneSearchTool(e){return s(async()=>await this.handleSceneSearch(e))}async handleDrawHookTool(e){return s(async()=>await this.handleDrawHook(e))}async handleFingerprint(e){return t(await ce(this.pageController,e))}async handleSceneDump(e){return t(await le(this.pageController,e))}async handlePick(e){let n=r(e,`x`,0),i=r(e,`y`,0);return t(await ue(this.pageController,{...e,x:n,y:i}))}async handleTraceClick(e){return t(await k(this.pageController,this.debuggerManager,this.evidenceStore,e))}async handleSceneSearch(e){return pe(e)}async handleDrawHook(e){return ve(this.pageController,e)}};function G(e){return typeof e!=`object`||!e||!(`evaluate`in e)?!1:typeof e.evaluate==`function`}function be(e){return typeof e!=`object`||!e||!(`getExtension`in e)||!(`getParameter`in e)||!(`RENDERER`in e)||!(`VERSION`in e)?!1:typeof e.getExtension==`function`&&typeof e.getParameter==`function`}function xe(e){let t=(e??``).toLowerCase();return t.includes(`vulkan`)?`vulkan`:t.includes(`metal`)?`metal`:t.includes(`d3d`)||t.includes(`direct3d`)?`direct3d`:t.includes(`angle`)||t.includes(`opengl`)||t.includes(`mesa`)||t.includes(`gl`)?`opengl`:t.includes(`swiftshader`)||t.includes(`software`)||t.includes(`cpu`)?`cpu`:t.length>0?`gpu`:`cpu`}function K(e){let t=0;for(let n of e)t+=1,t+=K(n.children);return t}function Se(e){let t=e.getAttribute(`aria-label`);if(t)return t;if(e.id)return e.id;let n=typeof e.className==`string`?e.className.trim():``;return n.length>0?n:e.tagName.toLowerCase()}function Ce(e){if(typeof e.getBoundingClientRect!=`function`)return;let t=e.getBoundingClientRect();return{x:t.x,y:t.y,width:t.width,height:t.height}}function we(e){if(!(e instanceof HTMLElement)||typeof window>`u`)return;let t=window.getComputedStyle(e);return t.display!==`none`&&t.visibility!==`hidden`}function q(e,t){let n=Array.from(e.children).slice(0,12).map((e,n)=>q(e,`${t}-${n}`));return{id:e.id||t,type:e.tagName.toLowerCase(),label:Se(e),children:n,visible:we(e),bounds:Ce(e)}}function J(){let e=[{id:`mock-root`,type:`canvas`,label:`mock-skia-surface`,visible:!0,bounds:{x:0,y:0,width:640,height:480},children:[{id:`mock-layer`,type:`layer`,label:`mock-layer`,visible:!0,bounds:{x:16,y:16,width:320,height:160},children:[]}]}];return{rootNodes:e,totalNodes:K(e),extractedAt:new Date().toISOString()}}function Te(e){let t=`software`,n=`Raster`;return e.backend===`vulkan`?(t=`vulkan`,n=`Vulkan`):e.backend===`metal`?(t=`metal`,n=`Metal`):(e.backend===`opengl`||e.backend===`direct3d`||e.backend===`gpu`)&&(t=`gl`,n=`OpenGL`),{isSkiaBacked:e.backend!==`cpu`,version:e.version??null,gpuBackend:t,shaderPipeline:n,rendererStrings:e.gpu?[e.gpu]:[],features:e.backend===`cpu`?[]:[`backend:${e.backend}`],confidence:e.backend===`cpu`?.2:.8,evidence:e.gpu?[`Renderer string: ${e.gpu}`]:[`No renderer information available`]}}function Ee(e,t){return e.x>=t.x&&e.y>=t.y&&e.x+e.width<=t.x+t.width&&e.y+e.height<=t.y+t.height}function De(e){let t=(e??``).toLowerCase();return t.includes(`rrect`)||t.includes(`round`)?`drawRRect`:t.includes(`rect`)?`drawRect`:t.includes(`text`)?`drawText`:t.includes(`image`)||t.includes(`sprite`)?`drawImage`:t.includes(`path`)?`drawPath`:t.includes(`circle`)||t.includes(`arc`)?`drawCircle`:t.includes(`line`)?`drawLine`:`unknown`}function Oe(e){let t=e.layers.map((e,t)=>({id:e.id??`layer-${t}`,name:e.name??`layer-${t}`,bounds:e.bounds??{x:0,y:0,width:0,height:0},transform:e.transform??[1,0,0,0,1,0,0,0,1],opacity:e.opacity??1,visible:e.visible??!0,children:[],customData:e.customData})),n=t[0]??null;if(n)for(let e=1;e<t.length;e+=1){let r=t[e];r&&Ee(r.bounds,n.bounds)&&n.children.push(r)}let r=e.drawCommands.map(e=>({type:De(e.type),bounds:e.bounds??{x:0,y:0,width:0,height:0},paintInfo:e.paintInfo??{},layerId:e.layerId}));return{rootLayer:n,layers:t,drawCommands:r,totalLayers:t.length,totalDrawCommands:r.length,canvas:{id:e.canvas.id,width:e.canvas.width??0,height:e.canvas.height??0,dpr:e.canvas.dpr??1,contextType:e.canvas.contextType??`unknown`}}}function Y(e){return{id:e.id,name:e.label,bounds:e.bounds??{x:0,y:0,width:0,height:0},transform:[1,0,0,0,1,0,0,0,1],opacity:1,visible:e.visible??!0,children:e.children.map(e=>Y(e))}}function ke(e){let t=e.rootNodes.map(e=>Y(e));return{rootLayer:t[0]??null,layers:t,drawCommands:[],totalLayers:t.length,totalDrawCommands:0,canvas:{width:t[0]?.bounds.width??0,height:t[0]?.bounds.height??0,dpr:1,contextType:`mock`}}}function Ae(e){for(let t of e){let e=t.match(/(\d+\.\d+(?:\.\d+)?)/);if(e&&e[1])return e[1]}return null}function je(e){let t=e.join(` `).toLowerCase();return t.includes(`metal`)?`metal`:t.includes(`vulkan`)?`vulkan`:t.includes(`swiftshader`)||t.includes(`software`)?`software`:t.length>0?`gl`:`software`}function Me(e){let t=e.join(` `).toLowerCase();return t.includes(`metal`)?`Metal`:t.includes(`vulkan`)?`Vulkan`:t.includes(`swiftshader`)||t.includes(`software`)?`Raster`:t.length>0?`OpenGL`:`Raster`}function Ne(e,t,n){let r=e.flatMap(e=>{let t=[];return e.unmaskedRenderer&&t.push(e.unmaskedRenderer),e.renderer&&t.push(e.renderer),t}),i=[],a=[];t.hasSkiaFontSignatures&&(i.push(`fontBoundingBoxAscent/Descent available`),a.push(`Canvas text metrics expose font bounding boxes`));for(let e of n.engines)i.push(`engine:${e}`),a.push(`Detected known Skia-adjacent engine: ${e}`);for(let t of e)t.hasSkiaBackend&&t.unmaskedRenderer&&a.push(`Renderer probe: ${t.unmaskedRenderer}`);let o=e.some(e=>e.hasSkiaBackend)||n.isSkiaEngine||t.hasSkiaFontSignatures,s=.1;e.some(e=>e.hasSkiaBackend)&&(s+=.5),n.isSkiaEngine&&(s+=.3),t.hasSkiaFontSignatures&&(s+=.1);let c=o?je(r):`software`,l=o?Me(r):`Raster`;return{isSkiaBacked:o,version:Ae(r),gpuBackend:c,shaderPipeline:l,rendererStrings:r,features:i,confidence:Math.min(s,1),evidence:a}}var X=class{detectSkiaRenderer(){if(typeof document>`u`)return{backend:`cpu`,version:`mock`,gpu:`browser-context-unavailable`};let e=document.querySelector(`canvas`);if(!(e instanceof HTMLCanvasElement))return{backend:`cpu`,version:`mock`,gpu:`no-canvas-detected`};let t=e.getContext(`webgl2`)||e.getContext(`webgl`)||e.getContext(`experimental-webgl`);if(!be(t))return{backend:`cpu`,version:`mock`,gpu:`canvas-without-webgl`};let n,r=t.getExtension(`WEBGL_debug_renderer_info`);if(r){let e=t.getParameter(r.UNMASKED_RENDERER_WEBGL);typeof e==`string`&&e.trim().length>0&&(n=e)}if(!n){let e=t.getParameter(t.RENDERER);typeof e==`string`&&e.trim().length>0&&(n=e)}let i,a=t.getParameter(t.VERSION);return typeof a==`string`&&a.trim().length>0&&(i=a),{backend:xe(n),version:i,gpu:n}}extractSceneTree(e){if(typeof document>`u`)return J();let t=e?document.querySelector(e):document.querySelector(`canvas`);if(!(t instanceof HTMLCanvasElement))return J();let n=q(t,`skia-root`);if(t.parentElement){let e=Array.from(t.parentElement.children).filter(e=>e!==t).slice(0,8).map((e,t)=>q(e,`skia-sibling-${t}`));n.children.push(...e)}let r=[n];return{rootNodes:r,totalNodes:K(r),extractedAt:new Date().toISOString()}}};async function Pe(e,t){return G(e)?Ne(await e.evaluate(`(() => { /* UNMASKED_RENDERER_WEBGL ${t??``} */ return []; })()`),await e.evaluate(`(() => { /* fontBoundingBoxAscent */ return { hasSkiaFontSignatures: false, textMetrics: null }; })()`),await e.evaluate(`(() => { /* window.cc window.legacyCC */ return { engines: [], isSkiaEngine: false }; })()`)):Te(new X().detectSkiaRenderer())}async function Z(e,t,n=!0){return G(e)?Oe(await e.evaluate(`(() => { /* drawCommands canvasMeta ${t??``} */ return { canvas: {}, layers: [], drawCommands: [] }; })()`)):ke(new X().extractSceneTree(t))}function Fe(e,t){let n=[],r=new Set,i=new Set,a=Le(e);for(let e of a){let a=null;for(let n of t){let t=Ie(e,n);t&&(!a||t.confidence>a.confidence)&&(a=t)}a&&a.confidence>=.3&&(n.push(a),r.add(a.skiaObjectId),i.add(a.jsObjectId))}let o=[...new Set(a.map(e=>e.id))].filter(e=>!r.has(e)),s=t.filter(e=>!i.has(e.objectId)).map(e=>e.objectId),c=n.reduce((e,t)=>e+t.confidence,0),l=n.length>0?c/n.length:0;return{correlations:n,unmatchedJSObjects:s,unmatchedSkiaObjects:o,summary:{totalSkiaObjects:a.length,totalJSObjects:t.length,matchedCount:n.length,averageConfidence:Math.round(l*100)/100}}}function Ie(e,t){if(e.text){for(let n of t.stringProps)if(n===e.text||n.includes(e.text)&&e.text.length>3)return{skiaObjectId:e.id,jsObjectId:t.objectId,jsObjectName:t.name||t.className,confidence:.85,matchType:`text`,explanation:`Draw text "${e.text.slice(0,50)}" matches JS string property`}}let n=ze(e.bounds,t.numericProps);if(n)return{skiaObjectId:e.id,jsObjectId:t.objectId,jsObjectName:t.name||t.className,confidence:n.confidence,matchType:`dimension`,explanation:n.explanation};if(e.color){for(let n of t.colorProps)if(Ve(n,e.color))return{skiaObjectId:e.id,jsObjectId:t.objectId,jsObjectName:t.name||t.className,confidence:.7,matchType:`color`,explanation:`Color ${e.color} matches JS color property "${n}"`}}if(e.type===`drawImage`){let n=e.color;if(n){for(let r of t.urlProps)if(r===n||r.includes(n))return{skiaObjectId:e.id,jsObjectId:t.objectId,jsObjectName:t.name||t.className,confidence:.8,matchType:`url`,explanation:`Image URL matches JS property`}}}if(e.name){if(t.name&&$(e.name,t.name))return{skiaObjectId:e.id,jsObjectId:t.objectId,jsObjectName:t.name,confidence:.75,matchType:`name`,explanation:`Object name "${e.name}" matches JS object "${t.name}"`};for(let n of t.stringProps)if($(e.name,n))return{skiaObjectId:e.id,jsObjectId:t.objectId,jsObjectName:t.name||t.className,confidence:.6,matchType:`name`,explanation:`Skia layer name matches JS string property`}}let r=Be(e.bounds,t.numericProps);return r?{skiaObjectId:e.id,jsObjectId:t.objectId,jsObjectName:t.name||t.className,confidence:r.confidence,matchType:`geometry`,explanation:r.explanation}:null}function Le(e){let t=[];for(let n of e.layers)t.push({id:n.id,type:`layer`,name:n.name,bounds:n.bounds,color:n.customData?.color});for(let n of e.drawCommands){let e=Re(n.paintInfo),r=Q(n.paintInfo);t.push({id:`cmd_${n.type}_${n.bounds.x}_${n.bounds.y}`,type:n.type,name:`${n.type} at (${n.bounds.x}, ${n.bounds.y})`,text:e,bounds:n.bounds,color:r})}return t}function Re(e){if(typeof e.text==`string`)return e.text;if(typeof e.content==`string`)return e.content}function Q(e){if(typeof e.color==`string`)return e.color;if(typeof e.fillColor==`string`)return e.fillColor;if(typeof e.strokeColor==`string`)return e.strokeColor;if(typeof e.url==`string`)return e.url;if(typeof e.src==`string`)return e.src}function ze(e,t){let n=[`width`,`height`,`w`,`h`,`sizeX`,`sizeY`,`sw`,`sh`],r=!1,i=!1;for(let a of n){let n=t[a];n!==void 0&&((a===`width`||a===`w`||a===`sizeX`||a===`sw`)&&Math.abs(n-e.width)<=2&&(r=!0),(a===`height`||a===`h`||a===`sizeY`||a===`sh`)&&Math.abs(n-e.height)<=2&&(i=!0))}return r&&i?{confidence:.75,explanation:`Dimensions ${e.width}x${e.height} match JS numeric properties`}:r||i?{confidence:.45,explanation:`Partial dimension match for ${e.width}x${e.height}`}:null}function Be(e,t){let n=!1,r=!1;for(let[i,a]of Object.entries(t))(i===`x`||i===`posX`||i===`left`)&&Math.abs(a-e.x)<=5&&(n=!0),(i===`y`||i===`posY`||i===`top`)&&Math.abs(a-e.y)<=5&&(r=!0);return n&&r?{confidence:.5,explanation:`Position (${e.x}, ${e.y}) matches JS numeric properties`}:null}function $(e,t){return e.toLowerCase()===t.toLowerCase()||e.toLowerCase().includes(t.toLowerCase())||t.toLowerCase().includes(e.toLowerCase())}function Ve(e,t){return e.toLowerCase().replace(/\s/g,``)===t.toLowerCase().replace(/\s/g,``)}async function He(e,t){let r=n(t,`canvasId`);return{rendererInfo:await Pe(e,r||void 0),canvasId:r||`auto`,detectionComplete:!0}}async function Ue(e,t){let r=n(t,`canvasId`),i=a(t,`includeDrawCommands`,!0);return{sceneTree:await Z(e,r||void 0,i),canvasId:r||`auto`,extractionComplete:!0}}async function We(t,r,a){let o=n(r,`canvasId`),s=i(r,`skiaNodeIds`),c=await Z(t,o||void 0,!0);if(c.layers.length===0&&c.drawCommands.length===0)throw new e(`PREREQUISITE`,`No Skia scene data available for correlation`);let l=[];if(a)try{l=await a()}catch{l=[]}let u=c;if(s.length>0){let e=new Set(s);u={...c,layers:c.layers.filter(t=>e.has(t.id)),drawCommands:c.drawCommands.filter(t=>{let n=t.layerId;return n===void 0||e.has(n)})}}return{correlations:Fe(u,l),canvasId:o||`auto`,skiaNodeIds:s.length>0?s:void 0,correlationComplete:!0}}var Ge=class{deps;constructor(e){this.deps=e}async handleSkiaDetectRendererTool(e){return s(async()=>await this.handleSkiaDetectRenderer(e))}async handleSkiaExtractSceneTool(e){return s(async()=>await this.handleSkiaExtractScene(e))}async handleSkiaCorrelateObjectsTool(e){return s(async()=>await this.handleSkiaCorrelateObjects(e))}async handleSkiaDetectRenderer(t){if(!this.deps.pageController)throw new e(`PREREQUISITE`,`PageController not available — ensure browser is connected`);return He(this.deps.pageController,t)}async handleSkiaExtractScene(t){if(!this.deps.pageController)throw new e(`PREREQUISITE`,`PageController not available — ensure browser is connected`);let n=await Ue(this.deps.pageController,t),r=n?.sceneTree;return r&&this.deps.eventBus?.emit(`skia:scene_captured`,{canvasId:t.canvasId??`auto`,nodeCount:(r.layers?.length??0)+(r.drawCommands?.length??0),timestamp:new Date().toISOString()}),n}async handleSkiaCorrelateObjects(t){if(!this.deps.pageController)throw new e(`PREREQUISITE`,`PageController not available — ensure browser is connected`);return We(this.deps.pageController,t,this.deps.getJSObjects)}};export{ye as CanvasToolHandlers,Ge as SkiaCaptureHandlers};
|