@xiuchang-midscene/shared 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. package/README.md +9 -0
  2. package/dist/es/baseDB.mjs +109 -0
  3. package/dist/es/baseDB.mjs.bak +109 -0
  4. package/dist/es/build/copy-static.mjs +31 -0
  5. package/dist/es/build/copy-static.mjs.bak +31 -0
  6. package/dist/es/build/rspack-config.mjs +4 -0
  7. package/dist/es/build/rspack-config.mjs.bak +4 -0
  8. package/dist/es/cli/cli-runner.mjs +140 -0
  9. package/dist/es/cli/cli-runner.mjs.bak +140 -0
  10. package/dist/es/cli/index.mjs +2 -0
  11. package/dist/es/cli/index.mjs.bak +2 -0
  12. package/dist/es/common.mjs +37 -0
  13. package/dist/es/common.mjs.bak +37 -0
  14. package/dist/es/constants/example-code.mjs +223 -0
  15. package/dist/es/constants/example-code.mjs.bak +223 -0
  16. package/dist/es/constants/index.mjs +23 -0
  17. package/dist/es/constants/index.mjs.bak +23 -0
  18. package/dist/es/env/basic.mjs +6 -0
  19. package/dist/es/env/basic.mjs.bak +6 -0
  20. package/dist/es/env/constants.mjs +70 -0
  21. package/dist/es/env/constants.mjs.bak +70 -0
  22. package/dist/es/env/global-config-manager.mjs +94 -0
  23. package/dist/es/env/global-config-manager.mjs.bak +94 -0
  24. package/dist/es/env/helper.mjs +43 -0
  25. package/dist/es/env/helper.mjs.bak +43 -0
  26. package/dist/es/env/index.mjs +5 -0
  27. package/dist/es/env/index.mjs.bak +5 -0
  28. package/dist/es/env/init-debug.mjs +18 -0
  29. package/dist/es/env/init-debug.mjs.bak +18 -0
  30. package/dist/es/env/model-config-manager.mjs +79 -0
  31. package/dist/es/env/model-config-manager.mjs.bak +79 -0
  32. package/dist/es/env/parse-model-config.mjs +132 -0
  33. package/dist/es/env/parse-model-config.mjs.bak +132 -0
  34. package/dist/es/env/types.mjs +220 -0
  35. package/dist/es/env/types.mjs.bak +220 -0
  36. package/dist/es/env/utils.mjs +26 -0
  37. package/dist/es/env/utils.mjs.bak +26 -0
  38. package/dist/es/extractor/constants.mjs +2 -0
  39. package/dist/es/extractor/constants.mjs.bak +2 -0
  40. package/dist/es/extractor/debug.mjs +6 -0
  41. package/dist/es/extractor/debug.mjs.bak +6 -0
  42. package/dist/es/extractor/dom-util.mjs +92 -0
  43. package/dist/es/extractor/dom-util.mjs.bak +92 -0
  44. package/dist/es/extractor/index.mjs +5 -0
  45. package/dist/es/extractor/index.mjs.bak +5 -0
  46. package/dist/es/extractor/locator.mjs +250 -0
  47. package/dist/es/extractor/locator.mjs.bak +250 -0
  48. package/dist/es/extractor/tree.mjs +78 -0
  49. package/dist/es/extractor/tree.mjs.bak +78 -0
  50. package/dist/es/extractor/util.mjs +245 -0
  51. package/dist/es/extractor/util.mjs.bak +245 -0
  52. package/dist/es/extractor/web-extractor.mjs +303 -0
  53. package/dist/es/extractor/web-extractor.mjs.bak +303 -0
  54. package/dist/es/img/box-select.mjs +824 -0
  55. package/dist/es/img/box-select.mjs.bak +824 -0
  56. package/dist/es/img/canvas-fallback.mjs +238 -0
  57. package/dist/es/img/canvas-fallback.mjs.bak +238 -0
  58. package/dist/es/img/get-photon.mjs +45 -0
  59. package/dist/es/img/get-photon.mjs.bak +45 -0
  60. package/dist/es/img/get-sharp.mjs +11 -0
  61. package/dist/es/img/get-sharp.mjs.bak +11 -0
  62. package/dist/es/img/index.mjs +4 -0
  63. package/dist/es/img/index.mjs.bak +4 -0
  64. package/dist/es/img/info.mjs +29 -0
  65. package/dist/es/img/info.mjs.bak +29 -0
  66. package/dist/es/img/transform.mjs +295 -0
  67. package/dist/es/img/transform.mjs.bak +295 -0
  68. package/dist/es/index.mjs +4 -0
  69. package/dist/es/index.mjs.bak +4 -0
  70. package/dist/es/logger.mjs +64 -0
  71. package/dist/es/logger.mjs.bak +64 -0
  72. package/dist/es/mcp/base-server.mjs +281 -0
  73. package/dist/es/mcp/base-server.mjs.bak +281 -0
  74. package/dist/es/mcp/base-tools.mjs +91 -0
  75. package/dist/es/mcp/base-tools.mjs.bak +91 -0
  76. package/dist/es/mcp/chrome-path.mjs +35 -0
  77. package/dist/es/mcp/chrome-path.mjs.bak +35 -0
  78. package/dist/es/mcp/index.mjs +7 -0
  79. package/dist/es/mcp/index.mjs.bak +7 -0
  80. package/dist/es/mcp/inject-report-html-plugin.mjs +53 -0
  81. package/dist/es/mcp/inject-report-html-plugin.mjs.bak +53 -0
  82. package/dist/es/mcp/launcher-helper.mjs +52 -0
  83. package/dist/es/mcp/launcher-helper.mjs.bak +52 -0
  84. package/dist/es/mcp/tool-generator.mjs +297 -0
  85. package/dist/es/mcp/tool-generator.mjs.bak +297 -0
  86. package/dist/es/mcp/types.mjs +3 -0
  87. package/dist/es/mcp/types.mjs.bak +3 -0
  88. package/dist/es/node/fs.mjs +44 -0
  89. package/dist/es/node/fs.mjs.bak +44 -0
  90. package/dist/es/node/index.mjs +2 -0
  91. package/dist/es/node/index.mjs.bak +2 -0
  92. package/dist/es/node/port.mjs +24 -0
  93. package/dist/es/node/port.mjs.bak +24 -0
  94. package/dist/es/oss/demo.mjs +30 -0
  95. package/dist/es/oss/demo.mjs.bak +30 -0
  96. package/dist/es/oss/index.mjs +90 -0
  97. package/dist/es/oss/index.mjs.bak +90 -0
  98. package/dist/es/polyfills/async-hooks.mjs +2 -0
  99. package/dist/es/polyfills/async-hooks.mjs.bak +2 -0
  100. package/dist/es/polyfills/index.mjs +1 -0
  101. package/dist/es/polyfills/index.mjs.bak +1 -0
  102. package/dist/es/types/index.mjs +3 -0
  103. package/dist/es/types/index.mjs.bak +3 -0
  104. package/dist/es/us-keyboard-layout.mjs +1414 -0
  105. package/dist/es/us-keyboard-layout.mjs.LICENSE.txt +5 -0
  106. package/dist/es/us-keyboard-layout.mjs.bak +1414 -0
  107. package/dist/es/utils.mjs +72 -0
  108. package/dist/es/utils.mjs.bak +72 -0
  109. package/dist/es/zod-schema-utils.mjs +54 -0
  110. package/dist/es/zod-schema-utils.mjs.bak +54 -0
  111. package/dist/lib/baseDB.js +149 -0
  112. package/dist/lib/baseDB.js.bak +149 -0
  113. package/dist/lib/build/copy-static.js +79 -0
  114. package/dist/lib/build/copy-static.js.bak +79 -0
  115. package/dist/lib/build/rspack-config.js +38 -0
  116. package/dist/lib/build/rspack-config.js.bak +38 -0
  117. package/dist/lib/cli/cli-runner.js +196 -0
  118. package/dist/lib/cli/cli-runner.js.bak +196 -0
  119. package/dist/lib/cli/index.js +48 -0
  120. package/dist/lib/cli/index.js.bak +48 -0
  121. package/dist/lib/common.js +93 -0
  122. package/dist/lib/common.js.bak +93 -0
  123. package/dist/lib/constants/example-code.js +260 -0
  124. package/dist/lib/constants/example-code.js.bak +260 -0
  125. package/dist/lib/constants/index.js +96 -0
  126. package/dist/lib/constants/index.js.bak +96 -0
  127. package/dist/lib/env/basic.js +40 -0
  128. package/dist/lib/env/basic.js.bak +40 -0
  129. package/dist/lib/env/constants.js +113 -0
  130. package/dist/lib/env/constants.js.bak +113 -0
  131. package/dist/lib/env/global-config-manager.js +128 -0
  132. package/dist/lib/env/global-config-manager.js.bak +128 -0
  133. package/dist/lib/env/helper.js +80 -0
  134. package/dist/lib/env/helper.js.bak +80 -0
  135. package/dist/lib/env/index.js +90 -0
  136. package/dist/lib/env/index.js.bak +90 -0
  137. package/dist/lib/env/init-debug.js +52 -0
  138. package/dist/lib/env/init-debug.js.bak +52 -0
  139. package/dist/lib/env/model-config-manager.js +113 -0
  140. package/dist/lib/env/model-config-manager.js.bak +113 -0
  141. package/dist/lib/env/parse-model-config.js +178 -0
  142. package/dist/lib/env/parse-model-config.js.bak +178 -0
  143. package/dist/lib/env/types.js +554 -0
  144. package/dist/lib/env/types.js.bak +554 -0
  145. package/dist/lib/env/utils.js +72 -0
  146. package/dist/lib/env/utils.js.bak +72 -0
  147. package/dist/lib/extractor/constants.js +42 -0
  148. package/dist/lib/extractor/constants.js.bak +42 -0
  149. package/dist/lib/extractor/debug.js +12 -0
  150. package/dist/lib/extractor/debug.js.bak +12 -0
  151. package/dist/lib/extractor/dom-util.js +153 -0
  152. package/dist/lib/extractor/dom-util.js.bak +153 -0
  153. package/dist/lib/extractor/index.js +81 -0
  154. package/dist/lib/extractor/index.js.bak +81 -0
  155. package/dist/lib/extractor/locator.js +296 -0
  156. package/dist/lib/extractor/locator.js.bak +296 -0
  157. package/dist/lib/extractor/tree.js +124 -0
  158. package/dist/lib/extractor/tree.js.bak +124 -0
  159. package/dist/lib/extractor/util.js +336 -0
  160. package/dist/lib/extractor/util.js.bak +336 -0
  161. package/dist/lib/extractor/web-extractor.js +349 -0
  162. package/dist/lib/extractor/web-extractor.js.bak +349 -0
  163. package/dist/lib/img/box-select.js +875 -0
  164. package/dist/lib/img/box-select.js.bak +875 -0
  165. package/dist/lib/img/canvas-fallback.js +305 -0
  166. package/dist/lib/img/canvas-fallback.js.bak +305 -0
  167. package/dist/lib/img/get-photon.js +82 -0
  168. package/dist/lib/img/get-photon.js.bak +82 -0
  169. package/dist/lib/img/get-sharp.js +45 -0
  170. package/dist/lib/img/get-sharp.js.bak +45 -0
  171. package/dist/lib/img/index.js +95 -0
  172. package/dist/lib/img/index.js.bak +95 -0
  173. package/dist/lib/img/info.js +83 -0
  174. package/dist/lib/img/info.js.bak +83 -0
  175. package/dist/lib/img/transform.js +387 -0
  176. package/dist/lib/img/transform.js.bak +387 -0
  177. package/dist/lib/index.js +47 -0
  178. package/dist/lib/index.js.bak +47 -0
  179. package/dist/lib/logger.js +114 -0
  180. package/dist/lib/logger.js.bak +114 -0
  181. package/dist/lib/mcp/base-server.js +331 -0
  182. package/dist/lib/mcp/base-server.js.bak +331 -0
  183. package/dist/lib/mcp/base-tools.js +125 -0
  184. package/dist/lib/mcp/base-tools.js.bak +125 -0
  185. package/dist/lib/mcp/chrome-path.js +72 -0
  186. package/dist/lib/mcp/chrome-path.js.bak +72 -0
  187. package/dist/lib/mcp/index.js +100 -0
  188. package/dist/lib/mcp/index.js.bak +100 -0
  189. package/dist/lib/mcp/inject-report-html-plugin.js +98 -0
  190. package/dist/lib/mcp/inject-report-html-plugin.js.bak +98 -0
  191. package/dist/lib/mcp/launcher-helper.js +86 -0
  192. package/dist/lib/mcp/launcher-helper.js.bak +86 -0
  193. package/dist/lib/mcp/tool-generator.js +334 -0
  194. package/dist/lib/mcp/tool-generator.js.bak +334 -0
  195. package/dist/lib/mcp/types.js +40 -0
  196. package/dist/lib/mcp/types.js.bak +40 -0
  197. package/dist/lib/node/fs.js +97 -0
  198. package/dist/lib/node/fs.js.bak +97 -0
  199. package/dist/lib/node/index.js +65 -0
  200. package/dist/lib/node/index.js.bak +65 -0
  201. package/dist/lib/node/port.js +61 -0
  202. package/dist/lib/node/port.js.bak +61 -0
  203. package/dist/lib/oss/demo.js +36 -0
  204. package/dist/lib/oss/demo.js.bak +36 -0
  205. package/dist/lib/oss/index.js +138 -0
  206. package/dist/lib/oss/index.js.bak +138 -0
  207. package/dist/lib/polyfills/async-hooks.js +36 -0
  208. package/dist/lib/polyfills/async-hooks.js.bak +36 -0
  209. package/dist/lib/polyfills/index.js +58 -0
  210. package/dist/lib/polyfills/index.js.bak +58 -0
  211. package/dist/lib/types/index.js +37 -0
  212. package/dist/lib/types/index.js.bak +37 -0
  213. package/dist/lib/us-keyboard-layout.js +1457 -0
  214. package/dist/lib/us-keyboard-layout.js.LICENSE.txt +5 -0
  215. package/dist/lib/us-keyboard-layout.js.bak +1457 -0
  216. package/dist/lib/utils.js +148 -0
  217. package/dist/lib/utils.js.bak +148 -0
  218. package/dist/lib/zod-schema-utils.js +97 -0
  219. package/dist/lib/zod-schema-utils.js.bak +97 -0
  220. package/dist/types/baseDB.d.ts +25 -0
  221. package/dist/types/baseDB.d.ts.bak +25 -0
  222. package/dist/types/build/copy-static.d.ts +31 -0
  223. package/dist/types/build/copy-static.d.ts.bak +31 -0
  224. package/dist/types/build/rspack-config.d.ts +8 -0
  225. package/dist/types/build/rspack-config.d.ts.bak +8 -0
  226. package/dist/types/cli/cli-runner.d.ts +14 -0
  227. package/dist/types/cli/cli-runner.d.ts.bak +14 -0
  228. package/dist/types/cli/index.d.ts +2 -0
  229. package/dist/types/cli/index.d.ts.bak +2 -0
  230. package/dist/types/common.d.ts +12 -0
  231. package/dist/types/common.d.ts.bak +12 -0
  232. package/dist/types/constants/example-code.d.ts +2 -0
  233. package/dist/types/constants/example-code.d.ts.bak +2 -0
  234. package/dist/types/constants/index.d.ts +21 -0
  235. package/dist/types/constants/index.d.ts.bak +21 -0
  236. package/dist/types/env/basic.d.ts +6 -0
  237. package/dist/types/env/basic.d.ts.bak +6 -0
  238. package/dist/types/env/constants.d.ts +40 -0
  239. package/dist/types/env/constants.d.ts.bak +40 -0
  240. package/dist/types/env/global-config-manager.d.ts +32 -0
  241. package/dist/types/env/global-config-manager.d.ts.bak +32 -0
  242. package/dist/types/env/helper.d.ts +4 -0
  243. package/dist/types/env/helper.d.ts.bak +4 -0
  244. package/dist/types/env/index.d.ts +4 -0
  245. package/dist/types/env/index.d.ts.bak +4 -0
  246. package/dist/types/env/init-debug.d.ts +1 -0
  247. package/dist/types/env/init-debug.d.ts.bak +1 -0
  248. package/dist/types/env/model-config-manager.d.ts +25 -0
  249. package/dist/types/env/model-config-manager.d.ts.bak +25 -0
  250. package/dist/types/env/parse-model-config.d.ts +31 -0
  251. package/dist/types/env/parse-model-config.d.ts.bak +31 -0
  252. package/dist/types/env/types.d.ts +318 -0
  253. package/dist/types/env/types.d.ts.bak +318 -0
  254. package/dist/types/env/utils.d.ts +38 -0
  255. package/dist/types/env/utils.d.ts.bak +38 -0
  256. package/dist/types/extractor/constants.d.ts +1 -0
  257. package/dist/types/extractor/constants.d.ts.bak +1 -0
  258. package/dist/types/extractor/debug.d.ts +1 -0
  259. package/dist/types/extractor/debug.d.ts.bak +1 -0
  260. package/dist/types/extractor/dom-util.d.ts +56 -0
  261. package/dist/types/extractor/dom-util.d.ts.bak +56 -0
  262. package/dist/types/extractor/index.d.ts +32 -0
  263. package/dist/types/extractor/index.d.ts.bak +32 -0
  264. package/dist/types/extractor/locator.d.ts +9 -0
  265. package/dist/types/extractor/locator.d.ts.bak +9 -0
  266. package/dist/types/extractor/tree.d.ts +6 -0
  267. package/dist/types/extractor/tree.d.ts.bak +6 -0
  268. package/dist/types/extractor/util.d.ts +47 -0
  269. package/dist/types/extractor/util.d.ts.bak +47 -0
  270. package/dist/types/extractor/web-extractor.d.ts +19 -0
  271. package/dist/types/extractor/web-extractor.d.ts.bak +19 -0
  272. package/dist/types/img/box-select.d.ts +26 -0
  273. package/dist/types/img/box-select.d.ts.bak +26 -0
  274. package/dist/types/img/canvas-fallback.d.ts +105 -0
  275. package/dist/types/img/canvas-fallback.d.ts.bak +105 -0
  276. package/dist/types/img/get-photon.d.ts +19 -0
  277. package/dist/types/img/get-photon.d.ts.bak +19 -0
  278. package/dist/types/img/get-sharp.d.ts +3 -0
  279. package/dist/types/img/get-sharp.d.ts.bak +3 -0
  280. package/dist/types/img/index.d.ts +3 -0
  281. package/dist/types/img/index.d.ts.bak +3 -0
  282. package/dist/types/img/info.d.ts +29 -0
  283. package/dist/types/img/info.d.ts.bak +29 -0
  284. package/dist/types/img/transform.d.ts +107 -0
  285. package/dist/types/img/transform.d.ts.bak +107 -0
  286. package/dist/types/index.d.ts +4 -0
  287. package/dist/types/index.d.ts.bak +4 -0
  288. package/dist/types/logger.d.ts +5 -0
  289. package/dist/types/logger.d.ts.bak +5 -0
  290. package/dist/types/mcp/base-server.d.ts +93 -0
  291. package/dist/types/mcp/base-server.d.ts.bak +93 -0
  292. package/dist/types/mcp/base-tools.d.ts +79 -0
  293. package/dist/types/mcp/base-tools.d.ts.bak +79 -0
  294. package/dist/types/mcp/chrome-path.d.ts +2 -0
  295. package/dist/types/mcp/chrome-path.d.ts.bak +2 -0
  296. package/dist/types/mcp/index.d.ts +7 -0
  297. package/dist/types/mcp/index.d.ts.bak +7 -0
  298. package/dist/types/mcp/inject-report-html-plugin.d.ts +18 -0
  299. package/dist/types/mcp/inject-report-html-plugin.d.ts.bak +18 -0
  300. package/dist/types/mcp/launcher-helper.d.ts +94 -0
  301. package/dist/types/mcp/launcher-helper.d.ts.bak +94 -0
  302. package/dist/types/mcp/tool-generator.d.ts +10 -0
  303. package/dist/types/mcp/tool-generator.d.ts.bak +10 -0
  304. package/dist/types/mcp/types.d.ts +103 -0
  305. package/dist/types/mcp/types.d.ts.bak +103 -0
  306. package/dist/types/node/fs.d.ts +15 -0
  307. package/dist/types/node/fs.d.ts.bak +15 -0
  308. package/dist/types/node/index.d.ts +2 -0
  309. package/dist/types/node/index.d.ts.bak +2 -0
  310. package/dist/types/node/port.d.ts +8 -0
  311. package/dist/types/node/port.d.ts.bak +8 -0
  312. package/dist/types/oss/demo.d.ts +1 -0
  313. package/dist/types/oss/demo.d.ts.bak +1 -0
  314. package/dist/types/oss/index.d.ts +34 -0
  315. package/dist/types/oss/index.d.ts.bak +34 -0
  316. package/dist/types/polyfills/async-hooks.d.ts +6 -0
  317. package/dist/types/polyfills/async-hooks.d.ts.bak +6 -0
  318. package/dist/types/polyfills/index.d.ts +4 -0
  319. package/dist/types/polyfills/index.d.ts.bak +4 -0
  320. package/dist/types/types/index.d.ts +34 -0
  321. package/dist/types/types/index.d.ts.bak +34 -0
  322. package/dist/types/us-keyboard-layout.d.ts +32 -0
  323. package/dist/types/us-keyboard-layout.d.ts.bak +32 -0
  324. package/dist/types/utils.d.ts +34 -0
  325. package/dist/types/utils.d.ts.bak +34 -0
  326. package/dist/types/zod-schema-utils.d.ts +23 -0
  327. package/dist/types/zod-schema-utils.d.ts.bak +23 -0
  328. package/package.json +132 -0
  329. package/src/baseDB.ts +158 -0
  330. package/src/build/copy-static.ts +68 -0
  331. package/src/build/rspack-config.ts +12 -0
  332. package/src/cli/cli-runner.ts +224 -0
  333. package/src/cli/index.ts +8 -0
  334. package/src/common.ts +67 -0
  335. package/src/constants/example-code.ts +223 -0
  336. package/src/constants/index.ts +29 -0
  337. package/src/env/basic.ts +12 -0
  338. package/src/env/constants.ts +234 -0
  339. package/src/env/global-config-manager.ts +191 -0
  340. package/src/env/helper.ts +58 -0
  341. package/src/env/index.ts +4 -0
  342. package/src/env/init-debug.ts +34 -0
  343. package/src/env/model-config-manager.ts +149 -0
  344. package/src/env/parse-model-config.ts +294 -0
  345. package/src/env/types.ts +547 -0
  346. package/src/env/utils.ts +89 -0
  347. package/src/extractor/constants.ts +5 -0
  348. package/src/extractor/debug.ts +10 -0
  349. package/src/extractor/dom-util.ts +226 -0
  350. package/src/extractor/index.ts +48 -0
  351. package/src/extractor/locator.ts +469 -0
  352. package/src/extractor/tree.ts +179 -0
  353. package/src/extractor/util.ts +482 -0
  354. package/src/extractor/web-extractor.ts +481 -0
  355. package/src/img/box-select.ts +588 -0
  356. package/src/img/canvas-fallback.ts +393 -0
  357. package/src/img/get-photon.ts +108 -0
  358. package/src/img/get-sharp.ts +18 -0
  359. package/src/img/index.ts +26 -0
  360. package/src/img/info.ts +75 -0
  361. package/src/img/transform.ts +594 -0
  362. package/src/index.ts +8 -0
  363. package/src/logger.ts +96 -0
  364. package/src/mcp/base-server.ts +502 -0
  365. package/src/mcp/base-tools.ts +185 -0
  366. package/src/mcp/chrome-path.ts +48 -0
  367. package/src/mcp/index.ts +7 -0
  368. package/src/mcp/inject-report-html-plugin.ts +119 -0
  369. package/src/mcp/launcher-helper.ts +200 -0
  370. package/src/mcp/tool-generator.ts +429 -0
  371. package/src/mcp/types.ts +112 -0
  372. package/src/node/fs.ts +84 -0
  373. package/src/node/index.ts +2 -0
  374. package/src/node/port.ts +37 -0
  375. package/src/oss/demo.ts +61 -0
  376. package/src/oss/index.ts +187 -0
  377. package/src/polyfills/async-hooks.ts +6 -0
  378. package/src/polyfills/index.ts +4 -0
  379. package/src/types/index.ts +52 -0
  380. package/src/us-keyboard-layout.ts +723 -0
  381. package/src/utils.ts +149 -0
  382. package/src/zod-schema-utils.ts +133 -0
