@midscene/shared 0.30.10 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/dist/es/build/rspack-config.mjs +4 -0
  2. package/dist/es/constants/example-code.mjs +4 -4
  3. package/dist/es/env/constants.mjs +27 -82
  4. package/dist/es/env/global-config-manager.mjs +2 -3
  5. package/dist/es/env/helper.mjs +12 -17
  6. package/dist/es/env/init-debug.mjs +6 -6
  7. package/dist/es/env/model-config-manager.mjs +45 -65
  8. package/dist/es/env/parse-model-config.mjs +112 -0
  9. package/dist/es/env/types.mjs +70 -162
  10. package/dist/es/extractor/dom-util.mjs +10 -18
  11. package/dist/es/extractor/index.mjs +2 -3
  12. package/dist/es/extractor/locator.mjs +8 -15
  13. package/dist/es/extractor/tree.mjs +2 -5
  14. package/dist/es/extractor/util.mjs +4 -28
  15. package/dist/es/extractor/web-extractor.mjs +7 -14
  16. package/dist/es/index.mjs +2 -1
  17. package/dist/es/mcp/base-server.mjs +250 -0
  18. package/dist/es/mcp/base-tools.mjs +84 -0
  19. package/dist/es/mcp/index.mjs +5 -0
  20. package/dist/es/mcp/inject-report-html-plugin.mjs +53 -0
  21. package/dist/es/mcp/tool-generator.mjs +207 -0
  22. package/dist/es/mcp/types.mjs +3 -0
  23. package/dist/es/node/fs.mjs +2 -2
  24. package/dist/es/utils.mjs +2 -3
  25. package/dist/es/zod-schema-utils.mjs +54 -0
  26. package/dist/lib/baseDB.js +2 -2
  27. package/dist/lib/build/copy-static.js +4 -4
  28. package/dist/lib/build/rspack-config.js +38 -0
  29. package/dist/lib/common.js +4 -4
  30. package/dist/lib/constants/example-code.js +6 -6
  31. package/dist/lib/constants/index.js +13 -13
  32. package/dist/lib/env/basic.js +2 -2
  33. package/dist/lib/env/constants.js +32 -90
  34. package/dist/lib/env/global-config-manager.js +4 -5
  35. package/dist/lib/env/helper.js +13 -22
  36. package/dist/lib/env/index.js +24 -28
  37. package/dist/lib/env/init-debug.js +7 -7
  38. package/dist/lib/env/model-config-manager.js +47 -67
  39. package/dist/lib/env/parse-model-config.js +155 -0
  40. package/dist/lib/env/types.js +146 -379
  41. package/dist/lib/env/utils.js +4 -4
  42. package/dist/lib/extractor/constants.js +4 -4
  43. package/dist/lib/extractor/debug.js +1 -1
  44. package/dist/lib/extractor/dom-util.js +18 -26
  45. package/dist/lib/extractor/index.js +11 -21
  46. package/dist/lib/extractor/locator.js +10 -20
  47. package/dist/lib/extractor/tree.js +4 -7
  48. package/dist/lib/extractor/util.js +17 -50
  49. package/dist/lib/extractor/web-extractor.js +12 -19
  50. package/dist/lib/img/box-select.js +4 -4
  51. package/dist/lib/img/draw-box.js +2 -2
  52. package/dist/lib/img/get-jimp.js +16 -34
  53. package/dist/lib/img/get-photon.js +24 -47
  54. package/dist/lib/img/get-sharp.js +16 -34
  55. package/dist/lib/img/index.js +18 -18
  56. package/dist/lib/img/info.js +4 -4
  57. package/dist/lib/img/transform.js +10 -10
  58. package/dist/lib/index.js +8 -4
  59. package/dist/lib/logger.js +4 -4
  60. package/dist/lib/mcp/base-server.js +300 -0
  61. package/dist/lib/mcp/base-tools.js +118 -0
  62. package/dist/lib/mcp/index.js +86 -0
  63. package/dist/lib/mcp/inject-report-html-plugin.js +98 -0
  64. package/dist/lib/mcp/tool-generator.js +244 -0
  65. package/dist/lib/mcp/types.js +40 -0
  66. package/dist/lib/node/fs.js +6 -6
  67. package/dist/lib/node/index.js +6 -8
  68. package/dist/lib/polyfills/async-hooks.js +2 -2
  69. package/dist/lib/polyfills/index.js +6 -8
  70. package/dist/lib/types/index.js +2 -2
  71. package/dist/lib/us-keyboard-layout.js +2 -2
  72. package/dist/lib/utils.js +13 -14
  73. package/dist/lib/zod-schema-utils.js +97 -0
  74. package/dist/types/build/rspack-config.d.ts +8 -0
  75. package/dist/types/constants/example-code.d.ts +1 -1
  76. package/dist/types/env/constants.d.ts +5 -18
  77. package/dist/types/env/global-config-manager.d.ts +1 -2
  78. package/dist/types/env/helper.d.ts +2 -4
  79. package/dist/types/env/model-config-manager.d.ts +8 -7
  80. package/dist/types/env/parse-model-config.d.ts +28 -0
  81. package/dist/types/env/types.d.ts +152 -191
  82. package/dist/types/extractor/dom-util.d.ts +2 -15
  83. package/dist/types/extractor/index.d.ts +1 -2
  84. package/dist/types/extractor/locator.d.ts +0 -1
  85. package/dist/types/extractor/tree.d.ts +1 -4
  86. package/dist/types/extractor/util.d.ts +0 -3
  87. package/dist/types/index.d.ts +1 -0
  88. package/dist/types/mcp/base-server.d.ts +77 -0
  89. package/dist/types/mcp/base-tools.d.ts +55 -0
  90. package/dist/types/mcp/index.d.ts +5 -0
  91. package/dist/types/mcp/inject-report-html-plugin.d.ts +18 -0
  92. package/dist/types/mcp/tool-generator.d.ts +11 -0
  93. package/dist/types/mcp/types.d.ts +100 -0
  94. package/dist/types/types/index.d.ts +5 -2
  95. package/dist/types/zod-schema-utils.d.ts +23 -0
  96. package/package.json +19 -4
  97. package/src/build/rspack-config.ts +12 -0
  98. package/src/constants/example-code.ts +4 -4
  99. package/src/env/constants.ts +58 -203
  100. package/src/env/global-config-manager.ts +7 -7
  101. package/src/env/helper.ts +10 -31
  102. package/src/env/init-debug.ts +11 -6
  103. package/src/env/model-config-manager.ts +91 -87
  104. package/src/env/parse-model-config.ts +265 -0
  105. package/src/env/types.ts +212 -344
  106. package/src/extractor/dom-util.ts +15 -12
  107. package/src/extractor/index.ts +0 -3
  108. package/src/extractor/locator.ts +3 -12
  109. package/src/extractor/tree.ts +4 -4
  110. package/src/extractor/util.ts +0 -32
  111. package/src/index.ts +2 -0
  112. package/src/mcp/base-server.ts +435 -0
  113. package/src/mcp/base-tools.ts +196 -0
  114. package/src/mcp/index.ts +5 -0
  115. package/src/mcp/inject-report-html-plugin.ts +119 -0
  116. package/src/mcp/tool-generator.ts +330 -0
  117. package/src/mcp/types.ts +108 -0
  118. package/src/node/fs.ts +1 -1
  119. package/src/types/index.ts +8 -2
  120. package/src/utils.ts +1 -1
  121. package/src/zod-schema-utils.ts +133 -0
  122. package/dist/es/env/decide-model-config.mjs +0 -172
  123. package/dist/es/env/parse.mjs +0 -69
  124. package/dist/lib/env/decide-model-config.js +0 -212
  125. package/dist/lib/env/parse.js +0 -106
  126. package/dist/types/env/decide-model-config.d.ts +0 -14
  127. package/dist/types/env/parse.d.ts +0 -12
  128. package/src/env/decide-model-config.ts +0 -319
  129. package/src/env/parse.ts +0 -131
