@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,824 @@
1
+ import node_assert from "node:assert";
2
+ import { NodeType } from "../constants/index.mjs";
3
+ import get_photon from "./get-photon.mjs";
4
+ import { photonFromBase64, photonToBase64 } from "./transform.mjs";
5
+ const DIGIT_FONT = {
6
+ 0: [
7
+ [
8
+ 0,
9
+ 1,
10
+ 1,
11
+ 1,
12
+ 0
13
+ ],
14
+ [
15
+ 1,
16
+ 0,
17
+ 0,
18
+ 0,
19
+ 1
20
+ ],
21
+ [
22
+ 1,
23
+ 0,
24
+ 0,
25
+ 0,
26
+ 1
27
+ ],
28
+ [
29
+ 1,
30
+ 0,
31
+ 0,
32
+ 0,
33
+ 1
34
+ ],
35
+ [
36
+ 1,
37
+ 0,
38
+ 0,
39
+ 0,
40
+ 1
41
+ ],
42
+ [
43
+ 1,
44
+ 0,
45
+ 0,
46
+ 0,
47
+ 1
48
+ ],
49
+ [
50
+ 0,
51
+ 1,
52
+ 1,
53
+ 1,
54
+ 0
55
+ ]
56
+ ],
57
+ 1: [
58
+ [
59
+ 0,
60
+ 0,
61
+ 1,
62
+ 0,
63
+ 0
64
+ ],
65
+ [
66
+ 0,
67
+ 1,
68
+ 1,
69
+ 0,
70
+ 0
71
+ ],
72
+ [
73
+ 0,
74
+ 0,
75
+ 1,
76
+ 0,
77
+ 0
78
+ ],
79
+ [
80
+ 0,
81
+ 0,
82
+ 1,
83
+ 0,
84
+ 0
85
+ ],
86
+ [
87
+ 0,
88
+ 0,
89
+ 1,
90
+ 0,
91
+ 0
92
+ ],
93
+ [
94
+ 0,
95
+ 0,
96
+ 1,
97
+ 0,
98
+ 0
99
+ ],
100
+ [
101
+ 0,
102
+ 1,
103
+ 1,
104
+ 1,
105
+ 0
106
+ ]
107
+ ],
108
+ 2: [
109
+ [
110
+ 0,
111
+ 1,
112
+ 1,
113
+ 1,
114
+ 0
115
+ ],
116
+ [
117
+ 1,
118
+ 0,
119
+ 0,
120
+ 0,
121
+ 1
122
+ ],
123
+ [
124
+ 0,
125
+ 0,
126
+ 0,
127
+ 0,
128
+ 1
129
+ ],
130
+ [
131
+ 0,
132
+ 0,
133
+ 1,
134
+ 1,
135
+ 0
136
+ ],
137
+ [
138
+ 0,
139
+ 1,
140
+ 0,
141
+ 0,
142
+ 0
143
+ ],
144
+ [
145
+ 1,
146
+ 0,
147
+ 0,
148
+ 0,
149
+ 0
150
+ ],
151
+ [
152
+ 1,
153
+ 1,
154
+ 1,
155
+ 1,
156
+ 1
157
+ ]
158
+ ],
159
+ 3: [
160
+ [
161
+ 0,
162
+ 1,
163
+ 1,
164
+ 1,
165
+ 0
166
+ ],
167
+ [
168
+ 1,
169
+ 0,
170
+ 0,
171
+ 0,
172
+ 1
173
+ ],
174
+ [
175
+ 0,
176
+ 0,
177
+ 0,
178
+ 0,
179
+ 1
180
+ ],
181
+ [
182
+ 0,
183
+ 0,
184
+ 1,
185
+ 1,
186
+ 0
187
+ ],
188
+ [
189
+ 0,
190
+ 0,
191
+ 0,
192
+ 0,
193
+ 1
194
+ ],
195
+ [
196
+ 1,
197
+ 0,
198
+ 0,
199
+ 0,
200
+ 1
201
+ ],
202
+ [
203
+ 0,
204
+ 1,
205
+ 1,
206
+ 1,
207
+ 0
208
+ ]
209
+ ],
210
+ 4: [
211
+ [
212
+ 0,
213
+ 0,
214
+ 0,
215
+ 1,
216
+ 0
217
+ ],
218
+ [
219
+ 0,
220
+ 0,
221
+ 1,
222
+ 1,
223
+ 0
224
+ ],
225
+ [
226
+ 0,
227
+ 1,
228
+ 0,
229
+ 1,
230
+ 0
231
+ ],
232
+ [
233
+ 1,
234
+ 0,
235
+ 0,
236
+ 1,
237
+ 0
238
+ ],
239
+ [
240
+ 1,
241
+ 1,
242
+ 1,
243
+ 1,
244
+ 1
245
+ ],
246
+ [
247
+ 0,
248
+ 0,
249
+ 0,
250
+ 1,
251
+ 0
252
+ ],
253
+ [
254
+ 0,
255
+ 0,
256
+ 0,
257
+ 1,
258
+ 0
259
+ ]
260
+ ],
261
+ 5: [
262
+ [
263
+ 1,
264
+ 1,
265
+ 1,
266
+ 1,
267
+ 1
268
+ ],
269
+ [
270
+ 1,
271
+ 0,
272
+ 0,
273
+ 0,
274
+ 0
275
+ ],
276
+ [
277
+ 1,
278
+ 1,
279
+ 1,
280
+ 1,
281
+ 0
282
+ ],
283
+ [
284
+ 0,
285
+ 0,
286
+ 0,
287
+ 0,
288
+ 1
289
+ ],
290
+ [
291
+ 0,
292
+ 0,
293
+ 0,
294
+ 0,
295
+ 1
296
+ ],
297
+ [
298
+ 1,
299
+ 0,
300
+ 0,
301
+ 0,
302
+ 1
303
+ ],
304
+ [
305
+ 0,
306
+ 1,
307
+ 1,
308
+ 1,
309
+ 0
310
+ ]
311
+ ],
312
+ 6: [
313
+ [
314
+ 0,
315
+ 1,
316
+ 1,
317
+ 1,
318
+ 0
319
+ ],
320
+ [
321
+ 1,
322
+ 0,
323
+ 0,
324
+ 0,
325
+ 0
326
+ ],
327
+ [
328
+ 1,
329
+ 0,
330
+ 0,
331
+ 0,
332
+ 0
333
+ ],
334
+ [
335
+ 1,
336
+ 1,
337
+ 1,
338
+ 1,
339
+ 0
340
+ ],
341
+ [
342
+ 1,
343
+ 0,
344
+ 0,
345
+ 0,
346
+ 1
347
+ ],
348
+ [
349
+ 1,
350
+ 0,
351
+ 0,
352
+ 0,
353
+ 1
354
+ ],
355
+ [
356
+ 0,
357
+ 1,
358
+ 1,
359
+ 1,
360
+ 0
361
+ ]
362
+ ],
363
+ 7: [
364
+ [
365
+ 1,
366
+ 1,
367
+ 1,
368
+ 1,
369
+ 1
370
+ ],
371
+ [
372
+ 0,
373
+ 0,
374
+ 0,
375
+ 0,
376
+ 1
377
+ ],
378
+ [
379
+ 0,
380
+ 0,
381
+ 0,
382
+ 1,
383
+ 0
384
+ ],
385
+ [
386
+ 0,
387
+ 0,
388
+ 1,
389
+ 0,
390
+ 0
391
+ ],
392
+ [
393
+ 0,
394
+ 0,
395
+ 1,
396
+ 0,
397
+ 0
398
+ ],
399
+ [
400
+ 0,
401
+ 0,
402
+ 1,
403
+ 0,
404
+ 0
405
+ ],
406
+ [
407
+ 0,
408
+ 0,
409
+ 1,
410
+ 0,
411
+ 0
412
+ ]
413
+ ],
414
+ 8: [
415
+ [
416
+ 0,
417
+ 1,
418
+ 1,
419
+ 1,
420
+ 0
421
+ ],
422
+ [
423
+ 1,
424
+ 0,
425
+ 0,
426
+ 0,
427
+ 1
428
+ ],
429
+ [
430
+ 1,
431
+ 0,
432
+ 0,
433
+ 0,
434
+ 1
435
+ ],
436
+ [
437
+ 0,
438
+ 1,
439
+ 1,
440
+ 1,
441
+ 0
442
+ ],
443
+ [
444
+ 1,
445
+ 0,
446
+ 0,
447
+ 0,
448
+ 1
449
+ ],
450
+ [
451
+ 1,
452
+ 0,
453
+ 0,
454
+ 0,
455
+ 1
456
+ ],
457
+ [
458
+ 0,
459
+ 1,
460
+ 1,
461
+ 1,
462
+ 0
463
+ ]
464
+ ],
465
+ 9: [
466
+ [
467
+ 0,
468
+ 1,
469
+ 1,
470
+ 1,
471
+ 0
472
+ ],
473
+ [
474
+ 1,
475
+ 0,
476
+ 0,
477
+ 0,
478
+ 1
479
+ ],
480
+ [
481
+ 1,
482
+ 0,
483
+ 0,
484
+ 0,
485
+ 1
486
+ ],
487
+ [
488
+ 0,
489
+ 1,
490
+ 1,
491
+ 1,
492
+ 1
493
+ ],
494
+ [
495
+ 0,
496
+ 0,
497
+ 0,
498
+ 0,
499
+ 1
500
+ ],
501
+ [
502
+ 0,
503
+ 0,
504
+ 0,
505
+ 0,
506
+ 1
507
+ ],
508
+ [
509
+ 0,
510
+ 1,
511
+ 1,
512
+ 1,
513
+ 0
514
+ ]
515
+ ]
516
+ };
517
+ const FONT_WIDTH = 5;
518
+ const FONT_HEIGHT = 7;
519
+ const FONT_SCALE = 2;
520
+ function drawDigit(pixels, width, height, digit, startX, startY, color) {
521
+ const bitmap = DIGIT_FONT[digit];
522
+ if (!bitmap) return;
523
+ for(let row = 0; row < FONT_HEIGHT; row++)for(let col = 0; col < FONT_WIDTH; col++)if (1 === bitmap[row][col]) for(let sy = 0; sy < FONT_SCALE; sy++)for(let sx = 0; sx < FONT_SCALE; sx++){
524
+ const x = startX + col * FONT_SCALE + sx;
525
+ const y = startY + row * FONT_SCALE + sy;
526
+ if (x >= 0 && x < width && y >= 0 && y < height) {
527
+ const idx = (y * width + x) * 4;
528
+ pixels[idx + 0] = color.r;
529
+ pixels[idx + 1] = color.g;
530
+ pixels[idx + 2] = color.b;
531
+ pixels[idx + 3] = color.a;
532
+ }
533
+ }
534
+ }
535
+ function drawNumber(pixels, width, height, num, startX, startY, color) {
536
+ const str = num.toString();
537
+ let x = startX;
538
+ for (const digit of str){
539
+ drawDigit(pixels, width, height, digit, x, startY, color);
540
+ x += FONT_WIDTH * FONT_SCALE + 1;
541
+ }
542
+ }
543
+ function getNumberWidth(num) {
544
+ return num.toString().length * (FONT_WIDTH * FONT_SCALE + 1) - 1;
545
+ }
546
+ function drawRect(pixels, width, height, rect, color, thickness) {
547
+ const x = Math.floor(rect.x);
548
+ const y = Math.floor(rect.y);
549
+ const w = Math.floor(rect.w);
550
+ const h = Math.floor(rect.h);
551
+ for(let py = y; py < y + h && py < height; py++)for(let px = x; px < x + w && px < width; px++){
552
+ if (px < 0 || py < 0) continue;
553
+ const isLeftBorder = px >= x && px < x + thickness;
554
+ const isRightBorder = px <= x + w - 1 && px > x + w - thickness - 1;
555
+ const isTopBorder = py >= y && py < y + thickness;
556
+ const isBottomBorder = py <= y + h - 1 && py > y + h - thickness - 1;
557
+ if (isLeftBorder || isRightBorder || isTopBorder || isBottomBorder) {
558
+ const idx = (py * width + px) * 4;
559
+ pixels[idx + 0] = color.r;
560
+ pixels[idx + 1] = color.g;
561
+ pixels[idx + 2] = color.b;
562
+ pixels[idx + 3] = color.a;
563
+ }
564
+ }
565
+ }
566
+ function fillRect(pixels, width, height, rect, color) {
567
+ const x = Math.floor(rect.x);
568
+ const y = Math.floor(rect.y);
569
+ const w = Math.floor(rect.w);
570
+ const h = Math.floor(rect.h);
571
+ for(let py = y; py < y + h && py < height; py++)for(let px = x; px < x + w && px < width; px++){
572
+ if (px < 0 || py < 0) continue;
573
+ const idx = (py * width + px) * 4;
574
+ pixels[idx + 0] = color.r;
575
+ pixels[idx + 1] = color.g;
576
+ pixels[idx + 2] = color.b;
577
+ pixels[idx + 3] = color.a;
578
+ }
579
+ }
580
+ function blendPixels(basePixels, overlayPixels, width, height) {
581
+ const result = new Uint8Array(basePixels.length);
582
+ for(let i = 0; i < basePixels.length; i += 4){
583
+ const overlayAlpha = overlayPixels[i + 3] / 255;
584
+ const baseAlpha = basePixels[i + 3] / 255;
585
+ if (0 === overlayAlpha) {
586
+ result[i + 0] = basePixels[i + 0];
587
+ result[i + 1] = basePixels[i + 1];
588
+ result[i + 2] = basePixels[i + 2];
589
+ result[i + 3] = basePixels[i + 3];
590
+ } else {
591
+ const outAlpha = overlayAlpha + baseAlpha * (1 - overlayAlpha);
592
+ if (0 === outAlpha) {
593
+ result[i + 0] = overlayPixels[i + 0];
594
+ result[i + 1] = overlayPixels[i + 1];
595
+ result[i + 2] = overlayPixels[i + 2];
596
+ result[i + 3] = overlayPixels[i + 3];
597
+ } else {
598
+ result[i + 0] = Math.round((overlayPixels[i + 0] * overlayAlpha + basePixels[i + 0] * baseAlpha * (1 - overlayAlpha)) / outAlpha);
599
+ result[i + 1] = Math.round((overlayPixels[i + 1] * overlayAlpha + basePixels[i + 1] * baseAlpha * (1 - overlayAlpha)) / outAlpha);
600
+ result[i + 2] = Math.round((overlayPixels[i + 2] * overlayAlpha + basePixels[i + 2] * baseAlpha * (1 - overlayAlpha)) / outAlpha);
601
+ result[i + 3] = Math.round(255 * outAlpha);
602
+ }
603
+ }
604
+ }
605
+ return result;
606
+ }
607
+ const createSvgOverlay = async (elements, imageWidth, imageHeight, boxPadding = 5, borderThickness = 2, prompt)=>{
608
+ const overlayPixels = new Uint8Array(imageWidth * imageHeight * 4);
609
+ const colors = [
610
+ {
611
+ rect: {
612
+ r: 0xc6,
613
+ g: 0x23,
614
+ b: 0x00,
615
+ a: 0xff
616
+ },
617
+ text: {
618
+ r: 0xff,
619
+ g: 0xff,
620
+ b: 0xff,
621
+ a: 0xff
622
+ }
623
+ },
624
+ {
625
+ rect: {
626
+ r: 0x00,
627
+ g: 0x00,
628
+ b: 0xff,
629
+ a: 0xff
630
+ },
631
+ text: {
632
+ r: 0xff,
633
+ g: 0xff,
634
+ b: 0xff,
635
+ a: 0xff
636
+ }
637
+ },
638
+ {
639
+ rect: {
640
+ r: 0x8b,
641
+ g: 0x45,
642
+ b: 0x13,
643
+ a: 0xff
644
+ },
645
+ text: {
646
+ r: 0xff,
647
+ g: 0xff,
648
+ b: 0xff,
649
+ a: 0xff
650
+ }
651
+ },
652
+ {
653
+ rect: {
654
+ r: 0x3e,
655
+ g: 0x7b,
656
+ b: 0x27,
657
+ a: 0xff
658
+ },
659
+ text: {
660
+ r: 0xff,
661
+ g: 0xff,
662
+ b: 0xff,
663
+ a: 0xff
664
+ }
665
+ },
666
+ {
667
+ rect: {
668
+ r: 0x50,
669
+ g: 0x00,
670
+ b: 0x73,
671
+ a: 0xff
672
+ },
673
+ text: {
674
+ r: 0xff,
675
+ g: 0xff,
676
+ b: 0xff,
677
+ a: 0xff
678
+ }
679
+ }
680
+ ];
681
+ if (prompt) {
682
+ const promptMargin = 20;
683
+ const promptHeight = 30;
684
+ const promptY = imageHeight - promptHeight - promptMargin;
685
+ fillRect(overlayPixels, imageWidth, imageHeight, {
686
+ x: 0,
687
+ y: promptY,
688
+ w: imageWidth,
689
+ h: promptHeight
690
+ }, {
691
+ r: 0x00,
692
+ g: 0x00,
693
+ b: 0x00,
694
+ a: 0xcc
695
+ });
696
+ }
697
+ for(let index = 0; index < elements.length; index++){
698
+ const element = elements[index];
699
+ const color = colors[index % colors.length];
700
+ const paddedLeft = Math.max(0, element.rect.left - boxPadding);
701
+ const paddedTop = Math.max(0, element.rect.top - boxPadding);
702
+ const paddedWidth = Math.min(imageWidth - paddedLeft, element.rect.width + 2 * boxPadding);
703
+ const paddedHeight = Math.min(imageHeight - paddedTop, element.rect.height + 2 * boxPadding);
704
+ const paddedRect = {
705
+ x: paddedLeft,
706
+ y: paddedTop,
707
+ w: paddedWidth,
708
+ h: paddedHeight
709
+ };
710
+ drawRect(overlayPixels, imageWidth, imageHeight, paddedRect, color.rect, borderThickness);
711
+ const indexId = element.indexId;
712
+ if ('number' != typeof indexId) continue;
713
+ const textWidth = getNumberWidth(indexId);
714
+ const textHeight = FONT_HEIGHT * FONT_SCALE;
715
+ const rectWidth = textWidth + 5;
716
+ const rectHeight = textHeight + 4;
717
+ let rectX = paddedLeft - rectWidth;
718
+ let rectY = paddedTop + Math.floor(paddedHeight / 2) - Math.floor(textHeight / 2) - 2;
719
+ const checkOverlap = (x, y)=>elements.slice(0, index).some((otherElement)=>x < otherElement.rect.left + otherElement.rect.width && x + rectWidth > otherElement.rect.left && y < otherElement.rect.top + otherElement.rect.height && y + rectHeight > otherElement.rect.top);
720
+ const isWithinBounds = (x, y)=>x >= 0 && x + rectWidth <= imageWidth && y >= 0 && y + rectHeight <= imageHeight;
721
+ if (checkOverlap(rectX, rectY) || !isWithinBounds(rectX, rectY)) if (!checkOverlap(paddedLeft, paddedTop - rectHeight - 2) && isWithinBounds(paddedLeft, paddedTop - rectHeight - 2)) {
722
+ rectX = paddedLeft;
723
+ rectY = paddedTop - rectHeight - 2;
724
+ } else if (!checkOverlap(paddedLeft, paddedTop + paddedHeight + 2) && isWithinBounds(paddedLeft, paddedTop + paddedHeight + 2)) {
725
+ rectX = paddedLeft;
726
+ rectY = paddedTop + paddedHeight + 2;
727
+ } else if (!checkOverlap(paddedLeft + paddedWidth + 2, paddedTop) && isWithinBounds(paddedLeft + paddedWidth + 2, paddedTop)) {
728
+ rectX = paddedLeft + paddedWidth + 2;
729
+ rectY = paddedTop;
730
+ } else {
731
+ rectX = paddedLeft;
732
+ rectY = paddedTop + 2;
733
+ }
734
+ fillRect(overlayPixels, imageWidth, imageHeight, {
735
+ x: rectX,
736
+ y: rectY,
737
+ w: rectWidth,
738
+ h: rectHeight
739
+ }, color.rect);
740
+ const textX = rectX + Math.floor((rectWidth - textWidth) / 2);
741
+ const textY = rectY + Math.floor((rectHeight - textHeight) / 2);
742
+ drawNumber(overlayPixels, imageWidth, imageHeight, indexId, textX, textY, color.text);
743
+ }
744
+ return overlayPixels;
745
+ };
746
+ const compositeElementInfoImg = async (options)=>{
747
+ node_assert(options.inputImgBase64, 'inputImgBase64 is required');
748
+ const { PhotonImage, SamplingFilter, resize } = await get_photon();
749
+ let width = 0;
750
+ let height = 0;
751
+ if (options.size) {
752
+ width = options.size.width;
753
+ height = options.size.height;
754
+ }
755
+ let photonImage = await photonFromBase64(options.inputImgBase64);
756
+ if (width && height) {
757
+ const imageWidth = photonImage.get_width();
758
+ const imageHeight = photonImage.get_height();
759
+ if (imageWidth !== width || imageHeight !== height) {
760
+ const resized = resize(photonImage, width, height, SamplingFilter.Nearest);
761
+ photonImage.free();
762
+ photonImage = resized;
763
+ }
764
+ } else {
765
+ width = photonImage.get_width();
766
+ height = photonImage.get_height();
767
+ }
768
+ if (!width || !height) {
769
+ photonImage.free();
770
+ throw Error('Image processing failed because width or height is undefined');
771
+ }
772
+ const { elementsPositionInfo, prompt } = options;
773
+ try {
774
+ const basePixels = photonImage.get_raw_pixels();
775
+ const overlayPixels = await createSvgOverlay(elementsPositionInfo, width, height, options.annotationPadding, options.borderThickness, prompt);
776
+ const blendedPixels = blendPixels(basePixels, overlayPixels, width, height);
777
+ const resultImage = new PhotonImage(blendedPixels, width, height);
778
+ const base64 = await photonToBase64(resultImage, 90);
779
+ resultImage.free();
780
+ return base64;
781
+ } finally{
782
+ photonImage.free();
783
+ }
784
+ };
785
+ const processImageElementInfo = async (options)=>{
786
+ const base64Image = options.inputImgBase64.split(';base64,').pop();
787
+ node_assert(base64Image, 'base64Image is undefined');
788
+ const [compositeElementInfoImgBase64, compositeElementInfoImgWithoutTextBase64] = await Promise.all([
789
+ compositeElementInfoImg({
790
+ inputImgBase64: options.inputImgBase64,
791
+ elementsPositionInfo: options.elementsPositionInfo
792
+ }),
793
+ compositeElementInfoImg({
794
+ inputImgBase64: options.inputImgBase64,
795
+ elementsPositionInfo: options.elementsPositionInfoWithoutText
796
+ })
797
+ ]);
798
+ return {
799
+ compositeElementInfoImgBase64,
800
+ compositeElementInfoImgWithoutTextBase64
801
+ };
802
+ };
803
+ async function annotateRects(imgBase64, rects, prompt) {
804
+ const markedImage = await compositeElementInfoImg({
805
+ inputImgBase64: imgBase64,
806
+ elementsPositionInfo: rects.map((rect, index)=>({
807
+ id: `rect-${index}`,
808
+ rect,
809
+ indexId: index + 1,
810
+ attributes: {
811
+ nodeType: NodeType.CONTAINER
812
+ },
813
+ content: '',
814
+ center: [
815
+ rect.left + rect.width / 2,
816
+ rect.top + rect.height / 2
817
+ ]
818
+ })),
819
+ annotationPadding: 0,
820
+ prompt
821
+ });
822
+ return markedImage;
823
+ }
824
+ export { annotateRects, compositeElementInfoImg, processImageElementInfo };