@@ -0,0 +1,296 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ getNodeInfoByXpath: ()=>getNodeInfoByXpath,
28
+ getXpathsById: ()=>getXpathsById,
29
+ getElementXpath: ()=>getElementXpath,
30
+ getElementInfoByXpath: ()=>getElementInfoByXpath,
31
+ getXpathsByPoint: ()=>getXpathsByPoint
32
+ });
33
+ const external_dom_util_js_namespaceObject = require("./dom-util.js");
34
+ const external_util_js_namespaceObject = require("./util.js");
35
+ const external_web_extractor_js_namespaceObject = require("./web-extractor.js");
36
+ const SUB_XPATH_SEPARATOR = '|>>|';
37
+ function parseCSSZoom(style) {
38
+ return Number.parseFloat(style.zoom ?? '1') || 1;
39
+ }
40
+ function calculateIframeOffset(nodeOwnerDoc, rootDoc) {
41
+ let leftOffset = 0;
42
+ let topOffset = 0;
43
+ let iterDoc = nodeOwnerDoc;
44
+ while(iterDoc && iterDoc !== rootDoc)try {
45
+ const frameElement = iterDoc.defaultView?.frameElement;
46
+ if (!frameElement) break;
47
+ const rect = frameElement.getBoundingClientRect();
48
+ const parentWin = iterDoc.defaultView?.parent;
49
+ let borderLeft = 0;
50
+ let borderTop = 0;
51
+ let zoom = 1;
52
+ try {
53
+ if (parentWin) {
54
+ const style = parentWin.getComputedStyle(frameElement);
55
+ borderLeft = Number.parseFloat(style.borderLeftWidth) || 0;
56
+ borderTop = Number.parseFloat(style.borderTopWidth) || 0;
57
+ zoom = parseCSSZoom(style);
58
+ }
59
+ } catch {}
60
+ leftOffset = leftOffset / zoom + rect.left + borderLeft;
61
+ topOffset = topOffset / zoom + rect.top + borderTop;
62
+ iterDoc = frameElement.ownerDocument;
63
+ } catch {
64
+ break;
65
+ }
66
+ return {
67
+ left: leftOffset,
68
+ top: topOffset
69
+ };
70
+ }
71
+ function translatePointToIframeCoordinates(point, iframeElement, parentWindow) {
72
+ const rect = iframeElement.getBoundingClientRect();
73
+ const style = parentWindow.getComputedStyle(iframeElement);
74
+ const clientLeft = iframeElement.clientLeft;
75
+ const clientTop = iframeElement.clientTop;
76
+ const paddingLeft = Number.parseFloat(style.paddingLeft) || 0;
77
+ const paddingTop = Number.parseFloat(style.paddingTop) || 0;
78
+ const zoom = parseCSSZoom(style);
79
+ return {
80
+ left: (point.left - rect.left - clientLeft - paddingLeft) / zoom,
81
+ top: (point.top - rect.top - clientTop - paddingTop) / zoom
82
+ };
83
+ }
84
+ const getElementXpathIndex = (element)=>{
85
+ let index = 1;
86
+ let prev = element.previousElementSibling;
87
+ while(prev){
88
+ if (prev.nodeName.toLowerCase() === element.nodeName.toLowerCase()) index++;
89
+ prev = prev.previousElementSibling;
90
+ }
91
+ return index;
92
+ };
93
+ const normalizeXpathText = (text)=>{
94
+ if ('string' != typeof text) return '';
95
+ return text.replace(/\s+/g, ' ').trim();
96
+ };
97
+ const buildCurrentElementXpath = (element, isOrderSensitive, isLeafElement, limitToCurrentDocument = false)=>{
98
+ const parentPath = element.parentNode ? getElementXpath(element.parentNode, isOrderSensitive, false, limitToCurrentDocument) : '';
99
+ const prefix = parentPath ? `${parentPath}/` : '/';
100
+ const tagName = element.nodeName.toLowerCase();
101
+ const textContent = element.textContent?.trim();
102
+ const isSVGNamespace = 'http://www.w3.org/2000/svg' === element.namespaceURI;
103
+ const tagSelector = isSVGNamespace ? `*[name()="${tagName}"]` : tagName;
104
+ if (isOrderSensitive) {
105
+ const index = getElementXpathIndex(element);
106
+ return `${prefix}${tagSelector}[${index}]`;
107
+ }
108
+ if (isLeafElement && textContent) return `${prefix}${tagSelector}[normalize-space()="${normalizeXpathText(textContent)}"]`;
109
+ const index = getElementXpathIndex(element);
110
+ return `${prefix}${tagSelector}[${index}]`;
111
+ };
112
+ const getElementXpath = (element, isOrderSensitive = false, isLeafElement = false, limitToCurrentDocument = false)=>{
113
+ if (element.nodeType === Node.TEXT_NODE) {
114
+ const parentNode = element.parentNode;
115
+ if (parentNode && parentNode.nodeType === Node.ELEMENT_NODE) {
116
+ const parentXPath = getElementXpath(parentNode, isOrderSensitive, true, limitToCurrentDocument);
117
+ const textContent = element.textContent?.trim();
118
+ if (textContent) return `${parentXPath}/text()[normalize-space()="${normalizeXpathText(textContent)}"]`;
119
+ return `${parentXPath}/text()`;
120
+ }
121
+ return '';
122
+ }
123
+ if (element.nodeType !== Node.ELEMENT_NODE) return '';
124
+ const el = element;
125
+ try {
126
+ const nodeName = el.nodeName.toLowerCase();
127
+ if (el === el.ownerDocument?.documentElement || 'html' === nodeName) {
128
+ if (!limitToCurrentDocument) {
129
+ const frameElement = el.ownerDocument?.defaultView?.frameElement;
130
+ if (frameElement) {
131
+ const framePath = getElementXpath(frameElement, isOrderSensitive, false, limitToCurrentDocument);
132
+ return `${framePath}${SUB_XPATH_SEPARATOR}/html`;
133
+ }
134
+ }
135
+ return '/html';
136
+ }
137
+ if (el === el.ownerDocument?.body || 'body' === nodeName) {
138
+ if (!limitToCurrentDocument) {
139
+ const frameElement = el.ownerDocument?.defaultView?.frameElement;
140
+ if (frameElement) {
141
+ const framePath = getElementXpath(frameElement, isOrderSensitive, false, limitToCurrentDocument);
142
+ return `${framePath}${SUB_XPATH_SEPARATOR}/html/body`;
143
+ }
144
+ }
145
+ return '/html/body';
146
+ }
147
+ } catch (error) {
148
+ (0, external_util_js_namespaceObject.logger)('[midscene:locator] ownerDocument access failed:', error);
149
+ if ('html' === el.nodeName.toLowerCase()) return '/html';
150
+ if ('body' === el.nodeName.toLowerCase()) return '/html/body';
151
+ }
152
+ if ((0, external_dom_util_js_namespaceObject.isSvgElement)(el)) {
153
+ const tagName = el.nodeName.toLowerCase();
154
+ if ('svg' === tagName) return buildCurrentElementXpath(el, isOrderSensitive, isLeafElement, limitToCurrentDocument);
155
+ let parent = el.parentNode;
156
+ while(parent && parent.nodeType === Node.ELEMENT_NODE){
157
+ const parentEl = parent;
158
+ if (!(0, external_dom_util_js_namespaceObject.isSvgElement)(parentEl)) return getElementXpath(parentEl, isOrderSensitive, isLeafElement, limitToCurrentDocument);
159
+ const parentTag = parentEl.nodeName.toLowerCase();
160
+ if ('svg' === parentTag) return getElementXpath(parentEl, isOrderSensitive, isLeafElement, limitToCurrentDocument);
161
+ parent = parent.parentNode;
162
+ }
163
+ const fallbackParent = el.parentNode;
164
+ if (fallbackParent && fallbackParent.nodeType === Node.ELEMENT_NODE) return getElementXpath(fallbackParent, isOrderSensitive, isLeafElement, limitToCurrentDocument);
165
+ return '';
166
+ }
167
+ return buildCurrentElementXpath(el, isOrderSensitive, isLeafElement, limitToCurrentDocument);
168
+ };
169
+ function getXpathsById(id) {
170
+ const node = (0, external_util_js_namespaceObject.getNodeFromCacheList)(id);
171
+ if (!node) return null;
172
+ const fullXPath = getElementXpath(node, false, true, true);
173
+ return [
174
+ fullXPath
175
+ ];
176
+ }
177
+ function getXpathsByPoint(point, isOrderSensitive) {
178
+ let currentWindow = 'undefined' != typeof window ? window : void 0;
179
+ let currentDocument = 'undefined' != typeof document ? document : void 0;
180
+ let { left, top } = point;
181
+ let depth = 0;
182
+ const MAX_DEPTH = 10;
183
+ let xpathPrefix = '';
184
+ let lastFoundElement = null;
185
+ while(depth < MAX_DEPTH){
186
+ depth++;
187
+ const element = currentDocument.elementFromPoint(left, top);
188
+ if (!element) {
189
+ if (lastFoundElement) {
190
+ const fullXPath = getElementXpath(lastFoundElement, isOrderSensitive, true, true);
191
+ return [
192
+ xpathPrefix + fullXPath
193
+ ];
194
+ }
195
+ return null;
196
+ }
197
+ lastFoundElement = element;
198
+ const tag = element.tagName.toLowerCase();
199
+ if ('iframe' === tag || 'frame' === tag) try {
200
+ const contentWindow = element.contentWindow;
201
+ const contentDocument = element.contentDocument;
202
+ if (contentWindow && contentDocument) {
203
+ const localPoint = translatePointToIframeCoordinates({
204
+ left,
205
+ top
206
+ }, element, currentWindow);
207
+ const currentIframeXpath = getElementXpath(element, isOrderSensitive, false, true);
208
+ xpathPrefix += currentIframeXpath + SUB_XPATH_SEPARATOR;
209
+ currentWindow = contentWindow;
210
+ currentDocument = contentDocument;
211
+ left = localPoint.left;
212
+ top = localPoint.top;
213
+ continue;
214
+ }
215
+ } catch (error) {
216
+ (0, external_util_js_namespaceObject.logger)('[midscene:locator] iframe penetration failed (cross-origin?):', error);
217
+ }
218
+ const fullXPath = getElementXpath(element, isOrderSensitive, true, true);
219
+ return [
220
+ xpathPrefix + fullXPath
221
+ ];
222
+ }
223
+ if (lastFoundElement) {
224
+ const fullXPath = getElementXpath(lastFoundElement, isOrderSensitive, true, true);
225
+ return [
226
+ xpathPrefix + fullXPath
227
+ ];
228
+ }
229
+ return null;
230
+ }
231
+ function getNodeInfoByXpath(xpath) {
232
+ const parts = xpath.split(SUB_XPATH_SEPARATOR).map((p)=>p.trim()).filter(Boolean);
233
+ if (0 === parts.length) return null;
234
+ let currentDocument = 'undefined' != typeof document ? document : void 0;
235
+ let node = null;
236
+ for(let i = 0; i < parts.length; i++){
237
+ const currentXpath = parts[i];
238
+ const xpathResult = currentDocument.evaluate(currentXpath, currentDocument, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
239
+ if (1 !== xpathResult.snapshotLength) {
240
+ (0, external_util_js_namespaceObject.logger)(`[midscene:locator] XPath "${currentXpath}" matched ${xpathResult.snapshotLength} elements (expected 1), discarding.`);
241
+ return null;
242
+ }
243
+ node = xpathResult.snapshotItem(0);
244
+ if (i < parts.length - 1) if (!node || node.nodeType !== Node.ELEMENT_NODE || 'iframe' !== node.tagName.toLowerCase()) return null;
245
+ else try {
246
+ const contentDocument = node.contentDocument;
247
+ if (contentDocument) currentDocument = contentDocument;
248
+ else {
249
+ (0, external_util_js_namespaceObject.logger)('[midscene:locator] iframe contentDocument is null (cross-origin?)');
250
+ return null;
251
+ }
252
+ } catch (error) {
253
+ (0, external_util_js_namespaceObject.logger)('[midscene:locator] iframe contentDocument access failed:', error);
254
+ return null;
255
+ }
256
+ }
257
+ return node;
258
+ }
259
+ function getElementInfoByXpath(xpath) {
260
+ const node = getNodeInfoByXpath(xpath);
261
+ if (!node) return null;
262
+ let targetWindow = 'undefined' != typeof window ? window : void 0;
263
+ let targetDocument = 'undefined' != typeof document ? document : void 0;
264
+ if (node.ownerDocument?.defaultView) {
265
+ targetWindow = node.ownerDocument.defaultView;
266
+ targetDocument = node.ownerDocument;
267
+ }
268
+ const rootDoc = 'undefined' != typeof document ? document : null;
269
+ const iframeOffset = calculateIframeOffset(node.ownerDocument ?? null, rootDoc);
270
+ const targetWin = targetWindow;
271
+ const targetDoc = targetDocument;
272
+ if (node instanceof targetWin.HTMLElement) {
273
+ const rect = (0, external_util_js_namespaceObject.getRect)(node, 1, targetWin);
274
+ const isVisible = (0, external_util_js_namespaceObject.isElementPartiallyInViewport)(rect, targetWin, targetDoc, 1);
275
+ if (!isVisible) node.scrollIntoView({
276
+ behavior: 'instant',
277
+ block: 'center'
278
+ });
279
+ }
280
+ return (0, external_web_extractor_js_namespaceObject.collectElementInfo)(node, targetWin, targetDoc, 1, iframeOffset, true);
281
+ }
282
+ exports.getElementInfoByXpath = __webpack_exports__.getElementInfoByXpath;
283
+ exports.getElementXpath = __webpack_exports__.getElementXpath;
284
+ exports.getNodeInfoByXpath = __webpack_exports__.getNodeInfoByXpath;
285
+ exports.getXpathsById = __webpack_exports__.getXpathsById;
286
+ exports.getXpathsByPoint = __webpack_exports__.getXpathsByPoint;
287
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
288
+ "getElementInfoByXpath",
289
+ "getElementXpath",
290
+ "getNodeInfoByXpath",
291
+ "getXpathsById",
292
+ "getXpathsByPoint"
293
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
294
+ Object.defineProperty(exports, '__esModule', {
295
+ value: true
296
+ });
@@ -0,0 +1,296 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ getNodeInfoByXpath: ()=>getNodeInfoByXpath,
28
+ getXpathsById: ()=>getXpathsById,
29
+ getElementXpath: ()=>getElementXpath,
30
+ getElementInfoByXpath: ()=>getElementInfoByXpath,
31
+ getXpathsByPoint: ()=>getXpathsByPoint
32
+ });
33
+ const external_dom_util_js_namespaceObject = require("./dom-util.js");
34
+ const external_util_js_namespaceObject = require("./util.js");
35
+ const external_web_extractor_js_namespaceObject = require("./web-extractor.js");
36
+ const SUB_XPATH_SEPARATOR = '|>>|';
37
+ function parseCSSZoom(style) {
38
+ return Number.parseFloat(style.zoom ?? '1') || 1;
39
+ }
40
+ function calculateIframeOffset(nodeOwnerDoc, rootDoc) {
41
+ let leftOffset = 0;
42
+ let topOffset = 0;
43
+ let iterDoc = nodeOwnerDoc;
44
+ while(iterDoc && iterDoc !== rootDoc)try {
45
+ const frameElement = iterDoc.defaultView?.frameElement;
46
+ if (!frameElement) break;
47
+ const rect = frameElement.getBoundingClientRect();
48
+ const parentWin = iterDoc.defaultView?.parent;
49
+ let borderLeft = 0;
50
+ let borderTop = 0;
51
+ let zoom = 1;
52
+ try {
53
+ if (parentWin) {
54
+ const style = parentWin.getComputedStyle(frameElement);
55
+ borderLeft = Number.parseFloat(style.borderLeftWidth) || 0;
56
+ borderTop = Number.parseFloat(style.borderTopWidth) || 0;
57
+ zoom = parseCSSZoom(style);
58
+ }
59
+ } catch {}
60
+ leftOffset = leftOffset / zoom + rect.left + borderLeft;
61
+ topOffset = topOffset / zoom + rect.top + borderTop;
62
+ iterDoc = frameElement.ownerDocument;
63
+ } catch {
64
+ break;
65
+ }
66
+ return {
67
+ left: leftOffset,
68
+ top: topOffset
69
+ };
70
+ }
71
+ function translatePointToIframeCoordinates(point, iframeElement, parentWindow) {
72
+ const rect = iframeElement.getBoundingClientRect();
73
+ const style = parentWindow.getComputedStyle(iframeElement);
74
+ const clientLeft = iframeElement.clientLeft;
75
+ const clientTop = iframeElement.clientTop;
76
+ const paddingLeft = Number.parseFloat(style.paddingLeft) || 0;
77
+ const paddingTop = Number.parseFloat(style.paddingTop) || 0;
78
+ const zoom = parseCSSZoom(style);
79
+ return {
80
+ left: (point.left - rect.left - clientLeft - paddingLeft) / zoom,
81
+ top: (point.top - rect.top - clientTop - paddingTop) / zoom
82
+ };
83
+ }
84
+ const getElementXpathIndex = (element)=>{
85
+ let index = 1;
86
+ let prev = element.previousElementSibling;
87
+ while(prev){
88
+ if (prev.nodeName.toLowerCase() === element.nodeName.toLowerCase()) index++;
89
+ prev = prev.previousElementSibling;
90
+ }
91
+ return index;
92
+ };
93
+ const normalizeXpathText = (text)=>{
94
+ if ('string' != typeof text) return '';
95
+ return text.replace(/\s+/g, ' ').trim();
96
+ };
97
+ const buildCurrentElementXpath = (element, isOrderSensitive, isLeafElement, limitToCurrentDocument = false)=>{
98
+ const parentPath = element.parentNode ? getElementXpath(element.parentNode, isOrderSensitive, false, limitToCurrentDocument) : '';
99
+ const prefix = parentPath ? `${parentPath}/` : '/';
100
+ const tagName = element.nodeName.toLowerCase();
101
+ const textContent = element.textContent?.trim();
102
+ const isSVGNamespace = 'http://www.w3.org/2000/svg' === element.namespaceURI;
103
+ const tagSelector = isSVGNamespace ? `*[name()="${tagName}"]` : tagName;
104
+ if (isOrderSensitive) {
105
+ const index = getElementXpathIndex(element);
106
+ return `${prefix}${tagSelector}[${index}]`;
107
+ }
108
+ if (isLeafElement && textContent) return `${prefix}${tagSelector}[normalize-space()="${normalizeXpathText(textContent)}"]`;
109
+ const index = getElementXpathIndex(element);
110
+ return `${prefix}${tagSelector}[${index}]`;
111
+ };
112
+ const getElementXpath = (element, isOrderSensitive = false, isLeafElement = false, limitToCurrentDocument = false)=>{
113
+ if (element.nodeType === Node.TEXT_NODE) {
114
+ const parentNode = element.parentNode;
115
+ if (parentNode && parentNode.nodeType === Node.ELEMENT_NODE) {
116
+ const parentXPath = getElementXpath(parentNode, isOrderSensitive, true, limitToCurrentDocument);
117
+ const textContent = element.textContent?.trim();
118
+ if (textContent) return `${parentXPath}/text()[normalize-space()="${normalizeXpathText(textContent)}"]`;
119
+ return `${parentXPath}/text()`;
120
+ }
121
+ return '';
122
+ }
123
+ if (element.nodeType !== Node.ELEMENT_NODE) return '';
124
+ const el = element;
125
+ try {
126
+ const nodeName = el.nodeName.toLowerCase();
127
+ if (el === el.ownerDocument?.documentElement || 'html' === nodeName) {
128
+ if (!limitToCurrentDocument) {
129
+ const frameElement = el.ownerDocument?.defaultView?.frameElement;
130
+ if (frameElement) {
131
+ const framePath = getElementXpath(frameElement, isOrderSensitive, false, limitToCurrentDocument);
132
+ return `${framePath}${SUB_XPATH_SEPARATOR}/html`;
133
+ }
134
+ }
135
+ return '/html';
136
+ }
137
+ if (el === el.ownerDocument?.body || 'body' === nodeName) {
138
+ if (!limitToCurrentDocument) {
139
+ const frameElement = el.ownerDocument?.defaultView?.frameElement;
140
+ if (frameElement) {
141
+ const framePath = getElementXpath(frameElement, isOrderSensitive, false, limitToCurrentDocument);
142
+ return `${framePath}${SUB_XPATH_SEPARATOR}/html/body`;
143
+ }
144
+ }
145
+ return '/html/body';
146
+ }
147
+ } catch (error) {
148
+ (0, external_util_js_namespaceObject.logger)('[midscene:locator] ownerDocument access failed:', error);
149
+ if ('html' === el.nodeName.toLowerCase()) return '/html';
150
+ if ('body' === el.nodeName.toLowerCase()) return '/html/body';
151
+ }
152
+ if ((0, external_dom_util_js_namespaceObject.isSvgElement)(el)) {
153
+ const tagName = el.nodeName.toLowerCase();
154
+ if ('svg' === tagName) return buildCurrentElementXpath(el, isOrderSensitive, isLeafElement, limitToCurrentDocument);
155
+ let parent = el.parentNode;
156
+ while(parent && parent.nodeType === Node.ELEMENT_NODE){
157
+ const parentEl = parent;
158
+ if (!(0, external_dom_util_js_namespaceObject.isSvgElement)(parentEl)) return getElementXpath(parentEl, isOrderSensitive, isLeafElement, limitToCurrentDocument);
159
+ const parentTag = parentEl.nodeName.toLowerCase();
160
+ if ('svg' === parentTag) return getElementXpath(parentEl, isOrderSensitive, isLeafElement, limitToCurrentDocument);
161
+ parent = parent.parentNode;
162
+ }
163
+ const fallbackParent = el.parentNode;
164
+ if (fallbackParent && fallbackParent.nodeType === Node.ELEMENT_NODE) return getElementXpath(fallbackParent, isOrderSensitive, isLeafElement, limitToCurrentDocument);
165
+ return '';
166
+ }
167
+ return buildCurrentElementXpath(el, isOrderSensitive, isLeafElement, limitToCurrentDocument);
168
+ };
169
+ function getXpathsById(id) {
170
+ const node = (0, external_util_js_namespaceObject.getNodeFromCacheList)(id);
171
+ if (!node) return null;
172
+ const fullXPath = getElementXpath(node, false, true, true);
173
+ return [
174
+ fullXPath
175
+ ];
176
+ }
177
+ function getXpathsByPoint(point, isOrderSensitive) {
178
+ let currentWindow = 'undefined' != typeof window ? window : void 0;
179
+ let currentDocument = 'undefined' != typeof document ? document : void 0;
180
+ let { left, top } = point;
181
+ let depth = 0;
182
+ const MAX_DEPTH = 10;
183
+ let xpathPrefix = '';
184
+ let lastFoundElement = null;
185
+ while(depth < MAX_DEPTH){
186
+ depth++;
187
+ const element = currentDocument.elementFromPoint(left, top);
188
+ if (!element) {
189
+ if (lastFoundElement) {
190
+ const fullXPath = getElementXpath(lastFoundElement, isOrderSensitive, true, true);
191
+ return [
192
+ xpathPrefix + fullXPath
193
+ ];
194
+ }
195
+ return null;
196
+ }
197
+ lastFoundElement = element;
198
+ const tag = element.tagName.toLowerCase();
199
+ if ('iframe' === tag || 'frame' === tag) try {
200
+ const contentWindow = element.contentWindow;
201
+ const contentDocument = element.contentDocument;
202
+ if (contentWindow && contentDocument) {
203
+ const localPoint = translatePointToIframeCoordinates({
204
+ left,
205
+ top
206
+ }, element, currentWindow);
207
+ const currentIframeXpath = getElementXpath(element, isOrderSensitive, false, true);
208
+ xpathPrefix += currentIframeXpath + SUB_XPATH_SEPARATOR;
209
+ currentWindow = contentWindow;
210
+ currentDocument = contentDocument;
211
+ left = localPoint.left;
212
+ top = localPoint.top;
213
+ continue;
214
+ }
215
+ } catch (error) {
216
+ (0, external_util_js_namespaceObject.logger)('[midscene:locator] iframe penetration failed (cross-origin?):', error);
217
+ }
218
+ const fullXPath = getElementXpath(element, isOrderSensitive, true, true);
219
+ return [
220
+ xpathPrefix + fullXPath
221
+ ];
222
+ }
223
+ if (lastFoundElement) {
224
+ const fullXPath = getElementXpath(lastFoundElement, isOrderSensitive, true, true);
225
+ return [
226
+ xpathPrefix + fullXPath
227
+ ];
228
+ }
229
+ return null;
230
+ }
231
+ function getNodeInfoByXpath(xpath) {
232
+ const parts = xpath.split(SUB_XPATH_SEPARATOR).map((p)=>p.trim()).filter(Boolean);
233
+ if (0 === parts.length) return null;
234
+ let currentDocument = 'undefined' != typeof document ? document : void 0;
235
+ let node = null;
236
+ for(let i = 0; i < parts.length; i++){
237
+ const currentXpath = parts[i];
238
+ const xpathResult = currentDocument.evaluate(currentXpath, currentDocument, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
239
+ if (1 !== xpathResult.snapshotLength) {
240
+ (0, external_util_js_namespaceObject.logger)(`[midscene:locator] XPath "${currentXpath}" matched ${xpathResult.snapshotLength} elements (expected 1), discarding.`);
241
+ return null;
242
+ }
243
+ node = xpathResult.snapshotItem(0);
244
+ if (i < parts.length - 1) if (!node || node.nodeType !== Node.ELEMENT_NODE || 'iframe' !== node.tagName.toLowerCase()) return null;
245
+ else try {
246
+ const contentDocument = node.contentDocument;
247
+ if (contentDocument) currentDocument = contentDocument;
248
+ else {
249
+ (0, external_util_js_namespaceObject.logger)('[midscene:locator] iframe contentDocument is null (cross-origin?)');
250
+ return null;
251
+ }
252
+ } catch (error) {
253
+ (0, external_util_js_namespaceObject.logger)('[midscene:locator] iframe contentDocument access failed:', error);
254
+ return null;
255
+ }
256
+ }
257
+ return node;
258
+ }
259
+ function getElementInfoByXpath(xpath) {
260
+ const node = getNodeInfoByXpath(xpath);
261
+ if (!node) return null;
262
+ let targetWindow = 'undefined' != typeof window ? window : void 0;
263
+ let targetDocument = 'undefined' != typeof document ? document : void 0;
264
+ if (node.ownerDocument?.defaultView) {
265
+ targetWindow = node.ownerDocument.defaultView;
266
+ targetDocument = node.ownerDocument;
267
+ }
268
+ const rootDoc = 'undefined' != typeof document ? document : null;
269
+ const iframeOffset = calculateIframeOffset(node.ownerDocument ?? null, rootDoc);
270
+ const targetWin = targetWindow;
271
+ const targetDoc = targetDocument;
272
+ if (node instanceof targetWin.HTMLElement) {
273
+ const rect = (0, external_util_js_namespaceObject.getRect)(node, 1, targetWin);
274
+ const isVisible = (0, external_util_js_namespaceObject.isElementPartiallyInViewport)(rect, targetWin, targetDoc, 1);
275
+ if (!isVisible) node.scrollIntoView({
276
+ behavior: 'instant',
277
+ block: 'center'
278
+ });
279
+ }
280
+ return (0, external_web_extractor_js_namespaceObject.collectElementInfo)(node, targetWin, targetDoc, 1, iframeOffset, true);
281
+ }
282
+ exports.getElementInfoByXpath = __webpack_exports__.getElementInfoByXpath;
283
+ exports.getElementXpath = __webpack_exports__.getElementXpath;
284
+ exports.getNodeInfoByXpath = __webpack_exports__.getNodeInfoByXpath;
285
+ exports.getXpathsById = __webpack_exports__.getXpathsById;
286
+ exports.getXpathsByPoint = __webpack_exports__.getXpathsByPoint;
287
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
288
+ "getElementInfoByXpath",
289
+ "getElementXpath",
290
+ "getNodeInfoByXpath",
291
+ "getXpathsById",
292
+ "getXpathsByPoint"
293
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
294
+ Object.defineProperty(exports, '__esModule', {
295
+ value: true
296
+ });