@@ -24,10 +24,10 @@ var __webpack_require__ = {};
24
24
  var __webpack_exports__ = {};
25
25
  __webpack_require__.r(__webpack_exports__);
26
26
  __webpack_require__.d(__webpack_exports__, {
27
- globalConfigManager: ()=>globalConfigManager,
27
+ overrideAIConfig: ()=>overrideAIConfig,
28
28
  globalModelConfigManager: ()=>globalModelConfigManager,
29
29
  getPreferredLanguage: ()=>getPreferredLanguage,
30
- overrideAIConfig: ()=>overrideAIConfig
30
+ globalConfigManager: ()=>globalConfigManager
31
31
  });
32
32
  const external_global_config_manager_js_namespaceObject = require("./global-config-manager.js");
33
33
  const external_model_config_manager_js_namespaceObject = require("./model-config-manager.js");
@@ -50,12 +50,12 @@ exports.getPreferredLanguage = __webpack_exports__.getPreferredLanguage;
50
50
  exports.globalConfigManager = __webpack_exports__.globalConfigManager;
51
51
  exports.globalModelConfigManager = __webpack_exports__.globalModelConfigManager;
52
52
  exports.overrideAIConfig = __webpack_exports__.overrideAIConfig;
53
- for(var __webpack_i__ in __webpack_exports__)if (-1 === [
53
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
54
54
  "getPreferredLanguage",
55
55
  "globalConfigManager",
56
56
  "globalModelConfigManager",
57
57
  "overrideAIConfig"
58
- ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
58
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
59
59
  Object.defineProperty(exports, '__esModule', {
60
60
  value: true
61
61
  });
@@ -24,19 +24,19 @@ var __webpack_require__ = {};
24
24
  var __webpack_exports__ = {};
25
25
  __webpack_require__.r(__webpack_exports__);
26
26
  __webpack_require__.d(__webpack_exports__, {
27
- NodeType: ()=>index_js_namespaceObject.NodeType,
28
27
  TEXT_MAX_SIZE: ()=>index_js_namespaceObject.TEXT_MAX_SIZE,
29
- TEXT_SIZE_THRESHOLD: ()=>index_js_namespaceObject.TEXT_SIZE_THRESHOLD
28
+ TEXT_SIZE_THRESHOLD: ()=>index_js_namespaceObject.TEXT_SIZE_THRESHOLD,
29
+ NodeType: ()=>index_js_namespaceObject.NodeType
30
30
  });
31
31
  const index_js_namespaceObject = require("../constants/index.js");
32
32
  exports.NodeType = __webpack_exports__.NodeType;
33
33
  exports.TEXT_MAX_SIZE = __webpack_exports__.TEXT_MAX_SIZE;
34
34
  exports.TEXT_SIZE_THRESHOLD = __webpack_exports__.TEXT_SIZE_THRESHOLD;
35
- for(var __webpack_i__ in __webpack_exports__)if (-1 === [
35
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
36
36
  "NodeType",
37
37
  "TEXT_MAX_SIZE",
38
38
  "TEXT_SIZE_THRESHOLD"
39
- ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
39
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
40
40
  Object.defineProperty(exports, '__esModule', {
41
41
  value: true
42
42
  });
@@ -6,7 +6,7 @@ console.log((0, external_index_js_namespaceObject.webExtractTextWithPosition)(do
6
6
  console.log(JSON.stringify((0, external_index_js_namespaceObject.webExtractTextWithPosition)(document.body, true)));
7
7
  (0, external_util_js_namespaceObject.setExtractTextWithPositionOnWindow)();
8
8
  (0, external_util_js_namespaceObject.setMidsceneVisibleRectOnWindow)();
9
- for(var __webpack_i__ in __webpack_exports__)exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
9
+ for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
10
10
  Object.defineProperty(exports, '__esModule', {
11
11
  value: true
12
12
  });
@@ -24,18 +24,16 @@ var __webpack_require__ = {};
24
24
  var __webpack_exports__ = {};
25
25
  __webpack_require__.r(__webpack_exports__);
26
26
  __webpack_require__.d(__webpack_exports__, {
27
- isFormElement: ()=>isFormElement,
28
- isButtonElement: ()=>isButtonElement,
29
- isAElement: ()=>isAElement,
30
- isSvgElement: ()=>isSvgElement,
31
- isTextElement: ()=>isTextElement,
32
27
  generateElementByPosition: ()=>generateElementByPosition,
28
+ isAElement: ()=>isAElement,
29
+ isButtonElement: ()=>isButtonElement,
30
+ isContainerElement: ()=>isContainerElement,
31
+ isFormElement: ()=>isFormElement,
33
32
  isImgElement: ()=>isImgElement,
34
33
  isNotContainerElement: ()=>isNotContainerElement,
35
- isContainerElement: ()=>isContainerElement
34
+ isSvgElement: ()=>isSvgElement,
35
+ isTextElement: ()=>isTextElement
36
36
  });
37
- const index_js_namespaceObject = require("../constants/index.js");
38
- const external_utils_js_namespaceObject = require("../utils.js");
39
37
  function isFormElement(node) {
40
38
  return node instanceof HTMLElement && ('input' === node.tagName.toLowerCase() || 'textarea' === node.tagName.toLowerCase() || 'select' === node.tagName.toLowerCase() || 'option' === node.tagName.toLowerCase());
41
39
  }
@@ -69,12 +67,10 @@ function isNotContainerElement(node) {
69
67
  return isTextElement(node) || isIconfont(node) || isImgElement(node) || isButtonElement(node) || isAElement(node) || isFormElement(node);
70
68
  }
71
69
  function isTextElement(node) {
72
- var _node_nodeName_toLowerCase, _node_nodeName;
73
70
  if (node instanceof Element) {
74
- var _node_childNodes;
75
- if ((null == node ? void 0 : null == (_node_childNodes = node.childNodes) ? void 0 : _node_childNodes.length) === 1 && (null == node ? void 0 : node.childNodes[0]) instanceof Text) return true;
71
+ if (node?.childNodes?.length === 1 && node?.childNodes[0] instanceof Text) return true;
76
72
  }
77
- return (null == (_node_nodeName = node.nodeName) ? void 0 : null == (_node_nodeName_toLowerCase = _node_nodeName.toLowerCase) ? void 0 : _node_nodeName_toLowerCase.call(_node_nodeName)) === '#text' && !isIconfont(node);
73
+ return node.nodeName?.toLowerCase?.() === '#text' && !isIconfont(node);
78
74
  }
79
75
  function isContainerElement(node) {
80
76
  if (!(node instanceof HTMLElement)) return false;
@@ -103,25 +99,21 @@ function includeBaseElement(node) {
103
99
  }
104
100
  return false;
105
101
  }
106
- function generateElementByPosition(position) {
102
+ function generateElementByPosition(position, description) {
103
+ const edgeSize = 8;
107
104
  const rect = {
108
- left: Math.max(position.x - 4, 0),
109
- top: Math.max(position.y - 4, 0),
110
- width: 8,
111
- height: 8
105
+ left: Math.round(Math.max(position.x - edgeSize / 2, 0)),
106
+ top: Math.round(Math.max(position.y - edgeSize / 2, 0)),
107
+ width: edgeSize,
108
+ height: edgeSize
112
109
  };
113
- const id = (0, external_utils_js_namespaceObject.generateHashId)(rect);
114
110
  const element = {
115
- id,
116
- attributes: {
117
- nodeType: index_js_namespaceObject.NodeType.POSITION
118
- },
119
111
  rect,
120
- content: '',
121
112
  center: [
122
113
  position.x,
123
114
  position.y
124
- ]
115
+ ],
116
+ description: description || ''
125
117
  };
126
118
  return element;
127
119
  }
@@ -134,7 +126,7 @@ exports.isImgElement = __webpack_exports__.isImgElement;
134
126
  exports.isNotContainerElement = __webpack_exports__.isNotContainerElement;
135
127
  exports.isSvgElement = __webpack_exports__.isSvgElement;
136
128
  exports.isTextElement = __webpack_exports__.isTextElement;
137
- for(var __webpack_i__ in __webpack_exports__)if (-1 === [
129
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
138
130
  "generateElementByPosition",
139
131
  "isAElement",
140
132
  "isButtonElement",
@@ -144,7 +136,7 @@ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
144
136
  "isNotContainerElement",
145
137
  "isSvgElement",
146
138
  "isTextElement"
147
- ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
139
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
148
140
  Object.defineProperty(exports, '__esModule', {
149
141
  value: true
150
142
  });
@@ -24,39 +24,32 @@ var __webpack_require__ = {};
24
24
  var __webpack_exports__ = {};
25
25
  __webpack_require__.r(__webpack_exports__);
26
26
  __webpack_require__.d(__webpack_exports__, {
27
- trimAttributes: ()=>external_tree_js_namespaceObject.trimAttributes,
28
- setNodeHashCacheListOnWindow: ()=>external_util_js_namespaceObject.setNodeHashCacheListOnWindow,
27
+ webExtractNodeTree: ()=>external_web_extractor_js_namespaceObject.extractTreeNode,
29
28
  getNodeInfoByXpath: ()=>external_locator_js_namespaceObject.getNodeInfoByXpath,
30
- getXpathsById: ()=>external_locator_js_namespaceObject.getXpathsById,
31
- getElementInfoByXpath: ()=>external_locator_js_namespaceObject.getElementInfoByXpath,
32
- generateElementByPosition: ()=>external_dom_util_js_namespaceObject.generateElementByPosition,
33
- descriptionOfTree: ()=>external_tree_js_namespaceObject.descriptionOfTree,
34
- getNodeFromCacheList: ()=>external_util_js_namespaceObject.getNodeFromCacheList,
35
- truncateText: ()=>external_tree_js_namespaceObject.truncateText,
36
29
  treeToList: ()=>external_tree_js_namespaceObject.treeToList,
30
+ traverseTree: ()=>external_tree_js_namespaceObject.traverseTree,
31
+ trimAttributes: ()=>external_tree_js_namespaceObject.trimAttributes,
32
+ webExtractNodeTreeAsString: ()=>external_web_extractor_js_namespaceObject.extractTreeNodeAsString,
37
33
  webExtractTextWithPosition: ()=>external_web_extractor_js_namespaceObject.extractTextWithPosition,
34
+ generateElementByPosition: ()=>external_dom_util_js_namespaceObject.generateElementByPosition,
35
+ isNotContainerElement: ()=>external_dom_util_js_namespaceObject.isNotContainerElement,
38
36
  getElementXpath: ()=>external_locator_js_namespaceObject.getElementXpath,
39
- webExtractNodeTree: ()=>external_web_extractor_js_namespaceObject.extractTreeNode,
37
+ getElementInfoByXpath: ()=>external_locator_js_namespaceObject.getElementInfoByXpath,
38
+ descriptionOfTree: ()=>external_tree_js_namespaceObject.descriptionOfTree,
40
39
  getXpathsByPoint: ()=>external_locator_js_namespaceObject.getXpathsByPoint,
41
- isNotContainerElement: ()=>external_dom_util_js_namespaceObject.isNotContainerElement,
42
- traverseTree: ()=>external_tree_js_namespaceObject.traverseTree,
43
- webExtractNodeTreeAsString: ()=>external_web_extractor_js_namespaceObject.extractTreeNodeAsString
40
+ truncateText: ()=>external_tree_js_namespaceObject.truncateText
44
41
  });
45
42
  const external_tree_js_namespaceObject = require("./tree.js");
46
43
  const external_web_extractor_js_namespaceObject = require("./web-extractor.js");
47
- const external_util_js_namespaceObject = require("./util.js");
48
44
  const external_locator_js_namespaceObject = require("./locator.js");
49
45
  const external_dom_util_js_namespaceObject = require("./dom-util.js");
50
46
  exports.descriptionOfTree = __webpack_exports__.descriptionOfTree;
51
47
  exports.generateElementByPosition = __webpack_exports__.generateElementByPosition;
52
48
  exports.getElementInfoByXpath = __webpack_exports__.getElementInfoByXpath;
53
49
  exports.getElementXpath = __webpack_exports__.getElementXpath;
54
- exports.getNodeFromCacheList = __webpack_exports__.getNodeFromCacheList;
55
50
  exports.getNodeInfoByXpath = __webpack_exports__.getNodeInfoByXpath;
56
- exports.getXpathsById = __webpack_exports__.getXpathsById;
57
51
  exports.getXpathsByPoint = __webpack_exports__.getXpathsByPoint;
58
52
  exports.isNotContainerElement = __webpack_exports__.isNotContainerElement;
59
- exports.setNodeHashCacheListOnWindow = __webpack_exports__.setNodeHashCacheListOnWindow;
60
53
  exports.traverseTree = __webpack_exports__.traverseTree;
61
54
  exports.treeToList = __webpack_exports__.treeToList;
62
55
  exports.trimAttributes = __webpack_exports__.trimAttributes;
@@ -64,17 +57,14 @@ exports.truncateText = __webpack_exports__.truncateText;
64
57
  exports.webExtractNodeTree = __webpack_exports__.webExtractNodeTree;
65
58
  exports.webExtractNodeTreeAsString = __webpack_exports__.webExtractNodeTreeAsString;
66
59
  exports.webExtractTextWithPosition = __webpack_exports__.webExtractTextWithPosition;
67
- for(var __webpack_i__ in __webpack_exports__)if (-1 === [
60
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
68
61
  "descriptionOfTree",
69
62
  "generateElementByPosition",
70
63
  "getElementInfoByXpath",
71
64
  "getElementXpath",
72
- "getNodeFromCacheList",
73
65
  "getNodeInfoByXpath",
74
- "getXpathsById",
75
66
  "getXpathsByPoint",
76
67
  "isNotContainerElement",
77
- "setNodeHashCacheListOnWindow",
78
68
  "traverseTree",
79
69
  "treeToList",
80
70
  "trimAttributes",
@@ -82,7 +72,7 @@ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
82
72
  "webExtractNodeTree",
83
73
  "webExtractNodeTreeAsString",
84
74
  "webExtractTextWithPosition"
85
- ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
75
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
86
76
  Object.defineProperty(exports, '__esModule', {
87
77
  value: true
88
78
  });
@@ -24,11 +24,10 @@ var __webpack_require__ = {};
24
24
  var __webpack_exports__ = {};
25
25
  __webpack_require__.r(__webpack_exports__);
26
26
  __webpack_require__.d(__webpack_exports__, {
27
- getXpathsByPoint: ()=>getXpathsByPoint,
28
27
  getNodeInfoByXpath: ()=>getNodeInfoByXpath,
28
+ getElementXpath: ()=>getElementXpath,
29
29
  getElementInfoByXpath: ()=>getElementInfoByXpath,
30
- getXpathsById: ()=>getXpathsById,
31
- getElementXpath: ()=>getElementXpath
30
+ getXpathsByPoint: ()=>getXpathsByPoint
32
31
  });
33
32
  const external_dom_util_js_namespaceObject = require("./dom-util.js");
34
33
  const external_util_js_namespaceObject = require("./util.js");
@@ -47,11 +46,10 @@ const normalizeXpathText = (text)=>{
47
46
  return text.replace(/\s+/g, ' ').trim();
48
47
  };
49
48
  const buildCurrentElementXpath = (element, isOrderSensitive, isLeafElement)=>{
50
- var _element_textContent;
51
49
  const parentPath = element.parentNode ? getElementXpath(element.parentNode, isOrderSensitive) : '';
52
50
  const prefix = parentPath ? `${parentPath}/` : '/';
53
51
  const tagName = element.nodeName.toLowerCase();
54
- const textContent = null == (_element_textContent = element.textContent) ? void 0 : _element_textContent.trim();
52
+ const textContent = element.textContent?.trim();
55
53
  if (isOrderSensitive) {
56
54
  const index = getElementXpathIndex(element);
57
55
  return `${prefix}${tagName}[${index}]`;
@@ -64,9 +62,8 @@ const getElementXpath = (element, isOrderSensitive = false, isLeafElement = fals
64
62
  if (element.nodeType === Node.TEXT_NODE) {
65
63
  const parentNode = element.parentNode;
66
64
  if (parentNode && parentNode.nodeType === Node.ELEMENT_NODE) {
67
- var _element_textContent;
68
65
  const parentXPath = getElementXpath(parentNode, isOrderSensitive, true);
69
- const textContent = null == (_element_textContent = element.textContent) ? void 0 : _element_textContent.trim();
66
+ const textContent = element.textContent?.trim();
70
67
  if (textContent) return `${parentXPath}/text()[normalize-space()="${normalizeXpathText(textContent)}"]`;
71
68
  return `${parentXPath}/text()`;
72
69
  }
@@ -86,14 +83,6 @@ const getElementXpath = (element, isOrderSensitive = false, isLeafElement = fals
86
83
  }
87
84
  return buildCurrentElementXpath(el, isOrderSensitive, isLeafElement);
88
85
  };
89
- function getXpathsById(id) {
90
- const node = (0, external_util_js_namespaceObject.getNodeFromCacheList)(id);
91
- if (!node) return null;
92
- const fullXPath = getElementXpath(node, false, true);
93
- return [
94
- fullXPath
95
- ];
96
- }
97
86
  function getXpathsByPoint(point, isOrderSensitive) {
98
87
  const element = document.elementFromPoint(point.left, point.top);
99
88
  if (!element) return null;
@@ -104,7 +93,10 @@ function getXpathsByPoint(point, isOrderSensitive) {
104
93
  }
105
94
  function getNodeInfoByXpath(xpath) {
106
95
  const xpathResult = document.evaluate(xpath, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
107
- if (1 !== xpathResult.snapshotLength) return null;
96
+ if (1 !== xpathResult.snapshotLength) {
97
+ console.warn(`[midscene:warning] Received XPath "${xpath}" but it matched ${xpathResult.snapshotLength} elements. Discarding this result.`);
98
+ return null;
99
+ }
108
100
  const node = xpathResult.snapshotItem(0);
109
101
  return node;
110
102
  }
@@ -127,15 +119,13 @@ function getElementInfoByXpath(xpath) {
127
119
  exports.getElementInfoByXpath = __webpack_exports__.getElementInfoByXpath;
128
120
  exports.getElementXpath = __webpack_exports__.getElementXpath;
129
121
  exports.getNodeInfoByXpath = __webpack_exports__.getNodeInfoByXpath;
130
- exports.getXpathsById = __webpack_exports__.getXpathsById;
131
122
  exports.getXpathsByPoint = __webpack_exports__.getXpathsByPoint;
132
- for(var __webpack_i__ in __webpack_exports__)if (-1 === [
123
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
133
124
  "getElementInfoByXpath",
134
125
  "getElementXpath",
135
126
  "getNodeInfoByXpath",
136
- "getXpathsById",
137
127
  "getXpathsByPoint"
138
- ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
128
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
139
129
  Object.defineProperty(exports, '__esModule', {
140
130
  value: true
141
131
  });
@@ -62,19 +62,16 @@ function descriptionOfTree(tree, truncateTextLength, filterNonTextContent = fals
62
62
  if (childContent) children += `\n${childContent}`;
63
63
  }
64
64
  if (node.node && node.node.rect.width > nodeSizeThreshold && node.node.rect.height > nodeSizeThreshold && (!filterNonTextContent || filterNonTextContent && node.node.content) && (!visibleOnly || visibleOnly && node.node.isVisible)) {
65
- var _node_node_attributes;
66
65
  emptyNode = false;
67
66
  let nodeTypeString;
68
- nodeTypeString = (null == (_node_node_attributes = node.node.attributes) ? void 0 : _node_node_attributes.htmlTagName) ? node.node.attributes.htmlTagName.replace(/[<>]/g, '') : node.node.attributes.nodeType.replace(/\sNode$/, '').toLowerCase();
69
- const markerId = node.node.indexId;
70
- const markerIdString = markerId ? `markerId="${markerId}"` : '';
67
+ nodeTypeString = node.node.attributes?.htmlTagName ? node.node.attributes.htmlTagName.replace(/[<>]/g, '') : node.node.attributes.nodeType.replace(/\sNode$/, '').toLowerCase();
71
68
  const rectAttribute = node.node.rect ? {
72
69
  left: node.node.rect.left,
73
70
  top: node.node.rect.top,
74
71
  width: node.node.rect.width,
75
72
  height: node.node.rect.height
76
73
  } : {};
77
- before = `<${nodeTypeString} id="${node.node.id}" ${markerIdString} ${attributesString(trimAttributes(node.node.attributes || {}, truncateTextLength))} ${attributesString(rectAttribute)}>`;
74
+ before = `<${nodeTypeString} id="${node.node.id}" ${attributesString(trimAttributes(node.node.attributes || {}, truncateTextLength))} ${attributesString(rectAttribute)}>`;
78
75
  const content = truncateText(node.node.content, truncateTextLength);
79
76
  contentWithIndent = content ? `\n${indentStr} ${content}` : '';
80
77
  after = `</${nodeTypeString}>`;
@@ -115,13 +112,13 @@ exports.traverseTree = __webpack_exports__.traverseTree;
115
112
  exports.treeToList = __webpack_exports__.treeToList;
116
113
  exports.trimAttributes = __webpack_exports__.trimAttributes;
117
114
  exports.truncateText = __webpack_exports__.truncateText;
118
- for(var __webpack_i__ in __webpack_exports__)if (-1 === [
115
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
119
116
  "descriptionOfTree",
120
117
  "traverseTree",
121
118
  "treeToList",
122
119
  "trimAttributes",
123
120
  "truncateText"
124
- ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
121
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
125
122
  Object.defineProperty(exports, '__esModule', {
126
123
  value: true
127
124
  });
@@ -24,26 +24,23 @@ var __webpack_require__ = {};
24
24
  var __webpack_exports__ = {};
25
25
  __webpack_require__.r(__webpack_exports__);
26
26
  __webpack_require__.d(__webpack_exports__, {
27
- midsceneGenerateHash: ()=>midsceneGenerateHash,
28
- validTextNodeContent: ()=>validTextNodeContent,
29
- setNodeHashCacheListOnWindow: ()=>setNodeHashCacheListOnWindow,
27
+ setDebugMode: ()=>setDebugMode,
28
+ getNodeAttributes: ()=>getNodeAttributes,
29
+ hasOverflowY: ()=>hasOverflowY,
30
+ setExtractTextWithPositionOnWindow: ()=>setExtractTextWithPositionOnWindow,
31
+ setGenerateHashOnWindow: ()=>setGenerateHashOnWindow,
32
+ getTopDocument: ()=>getTopDocument,
30
33
  overlappedRect: ()=>overlappedRect,
31
34
  isElementPartiallyInViewport: ()=>isElementPartiallyInViewport,
32
- elementRect: ()=>elementRect,
33
- getTopDocument: ()=>getTopDocument,
34
- setMidsceneVisibleRectOnWindow: ()=>setMidsceneVisibleRectOnWindow,
35
- getNodeFromCacheList: ()=>getNodeFromCacheList,
36
- getNodeAttributes: ()=>getNodeAttributes,
37
- generateId: ()=>generateId,
38
- setNodeToCacheList: ()=>setNodeToCacheList,
39
- logger: ()=>logger,
40
35
  getPseudoElementContent: ()=>getPseudoElementContent,
36
+ midsceneGenerateHash: ()=>midsceneGenerateHash,
41
37
  getDebugMode: ()=>getDebugMode,
42
- hasOverflowY: ()=>hasOverflowY,
38
+ logger: ()=>logger,
39
+ elementRect: ()=>elementRect,
40
+ setMidsceneVisibleRectOnWindow: ()=>setMidsceneVisibleRectOnWindow,
43
41
  getRect: ()=>getRect,
44
- setDebugMode: ()=>setDebugMode,
45
- setExtractTextWithPositionOnWindow: ()=>setExtractTextWithPositionOnWindow,
46
- setGenerateHashOnWindow: ()=>setGenerateHashOnWindow
42
+ generateId: ()=>generateId,
43
+ validTextNodeContent: ()=>validTextNodeContent
47
44
  });
48
45
  const external_utils_js_namespaceObject = require("../utils.js");
49
46
  const external_web_extractor_js_namespaceObject = require("./web-extractor.js");
@@ -143,8 +140,8 @@ const isElementCovered = (el, rect, currentWindow)=>{
143
140
  const topElement = currentWindow.document.elementFromPoint(x, y);
144
141
  if (!topElement) return false;
145
142
  if (topElement === el) return false;
146
- if (null == el ? void 0 : el.contains(topElement)) return false;
147
- if (null == topElement ? void 0 : topElement.contains(el)) return false;
143
+ if (el?.contains(topElement)) return false;
144
+ if (topElement?.contains(el)) return false;
148
145
  const rectOfTopElement = getRect(topElement, 1, currentWindow);
149
146
  const overlapRect = overlappedRect(rect, rectOfTopElement);
150
147
  if (!overlapRect) return false;
@@ -182,7 +179,7 @@ function elementRect(el, currentWindow, currentDocument, baseZoom = 1) {
182
179
  const isVisible = isElementPartiallyInViewport(rect, currentWindow, currentDocument);
183
180
  let parent = el;
184
181
  const parentUntilNonStatic = (currentNode)=>{
185
- let parent = null == currentNode ? void 0 : currentNode.parentElement;
182
+ let parent = currentNode?.parentElement;
186
183
  while(parent){
187
184
  const style = currentWindow.getComputedStyle(parent);
188
185
  if ('static' !== style.position) return parent;
@@ -246,32 +243,8 @@ function getNodeAttributes(node, currentWindow) {
246
243
  }
247
244
  function midsceneGenerateHash(node, content, rect) {
248
245
  const slicedHash = (0, external_utils_js_namespaceObject.generateHashId)(rect, content);
249
- if (node) {
250
- if (!window.midsceneNodeHashCacheList) setNodeHashCacheListOnWindow();
251
- setNodeToCacheList(node, slicedHash);
252
- }
253
246
  return slicedHash;
254
247
  }
255
- function setNodeHashCacheListOnWindow() {
256
- if ('undefined' != typeof window) window.midsceneNodeHashCacheList = [];
257
- }
258
- function setNodeToCacheList(node, id) {
259
- if ('undefined' != typeof window) {
260
- var _window_midsceneNodeHashCacheList;
261
- if (getNodeFromCacheList(id)) return;
262
- null == (_window_midsceneNodeHashCacheList = window.midsceneNodeHashCacheList) || _window_midsceneNodeHashCacheList.push({
263
- node,
264
- id
265
- });
266
- }
267
- }
268
- function getNodeFromCacheList(id) {
269
- if ('undefined' != typeof window) {
270
- var _window_midsceneNodeHashCacheList_find, _window_midsceneNodeHashCacheList;
271
- return null == (_window_midsceneNodeHashCacheList = window.midsceneNodeHashCacheList) ? void 0 : null == (_window_midsceneNodeHashCacheList_find = _window_midsceneNodeHashCacheList.find((item)=>item.id === id)) ? void 0 : _window_midsceneNodeHashCacheList_find.node;
272
- }
273
- return null;
274
- }
275
248
  function generateId(numberId) {
276
249
  return `${numberId}`;
277
250
  }
@@ -292,7 +265,6 @@ exports.elementRect = __webpack_exports__.elementRect;
292
265
  exports.generateId = __webpack_exports__.generateId;
293
266
  exports.getDebugMode = __webpack_exports__.getDebugMode;
294
267
  exports.getNodeAttributes = __webpack_exports__.getNodeAttributes;
295
- exports.getNodeFromCacheList = __webpack_exports__.getNodeFromCacheList;
296
268
  exports.getPseudoElementContent = __webpack_exports__.getPseudoElementContent;
297
269
  exports.getRect = __webpack_exports__.getRect;
298
270
  exports.getTopDocument = __webpack_exports__.getTopDocument;
@@ -305,15 +277,12 @@ exports.setDebugMode = __webpack_exports__.setDebugMode;
305
277
  exports.setExtractTextWithPositionOnWindow = __webpack_exports__.setExtractTextWithPositionOnWindow;
306
278
  exports.setGenerateHashOnWindow = __webpack_exports__.setGenerateHashOnWindow;
307
279
  exports.setMidsceneVisibleRectOnWindow = __webpack_exports__.setMidsceneVisibleRectOnWindow;
308
- exports.setNodeHashCacheListOnWindow = __webpack_exports__.setNodeHashCacheListOnWindow;
309
- exports.setNodeToCacheList = __webpack_exports__.setNodeToCacheList;
310
280
  exports.validTextNodeContent = __webpack_exports__.validTextNodeContent;
311
- for(var __webpack_i__ in __webpack_exports__)if (-1 === [
281
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
312
282
  "elementRect",
313
283
  "generateId",
314
284
  "getDebugMode",
315
285
  "getNodeAttributes",
316
- "getNodeFromCacheList",
317
286
  "getPseudoElementContent",
318
287
  "getRect",
319
288
  "getTopDocument",
@@ -326,10 +295,8 @@ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
326
295
  "setExtractTextWithPositionOnWindow",
327
296
  "setGenerateHashOnWindow",
328
297
  "setMidsceneVisibleRectOnWindow",
329
- "setNodeHashCacheListOnWindow",
330
- "setNodeToCacheList",
331
298
  "validTextNodeContent"
332
- ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
299
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
333
300
  Object.defineProperty(exports, '__esModule', {
334
301
  value: true
335
302
  });
@@ -24,10 +24,10 @@ var __webpack_require__ = {};
24
24
  var __webpack_exports__ = {};
25
25
  __webpack_require__.r(__webpack_exports__);
26
26
  __webpack_require__.d(__webpack_exports__, {
27
- collectElementInfo: ()=>collectElementInfo,
28
- extractTreeNodeAsString: ()=>extractTreeNodeAsString,
29
- extractTreeNode: ()=>extractTreeNode,
30
27
  mergeElementAndChildrenRects: ()=>mergeElementAndChildrenRects,
28
+ extractTreeNode: ()=>extractTreeNode,
29
+ extractTreeNodeAsString: ()=>extractTreeNodeAsString,
30
+ collectElementInfo: ()=>collectElementInfo,
31
31
  extractTextWithPosition: ()=>extractTextWithPosition
32
32
  });
33
33
  const index_js_namespaceObject = require("../constants/index.js");
@@ -37,15 +37,10 @@ const external_util_js_namespaceObject = require("./util.js");
37
37
  let indexId = 0;
38
38
  function tagNameOfNode(node) {
39
39
  let tagName = '';
40
- if (node instanceof HTMLElement) {
41
- var _node_tagName;
42
- tagName = null == (_node_tagName = node.tagName) ? void 0 : _node_tagName.toLowerCase();
43
- } else {
40
+ if (node instanceof HTMLElement) tagName = node.tagName?.toLowerCase();
41
+ else {
44
42
  const parentElement = node.parentElement;
45
- if (parentElement && parentElement instanceof HTMLElement) {
46
- var _parentElement_tagName;
47
- tagName = null == (_parentElement_tagName = parentElement.tagName) ? void 0 : _parentElement_tagName.toLowerCase();
48
- }
43
+ if (parentElement && parentElement instanceof HTMLElement) tagName = parentElement.tagName?.toLowerCase();
49
44
  }
50
45
  return tagName ? `<${tagName}>` : '';
51
46
  }
@@ -68,7 +63,7 @@ function collectElementInfo(node, currentWindow, currentDocument, baseZoom = 1,
68
63
  const tagName = node.tagName.toLowerCase();
69
64
  if ('select' === node.tagName.toLowerCase()) {
70
65
  const selectedOption = node.options[node.selectedIndex];
71
- valueContent = (null == selectedOption ? void 0 : selectedOption.textContent) || '';
66
+ valueContent = selectedOption?.textContent || '';
72
67
  }
73
68
  if (('input' === node.tagName.toLowerCase() || 'textarea' === node.tagName.toLowerCase()) && node.value) valueContent = node.value;
74
69
  const elementInfo = {
@@ -121,7 +116,6 @@ function collectElementInfo(node, currentWindow, currentDocument, baseZoom = 1,
121
116
  return elementInfo;
122
117
  }
123
118
  if ((0, external_dom_util_js_namespaceObject.isImgElement)(node)) {
124
- var _node_nodeName;
125
119
  const attributes = (0, external_util_js_namespaceObject.getNodeAttributes)(node, currentWindow);
126
120
  const nodeHashId = (0, external_util_js_namespaceObject.midsceneGenerateHash)(node, '', rect);
127
121
  const elementInfo = {
@@ -130,7 +124,7 @@ function collectElementInfo(node, currentWindow, currentDocument, baseZoom = 1,
130
124
  nodeHashId,
131
125
  attributes: {
132
126
  ...attributes,
133
- ...(null == (_node_nodeName = node.nodeName) ? void 0 : _node_nodeName.toLowerCase()) === 'svg' ? {
127
+ ...node.nodeName?.toLowerCase() === 'svg' ? {
134
128
  svgContent: 'true'
135
129
  } : {},
136
130
  nodeType: index_js_namespaceObject.NodeType.IMG,
@@ -149,8 +143,7 @@ function collectElementInfo(node, currentWindow, currentDocument, baseZoom = 1,
149
143
  return elementInfo;
150
144
  }
151
145
  if ((0, external_dom_util_js_namespaceObject.isTextElement)(node)) {
152
- var _node_textContent;
153
- const text = null == (_node_textContent = node.textContent) ? void 0 : _node_textContent.trim().replace(/\n+/g, ' ');
146
+ const text = node.textContent?.trim().replace(/\n+/g, ' ');
154
147
  if (!text) return null;
155
148
  const attributes = (0, external_util_js_namespaceObject.getNodeAttributes)(node, currentWindow);
156
149
  const attributeKeys = Object.keys(attributes);
@@ -266,7 +259,7 @@ function extractTreeNode(initNode, debugMode = false) {
266
259
  node: elementInfo,
267
260
  children: []
268
261
  };
269
- if ((null == elementInfo ? void 0 : elementInfo.nodeType) === index_js_namespaceObject.NodeType.BUTTON || (null == elementInfo ? void 0 : elementInfo.nodeType) === index_js_namespaceObject.NodeType.IMG || (null == elementInfo ? void 0 : elementInfo.nodeType) === index_js_namespaceObject.NodeType.TEXT || (null == elementInfo ? void 0 : elementInfo.nodeType) === index_js_namespaceObject.NodeType.FORM_ITEM || (null == elementInfo ? void 0 : elementInfo.nodeType) === index_js_namespaceObject.NodeType.CONTAINER) return nodeInfo;
262
+ if (elementInfo?.nodeType === index_js_namespaceObject.NodeType.BUTTON || elementInfo?.nodeType === index_js_namespaceObject.NodeType.IMG || elementInfo?.nodeType === index_js_namespaceObject.NodeType.TEXT || elementInfo?.nodeType === index_js_namespaceObject.NodeType.FORM_ITEM || elementInfo?.nodeType === index_js_namespaceObject.NodeType.CONTAINER) return nodeInfo;
270
263
  const rect = (0, external_util_js_namespaceObject.getRect)(node, baseZoom, currentWindow);
271
264
  for(let i = 0; i < node.childNodes.length; i++){
272
265
  (0, external_util_js_namespaceObject.logger)('will dfs', node.childNodes[i]);
@@ -344,13 +337,13 @@ exports.extractTextWithPosition = __webpack_exports__.extractTextWithPosition;
344
337
  exports.extractTreeNode = __webpack_exports__.extractTreeNode;
345
338
  exports.extractTreeNodeAsString = __webpack_exports__.extractTreeNodeAsString;
346
339
  exports.mergeElementAndChildrenRects = __webpack_exports__.mergeElementAndChildrenRects;
347
- for(var __webpack_i__ in __webpack_exports__)if (-1 === [
340
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
348
341
  "collectElementInfo",
349
342
  "extractTextWithPosition",
350
343
  "extractTreeNode",
351
344
  "extractTreeNodeAsString",
352
345
  "mergeElementAndChildrenRects"
353
- ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
346
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
354
347
  Object.defineProperty(exports, '__esModule', {
355
348
  value: true
356
349
  });
@@ -33,8 +33,8 @@ var __webpack_require__ = {};
33
33
  var __webpack_exports__ = {};
34
34
  __webpack_require__.r(__webpack_exports__);
35
35
  __webpack_require__.d(__webpack_exports__, {
36
- processImageElementInfo: ()=>processImageElementInfo,
37
- compositeElementInfoImg: ()=>compositeElementInfoImg
36
+ compositeElementInfoImg: ()=>compositeElementInfoImg,
37
+ processImageElementInfo: ()=>processImageElementInfo
38
38
  });
39
39
  const external_node_assert_namespaceObject = require("node:assert");
40
40
  var external_node_assert_default = /*#__PURE__*/ __webpack_require__.n(external_node_assert_namespaceObject);
@@ -223,10 +223,10 @@ const processImageElementInfo = async (options)=>{
223
223
  };
224
224
  exports.compositeElementInfoImg = __webpack_exports__.compositeElementInfoImg;
225
225
  exports.processImageElementInfo = __webpack_exports__.processImageElementInfo;
226
- for(var __webpack_i__ in __webpack_exports__)if (-1 === [
226
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
227
227
  "compositeElementInfoImg",
228
228
  "processImageElementInfo"
229
- ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
229
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
230
230
  Object.defineProperty(exports, '__esModule', {
231
231
  value: true
232
232
  });
@@ -80,10 +80,10 @@ async function savePositionImg(options) {
80
80
  }
81
81
  exports.drawBoxOnImage = __webpack_exports__.drawBoxOnImage;
82
82
  exports.savePositionImg = __webpack_exports__.savePositionImg;
83
- for(var __webpack_i__ in __webpack_exports__)if (-1 === [
83
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
84
84
  "drawBoxOnImage",
85
85
  "savePositionImg"
86
- ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
86
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
87
87
  Object.defineProperty(exports, '__esModule', {
88
88
  value: true
89
89
  });