@noego/wood 0.4.9 → 0.5.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 (493) hide show
  1. package/README.md +118 -42
  2. package/bin/axe.js +313 -98
  3. package/dist/{loader/__fixtures__/layouts/app.load.cjs → automation/actions.cjs} +3 -13
  4. package/dist/automation/actions.cjs.map +1 -0
  5. package/dist/automation/actions.d.cts +57 -0
  6. package/dist/automation/actions.d.ts +57 -0
  7. package/dist/automation/actions.js +1 -0
  8. package/dist/automation/actions.js.map +1 -0
  9. package/dist/automation/actions_executor.cjs +101 -0
  10. package/dist/automation/actions_executor.cjs.map +1 -0
  11. package/dist/automation/actions_executor.d.cts +16 -0
  12. package/dist/automation/actions_executor.d.ts +16 -0
  13. package/dist/automation/actions_executor.js +76 -0
  14. package/dist/automation/actions_executor.js.map +1 -0
  15. package/dist/automation/connection.cjs +86 -0
  16. package/dist/automation/connection.cjs.map +1 -0
  17. package/dist/automation/connection.d.cts +18 -0
  18. package/dist/automation/connection.d.ts +18 -0
  19. package/dist/automation/connection.js +51 -0
  20. package/dist/automation/connection.js.map +1 -0
  21. package/dist/{middleware/__fixtures__/middleware/sequence.cjs → automation/errors.cjs} +25 -22
  22. package/dist/automation/errors.cjs.map +1 -0
  23. package/dist/automation/errors.d.cts +31 -0
  24. package/dist/automation/errors.d.ts +31 -0
  25. package/dist/automation/errors.js +24 -0
  26. package/dist/automation/errors.js.map +1 -0
  27. package/dist/automation/index.cjs +49 -0
  28. package/dist/automation/index.cjs.map +1 -0
  29. package/dist/automation/index.d.cts +16 -0
  30. package/dist/automation/index.d.ts +16 -0
  31. package/dist/automation/index.js +15 -0
  32. package/dist/automation/index.js.map +1 -0
  33. package/dist/automation/introspection_reader.cjs +75 -0
  34. package/dist/automation/introspection_reader.cjs.map +1 -0
  35. package/dist/automation/introspection_reader.d.cts +20 -0
  36. package/dist/automation/introspection_reader.d.ts +20 -0
  37. package/dist/automation/introspection_reader.js +48 -0
  38. package/dist/automation/introspection_reader.js.map +1 -0
  39. package/dist/automation/locator.cjs +102 -0
  40. package/dist/automation/locator.cjs.map +1 -0
  41. package/dist/automation/locator.d.cts +51 -0
  42. package/dist/automation/locator.d.ts +51 -0
  43. package/dist/automation/locator.js +75 -0
  44. package/dist/automation/locator.js.map +1 -0
  45. package/dist/{loader/__fixtures__/views/test/page.load.cjs → automation/observation.cjs} +3 -13
  46. package/dist/automation/observation.cjs.map +1 -0
  47. package/dist/automation/observation.d.cts +44 -0
  48. package/dist/automation/observation.d.ts +44 -0
  49. package/dist/automation/observation.js +1 -0
  50. package/dist/automation/observation.js.map +1 -0
  51. package/dist/{controller/__fixtures__/controllers/test.cjs → automation/receipts.cjs} +3 -15
  52. package/dist/automation/receipts.cjs.map +1 -0
  53. package/dist/automation/receipts.d.cts +27 -0
  54. package/dist/automation/receipts.d.ts +27 -0
  55. package/dist/automation/receipts.js +1 -0
  56. package/dist/automation/receipts.js.map +1 -0
  57. package/dist/automation/scenario.cjs +696 -0
  58. package/dist/automation/scenario.cjs.map +1 -0
  59. package/dist/automation/scenario.d.cts +89 -0
  60. package/dist/automation/scenario.d.ts +89 -0
  61. package/dist/automation/scenario.js +660 -0
  62. package/dist/automation/scenario.js.map +1 -0
  63. package/dist/automation/scrolling.cjs +17 -0
  64. package/dist/automation/scrolling.cjs.map +1 -0
  65. package/dist/automation/scrolling.d.cts +51 -0
  66. package/dist/automation/scrolling.d.ts +51 -0
  67. package/dist/automation/scrolling.js +1 -0
  68. package/dist/automation/scrolling.js.map +1 -0
  69. package/dist/automation/scrolling_executor.cjs +109 -0
  70. package/dist/automation/scrolling_executor.cjs.map +1 -0
  71. package/dist/automation/scrolling_executor.d.cts +13 -0
  72. package/dist/automation/scrolling_executor.d.ts +13 -0
  73. package/dist/automation/scrolling_executor.js +84 -0
  74. package/dist/automation/scrolling_executor.js.map +1 -0
  75. package/dist/automation/target_identity.cjs +17 -0
  76. package/dist/automation/target_identity.cjs.map +1 -0
  77. package/dist/automation/target_identity.d.cts +28 -0
  78. package/dist/automation/target_identity.d.ts +28 -0
  79. package/dist/automation/target_identity.js +1 -0
  80. package/dist/automation/target_identity.js.map +1 -0
  81. package/dist/automation/target_registry.cjs +148 -0
  82. package/dist/automation/target_registry.cjs.map +1 -0
  83. package/dist/automation/target_registry.d.cts +32 -0
  84. package/dist/automation/target_registry.d.ts +32 -0
  85. package/dist/automation/target_registry.js +122 -0
  86. package/dist/automation/target_registry.js.map +1 -0
  87. package/dist/automation/waits.cjs +17 -0
  88. package/dist/automation/waits.cjs.map +1 -0
  89. package/dist/automation/waits.d.cts +44 -0
  90. package/dist/automation/waits.d.ts +44 -0
  91. package/dist/automation/waits.js +1 -0
  92. package/dist/automation/waits.js.map +1 -0
  93. package/dist/automation/waits_executor.cjs +104 -0
  94. package/dist/automation/waits_executor.cjs.map +1 -0
  95. package/dist/automation/waits_executor.d.cts +14 -0
  96. package/dist/automation/waits_executor.d.ts +14 -0
  97. package/dist/automation/waits_executor.js +79 -0
  98. package/dist/automation/waits_executor.js.map +1 -0
  99. package/dist/bridge/backend_bridge.cjs.map +1 -1
  100. package/dist/bridge/backend_bridge.js.map +1 -1
  101. package/dist/client/index.cjs +78 -21
  102. package/dist/client/index.cjs.map +1 -1
  103. package/dist/client/index.d.cts +19 -3
  104. package/dist/client/index.d.ts +19 -3
  105. package/dist/client/index.js +80 -22
  106. package/dist/client/index.js.map +1 -1
  107. package/dist/client/renderer_log_transport.cjs +151 -0
  108. package/dist/client/renderer_log_transport.cjs.map +1 -0
  109. package/dist/client/renderer_log_transport.d.cts +54 -0
  110. package/dist/client/renderer_log_transport.d.ts +54 -0
  111. package/dist/client/renderer_log_transport.js +123 -0
  112. package/dist/client/renderer_log_transport.js.map +1 -0
  113. package/dist/codegen/controller_registration_generator.cjs +13 -2
  114. package/dist/codegen/controller_registration_generator.cjs.map +1 -1
  115. package/dist/codegen/controller_registration_generator.d.cts +12 -1
  116. package/dist/codegen/controller_registration_generator.d.ts +12 -1
  117. package/dist/codegen/controller_registration_generator.js +10 -1
  118. package/dist/codegen/controller_registration_generator.js.map +1 -1
  119. package/dist/codegen/index.d.cts +1 -0
  120. package/dist/codegen/index.d.ts +1 -0
  121. package/dist/codegen/preload_generator.cjs +13 -6
  122. package/dist/codegen/preload_generator.cjs.map +1 -1
  123. package/dist/codegen/preload_generator.d.cts +11 -2
  124. package/dist/codegen/preload_generator.d.ts +11 -2
  125. package/dist/codegen/preload_generator.js +13 -6
  126. package/dist/codegen/preload_generator.js.map +1 -1
  127. package/dist/codegen/renderer_app_generator.cjs +95 -44
  128. package/dist/codegen/renderer_app_generator.cjs.map +1 -1
  129. package/dist/codegen/renderer_app_generator.js +95 -44
  130. package/dist/codegen/renderer_app_generator.js.map +1 -1
  131. package/dist/codegen/type_generator.cjs +1 -0
  132. package/dist/codegen/type_generator.cjs.map +1 -1
  133. package/dist/codegen/type_generator.js +1 -0
  134. package/dist/codegen/type_generator.js.map +1 -1
  135. package/dist/config/config_parser.cjs +95 -4
  136. package/dist/config/config_parser.cjs.map +1 -1
  137. package/dist/config/config_parser.d.cts +10 -2
  138. package/dist/config/config_parser.d.ts +10 -2
  139. package/dist/config/config_parser.js +92 -3
  140. package/dist/config/config_parser.js.map +1 -1
  141. package/dist/config/index.cjs +6 -2
  142. package/dist/config/index.cjs.map +1 -1
  143. package/dist/config/index.d.cts +2 -2
  144. package/dist/config/index.d.ts +2 -2
  145. package/dist/config/index.js +8 -2
  146. package/dist/config/index.js.map +1 -1
  147. package/dist/controller/controller_resolver.cjs +51 -3
  148. package/dist/controller/controller_resolver.cjs.map +1 -1
  149. package/dist/controller/controller_resolver.d.cts +27 -4
  150. package/dist/controller/controller_resolver.d.ts +27 -4
  151. package/dist/controller/controller_resolver.js +48 -2
  152. package/dist/controller/controller_resolver.js.map +1 -1
  153. package/dist/controller/index.cjs +6 -2
  154. package/dist/controller/index.cjs.map +1 -1
  155. package/dist/controller/index.d.cts +1 -1
  156. package/dist/controller/index.d.ts +1 -1
  157. package/dist/controller/index.js +4 -2
  158. package/dist/controller/index.js.map +1 -1
  159. package/dist/dev/wood_dev_server.cjs +4 -1
  160. package/dist/dev/wood_dev_server.cjs.map +1 -1
  161. package/dist/dev/wood_dev_server.js +5 -2
  162. package/dist/dev/wood_dev_server.js.map +1 -1
  163. package/dist/dev/yaml_watcher.cjs +1 -1
  164. package/dist/dev/yaml_watcher.cjs.map +1 -1
  165. package/dist/dev/yaml_watcher.d.cts +4 -0
  166. package/dist/dev/yaml_watcher.d.ts +4 -0
  167. package/dist/dev/yaml_watcher.js +1 -1
  168. package/dist/dev/yaml_watcher.js.map +1 -1
  169. package/dist/frontend/frontend_lifecycle.cjs +74 -0
  170. package/dist/frontend/frontend_lifecycle.cjs.map +1 -0
  171. package/dist/frontend/frontend_lifecycle.d.cts +50 -0
  172. package/dist/frontend/frontend_lifecycle.d.ts +50 -0
  173. package/dist/frontend/frontend_lifecycle.js +50 -0
  174. package/dist/frontend/frontend_lifecycle.js.map +1 -0
  175. package/dist/frontend/frontend_page.cjs +122 -0
  176. package/dist/frontend/frontend_page.cjs.map +1 -0
  177. package/dist/frontend/frontend_page.d.cts +62 -0
  178. package/dist/frontend/frontend_page.d.ts +62 -0
  179. package/dist/frontend/frontend_page.js +98 -0
  180. package/dist/frontend/frontend_page.js.map +1 -0
  181. package/dist/frontend/frontend_surface.cjs +249 -0
  182. package/dist/frontend/frontend_surface.cjs.map +1 -0
  183. package/dist/frontend/frontend_surface.d.cts +64 -0
  184. package/dist/frontend/frontend_surface.d.ts +64 -0
  185. package/dist/frontend/frontend_surface.js +224 -0
  186. package/dist/frontend/frontend_surface.js.map +1 -0
  187. package/dist/frontend/index.cjs +52 -0
  188. package/dist/frontend/index.cjs.map +1 -0
  189. package/dist/frontend/index.d.cts +10 -0
  190. package/dist/frontend/index.d.ts +10 -0
  191. package/dist/frontend/index.js +19 -0
  192. package/dist/frontend/index.js.map +1 -0
  193. package/dist/frontend/page_catalog.cjs +135 -0
  194. package/dist/frontend/page_catalog.cjs.map +1 -0
  195. package/dist/frontend/page_catalog.d.cts +56 -0
  196. package/dist/frontend/page_catalog.d.ts +56 -0
  197. package/dist/frontend/page_catalog.js +108 -0
  198. package/dist/frontend/page_catalog.js.map +1 -0
  199. package/dist/frontend/tracked_transport.cjs +55 -0
  200. package/dist/frontend/tracked_transport.cjs.map +1 -0
  201. package/dist/frontend/tracked_transport.d.cts +36 -0
  202. package/dist/frontend/tracked_transport.d.ts +36 -0
  203. package/dist/frontend/tracked_transport.js +31 -0
  204. package/dist/frontend/tracked_transport.js.map +1 -0
  205. package/dist/frontend/work_registry.cjs +153 -0
  206. package/dist/frontend/work_registry.cjs.map +1 -0
  207. package/dist/frontend/work_registry.d.cts +70 -0
  208. package/dist/frontend/work_registry.d.ts +70 -0
  209. package/dist/frontend/work_registry.js +128 -0
  210. package/dist/frontend/work_registry.js.map +1 -0
  211. package/dist/index.cjs +24 -0
  212. package/dist/index.cjs.map +1 -1
  213. package/dist/index.d.cts +11 -7
  214. package/dist/index.d.ts +11 -7
  215. package/dist/index.js +27 -4
  216. package/dist/index.js.map +1 -1
  217. package/dist/main/index.cjs +10 -0
  218. package/dist/main/index.cjs.map +1 -1
  219. package/dist/main/index.d.cts +14 -2
  220. package/dist/main/index.d.ts +14 -2
  221. package/dist/main/index.js +16 -0
  222. package/dist/main/index.js.map +1 -1
  223. package/dist/middleware/middleware_resolver.cjs +22 -1
  224. package/dist/middleware/middleware_resolver.cjs.map +1 -1
  225. package/dist/middleware/middleware_resolver.d.cts +13 -1
  226. package/dist/middleware/middleware_resolver.d.ts +13 -1
  227. package/dist/middleware/middleware_resolver.js +22 -1
  228. package/dist/middleware/middleware_resolver.js.map +1 -1
  229. package/dist/navigation/automation_introspection.cjs +110 -0
  230. package/dist/navigation/automation_introspection.cjs.map +1 -0
  231. package/dist/navigation/automation_introspection.d.cts +60 -0
  232. package/dist/navigation/automation_introspection.d.ts +60 -0
  233. package/dist/navigation/automation_introspection.js +85 -0
  234. package/dist/navigation/automation_introspection.js.map +1 -0
  235. package/dist/navigation/index.cjs +10 -2
  236. package/dist/navigation/index.cjs.map +1 -1
  237. package/dist/navigation/index.d.cts +27 -1
  238. package/dist/navigation/index.d.ts +27 -1
  239. package/dist/navigation/index.js +6 -1
  240. package/dist/navigation/index.js.map +1 -1
  241. package/dist/{middleware/__fixtures__/middleware/auth.cjs → navigation/layout_preservation.cjs} +18 -20
  242. package/dist/navigation/layout_preservation.cjs.map +1 -0
  243. package/dist/navigation/layout_preservation.d.cts +2 -0
  244. package/dist/navigation/layout_preservation.d.ts +2 -0
  245. package/dist/navigation/layout_preservation.js +18 -0
  246. package/dist/navigation/layout_preservation.js.map +1 -0
  247. package/dist/parser/index.cjs +2 -0
  248. package/dist/parser/index.cjs.map +1 -1
  249. package/dist/parser/index.d.cts +1 -1
  250. package/dist/parser/index.d.ts +1 -1
  251. package/dist/parser/index.js +2 -1
  252. package/dist/parser/index.js.map +1 -1
  253. package/dist/parser/operations_parser.cjs +6 -0
  254. package/dist/parser/operations_parser.cjs.map +1 -1
  255. package/dist/parser/operations_parser.d.cts +9 -2
  256. package/dist/parser/operations_parser.d.ts +9 -2
  257. package/dist/parser/operations_parser.js +5 -0
  258. package/dist/parser/operations_parser.js.map +1 -1
  259. package/dist/parser/views_parser.cjs.map +1 -1
  260. package/dist/parser/views_parser.js.map +1 -1
  261. package/dist/router/index.d.cts +1 -0
  262. package/dist/router/index.d.ts +1 -0
  263. package/dist/router/wood_router.cjs +35 -3
  264. package/dist/router/wood_router.cjs.map +1 -1
  265. package/dist/router/wood_router.d.cts +15 -0
  266. package/dist/router/wood_router.d.ts +15 -0
  267. package/dist/router/wood_router.js +36 -4
  268. package/dist/router/wood_router.js.map +1 -1
  269. package/dist/runtime/get_container.cjs +9 -34
  270. package/dist/runtime/get_container.cjs.map +1 -1
  271. package/dist/runtime/get_container.d.cts +24 -4
  272. package/dist/runtime/get_container.d.ts +24 -4
  273. package/dist/runtime/get_container.js +8 -23
  274. package/dist/runtime/get_container.js.map +1 -1
  275. package/dist/runtime/index.cjs +9 -0
  276. package/dist/runtime/index.cjs.map +1 -1
  277. package/dist/runtime/index.d.cts +5 -2
  278. package/dist/runtime/index.d.ts +5 -2
  279. package/dist/runtime/index.js +10 -1
  280. package/dist/runtime/index.js.map +1 -1
  281. package/dist/runtime/renderer_config_extension.cjs +50 -0
  282. package/dist/runtime/renderer_config_extension.cjs.map +1 -0
  283. package/dist/runtime/renderer_config_extension.d.cts +19 -0
  284. package/dist/runtime/renderer_config_extension.d.ts +19 -0
  285. package/dist/runtime/renderer_config_extension.js +24 -0
  286. package/dist/runtime/renderer_config_extension.js.map +1 -0
  287. package/dist/runtime/renderer_log_batch_receiver.cjs +73 -0
  288. package/dist/runtime/renderer_log_batch_receiver.cjs.map +1 -0
  289. package/dist/runtime/renderer_log_batch_receiver.d.cts +29 -0
  290. package/dist/runtime/renderer_log_batch_receiver.d.ts +29 -0
  291. package/dist/runtime/renderer_log_batch_receiver.js +48 -0
  292. package/dist/runtime/renderer_log_batch_receiver.js.map +1 -0
  293. package/dist/runtime/renderer_trace_batch_receiver_registry.d.cts +1 -1
  294. package/dist/runtime/renderer_trace_batch_receiver_registry.d.ts +1 -1
  295. package/dist/runtime/runtime.cjs +14 -0
  296. package/dist/runtime/runtime.cjs.map +1 -1
  297. package/dist/runtime/runtime.d.cts +2 -1
  298. package/dist/runtime/runtime.d.ts +2 -1
  299. package/dist/runtime/runtime.js +14 -0
  300. package/dist/runtime/runtime.js.map +1 -1
  301. package/dist/stick/index.cjs.map +1 -1
  302. package/dist/stick/index.js.map +1 -1
  303. package/dist/testing/automation_assertions.cjs +417 -0
  304. package/dist/testing/automation_assertions.cjs.map +1 -0
  305. package/dist/testing/automation_assertions.d.cts +44 -0
  306. package/dist/testing/automation_assertions.d.ts +44 -0
  307. package/dist/testing/automation_assertions.js +385 -0
  308. package/dist/testing/automation_assertions.js.map +1 -0
  309. package/dist/testing/browser.cjs +130 -57
  310. package/dist/testing/browser.cjs.map +1 -1
  311. package/dist/testing/browser.d.cts +10 -4
  312. package/dist/testing/browser.d.ts +10 -4
  313. package/dist/testing/browser.js +132 -53
  314. package/dist/testing/browser.js.map +1 -1
  315. package/dist/testing/create_controller_harness.cjs +28 -8
  316. package/dist/testing/create_controller_harness.cjs.map +1 -1
  317. package/dist/testing/create_controller_harness.d.cts +18 -2
  318. package/dist/testing/create_controller_harness.d.ts +18 -2
  319. package/dist/testing/create_controller_harness.js +28 -8
  320. package/dist/testing/create_controller_harness.js.map +1 -1
  321. package/dist/testing/create_router_bridge.d.cts +1 -0
  322. package/dist/testing/create_router_bridge.d.ts +1 -0
  323. package/dist/testing/create_test_router.d.cts +1 -0
  324. package/dist/testing/create_test_router.d.ts +1 -0
  325. package/dist/testing/geometry.cjs +109 -0
  326. package/dist/testing/geometry.cjs.map +1 -0
  327. package/dist/testing/geometry.d.cts +45 -0
  328. package/dist/testing/geometry.d.ts +45 -0
  329. package/dist/testing/geometry.js +79 -0
  330. package/dist/testing/geometry.js.map +1 -0
  331. package/dist/testing/index.cjs +62 -2
  332. package/dist/testing/index.cjs.map +1 -1
  333. package/dist/testing/index.d.cts +23 -4
  334. package/dist/testing/index.d.ts +23 -4
  335. package/dist/testing/index.js +50 -2
  336. package/dist/testing/index.js.map +1 -1
  337. package/dist/{controller/__fixtures__/controllers/not_a_class.cjs → testing/test_wood.cjs} +15 -7
  338. package/dist/testing/test_wood.cjs.map +1 -0
  339. package/dist/testing/test_wood.d.cts +16 -0
  340. package/dist/testing/test_wood.d.ts +16 -0
  341. package/dist/testing/test_wood.js +12 -0
  342. package/dist/testing/test_wood.js.map +1 -0
  343. package/dist/testing/test_wood_config.cjs +272 -0
  344. package/dist/testing/test_wood_config.cjs.map +1 -0
  345. package/dist/testing/test_wood_config.d.cts +111 -0
  346. package/dist/testing/test_wood_config.d.ts +111 -0
  347. package/dist/testing/test_wood_config.js +247 -0
  348. package/dist/testing/test_wood_config.js.map +1 -0
  349. package/dist/testing/wood_config_source.cjs +146 -0
  350. package/dist/testing/wood_config_source.cjs.map +1 -0
  351. package/dist/testing/wood_config_source.d.cts +36 -0
  352. package/dist/testing/wood_config_source.d.ts +36 -0
  353. package/dist/testing/wood_config_source.js +112 -0
  354. package/dist/testing/wood_config_source.js.map +1 -0
  355. package/dist/testing/wood_env_renderer.cjs +210 -0
  356. package/dist/testing/wood_env_renderer.cjs.map +1 -0
  357. package/dist/testing/wood_env_renderer.d.cts +74 -0
  358. package/dist/testing/wood_env_renderer.d.ts +74 -0
  359. package/dist/testing/wood_env_renderer.js +188 -0
  360. package/dist/testing/wood_env_renderer.js.map +1 -0
  361. package/dist/testing/wood_test_selection.cjs +94 -0
  362. package/dist/testing/wood_test_selection.cjs.map +1 -0
  363. package/dist/testing/wood_test_selection.d.cts +39 -0
  364. package/dist/testing/wood_test_selection.d.ts +39 -0
  365. package/dist/testing/wood_test_selection.js +68 -0
  366. package/dist/testing/wood_test_selection.js.map +1 -0
  367. package/dist/trace-testing/index.d.cts +1 -2
  368. package/dist/trace-testing/index.d.ts +1 -2
  369. package/dist/trace-testing/trace_recorder.cjs +1 -1
  370. package/dist/trace-testing/trace_recorder.cjs.map +1 -1
  371. package/dist/trace-testing/trace_recorder.d.cts +1 -2
  372. package/dist/trace-testing/trace_recorder.d.ts +1 -2
  373. package/dist/trace-testing/trace_recorder.js +1 -1
  374. package/dist/trace-testing/trace_recorder.js.map +1 -1
  375. package/dist/trace-transport/index.d.cts +1 -1
  376. package/dist/trace-transport/index.d.ts +1 -1
  377. package/dist/{trace_hub-Cob54qRx.d.cts → trace_hub-Cpo_nVze.d.cts} +21 -1
  378. package/dist/{trace_hub-Cob54qRx.d.ts → trace_hub-Cpo_nVze.d.ts} +21 -1
  379. package/dist/tracing/index.cjs +9 -2
  380. package/dist/tracing/index.cjs.map +1 -1
  381. package/dist/tracing/index.d.cts +3 -2
  382. package/dist/tracing/index.d.ts +3 -2
  383. package/dist/tracing/index.js +7 -1
  384. package/dist/tracing/index.js.map +1 -1
  385. package/dist/tracing/renderer_trace_batch_host.d.cts +1 -1
  386. package/dist/tracing/renderer_trace_batch_host.d.ts +1 -1
  387. package/dist/tracing/renderer_trace_batch_transport.cjs +48 -6
  388. package/dist/tracing/renderer_trace_batch_transport.cjs.map +1 -1
  389. package/dist/tracing/renderer_trace_batch_transport.d.cts +17 -1
  390. package/dist/tracing/renderer_trace_batch_transport.d.ts +17 -1
  391. package/dist/tracing/renderer_trace_batch_transport.js +48 -6
  392. package/dist/tracing/renderer_trace_batch_transport.js.map +1 -1
  393. package/dist/tracing/trace_batch_adapter.cjs +110 -0
  394. package/dist/tracing/trace_batch_adapter.cjs.map +1 -0
  395. package/dist/tracing/trace_batch_adapter.d.cts +36 -0
  396. package/dist/tracing/trace_batch_adapter.d.ts +36 -0
  397. package/dist/tracing/trace_batch_adapter.js +86 -0
  398. package/dist/tracing/trace_batch_adapter.js.map +1 -0
  399. package/dist/tracing/trace_commit_writer.d.cts +1 -1
  400. package/dist/tracing/trace_commit_writer.d.ts +1 -1
  401. package/dist/tracing/trace_hub.cjs +87 -20
  402. package/dist/tracing/trace_hub.cjs.map +1 -1
  403. package/dist/tracing/trace_hub.d.cts +1 -1
  404. package/dist/tracing/trace_hub.d.ts +1 -1
  405. package/dist/tracing/trace_hub.js +85 -20
  406. package/dist/tracing/trace_hub.js.map +1 -1
  407. package/dist/tracing/trace_provider.cjs +21 -6
  408. package/dist/tracing/trace_provider.cjs.map +1 -1
  409. package/dist/tracing/trace_provider.d.cts +13 -4
  410. package/dist/tracing/trace_provider.d.ts +13 -4
  411. package/dist/tracing/trace_provider.js +22 -7
  412. package/dist/tracing/trace_provider.js.map +1 -1
  413. package/dist/tracing/types/wood_trace_batch.types.cjs.map +1 -1
  414. package/dist/tracing/types/wood_trace_batch.types.d.cts +15 -1
  415. package/dist/tracing/types/wood_trace_batch.types.d.ts +15 -1
  416. package/dist/tracing/types/wood_trace_sink.types.d.cts +1 -1
  417. package/dist/tracing/types/wood_trace_sink.types.d.ts +1 -1
  418. package/dist/tracing/wood_trace_batch_contract.cjs +2 -0
  419. package/dist/tracing/wood_trace_batch_contract.cjs.map +1 -1
  420. package/dist/tracing/wood_trace_batch_contract.d.cts +1 -1
  421. package/dist/tracing/wood_trace_batch_contract.d.ts +1 -1
  422. package/dist/tracing/wood_trace_batch_contract.js +2 -0
  423. package/dist/tracing/wood_trace_batch_contract.js.map +1 -1
  424. package/dist/transport/build_transport_bridge.cjs +4 -2
  425. package/dist/transport/build_transport_bridge.cjs.map +1 -1
  426. package/dist/transport/build_transport_bridge.d.cts +7 -1
  427. package/dist/transport/build_transport_bridge.d.ts +7 -1
  428. package/dist/transport/build_transport_bridge.js +2 -1
  429. package/dist/transport/build_transport_bridge.js.map +1 -1
  430. package/dist/transport/in_process_router_transport.d.cts +1 -0
  431. package/dist/transport/in_process_router_transport.d.ts +1 -0
  432. package/dist/transport/index.d.cts +1 -0
  433. package/dist/transport/index.d.ts +1 -0
  434. package/dist/types/config.cjs.map +1 -1
  435. package/dist/types/config.d.cts +47 -1
  436. package/dist/types/config.d.ts +47 -1
  437. package/dist/types/context.cjs +12 -0
  438. package/dist/types/context.cjs.map +1 -1
  439. package/dist/types/context.d.cts +27 -1
  440. package/dist/types/context.d.ts +27 -1
  441. package/dist/types/context.js +4 -0
  442. package/dist/types/context.js.map +1 -1
  443. package/dist/types/index.d.cts +2 -2
  444. package/dist/types/index.d.ts +2 -2
  445. package/dist/types/operations.cjs.map +1 -1
  446. package/dist/types/operations.d.cts +2 -0
  447. package/dist/types/operations.d.ts +2 -0
  448. package/docs/axe.md +706 -0
  449. package/package.json +19 -5
  450. package/src/components/NavigationShell.scopes.browser.test.ts +363 -0
  451. package/src/components/NavigationShell.svelte +126 -49
  452. package/dist/controller/__fixtures__/controllers/chat.cjs +0 -32
  453. package/dist/controller/__fixtures__/controllers/chat.cjs.map +0 -1
  454. package/dist/controller/__fixtures__/controllers/chat.d.cts +0 -11
  455. package/dist/controller/__fixtures__/controllers/chat.d.ts +0 -11
  456. package/dist/controller/__fixtures__/controllers/chat.js +0 -12
  457. package/dist/controller/__fixtures__/controllers/chat.js.map +0 -1
  458. package/dist/controller/__fixtures__/controllers/not_a_class.cjs.map +0 -1
  459. package/dist/controller/__fixtures__/controllers/not_a_class.d.cts +0 -3
  460. package/dist/controller/__fixtures__/controllers/not_a_class.d.ts +0 -3
  461. package/dist/controller/__fixtures__/controllers/not_a_class.js +0 -5
  462. package/dist/controller/__fixtures__/controllers/not_a_class.js.map +0 -1
  463. package/dist/controller/__fixtures__/controllers/settings.controller.cjs +0 -32
  464. package/dist/controller/__fixtures__/controllers/settings.controller.cjs.map +0 -1
  465. package/dist/controller/__fixtures__/controllers/settings.controller.d.cts +0 -12
  466. package/dist/controller/__fixtures__/controllers/settings.controller.d.ts +0 -12
  467. package/dist/controller/__fixtures__/controllers/settings.controller.js +0 -12
  468. package/dist/controller/__fixtures__/controllers/settings.controller.js.map +0 -1
  469. package/dist/controller/__fixtures__/controllers/test.cjs.map +0 -1
  470. package/dist/controller/__fixtures__/controllers/test.d.cts +0 -7
  471. package/dist/controller/__fixtures__/controllers/test.d.ts +0 -7
  472. package/dist/controller/__fixtures__/controllers/test.js +0 -9
  473. package/dist/controller/__fixtures__/controllers/test.js.map +0 -1
  474. package/dist/loader/__fixtures__/layouts/app.load.cjs.map +0 -1
  475. package/dist/loader/__fixtures__/layouts/app.load.d.cts +0 -5
  476. package/dist/loader/__fixtures__/layouts/app.load.d.ts +0 -5
  477. package/dist/loader/__fixtures__/layouts/app.load.js +0 -7
  478. package/dist/loader/__fixtures__/layouts/app.load.js.map +0 -1
  479. package/dist/loader/__fixtures__/views/test/page.load.cjs.map +0 -1
  480. package/dist/loader/__fixtures__/views/test/page.load.d.cts +0 -6
  481. package/dist/loader/__fixtures__/views/test/page.load.d.ts +0 -6
  482. package/dist/loader/__fixtures__/views/test/page.load.js +0 -7
  483. package/dist/loader/__fixtures__/views/test/page.load.js.map +0 -1
  484. package/dist/middleware/__fixtures__/middleware/auth.cjs.map +0 -1
  485. package/dist/middleware/__fixtures__/middleware/auth.d.cts +0 -6
  486. package/dist/middleware/__fixtures__/middleware/auth.d.ts +0 -6
  487. package/dist/middleware/__fixtures__/middleware/auth.js +0 -19
  488. package/dist/middleware/__fixtures__/middleware/auth.js.map +0 -1
  489. package/dist/middleware/__fixtures__/middleware/sequence.cjs.map +0 -1
  490. package/dist/middleware/__fixtures__/middleware/sequence.d.cts +0 -7
  491. package/dist/middleware/__fixtures__/middleware/sequence.d.ts +0 -7
  492. package/dist/middleware/__fixtures__/middleware/sequence.js +0 -21
  493. package/dist/middleware/__fixtures__/middleware/sequence.js.map +0 -1
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
15
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
+ var automation_exports = {};
17
+ module.exports = __toCommonJS(automation_exports);
18
+ __reExport(automation_exports, require("./errors.cjs"), module.exports);
19
+ __reExport(automation_exports, require("./target_identity.cjs"), module.exports);
20
+ __reExport(automation_exports, require("./locator.cjs"), module.exports);
21
+ __reExport(automation_exports, require("./actions.cjs"), module.exports);
22
+ __reExport(automation_exports, require("./waits.cjs"), module.exports);
23
+ __reExport(automation_exports, require("./scrolling.cjs"), module.exports);
24
+ __reExport(automation_exports, require("./observation.cjs"), module.exports);
25
+ __reExport(automation_exports, require("./receipts.cjs"), module.exports);
26
+ __reExport(automation_exports, require("./connection.cjs"), module.exports);
27
+ __reExport(automation_exports, require("./target_registry.cjs"), module.exports);
28
+ __reExport(automation_exports, require("./waits_executor.cjs"), module.exports);
29
+ __reExport(automation_exports, require("./scrolling_executor.cjs"), module.exports);
30
+ __reExport(automation_exports, require("./actions_executor.cjs"), module.exports);
31
+ __reExport(automation_exports, require("./scenario.cjs"), module.exports);
32
+ // Annotate the CommonJS export names for ESM import in node:
33
+ 0 && (module.exports = {
34
+ ...require("./errors.cjs"),
35
+ ...require("./target_identity.cjs"),
36
+ ...require("./locator.cjs"),
37
+ ...require("./actions.cjs"),
38
+ ...require("./waits.cjs"),
39
+ ...require("./scrolling.cjs"),
40
+ ...require("./observation.cjs"),
41
+ ...require("./receipts.cjs"),
42
+ ...require("./connection.cjs"),
43
+ ...require("./target_registry.cjs"),
44
+ ...require("./waits_executor.cjs"),
45
+ ...require("./scrolling_executor.cjs"),
46
+ ...require("./actions_executor.cjs"),
47
+ ...require("./scenario.cjs")
48
+ });
49
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/automation/index.ts"],"sourcesContent":["/**\n * @noego/wood/automation — typed live-surface driving core for Wood apps.\n *\n * Frozen WP-00 contracts (targets, locators, actions, waits, scrolling,\n * observations, receipts, errors) plus the WP-01 extraction of connection\n * and deterministic target selection out of bin/axe.js.\n */\n\nexport * from './errors.cjs';\nexport * from './target_identity.cjs';\nexport * from './locator.cjs';\nexport * from './actions.cjs';\nexport * from './waits.cjs';\nexport * from './scrolling.cjs';\nexport * from './observation.cjs';\nexport * from './receipts.cjs';\nexport * from './connection.cjs';\nexport * from './target_registry.cjs';\nexport * from './waits_executor.cjs';\nexport * from './scrolling_executor.cjs';\nexport * from './actions_executor.cjs';\nexport * from './scenario.cjs';\n"],"mappings":";;;;;;;;;;;;;;;AAAA;AAAA;AAQA,+BAAc,yBARd;AASA,+BAAc,kCATd;AAUA,+BAAc,0BAVd;AAWA,+BAAc,0BAXd;AAYA,+BAAc,wBAZd;AAaA,+BAAc,4BAbd;AAcA,+BAAc,8BAdd;AAeA,+BAAc,2BAfd;AAgBA,+BAAc,6BAhBd;AAiBA,+BAAc,kCAjBd;AAkBA,+BAAc,iCAlBd;AAmBA,+BAAc,qCAnBd;AAoBA,+BAAc,mCApBd;AAqBA,+BAAc,2BArBd;","names":[]}
@@ -0,0 +1,16 @@
1
+ export { WoodAutomationError, WoodAutomationErrorCode, WoodAutomationResult, automationError, automationOk, describeAutomationError } from './errors.cjs';
2
+ export { WoodLiveTarget } from './target_identity.cjs';
3
+ export { WoodLocator, describeLocator, isLowStabilityLocator, parseCliLocator, toPlaywrightLocator } from './locator.cjs';
4
+ export { WoodAutomationAction } from './actions.cjs';
5
+ export { WoodWaitCondition } from './waits.cjs';
6
+ export { WoodScrollCommand, WoodScrollContainer, WoodScrollMetrics } from './scrolling.cjs';
7
+ export { WoodConsoleEntry, WoodObservation } from './observation.cjs';
8
+ export { WoodActionReceipt, WoodActionability } from './receipts.cjs';
9
+ export { WoodAutomationConnection, connectToWoodApp, readDevMetadata } from './connection.cjs';
10
+ export { WOOD_INTERNAL_BRIDGE_KEY, WoodTargetEntry, discoverTargets, selectTarget } from './target_registry.cjs';
11
+ export { awaitCondition, matchesUrl } from './waits_executor.cjs';
12
+ export { executeScroll, hasNoProgress } from './scrolling_executor.cjs';
13
+ export { deriveReceiptChanges, executeAction } from './actions_executor.cjs';
14
+ export { WoodScenario, WoodScenarioEvent, WoodScenarioHooks, WoodScenarioReport, WoodScenarioStepReport, parseScenario, runScenario, runScenarioOnPage } from './scenario.cjs';
15
+ import 'playwright';
16
+ import '../dev/dev_metadata.cjs';
@@ -0,0 +1,16 @@
1
+ export { WoodAutomationError, WoodAutomationErrorCode, WoodAutomationResult, automationError, automationOk, describeAutomationError } from './errors.js';
2
+ export { WoodLiveTarget } from './target_identity.js';
3
+ export { WoodLocator, describeLocator, isLowStabilityLocator, parseCliLocator, toPlaywrightLocator } from './locator.js';
4
+ export { WoodAutomationAction } from './actions.js';
5
+ export { WoodWaitCondition } from './waits.js';
6
+ export { WoodScrollCommand, WoodScrollContainer, WoodScrollMetrics } from './scrolling.js';
7
+ export { WoodConsoleEntry, WoodObservation } from './observation.js';
8
+ export { WoodActionReceipt, WoodActionability } from './receipts.js';
9
+ export { WoodAutomationConnection, connectToWoodApp, readDevMetadata } from './connection.js';
10
+ export { WOOD_INTERNAL_BRIDGE_KEY, WoodTargetEntry, discoverTargets, selectTarget } from './target_registry.js';
11
+ export { awaitCondition, matchesUrl } from './waits_executor.js';
12
+ export { executeScroll, hasNoProgress } from './scrolling_executor.js';
13
+ export { deriveReceiptChanges, executeAction } from './actions_executor.js';
14
+ export { WoodScenario, WoodScenarioEvent, WoodScenarioHooks, WoodScenarioReport, WoodScenarioStepReport, parseScenario, runScenario, runScenarioOnPage } from './scenario.js';
15
+ import 'playwright';
16
+ import '../dev/dev_metadata.js';
@@ -0,0 +1,15 @@
1
+ export * from "./errors.js";
2
+ export * from "./target_identity.js";
3
+ export * from "./locator.js";
4
+ export * from "./actions.js";
5
+ export * from "./waits.js";
6
+ export * from "./scrolling.js";
7
+ export * from "./observation.js";
8
+ export * from "./receipts.js";
9
+ export * from "./connection.js";
10
+ export * from "./target_registry.js";
11
+ export * from "./waits_executor.js";
12
+ export * from "./scrolling_executor.js";
13
+ export * from "./actions_executor.js";
14
+ export * from "./scenario.js";
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/automation/index.ts"],"sourcesContent":["/**\n * @noego/wood/automation — typed live-surface driving core for Wood apps.\n *\n * Frozen WP-00 contracts (targets, locators, actions, waits, scrolling,\n * observations, receipts, errors) plus the WP-01 extraction of connection\n * and deterministic target selection out of bin/axe.js.\n */\n\nexport * from './errors.js';\nexport * from './target_identity.js';\nexport * from './locator.js';\nexport * from './actions.js';\nexport * from './waits.js';\nexport * from './scrolling.js';\nexport * from './observation.js';\nexport * from './receipts.js';\nexport * from './connection.js';\nexport * from './target_registry.js';\nexport * from './waits_executor.js';\nexport * from './scrolling_executor.js';\nexport * from './actions_executor.js';\nexport * from './scenario.js';\n"],"mappings":"AAQA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var introspection_reader_exports = {};
20
+ __export(introspection_reader_exports, {
21
+ WOOD_AUTOMATION_GLOBAL_KEY: () => WOOD_AUTOMATION_GLOBAL_KEY,
22
+ formatRoute: () => formatRoute,
23
+ readAutomationSnapshot: () => readAutomationSnapshot,
24
+ waitForRendererIdle: () => waitForRendererIdle
25
+ });
26
+ module.exports = __toCommonJS(introspection_reader_exports);
27
+ const WOOD_AUTOMATION_GLOBAL_KEY = "__NOEGO_WOOD_AUTOMATION__";
28
+ async function readAutomationSnapshot(page) {
29
+ try {
30
+ const snapshot = await page.evaluate((key) => {
31
+ const surface = globalThis[key];
32
+ if (!surface || surface.version !== 1 || typeof surface.snapshot !== "function") {
33
+ return null;
34
+ }
35
+ return surface.snapshot();
36
+ }, WOOD_AUTOMATION_GLOBAL_KEY);
37
+ return snapshot ?? null;
38
+ } catch {
39
+ return null;
40
+ }
41
+ }
42
+ async function waitForRendererIdle(page, options) {
43
+ try {
44
+ return await page.evaluate(
45
+ async ({ key, timeoutMs, idleFrames }) => {
46
+ const surface = globalThis[key];
47
+ if (!surface || surface.version !== 1 || typeof surface.waitForIdle !== "function") {
48
+ return false;
49
+ }
50
+ return await surface.waitForIdle({ timeoutMs, idleFrames });
51
+ },
52
+ { key: WOOD_AUTOMATION_GLOBAL_KEY, timeoutMs: options?.timeoutMs, idleFrames: options?.idleFrames }
53
+ );
54
+ } catch {
55
+ return false;
56
+ }
57
+ }
58
+ function formatRoute(route) {
59
+ if (!route) {
60
+ return void 0;
61
+ }
62
+ const params = Object.entries(route.params);
63
+ const query = Object.entries(route.query);
64
+ const paramsPart = params.length ? `(${params.map(([k, v]) => `${k}=${v}`).join(",")})` : "";
65
+ const queryPart = query.length ? `?${query.map(([k, v]) => `${k}=${v}`).join("&")}` : "";
66
+ return `${route.page}${paramsPart}${queryPart}`;
67
+ }
68
+ // Annotate the CommonJS export names for ESM import in node:
69
+ 0 && (module.exports = {
70
+ WOOD_AUTOMATION_GLOBAL_KEY,
71
+ formatRoute,
72
+ readAutomationSnapshot,
73
+ waitForRendererIdle
74
+ });
75
+ //# sourceMappingURL=introspection_reader.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/automation/introspection_reader.ts"],"sourcesContent":["/**\n * Node-side reader for the renderer introspection surface (AXE-WP-02).\n * Counterpart of src/navigation/automation_introspection.ts.\n */\n\nimport type { Page } from 'playwright';\nimport type { WoodAutomationSnapshot } from '../navigation/automation_introspection.cjs';\n\nexport const WOOD_AUTOMATION_GLOBAL_KEY = '__NOEGO_WOOD_AUTOMATION__';\n\n/** Read the renderer automation snapshot; null when the surface is absent (production build or pre-boot). */\nexport async function readAutomationSnapshot(page: Page): Promise<WoodAutomationSnapshot | null> {\n try {\n const snapshot = await page.evaluate((key) => {\n const surface = (globalThis as Record<string, unknown>)[key] as\n | { version?: number; snapshot?: () => unknown }\n | undefined;\n if (!surface || surface.version !== 1 || typeof surface.snapshot !== 'function') {\n return null;\n }\n return surface.snapshot();\n }, WOOD_AUTOMATION_GLOBAL_KEY);\n return (snapshot as WoodAutomationSnapshot | null) ?? null;\n } catch {\n return null;\n }\n}\n\n/** Ask the renderer to wait for app idle; false when unsupported or timed out. */\nexport async function waitForRendererIdle(\n page: Page,\n options?: { timeoutMs?: number; idleFrames?: number },\n): Promise<boolean> {\n try {\n return await page.evaluate(\n async ({ key, timeoutMs, idleFrames }) => {\n const surface = (globalThis as Record<string, unknown>)[key] as\n | { version?: number; waitForIdle?: (o: { timeoutMs?: number; idleFrames?: number }) => Promise<boolean> }\n | undefined;\n if (!surface || surface.version !== 1 || typeof surface.waitForIdle !== 'function') {\n return false;\n }\n return await surface.waitForIdle({ timeoutMs, idleFrames });\n },\n { key: WOOD_AUTOMATION_GLOBAL_KEY, timeoutMs: options?.timeoutMs, idleFrames: options?.idleFrames },\n );\n } catch {\n return false;\n }\n}\n\n/** Render a snapshot route as the canonical route string used in receipts. */\nexport function formatRoute(route: WoodAutomationSnapshot['currentRoute']): string | undefined {\n if (!route) {\n return undefined;\n }\n const params = Object.entries(route.params);\n const query = Object.entries(route.query);\n const paramsPart = params.length ? `(${params.map(([k, v]) => `${k}=${v}`).join(',')})` : '';\n const queryPart = query.length ? `?${query.map(([k, v]) => `${k}=${v}`).join('&')}` : '';\n return `${route.page}${paramsPart}${queryPart}`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQO,MAAM,6BAA6B;AAG1C,eAAsB,uBAAuB,MAAoD;AAC/F,MAAI;AACF,UAAM,WAAW,MAAM,KAAK,SAAS,CAAC,QAAQ;AAC5C,YAAM,UAAW,WAAuC,GAAG;AAG3D,UAAI,CAAC,WAAW,QAAQ,YAAY,KAAK,OAAO,QAAQ,aAAa,YAAY;AAC/E,eAAO;AAAA,MACT;AACA,aAAO,QAAQ,SAAS;AAAA,IAC1B,GAAG,0BAA0B;AAC7B,WAAQ,YAA8C;AAAA,EACxD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGA,eAAsB,oBACpB,MACA,SACkB;AAClB,MAAI;AACF,WAAO,MAAM,KAAK;AAAA,MAChB,OAAO,EAAE,KAAK,WAAW,WAAW,MAAM;AACxC,cAAM,UAAW,WAAuC,GAAG;AAG3D,YAAI,CAAC,WAAW,QAAQ,YAAY,KAAK,OAAO,QAAQ,gBAAgB,YAAY;AAClF,iBAAO;AAAA,QACT;AACA,eAAO,MAAM,QAAQ,YAAY,EAAE,WAAW,WAAW,CAAC;AAAA,MAC5D;AAAA,MACA,EAAE,KAAK,4BAA4B,WAAW,SAAS,WAAW,YAAY,SAAS,WAAW;AAAA,IACpG;AAAA,EACF,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGO,SAAS,YAAY,OAAmE;AAC7F,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AACA,QAAM,SAAS,OAAO,QAAQ,MAAM,MAAM;AAC1C,QAAM,QAAQ,OAAO,QAAQ,MAAM,KAAK;AACxC,QAAM,aAAa,OAAO,SAAS,IAAI,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,MAAM;AAC1F,QAAM,YAAY,MAAM,SAAS,IAAI,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,KAAK;AACtF,SAAO,GAAG,MAAM,IAAI,GAAG,UAAU,GAAG,SAAS;AAC/C;","names":[]}
@@ -0,0 +1,20 @@
1
+ import { Page } from 'playwright';
2
+ import { WoodAutomationSnapshot } from '../navigation/automation_introspection.cjs';
3
+
4
+ /**
5
+ * Node-side reader for the renderer introspection surface (AXE-WP-02).
6
+ * Counterpart of src/navigation/automation_introspection.ts.
7
+ */
8
+
9
+ declare const WOOD_AUTOMATION_GLOBAL_KEY = "__NOEGO_WOOD_AUTOMATION__";
10
+ /** Read the renderer automation snapshot; null when the surface is absent (production build or pre-boot). */
11
+ declare function readAutomationSnapshot(page: Page): Promise<WoodAutomationSnapshot | null>;
12
+ /** Ask the renderer to wait for app idle; false when unsupported or timed out. */
13
+ declare function waitForRendererIdle(page: Page, options?: {
14
+ timeoutMs?: number;
15
+ idleFrames?: number;
16
+ }): Promise<boolean>;
17
+ /** Render a snapshot route as the canonical route string used in receipts. */
18
+ declare function formatRoute(route: WoodAutomationSnapshot['currentRoute']): string | undefined;
19
+
20
+ export { WOOD_AUTOMATION_GLOBAL_KEY, formatRoute, readAutomationSnapshot, waitForRendererIdle };
@@ -0,0 +1,20 @@
1
+ import { Page } from 'playwright';
2
+ import { WoodAutomationSnapshot } from '../navigation/automation_introspection.js';
3
+
4
+ /**
5
+ * Node-side reader for the renderer introspection surface (AXE-WP-02).
6
+ * Counterpart of src/navigation/automation_introspection.ts.
7
+ */
8
+
9
+ declare const WOOD_AUTOMATION_GLOBAL_KEY = "__NOEGO_WOOD_AUTOMATION__";
10
+ /** Read the renderer automation snapshot; null when the surface is absent (production build or pre-boot). */
11
+ declare function readAutomationSnapshot(page: Page): Promise<WoodAutomationSnapshot | null>;
12
+ /** Ask the renderer to wait for app idle; false when unsupported or timed out. */
13
+ declare function waitForRendererIdle(page: Page, options?: {
14
+ timeoutMs?: number;
15
+ idleFrames?: number;
16
+ }): Promise<boolean>;
17
+ /** Render a snapshot route as the canonical route string used in receipts. */
18
+ declare function formatRoute(route: WoodAutomationSnapshot['currentRoute']): string | undefined;
19
+
20
+ export { WOOD_AUTOMATION_GLOBAL_KEY, formatRoute, readAutomationSnapshot, waitForRendererIdle };
@@ -0,0 +1,48 @@
1
+ const WOOD_AUTOMATION_GLOBAL_KEY = "__NOEGO_WOOD_AUTOMATION__";
2
+ async function readAutomationSnapshot(page) {
3
+ try {
4
+ const snapshot = await page.evaluate((key) => {
5
+ const surface = globalThis[key];
6
+ if (!surface || surface.version !== 1 || typeof surface.snapshot !== "function") {
7
+ return null;
8
+ }
9
+ return surface.snapshot();
10
+ }, WOOD_AUTOMATION_GLOBAL_KEY);
11
+ return snapshot ?? null;
12
+ } catch {
13
+ return null;
14
+ }
15
+ }
16
+ async function waitForRendererIdle(page, options) {
17
+ try {
18
+ return await page.evaluate(
19
+ async ({ key, timeoutMs, idleFrames }) => {
20
+ const surface = globalThis[key];
21
+ if (!surface || surface.version !== 1 || typeof surface.waitForIdle !== "function") {
22
+ return false;
23
+ }
24
+ return await surface.waitForIdle({ timeoutMs, idleFrames });
25
+ },
26
+ { key: WOOD_AUTOMATION_GLOBAL_KEY, timeoutMs: options?.timeoutMs, idleFrames: options?.idleFrames }
27
+ );
28
+ } catch {
29
+ return false;
30
+ }
31
+ }
32
+ function formatRoute(route) {
33
+ if (!route) {
34
+ return void 0;
35
+ }
36
+ const params = Object.entries(route.params);
37
+ const query = Object.entries(route.query);
38
+ const paramsPart = params.length ? `(${params.map(([k, v]) => `${k}=${v}`).join(",")})` : "";
39
+ const queryPart = query.length ? `?${query.map(([k, v]) => `${k}=${v}`).join("&")}` : "";
40
+ return `${route.page}${paramsPart}${queryPart}`;
41
+ }
42
+ export {
43
+ WOOD_AUTOMATION_GLOBAL_KEY,
44
+ formatRoute,
45
+ readAutomationSnapshot,
46
+ waitForRendererIdle
47
+ };
48
+ //# sourceMappingURL=introspection_reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/automation/introspection_reader.ts"],"sourcesContent":["/**\n * Node-side reader for the renderer introspection surface (AXE-WP-02).\n * Counterpart of src/navigation/automation_introspection.ts.\n */\n\nimport type { Page } from 'playwright';\nimport type { WoodAutomationSnapshot } from '../navigation/automation_introspection.js';\n\nexport const WOOD_AUTOMATION_GLOBAL_KEY = '__NOEGO_WOOD_AUTOMATION__';\n\n/** Read the renderer automation snapshot; null when the surface is absent (production build or pre-boot). */\nexport async function readAutomationSnapshot(page: Page): Promise<WoodAutomationSnapshot | null> {\n try {\n const snapshot = await page.evaluate((key) => {\n const surface = (globalThis as Record<string, unknown>)[key] as\n | { version?: number; snapshot?: () => unknown }\n | undefined;\n if (!surface || surface.version !== 1 || typeof surface.snapshot !== 'function') {\n return null;\n }\n return surface.snapshot();\n }, WOOD_AUTOMATION_GLOBAL_KEY);\n return (snapshot as WoodAutomationSnapshot | null) ?? null;\n } catch {\n return null;\n }\n}\n\n/** Ask the renderer to wait for app idle; false when unsupported or timed out. */\nexport async function waitForRendererIdle(\n page: Page,\n options?: { timeoutMs?: number; idleFrames?: number },\n): Promise<boolean> {\n try {\n return await page.evaluate(\n async ({ key, timeoutMs, idleFrames }) => {\n const surface = (globalThis as Record<string, unknown>)[key] as\n | { version?: number; waitForIdle?: (o: { timeoutMs?: number; idleFrames?: number }) => Promise<boolean> }\n | undefined;\n if (!surface || surface.version !== 1 || typeof surface.waitForIdle !== 'function') {\n return false;\n }\n return await surface.waitForIdle({ timeoutMs, idleFrames });\n },\n { key: WOOD_AUTOMATION_GLOBAL_KEY, timeoutMs: options?.timeoutMs, idleFrames: options?.idleFrames },\n );\n } catch {\n return false;\n }\n}\n\n/** Render a snapshot route as the canonical route string used in receipts. */\nexport function formatRoute(route: WoodAutomationSnapshot['currentRoute']): string | undefined {\n if (!route) {\n return undefined;\n }\n const params = Object.entries(route.params);\n const query = Object.entries(route.query);\n const paramsPart = params.length ? `(${params.map(([k, v]) => `${k}=${v}`).join(',')})` : '';\n const queryPart = query.length ? `?${query.map(([k, v]) => `${k}=${v}`).join('&')}` : '';\n return `${route.page}${paramsPart}${queryPart}`;\n}\n"],"mappings":"AAQO,MAAM,6BAA6B;AAG1C,eAAsB,uBAAuB,MAAoD;AAC/F,MAAI;AACF,UAAM,WAAW,MAAM,KAAK,SAAS,CAAC,QAAQ;AAC5C,YAAM,UAAW,WAAuC,GAAG;AAG3D,UAAI,CAAC,WAAW,QAAQ,YAAY,KAAK,OAAO,QAAQ,aAAa,YAAY;AAC/E,eAAO;AAAA,MACT;AACA,aAAO,QAAQ,SAAS;AAAA,IAC1B,GAAG,0BAA0B;AAC7B,WAAQ,YAA8C;AAAA,EACxD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGA,eAAsB,oBACpB,MACA,SACkB;AAClB,MAAI;AACF,WAAO,MAAM,KAAK;AAAA,MAChB,OAAO,EAAE,KAAK,WAAW,WAAW,MAAM;AACxC,cAAM,UAAW,WAAuC,GAAG;AAG3D,YAAI,CAAC,WAAW,QAAQ,YAAY,KAAK,OAAO,QAAQ,gBAAgB,YAAY;AAClF,iBAAO;AAAA,QACT;AACA,eAAO,MAAM,QAAQ,YAAY,EAAE,WAAW,WAAW,CAAC;AAAA,MAC5D;AAAA,MACA,EAAE,KAAK,4BAA4B,WAAW,SAAS,WAAW,YAAY,SAAS,WAAW;AAAA,IACpG;AAAA,EACF,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGO,SAAS,YAAY,OAAmE;AAC7F,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AACA,QAAM,SAAS,OAAO,QAAQ,MAAM,MAAM;AAC1C,QAAM,QAAQ,OAAO,QAAQ,MAAM,KAAK;AACxC,QAAM,aAAa,OAAO,SAAS,IAAI,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,MAAM;AAC1F,QAAM,YAAY,MAAM,SAAS,IAAI,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,KAAK;AACtF,SAAO,GAAG,MAAM,IAAI,GAAG,UAAU,GAAG,SAAS;AAC/C;","names":[]}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var locator_exports = {};
20
+ __export(locator_exports, {
21
+ describeLocator: () => describeLocator,
22
+ isLowStabilityLocator: () => isLowStabilityLocator,
23
+ parseCliLocator: () => parseCliLocator,
24
+ toPlaywrightLocator: () => toPlaywrightLocator
25
+ });
26
+ module.exports = __toCommonJS(locator_exports);
27
+ var import_errors = require("./errors.cjs");
28
+ function isLowStabilityLocator(locator) {
29
+ return locator.kind === "css";
30
+ }
31
+ function describeLocator(locator) {
32
+ switch (locator.kind) {
33
+ case "test_id":
34
+ return `test_id=${locator.value}`;
35
+ case "role":
36
+ return locator.name ? `role=${locator.role} name=${locator.name}` : `role=${locator.role}`;
37
+ case "label":
38
+ return `label=${locator.value}`;
39
+ case "placeholder":
40
+ return `placeholder=${locator.value}`;
41
+ case "text":
42
+ return `text=${locator.value}`;
43
+ case "css":
44
+ return `css=${locator.value}`;
45
+ }
46
+ }
47
+ function toPlaywrightLocator(page, locator) {
48
+ switch (locator.kind) {
49
+ case "test_id":
50
+ return page.getByTestId(locator.value);
51
+ case "role":
52
+ return page.getByRole(locator.role, {
53
+ ...locator.name !== void 0 ? { name: locator.name, exact: locator.exact } : {}
54
+ });
55
+ case "label":
56
+ return page.getByLabel(locator.value, { exact: locator.exact });
57
+ case "placeholder":
58
+ return page.getByPlaceholder(locator.value, { exact: locator.exact });
59
+ case "text":
60
+ return page.getByText(locator.value, { exact: locator.exact });
61
+ case "css":
62
+ return page.locator(locator.value);
63
+ }
64
+ }
65
+ function parseCliLocator(raw) {
66
+ const trimmed = raw.trim();
67
+ if (trimmed.length === 0) {
68
+ return (0, import_errors.automationError)("LOCATOR_INVALID", "Empty locator.", {
69
+ requiredAction: "Provide a CSS selector or a kind=value locator."
70
+ });
71
+ }
72
+ const match = /^(test_id|role|label|placeholder|text|css)=(.*)$/s.exec(trimmed);
73
+ if (!match) {
74
+ return (0, import_errors.automationOk)({ kind: "css", value: trimmed });
75
+ }
76
+ const [, kind, value] = match;
77
+ if (value.length === 0) {
78
+ return (0, import_errors.automationError)("LOCATOR_INVALID", `Locator "${kind}=" has no value.`, {
79
+ requiredAction: `Provide a value after "${kind}=".`
80
+ });
81
+ }
82
+ if (kind === "role") {
83
+ const separator = value.indexOf(":");
84
+ if (separator > 0) {
85
+ return (0, import_errors.automationOk)({
86
+ kind: "role",
87
+ role: value.slice(0, separator),
88
+ name: value.slice(separator + 1)
89
+ });
90
+ }
91
+ return (0, import_errors.automationOk)({ kind: "role", role: value });
92
+ }
93
+ return (0, import_errors.automationOk)({ kind, value });
94
+ }
95
+ // Annotate the CommonJS export names for ESM import in node:
96
+ 0 && (module.exports = {
97
+ describeLocator,
98
+ isLowStabilityLocator,
99
+ parseCliLocator,
100
+ toPlaywrightLocator
101
+ });
102
+ //# sourceMappingURL=locator.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/automation/locator.ts"],"sourcesContent":["/**\n * Locator model (frozen contract — Axe.md \"Locator model\").\n *\n * Semantic locators are preferred; CSS remains available as an explicit,\n * low-stability escape hatch and is marked as such in receipts.\n */\n\nimport type { Locator, Page } from 'playwright';\nimport { automationError, automationOk, type WoodAutomationResult } from './errors.cjs';\n\nexport type WoodLocator =\n | { kind: 'test_id'; value: string }\n | { kind: 'role'; role: string; name?: string; exact?: boolean }\n | { kind: 'label'; value: string; exact?: boolean }\n | { kind: 'placeholder'; value: string; exact?: boolean }\n | { kind: 'text'; value: string; exact?: boolean }\n | { kind: 'css'; value: string };\n\n/** Locator kinds considered stable for release qualification. */\nexport function isLowStabilityLocator(locator: WoodLocator): boolean {\n return locator.kind === 'css';\n}\n\n/** Render a locator for diagnostics and receipts (values are not redacted here). */\nexport function describeLocator(locator: WoodLocator): string {\n switch (locator.kind) {\n case 'test_id':\n return `test_id=${locator.value}`;\n case 'role':\n return locator.name ? `role=${locator.role} name=${locator.name}` : `role=${locator.role}`;\n case 'label':\n return `label=${locator.value}`;\n case 'placeholder':\n return `placeholder=${locator.value}`;\n case 'text':\n return `text=${locator.value}`;\n case 'css':\n return `css=${locator.value}`;\n }\n}\n\n/**\n * Resolve a WoodLocator to a Playwright locator on a page.\n * Resolution does not assert uniqueness; actionability checks own that.\n */\nexport function toPlaywrightLocator(page: Page, locator: WoodLocator): Locator {\n switch (locator.kind) {\n case 'test_id':\n return page.getByTestId(locator.value);\n case 'role':\n // Playwright's role union is wider than our string; the runtime accepts any ARIA role string.\n return page.getByRole(locator.role as Parameters<Page['getByRole']>[0], {\n ...(locator.name !== undefined ? { name: locator.name, exact: locator.exact } : {}),\n });\n case 'label':\n return page.getByLabel(locator.value, { exact: locator.exact });\n case 'placeholder':\n return page.getByPlaceholder(locator.value, { exact: locator.exact });\n case 'text':\n return page.getByText(locator.value, { exact: locator.exact });\n case 'css':\n return page.locator(locator.value);\n }\n}\n\n/**\n * Normalize a raw CLI target argument into a WoodLocator.\n * Bare strings are CSS (current CLI behavior); `kind=value` prefixes select\n * semantic locators: `test_id=`, `role=`, `label=`, `placeholder=`, `text=`, `css=`.\n */\nexport function parseCliLocator(raw: string): WoodAutomationResult<WoodLocator> {\n const trimmed = raw.trim();\n if (trimmed.length === 0) {\n return automationError('LOCATOR_INVALID', 'Empty locator.', {\n requiredAction: 'Provide a CSS selector or a kind=value locator.',\n });\n }\n\n const match = /^(test_id|role|label|placeholder|text|css)=(.*)$/s.exec(trimmed);\n if (!match) {\n return automationOk({ kind: 'css', value: trimmed });\n }\n\n const [, kind, value] = match;\n if (value.length === 0) {\n return automationError('LOCATOR_INVALID', `Locator \"${kind}=\" has no value.`, {\n requiredAction: `Provide a value after \"${kind}=\".`,\n });\n }\n\n if (kind === 'role') {\n // role=button:Save → role + accessible name; role=button → role only.\n const separator = value.indexOf(':');\n if (separator > 0) {\n return automationOk({\n kind: 'role',\n role: value.slice(0, separator),\n name: value.slice(separator + 1),\n });\n }\n return automationOk({ kind: 'role', role: value });\n }\n\n return automationOk({ kind, value } as WoodLocator);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,oBAAyE;AAWlE,SAAS,sBAAsB,SAA+B;AACnE,SAAO,QAAQ,SAAS;AAC1B;AAGO,SAAS,gBAAgB,SAA8B;AAC5D,UAAQ,QAAQ,MAAM;AAAA,IACpB,KAAK;AACH,aAAO,WAAW,QAAQ,KAAK;AAAA,IACjC,KAAK;AACH,aAAO,QAAQ,OAAO,QAAQ,QAAQ,IAAI,SAAS,QAAQ,IAAI,KAAK,QAAQ,QAAQ,IAAI;AAAA,IAC1F,KAAK;AACH,aAAO,SAAS,QAAQ,KAAK;AAAA,IAC/B,KAAK;AACH,aAAO,eAAe,QAAQ,KAAK;AAAA,IACrC,KAAK;AACH,aAAO,QAAQ,QAAQ,KAAK;AAAA,IAC9B,KAAK;AACH,aAAO,OAAO,QAAQ,KAAK;AAAA,EAC/B;AACF;AAMO,SAAS,oBAAoB,MAAY,SAA+B;AAC7E,UAAQ,QAAQ,MAAM;AAAA,IACpB,KAAK;AACH,aAAO,KAAK,YAAY,QAAQ,KAAK;AAAA,IACvC,KAAK;AAEH,aAAO,KAAK,UAAU,QAAQ,MAA0C;AAAA,QACtE,GAAI,QAAQ,SAAS,SAAY,EAAE,MAAM,QAAQ,MAAM,OAAO,QAAQ,MAAM,IAAI,CAAC;AAAA,MACnF,CAAC;AAAA,IACH,KAAK;AACH,aAAO,KAAK,WAAW,QAAQ,OAAO,EAAE,OAAO,QAAQ,MAAM,CAAC;AAAA,IAChE,KAAK;AACH,aAAO,KAAK,iBAAiB,QAAQ,OAAO,EAAE,OAAO,QAAQ,MAAM,CAAC;AAAA,IACtE,KAAK;AACH,aAAO,KAAK,UAAU,QAAQ,OAAO,EAAE,OAAO,QAAQ,MAAM,CAAC;AAAA,IAC/D,KAAK;AACH,aAAO,KAAK,QAAQ,QAAQ,KAAK;AAAA,EACrC;AACF;AAOO,SAAS,gBAAgB,KAAgD;AAC9E,QAAM,UAAU,IAAI,KAAK;AACzB,MAAI,QAAQ,WAAW,GAAG;AACxB,eAAO,+BAAgB,mBAAmB,kBAAkB;AAAA,MAC1D,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AAEA,QAAM,QAAQ,oDAAoD,KAAK,OAAO;AAC9E,MAAI,CAAC,OAAO;AACV,eAAO,4BAAa,EAAE,MAAM,OAAO,OAAO,QAAQ,CAAC;AAAA,EACrD;AAEA,QAAM,CAAC,EAAE,MAAM,KAAK,IAAI;AACxB,MAAI,MAAM,WAAW,GAAG;AACtB,eAAO,+BAAgB,mBAAmB,YAAY,IAAI,oBAAoB;AAAA,MAC5E,gBAAgB,0BAA0B,IAAI;AAAA,IAChD,CAAC;AAAA,EACH;AAEA,MAAI,SAAS,QAAQ;AAEnB,UAAM,YAAY,MAAM,QAAQ,GAAG;AACnC,QAAI,YAAY,GAAG;AACjB,iBAAO,4BAAa;AAAA,QAClB,MAAM;AAAA,QACN,MAAM,MAAM,MAAM,GAAG,SAAS;AAAA,QAC9B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACjC,CAAC;AAAA,IACH;AACA,eAAO,4BAAa,EAAE,MAAM,QAAQ,MAAM,MAAM,CAAC;AAAA,EACnD;AAEA,aAAO,4BAAa,EAAE,MAAM,MAAM,CAAgB;AACpD;","names":[]}
@@ -0,0 +1,51 @@
1
+ import { Page, Locator } from 'playwright';
2
+ import { WoodAutomationResult } from './errors.cjs';
3
+
4
+ /**
5
+ * Locator model (frozen contract — Axe.md "Locator model").
6
+ *
7
+ * Semantic locators are preferred; CSS remains available as an explicit,
8
+ * low-stability escape hatch and is marked as such in receipts.
9
+ */
10
+
11
+ type WoodLocator = {
12
+ kind: 'test_id';
13
+ value: string;
14
+ } | {
15
+ kind: 'role';
16
+ role: string;
17
+ name?: string;
18
+ exact?: boolean;
19
+ } | {
20
+ kind: 'label';
21
+ value: string;
22
+ exact?: boolean;
23
+ } | {
24
+ kind: 'placeholder';
25
+ value: string;
26
+ exact?: boolean;
27
+ } | {
28
+ kind: 'text';
29
+ value: string;
30
+ exact?: boolean;
31
+ } | {
32
+ kind: 'css';
33
+ value: string;
34
+ };
35
+ /** Locator kinds considered stable for release qualification. */
36
+ declare function isLowStabilityLocator(locator: WoodLocator): boolean;
37
+ /** Render a locator for diagnostics and receipts (values are not redacted here). */
38
+ declare function describeLocator(locator: WoodLocator): string;
39
+ /**
40
+ * Resolve a WoodLocator to a Playwright locator on a page.
41
+ * Resolution does not assert uniqueness; actionability checks own that.
42
+ */
43
+ declare function toPlaywrightLocator(page: Page, locator: WoodLocator): Locator;
44
+ /**
45
+ * Normalize a raw CLI target argument into a WoodLocator.
46
+ * Bare strings are CSS (current CLI behavior); `kind=value` prefixes select
47
+ * semantic locators: `test_id=`, `role=`, `label=`, `placeholder=`, `text=`, `css=`.
48
+ */
49
+ declare function parseCliLocator(raw: string): WoodAutomationResult<WoodLocator>;
50
+
51
+ export { type WoodLocator, describeLocator, isLowStabilityLocator, parseCliLocator, toPlaywrightLocator };
@@ -0,0 +1,51 @@
1
+ import { Page, Locator } from 'playwright';
2
+ import { WoodAutomationResult } from './errors.js';
3
+
4
+ /**
5
+ * Locator model (frozen contract — Axe.md "Locator model").
6
+ *
7
+ * Semantic locators are preferred; CSS remains available as an explicit,
8
+ * low-stability escape hatch and is marked as such in receipts.
9
+ */
10
+
11
+ type WoodLocator = {
12
+ kind: 'test_id';
13
+ value: string;
14
+ } | {
15
+ kind: 'role';
16
+ role: string;
17
+ name?: string;
18
+ exact?: boolean;
19
+ } | {
20
+ kind: 'label';
21
+ value: string;
22
+ exact?: boolean;
23
+ } | {
24
+ kind: 'placeholder';
25
+ value: string;
26
+ exact?: boolean;
27
+ } | {
28
+ kind: 'text';
29
+ value: string;
30
+ exact?: boolean;
31
+ } | {
32
+ kind: 'css';
33
+ value: string;
34
+ };
35
+ /** Locator kinds considered stable for release qualification. */
36
+ declare function isLowStabilityLocator(locator: WoodLocator): boolean;
37
+ /** Render a locator for diagnostics and receipts (values are not redacted here). */
38
+ declare function describeLocator(locator: WoodLocator): string;
39
+ /**
40
+ * Resolve a WoodLocator to a Playwright locator on a page.
41
+ * Resolution does not assert uniqueness; actionability checks own that.
42
+ */
43
+ declare function toPlaywrightLocator(page: Page, locator: WoodLocator): Locator;
44
+ /**
45
+ * Normalize a raw CLI target argument into a WoodLocator.
46
+ * Bare strings are CSS (current CLI behavior); `kind=value` prefixes select
47
+ * semantic locators: `test_id=`, `role=`, `label=`, `placeholder=`, `text=`, `css=`.
48
+ */
49
+ declare function parseCliLocator(raw: string): WoodAutomationResult<WoodLocator>;
50
+
51
+ export { type WoodLocator, describeLocator, isLowStabilityLocator, parseCliLocator, toPlaywrightLocator };
@@ -0,0 +1,75 @@
1
+ import { automationError, automationOk } from "./errors.js";
2
+ function isLowStabilityLocator(locator) {
3
+ return locator.kind === "css";
4
+ }
5
+ function describeLocator(locator) {
6
+ switch (locator.kind) {
7
+ case "test_id":
8
+ return `test_id=${locator.value}`;
9
+ case "role":
10
+ return locator.name ? `role=${locator.role} name=${locator.name}` : `role=${locator.role}`;
11
+ case "label":
12
+ return `label=${locator.value}`;
13
+ case "placeholder":
14
+ return `placeholder=${locator.value}`;
15
+ case "text":
16
+ return `text=${locator.value}`;
17
+ case "css":
18
+ return `css=${locator.value}`;
19
+ }
20
+ }
21
+ function toPlaywrightLocator(page, locator) {
22
+ switch (locator.kind) {
23
+ case "test_id":
24
+ return page.getByTestId(locator.value);
25
+ case "role":
26
+ return page.getByRole(locator.role, {
27
+ ...locator.name !== void 0 ? { name: locator.name, exact: locator.exact } : {}
28
+ });
29
+ case "label":
30
+ return page.getByLabel(locator.value, { exact: locator.exact });
31
+ case "placeholder":
32
+ return page.getByPlaceholder(locator.value, { exact: locator.exact });
33
+ case "text":
34
+ return page.getByText(locator.value, { exact: locator.exact });
35
+ case "css":
36
+ return page.locator(locator.value);
37
+ }
38
+ }
39
+ function parseCliLocator(raw) {
40
+ const trimmed = raw.trim();
41
+ if (trimmed.length === 0) {
42
+ return automationError("LOCATOR_INVALID", "Empty locator.", {
43
+ requiredAction: "Provide a CSS selector or a kind=value locator."
44
+ });
45
+ }
46
+ const match = /^(test_id|role|label|placeholder|text|css)=(.*)$/s.exec(trimmed);
47
+ if (!match) {
48
+ return automationOk({ kind: "css", value: trimmed });
49
+ }
50
+ const [, kind, value] = match;
51
+ if (value.length === 0) {
52
+ return automationError("LOCATOR_INVALID", `Locator "${kind}=" has no value.`, {
53
+ requiredAction: `Provide a value after "${kind}=".`
54
+ });
55
+ }
56
+ if (kind === "role") {
57
+ const separator = value.indexOf(":");
58
+ if (separator > 0) {
59
+ return automationOk({
60
+ kind: "role",
61
+ role: value.slice(0, separator),
62
+ name: value.slice(separator + 1)
63
+ });
64
+ }
65
+ return automationOk({ kind: "role", role: value });
66
+ }
67
+ return automationOk({ kind, value });
68
+ }
69
+ export {
70
+ describeLocator,
71
+ isLowStabilityLocator,
72
+ parseCliLocator,
73
+ toPlaywrightLocator
74
+ };
75
+ //# sourceMappingURL=locator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/automation/locator.ts"],"sourcesContent":["/**\n * Locator model (frozen contract — Axe.md \"Locator model\").\n *\n * Semantic locators are preferred; CSS remains available as an explicit,\n * low-stability escape hatch and is marked as such in receipts.\n */\n\nimport type { Locator, Page } from 'playwright';\nimport { automationError, automationOk, type WoodAutomationResult } from './errors.js';\n\nexport type WoodLocator =\n | { kind: 'test_id'; value: string }\n | { kind: 'role'; role: string; name?: string; exact?: boolean }\n | { kind: 'label'; value: string; exact?: boolean }\n | { kind: 'placeholder'; value: string; exact?: boolean }\n | { kind: 'text'; value: string; exact?: boolean }\n | { kind: 'css'; value: string };\n\n/** Locator kinds considered stable for release qualification. */\nexport function isLowStabilityLocator(locator: WoodLocator): boolean {\n return locator.kind === 'css';\n}\n\n/** Render a locator for diagnostics and receipts (values are not redacted here). */\nexport function describeLocator(locator: WoodLocator): string {\n switch (locator.kind) {\n case 'test_id':\n return `test_id=${locator.value}`;\n case 'role':\n return locator.name ? `role=${locator.role} name=${locator.name}` : `role=${locator.role}`;\n case 'label':\n return `label=${locator.value}`;\n case 'placeholder':\n return `placeholder=${locator.value}`;\n case 'text':\n return `text=${locator.value}`;\n case 'css':\n return `css=${locator.value}`;\n }\n}\n\n/**\n * Resolve a WoodLocator to a Playwright locator on a page.\n * Resolution does not assert uniqueness; actionability checks own that.\n */\nexport function toPlaywrightLocator(page: Page, locator: WoodLocator): Locator {\n switch (locator.kind) {\n case 'test_id':\n return page.getByTestId(locator.value);\n case 'role':\n // Playwright's role union is wider than our string; the runtime accepts any ARIA role string.\n return page.getByRole(locator.role as Parameters<Page['getByRole']>[0], {\n ...(locator.name !== undefined ? { name: locator.name, exact: locator.exact } : {}),\n });\n case 'label':\n return page.getByLabel(locator.value, { exact: locator.exact });\n case 'placeholder':\n return page.getByPlaceholder(locator.value, { exact: locator.exact });\n case 'text':\n return page.getByText(locator.value, { exact: locator.exact });\n case 'css':\n return page.locator(locator.value);\n }\n}\n\n/**\n * Normalize a raw CLI target argument into a WoodLocator.\n * Bare strings are CSS (current CLI behavior); `kind=value` prefixes select\n * semantic locators: `test_id=`, `role=`, `label=`, `placeholder=`, `text=`, `css=`.\n */\nexport function parseCliLocator(raw: string): WoodAutomationResult<WoodLocator> {\n const trimmed = raw.trim();\n if (trimmed.length === 0) {\n return automationError('LOCATOR_INVALID', 'Empty locator.', {\n requiredAction: 'Provide a CSS selector or a kind=value locator.',\n });\n }\n\n const match = /^(test_id|role|label|placeholder|text|css)=(.*)$/s.exec(trimmed);\n if (!match) {\n return automationOk({ kind: 'css', value: trimmed });\n }\n\n const [, kind, value] = match;\n if (value.length === 0) {\n return automationError('LOCATOR_INVALID', `Locator \"${kind}=\" has no value.`, {\n requiredAction: `Provide a value after \"${kind}=\".`,\n });\n }\n\n if (kind === 'role') {\n // role=button:Save → role + accessible name; role=button → role only.\n const separator = value.indexOf(':');\n if (separator > 0) {\n return automationOk({\n kind: 'role',\n role: value.slice(0, separator),\n name: value.slice(separator + 1),\n });\n }\n return automationOk({ kind: 'role', role: value });\n }\n\n return automationOk({ kind, value } as WoodLocator);\n}\n"],"mappings":"AAQA,SAAS,iBAAiB,oBAA+C;AAWlE,SAAS,sBAAsB,SAA+B;AACnE,SAAO,QAAQ,SAAS;AAC1B;AAGO,SAAS,gBAAgB,SAA8B;AAC5D,UAAQ,QAAQ,MAAM;AAAA,IACpB,KAAK;AACH,aAAO,WAAW,QAAQ,KAAK;AAAA,IACjC,KAAK;AACH,aAAO,QAAQ,OAAO,QAAQ,QAAQ,IAAI,SAAS,QAAQ,IAAI,KAAK,QAAQ,QAAQ,IAAI;AAAA,IAC1F,KAAK;AACH,aAAO,SAAS,QAAQ,KAAK;AAAA,IAC/B,KAAK;AACH,aAAO,eAAe,QAAQ,KAAK;AAAA,IACrC,KAAK;AACH,aAAO,QAAQ,QAAQ,KAAK;AAAA,IAC9B,KAAK;AACH,aAAO,OAAO,QAAQ,KAAK;AAAA,EAC/B;AACF;AAMO,SAAS,oBAAoB,MAAY,SAA+B;AAC7E,UAAQ,QAAQ,MAAM;AAAA,IACpB,KAAK;AACH,aAAO,KAAK,YAAY,QAAQ,KAAK;AAAA,IACvC,KAAK;AAEH,aAAO,KAAK,UAAU,QAAQ,MAA0C;AAAA,QACtE,GAAI,QAAQ,SAAS,SAAY,EAAE,MAAM,QAAQ,MAAM,OAAO,QAAQ,MAAM,IAAI,CAAC;AAAA,MACnF,CAAC;AAAA,IACH,KAAK;AACH,aAAO,KAAK,WAAW,QAAQ,OAAO,EAAE,OAAO,QAAQ,MAAM,CAAC;AAAA,IAChE,KAAK;AACH,aAAO,KAAK,iBAAiB,QAAQ,OAAO,EAAE,OAAO,QAAQ,MAAM,CAAC;AAAA,IACtE,KAAK;AACH,aAAO,KAAK,UAAU,QAAQ,OAAO,EAAE,OAAO,QAAQ,MAAM,CAAC;AAAA,IAC/D,KAAK;AACH,aAAO,KAAK,QAAQ,QAAQ,KAAK;AAAA,EACrC;AACF;AAOO,SAAS,gBAAgB,KAAgD;AAC9E,QAAM,UAAU,IAAI,KAAK;AACzB,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAO,gBAAgB,mBAAmB,kBAAkB;AAAA,MAC1D,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AAEA,QAAM,QAAQ,oDAAoD,KAAK,OAAO;AAC9E,MAAI,CAAC,OAAO;AACV,WAAO,aAAa,EAAE,MAAM,OAAO,OAAO,QAAQ,CAAC;AAAA,EACrD;AAEA,QAAM,CAAC,EAAE,MAAM,KAAK,IAAI;AACxB,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO,gBAAgB,mBAAmB,YAAY,IAAI,oBAAoB;AAAA,MAC5E,gBAAgB,0BAA0B,IAAI;AAAA,IAChD,CAAC;AAAA,EACH;AAEA,MAAI,SAAS,QAAQ;AAEnB,UAAM,YAAY,MAAM,QAAQ,GAAG;AACnC,QAAI,YAAY,GAAG;AACjB,aAAO,aAAa;AAAA,QAClB,MAAM;AAAA,QACN,MAAM,MAAM,MAAM,GAAG,SAAS;AAAA,QAC9B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACjC,CAAC;AAAA,IACH;AACA,WAAO,aAAa,EAAE,MAAM,QAAQ,MAAM,MAAM,CAAC;AAAA,EACnD;AAEA,SAAO,aAAa,EAAE,MAAM,MAAM,CAAgB;AACpD;","names":[]}
@@ -3,10 +3,6 @@ var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
6
  var __copyProps = (to, from, except, desc) => {
11
7
  if (from && typeof from === "object" || typeof from === "function") {
12
8
  for (let key of __getOwnPropNames(from))
@@ -16,12 +12,6 @@ var __copyProps = (to, from, except, desc) => {
16
12
  return to;
17
13
  };
18
14
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var page_load_exports = {};
20
- __export(page_load_exports, {
21
- default: () => load
22
- });
23
- module.exports = __toCommonJS(page_load_exports);
24
- async function load(request) {
25
- return { testData: "hello", url: request.url };
26
- }
27
- //# sourceMappingURL=page.load.cjs.map
15
+ var observation_exports = {};
16
+ module.exports = __toCommonJS(observation_exports);
17
+ //# sourceMappingURL=observation.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/automation/observation.ts"],"sourcesContent":["/**\n * Bounded observation model (frozen — Axe.md \"Observation and evidence\").\n * Capture lands in AXE-WP-02; the type contract is frozen now so the CLI,\n * harness, and scenario runner converge on one shape.\n */\n\nimport type { WoodLiveTarget } from './target_identity.cjs';\nimport type { WoodScrollMetrics } from './scrolling.cjs';\n\nexport interface WoodConsoleEntry {\n type: 'console_error' | 'page_error' | 'request_failed';\n message: string;\n occurredAt: string;\n}\n\nexport interface WoodObservation {\n target: WoodLiveTarget;\n route: {\n page: string;\n params: Record<string, string>;\n query: Record<string, string>;\n } | null;\n title: string;\n url: string;\n viewport: { width: number; height: number; deviceScaleFactor: number } | null;\n focusedElement: string | null;\n documentGeneration: number;\n scrollRoots: Array<{ name: string; metrics: WoodScrollMetrics }>;\n recentErrors: WoodConsoleEntry[];\n traceCursor?: string;\n screenshotPath?: string;\n capturedAt: string;\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}