@noego/wood 0.4.10 → 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 (382) hide show
  1. package/README.md +118 -42
  2. package/dist/bridge/backend_bridge.cjs.map +1 -1
  3. package/dist/bridge/backend_bridge.js.map +1 -1
  4. package/dist/client/index.cjs +78 -21
  5. package/dist/client/index.cjs.map +1 -1
  6. package/dist/client/index.d.cts +18 -3
  7. package/dist/client/index.d.ts +18 -3
  8. package/dist/client/index.js +80 -22
  9. package/dist/client/index.js.map +1 -1
  10. package/dist/client/renderer_log_transport.cjs +151 -0
  11. package/dist/client/renderer_log_transport.cjs.map +1 -0
  12. package/dist/client/renderer_log_transport.d.cts +54 -0
  13. package/dist/client/renderer_log_transport.d.ts +54 -0
  14. package/dist/client/renderer_log_transport.js +123 -0
  15. package/dist/client/renderer_log_transport.js.map +1 -0
  16. package/dist/codegen/controller_registration_generator.cjs +13 -2
  17. package/dist/codegen/controller_registration_generator.cjs.map +1 -1
  18. package/dist/codegen/controller_registration_generator.d.cts +12 -1
  19. package/dist/codegen/controller_registration_generator.d.ts +12 -1
  20. package/dist/codegen/controller_registration_generator.js +10 -1
  21. package/dist/codegen/controller_registration_generator.js.map +1 -1
  22. package/dist/codegen/index.d.cts +1 -0
  23. package/dist/codegen/index.d.ts +1 -0
  24. package/dist/codegen/preload_generator.cjs +13 -6
  25. package/dist/codegen/preload_generator.cjs.map +1 -1
  26. package/dist/codegen/preload_generator.d.cts +11 -2
  27. package/dist/codegen/preload_generator.d.ts +11 -2
  28. package/dist/codegen/preload_generator.js +13 -6
  29. package/dist/codegen/preload_generator.js.map +1 -1
  30. package/dist/codegen/renderer_app_generator.cjs +78 -42
  31. package/dist/codegen/renderer_app_generator.cjs.map +1 -1
  32. package/dist/codegen/renderer_app_generator.js +78 -42
  33. package/dist/codegen/renderer_app_generator.js.map +1 -1
  34. package/dist/codegen/type_generator.cjs +1 -0
  35. package/dist/codegen/type_generator.cjs.map +1 -1
  36. package/dist/codegen/type_generator.js +1 -0
  37. package/dist/codegen/type_generator.js.map +1 -1
  38. package/dist/config/config_parser.cjs +95 -4
  39. package/dist/config/config_parser.cjs.map +1 -1
  40. package/dist/config/config_parser.d.cts +10 -2
  41. package/dist/config/config_parser.d.ts +10 -2
  42. package/dist/config/config_parser.js +92 -3
  43. package/dist/config/config_parser.js.map +1 -1
  44. package/dist/config/index.cjs +6 -2
  45. package/dist/config/index.cjs.map +1 -1
  46. package/dist/config/index.d.cts +2 -2
  47. package/dist/config/index.d.ts +2 -2
  48. package/dist/config/index.js +8 -2
  49. package/dist/config/index.js.map +1 -1
  50. package/dist/controller/controller_resolver.cjs +51 -3
  51. package/dist/controller/controller_resolver.cjs.map +1 -1
  52. package/dist/controller/controller_resolver.d.cts +27 -4
  53. package/dist/controller/controller_resolver.d.ts +27 -4
  54. package/dist/controller/controller_resolver.js +48 -2
  55. package/dist/controller/controller_resolver.js.map +1 -1
  56. package/dist/controller/index.cjs +6 -2
  57. package/dist/controller/index.cjs.map +1 -1
  58. package/dist/controller/index.d.cts +1 -1
  59. package/dist/controller/index.d.ts +1 -1
  60. package/dist/controller/index.js +4 -2
  61. package/dist/controller/index.js.map +1 -1
  62. package/dist/dev/wood_dev_server.cjs +4 -1
  63. package/dist/dev/wood_dev_server.cjs.map +1 -1
  64. package/dist/dev/wood_dev_server.js +5 -2
  65. package/dist/dev/wood_dev_server.js.map +1 -1
  66. package/dist/dev/yaml_watcher.cjs +1 -1
  67. package/dist/dev/yaml_watcher.cjs.map +1 -1
  68. package/dist/dev/yaml_watcher.d.cts +4 -0
  69. package/dist/dev/yaml_watcher.d.ts +4 -0
  70. package/dist/dev/yaml_watcher.js +1 -1
  71. package/dist/dev/yaml_watcher.js.map +1 -1
  72. package/dist/frontend/frontend_lifecycle.cjs +74 -0
  73. package/dist/frontend/frontend_lifecycle.cjs.map +1 -0
  74. package/dist/frontend/frontend_lifecycle.d.cts +50 -0
  75. package/dist/frontend/frontend_lifecycle.d.ts +50 -0
  76. package/dist/frontend/frontend_lifecycle.js +50 -0
  77. package/dist/frontend/frontend_lifecycle.js.map +1 -0
  78. package/dist/frontend/frontend_page.cjs +122 -0
  79. package/dist/frontend/frontend_page.cjs.map +1 -0
  80. package/dist/frontend/frontend_page.d.cts +62 -0
  81. package/dist/frontend/frontend_page.d.ts +62 -0
  82. package/dist/frontend/frontend_page.js +98 -0
  83. package/dist/frontend/frontend_page.js.map +1 -0
  84. package/dist/frontend/frontend_surface.cjs +249 -0
  85. package/dist/frontend/frontend_surface.cjs.map +1 -0
  86. package/dist/frontend/frontend_surface.d.cts +64 -0
  87. package/dist/frontend/frontend_surface.d.ts +64 -0
  88. package/dist/frontend/frontend_surface.js +224 -0
  89. package/dist/frontend/frontend_surface.js.map +1 -0
  90. package/dist/frontend/index.cjs +52 -0
  91. package/dist/frontend/index.cjs.map +1 -0
  92. package/dist/frontend/index.d.cts +10 -0
  93. package/dist/frontend/index.d.ts +10 -0
  94. package/dist/frontend/index.js +19 -0
  95. package/dist/frontend/index.js.map +1 -0
  96. package/dist/frontend/page_catalog.cjs +135 -0
  97. package/dist/frontend/page_catalog.cjs.map +1 -0
  98. package/dist/frontend/page_catalog.d.cts +56 -0
  99. package/dist/frontend/page_catalog.d.ts +56 -0
  100. package/dist/frontend/page_catalog.js +108 -0
  101. package/dist/frontend/page_catalog.js.map +1 -0
  102. package/dist/frontend/tracked_transport.cjs +55 -0
  103. package/dist/frontend/tracked_transport.cjs.map +1 -0
  104. package/dist/frontend/tracked_transport.d.cts +36 -0
  105. package/dist/frontend/tracked_transport.d.ts +36 -0
  106. package/dist/frontend/tracked_transport.js +31 -0
  107. package/dist/frontend/tracked_transport.js.map +1 -0
  108. package/dist/frontend/work_registry.cjs +153 -0
  109. package/dist/frontend/work_registry.cjs.map +1 -0
  110. package/dist/frontend/work_registry.d.cts +70 -0
  111. package/dist/frontend/work_registry.d.ts +70 -0
  112. package/dist/frontend/work_registry.js +128 -0
  113. package/dist/frontend/work_registry.js.map +1 -0
  114. package/dist/index.cjs +24 -0
  115. package/dist/index.cjs.map +1 -1
  116. package/dist/index.d.cts +10 -7
  117. package/dist/index.d.ts +10 -7
  118. package/dist/index.js +27 -4
  119. package/dist/index.js.map +1 -1
  120. package/dist/main/index.cjs +10 -0
  121. package/dist/main/index.cjs.map +1 -1
  122. package/dist/main/index.d.cts +14 -2
  123. package/dist/main/index.d.ts +14 -2
  124. package/dist/main/index.js +16 -0
  125. package/dist/main/index.js.map +1 -1
  126. package/dist/middleware/middleware_resolver.cjs +22 -1
  127. package/dist/middleware/middleware_resolver.cjs.map +1 -1
  128. package/dist/middleware/middleware_resolver.d.cts +13 -1
  129. package/dist/middleware/middleware_resolver.d.ts +13 -1
  130. package/dist/middleware/middleware_resolver.js +22 -1
  131. package/dist/middleware/middleware_resolver.js.map +1 -1
  132. package/dist/navigation/index.cjs +3 -0
  133. package/dist/navigation/index.cjs.map +1 -1
  134. package/dist/navigation/index.d.cts +25 -1
  135. package/dist/navigation/index.d.ts +25 -1
  136. package/dist/navigation/index.js +2 -0
  137. package/dist/navigation/index.js.map +1 -1
  138. package/dist/{middleware/__fixtures__/middleware/auth.cjs → navigation/layout_preservation.cjs} +18 -20
  139. package/dist/navigation/layout_preservation.cjs.map +1 -0
  140. package/dist/navigation/layout_preservation.d.cts +2 -0
  141. package/dist/navigation/layout_preservation.d.ts +2 -0
  142. package/dist/navigation/layout_preservation.js +18 -0
  143. package/dist/navigation/layout_preservation.js.map +1 -0
  144. package/dist/parser/index.cjs +2 -0
  145. package/dist/parser/index.cjs.map +1 -1
  146. package/dist/parser/index.d.cts +1 -1
  147. package/dist/parser/index.d.ts +1 -1
  148. package/dist/parser/index.js +2 -1
  149. package/dist/parser/index.js.map +1 -1
  150. package/dist/parser/operations_parser.cjs +6 -0
  151. package/dist/parser/operations_parser.cjs.map +1 -1
  152. package/dist/parser/operations_parser.d.cts +9 -2
  153. package/dist/parser/operations_parser.d.ts +9 -2
  154. package/dist/parser/operations_parser.js +5 -0
  155. package/dist/parser/operations_parser.js.map +1 -1
  156. package/dist/parser/views_parser.cjs.map +1 -1
  157. package/dist/parser/views_parser.js.map +1 -1
  158. package/dist/router/index.d.cts +1 -0
  159. package/dist/router/index.d.ts +1 -0
  160. package/dist/router/wood_router.cjs +35 -3
  161. package/dist/router/wood_router.cjs.map +1 -1
  162. package/dist/router/wood_router.d.cts +15 -0
  163. package/dist/router/wood_router.d.ts +15 -0
  164. package/dist/router/wood_router.js +36 -4
  165. package/dist/router/wood_router.js.map +1 -1
  166. package/dist/runtime/get_container.cjs +9 -34
  167. package/dist/runtime/get_container.cjs.map +1 -1
  168. package/dist/runtime/get_container.d.cts +24 -4
  169. package/dist/runtime/get_container.d.ts +24 -4
  170. package/dist/runtime/get_container.js +8 -23
  171. package/dist/runtime/get_container.js.map +1 -1
  172. package/dist/runtime/index.cjs +9 -0
  173. package/dist/runtime/index.cjs.map +1 -1
  174. package/dist/runtime/index.d.cts +5 -2
  175. package/dist/runtime/index.d.ts +5 -2
  176. package/dist/runtime/index.js +10 -1
  177. package/dist/runtime/index.js.map +1 -1
  178. package/dist/runtime/renderer_config_extension.cjs +50 -0
  179. package/dist/runtime/renderer_config_extension.cjs.map +1 -0
  180. package/dist/runtime/renderer_config_extension.d.cts +19 -0
  181. package/dist/runtime/renderer_config_extension.d.ts +19 -0
  182. package/dist/runtime/renderer_config_extension.js +24 -0
  183. package/dist/runtime/renderer_config_extension.js.map +1 -0
  184. package/dist/runtime/renderer_log_batch_receiver.cjs +73 -0
  185. package/dist/runtime/renderer_log_batch_receiver.cjs.map +1 -0
  186. package/dist/runtime/renderer_log_batch_receiver.d.cts +29 -0
  187. package/dist/runtime/renderer_log_batch_receiver.d.ts +29 -0
  188. package/dist/runtime/renderer_log_batch_receiver.js +48 -0
  189. package/dist/runtime/renderer_log_batch_receiver.js.map +1 -0
  190. package/dist/runtime/renderer_trace_batch_receiver_registry.d.cts +1 -1
  191. package/dist/runtime/renderer_trace_batch_receiver_registry.d.ts +1 -1
  192. package/dist/runtime/runtime.cjs +14 -0
  193. package/dist/runtime/runtime.cjs.map +1 -1
  194. package/dist/runtime/runtime.d.cts +2 -1
  195. package/dist/runtime/runtime.d.ts +2 -1
  196. package/dist/runtime/runtime.js +14 -0
  197. package/dist/runtime/runtime.js.map +1 -1
  198. package/dist/stick/index.cjs.map +1 -1
  199. package/dist/stick/index.js.map +1 -1
  200. package/dist/testing/browser.cjs +104 -23
  201. package/dist/testing/browser.cjs.map +1 -1
  202. package/dist/testing/browser.d.cts +8 -3
  203. package/dist/testing/browser.d.ts +8 -3
  204. package/dist/testing/browser.js +102 -22
  205. package/dist/testing/browser.js.map +1 -1
  206. package/dist/testing/create_controller_harness.cjs +28 -8
  207. package/dist/testing/create_controller_harness.cjs.map +1 -1
  208. package/dist/testing/create_controller_harness.d.cts +17 -2
  209. package/dist/testing/create_controller_harness.d.ts +17 -2
  210. package/dist/testing/create_controller_harness.js +28 -8
  211. package/dist/testing/create_controller_harness.js.map +1 -1
  212. package/dist/testing/create_router_bridge.d.cts +1 -0
  213. package/dist/testing/create_router_bridge.d.ts +1 -0
  214. package/dist/testing/create_test_router.d.cts +1 -0
  215. package/dist/testing/create_test_router.d.ts +1 -0
  216. package/dist/testing/index.cjs +31 -0
  217. package/dist/testing/index.cjs.map +1 -1
  218. package/dist/testing/index.d.cts +20 -5
  219. package/dist/testing/index.d.ts +20 -5
  220. package/dist/testing/index.js +19 -1
  221. package/dist/testing/index.js.map +1 -1
  222. package/dist/{controller/__fixtures__/controllers/not_a_class.cjs → testing/test_wood.cjs} +15 -7
  223. package/dist/testing/test_wood.cjs.map +1 -0
  224. package/dist/testing/test_wood.d.cts +16 -0
  225. package/dist/testing/test_wood.d.ts +16 -0
  226. package/dist/testing/test_wood.js +12 -0
  227. package/dist/testing/test_wood.js.map +1 -0
  228. package/dist/testing/test_wood_config.cjs +272 -0
  229. package/dist/testing/test_wood_config.cjs.map +1 -0
  230. package/dist/testing/test_wood_config.d.cts +111 -0
  231. package/dist/testing/test_wood_config.d.ts +111 -0
  232. package/dist/testing/test_wood_config.js +247 -0
  233. package/dist/testing/test_wood_config.js.map +1 -0
  234. package/dist/testing/wood_config_source.cjs +146 -0
  235. package/dist/testing/wood_config_source.cjs.map +1 -0
  236. package/dist/testing/wood_config_source.d.cts +36 -0
  237. package/dist/testing/wood_config_source.d.ts +36 -0
  238. package/dist/testing/wood_config_source.js +112 -0
  239. package/dist/testing/wood_config_source.js.map +1 -0
  240. package/dist/testing/wood_env_renderer.cjs +210 -0
  241. package/dist/testing/wood_env_renderer.cjs.map +1 -0
  242. package/dist/testing/wood_env_renderer.d.cts +74 -0
  243. package/dist/testing/wood_env_renderer.d.ts +74 -0
  244. package/dist/testing/wood_env_renderer.js +188 -0
  245. package/dist/testing/wood_env_renderer.js.map +1 -0
  246. package/dist/testing/wood_test_selection.cjs +94 -0
  247. package/dist/testing/wood_test_selection.cjs.map +1 -0
  248. package/dist/testing/wood_test_selection.d.cts +39 -0
  249. package/dist/testing/wood_test_selection.d.ts +39 -0
  250. package/dist/testing/wood_test_selection.js +68 -0
  251. package/dist/testing/wood_test_selection.js.map +1 -0
  252. package/dist/trace-testing/index.d.cts +1 -2
  253. package/dist/trace-testing/index.d.ts +1 -2
  254. package/dist/trace-testing/trace_recorder.cjs +1 -1
  255. package/dist/trace-testing/trace_recorder.cjs.map +1 -1
  256. package/dist/trace-testing/trace_recorder.d.cts +1 -2
  257. package/dist/trace-testing/trace_recorder.d.ts +1 -2
  258. package/dist/trace-testing/trace_recorder.js +1 -1
  259. package/dist/trace-testing/trace_recorder.js.map +1 -1
  260. package/dist/trace-transport/index.d.cts +1 -1
  261. package/dist/trace-transport/index.d.ts +1 -1
  262. package/dist/{trace_hub-Cob54qRx.d.cts → trace_hub-Cpo_nVze.d.cts} +21 -1
  263. package/dist/{trace_hub-Cob54qRx.d.ts → trace_hub-Cpo_nVze.d.ts} +21 -1
  264. package/dist/tracing/index.cjs +9 -2
  265. package/dist/tracing/index.cjs.map +1 -1
  266. package/dist/tracing/index.d.cts +3 -2
  267. package/dist/tracing/index.d.ts +3 -2
  268. package/dist/tracing/index.js +7 -1
  269. package/dist/tracing/index.js.map +1 -1
  270. package/dist/tracing/renderer_trace_batch_host.d.cts +1 -1
  271. package/dist/tracing/renderer_trace_batch_host.d.ts +1 -1
  272. package/dist/tracing/renderer_trace_batch_transport.cjs +48 -6
  273. package/dist/tracing/renderer_trace_batch_transport.cjs.map +1 -1
  274. package/dist/tracing/renderer_trace_batch_transport.d.cts +17 -1
  275. package/dist/tracing/renderer_trace_batch_transport.d.ts +17 -1
  276. package/dist/tracing/renderer_trace_batch_transport.js +48 -6
  277. package/dist/tracing/renderer_trace_batch_transport.js.map +1 -1
  278. package/dist/tracing/trace_batch_adapter.cjs +110 -0
  279. package/dist/tracing/trace_batch_adapter.cjs.map +1 -0
  280. package/dist/tracing/trace_batch_adapter.d.cts +36 -0
  281. package/dist/tracing/trace_batch_adapter.d.ts +36 -0
  282. package/dist/tracing/trace_batch_adapter.js +86 -0
  283. package/dist/tracing/trace_batch_adapter.js.map +1 -0
  284. package/dist/tracing/trace_commit_writer.d.cts +1 -1
  285. package/dist/tracing/trace_commit_writer.d.ts +1 -1
  286. package/dist/tracing/trace_hub.cjs +87 -20
  287. package/dist/tracing/trace_hub.cjs.map +1 -1
  288. package/dist/tracing/trace_hub.d.cts +1 -1
  289. package/dist/tracing/trace_hub.d.ts +1 -1
  290. package/dist/tracing/trace_hub.js +85 -20
  291. package/dist/tracing/trace_hub.js.map +1 -1
  292. package/dist/tracing/trace_provider.cjs +21 -6
  293. package/dist/tracing/trace_provider.cjs.map +1 -1
  294. package/dist/tracing/trace_provider.d.cts +13 -4
  295. package/dist/tracing/trace_provider.d.ts +13 -4
  296. package/dist/tracing/trace_provider.js +22 -7
  297. package/dist/tracing/trace_provider.js.map +1 -1
  298. package/dist/tracing/types/wood_trace_batch.types.cjs.map +1 -1
  299. package/dist/tracing/types/wood_trace_batch.types.d.cts +15 -1
  300. package/dist/tracing/types/wood_trace_batch.types.d.ts +15 -1
  301. package/dist/tracing/types/wood_trace_sink.types.d.cts +1 -1
  302. package/dist/tracing/types/wood_trace_sink.types.d.ts +1 -1
  303. package/dist/tracing/wood_trace_batch_contract.cjs +2 -0
  304. package/dist/tracing/wood_trace_batch_contract.cjs.map +1 -1
  305. package/dist/tracing/wood_trace_batch_contract.d.cts +1 -1
  306. package/dist/tracing/wood_trace_batch_contract.d.ts +1 -1
  307. package/dist/tracing/wood_trace_batch_contract.js +2 -0
  308. package/dist/tracing/wood_trace_batch_contract.js.map +1 -1
  309. package/dist/transport/build_transport_bridge.cjs +4 -2
  310. package/dist/transport/build_transport_bridge.cjs.map +1 -1
  311. package/dist/transport/build_transport_bridge.d.cts +7 -1
  312. package/dist/transport/build_transport_bridge.d.ts +7 -1
  313. package/dist/transport/build_transport_bridge.js +2 -1
  314. package/dist/transport/build_transport_bridge.js.map +1 -1
  315. package/dist/transport/in_process_router_transport.d.cts +1 -0
  316. package/dist/transport/in_process_router_transport.d.ts +1 -0
  317. package/dist/transport/index.d.cts +1 -0
  318. package/dist/transport/index.d.ts +1 -0
  319. package/dist/types/config.cjs.map +1 -1
  320. package/dist/types/config.d.cts +47 -1
  321. package/dist/types/config.d.ts +47 -1
  322. package/dist/types/context.cjs +12 -0
  323. package/dist/types/context.cjs.map +1 -1
  324. package/dist/types/context.d.cts +27 -1
  325. package/dist/types/context.d.ts +27 -1
  326. package/dist/types/context.js +4 -0
  327. package/dist/types/context.js.map +1 -1
  328. package/dist/types/index.d.cts +2 -2
  329. package/dist/types/index.d.ts +2 -2
  330. package/dist/types/operations.cjs.map +1 -1
  331. package/dist/types/operations.d.cts +2 -0
  332. package/dist/types/operations.d.ts +2 -0
  333. package/docs/axe.md +706 -0
  334. package/package.json +13 -5
  335. package/src/components/NavigationShell.scopes.browser.test.ts +363 -0
  336. package/src/components/NavigationShell.svelte +126 -49
  337. package/dist/controller/__fixtures__/controllers/chat.cjs +0 -32
  338. package/dist/controller/__fixtures__/controllers/chat.cjs.map +0 -1
  339. package/dist/controller/__fixtures__/controllers/chat.d.cts +0 -11
  340. package/dist/controller/__fixtures__/controllers/chat.d.ts +0 -11
  341. package/dist/controller/__fixtures__/controllers/chat.js +0 -12
  342. package/dist/controller/__fixtures__/controllers/chat.js.map +0 -1
  343. package/dist/controller/__fixtures__/controllers/not_a_class.cjs.map +0 -1
  344. package/dist/controller/__fixtures__/controllers/not_a_class.d.cts +0 -3
  345. package/dist/controller/__fixtures__/controllers/not_a_class.d.ts +0 -3
  346. package/dist/controller/__fixtures__/controllers/not_a_class.js +0 -5
  347. package/dist/controller/__fixtures__/controllers/not_a_class.js.map +0 -1
  348. package/dist/controller/__fixtures__/controllers/settings.controller.cjs +0 -32
  349. package/dist/controller/__fixtures__/controllers/settings.controller.cjs.map +0 -1
  350. package/dist/controller/__fixtures__/controllers/settings.controller.d.cts +0 -12
  351. package/dist/controller/__fixtures__/controllers/settings.controller.d.ts +0 -12
  352. package/dist/controller/__fixtures__/controllers/settings.controller.js +0 -12
  353. package/dist/controller/__fixtures__/controllers/settings.controller.js.map +0 -1
  354. package/dist/controller/__fixtures__/controllers/test.cjs +0 -29
  355. package/dist/controller/__fixtures__/controllers/test.cjs.map +0 -1
  356. package/dist/controller/__fixtures__/controllers/test.d.cts +0 -7
  357. package/dist/controller/__fixtures__/controllers/test.d.ts +0 -7
  358. package/dist/controller/__fixtures__/controllers/test.js +0 -9
  359. package/dist/controller/__fixtures__/controllers/test.js.map +0 -1
  360. package/dist/loader/__fixtures__/layouts/app.load.cjs +0 -27
  361. package/dist/loader/__fixtures__/layouts/app.load.cjs.map +0 -1
  362. package/dist/loader/__fixtures__/layouts/app.load.d.cts +0 -5
  363. package/dist/loader/__fixtures__/layouts/app.load.d.ts +0 -5
  364. package/dist/loader/__fixtures__/layouts/app.load.js +0 -7
  365. package/dist/loader/__fixtures__/layouts/app.load.js.map +0 -1
  366. package/dist/loader/__fixtures__/views/test/page.load.cjs +0 -27
  367. package/dist/loader/__fixtures__/views/test/page.load.cjs.map +0 -1
  368. package/dist/loader/__fixtures__/views/test/page.load.d.cts +0 -6
  369. package/dist/loader/__fixtures__/views/test/page.load.d.ts +0 -6
  370. package/dist/loader/__fixtures__/views/test/page.load.js +0 -7
  371. package/dist/loader/__fixtures__/views/test/page.load.js.map +0 -1
  372. package/dist/middleware/__fixtures__/middleware/auth.cjs.map +0 -1
  373. package/dist/middleware/__fixtures__/middleware/auth.d.cts +0 -6
  374. package/dist/middleware/__fixtures__/middleware/auth.d.ts +0 -6
  375. package/dist/middleware/__fixtures__/middleware/auth.js +0 -19
  376. package/dist/middleware/__fixtures__/middleware/auth.js.map +0 -1
  377. package/dist/middleware/__fixtures__/middleware/sequence.cjs +0 -47
  378. package/dist/middleware/__fixtures__/middleware/sequence.cjs.map +0 -1
  379. package/dist/middleware/__fixtures__/middleware/sequence.d.cts +0 -7
  380. package/dist/middleware/__fixtures__/middleware/sequence.d.ts +0 -7
  381. package/dist/middleware/__fixtures__/middleware/sequence.js +0 -21
  382. package/dist/middleware/__fixtures__/middleware/sequence.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/runtime/get_container.ts"],"sourcesContent":["import { createRequire } from 'node:module';\nimport path from 'node:path';\nimport { getLogger } from '@noego/logger';\n\nconst logger = getLogger('wood:runtime:container');\n\nconst CONTAINER_REGISTRY_SYMBOL = Symbol.for('@noego/wood.container.registry');\n\nexport interface GetContainerOptions {\n /** Scope key for the container instance. Defaults to process.cwd(). */\n scope?: string;\n /** Called only when a new scoped container is created. */\n configure?: (container: any) => void;\n}\n\ntype ContainerRegistry = Map<string, any>;\n\nfunction registry(): ContainerRegistry {\n const globalObj = globalThis as typeof globalThis & {\n [CONTAINER_REGISTRY_SYMBOL]?: ContainerRegistry;\n };\n\n if (!globalObj[CONTAINER_REGISTRY_SYMBOL]) {\n globalObj[CONTAINER_REGISTRY_SYMBOL] = new Map<string, any>();\n logger.info('container registry created', { symbol: CONTAINER_REGISTRY_SYMBOL.toString() });\n }\n\n return globalObj[CONTAINER_REGISTRY_SYMBOL]!;\n}\n\nfunction createContainerInstance(scope: string): any {\n const projectRoot = process.cwd();\n // Prefer the consumer app's @noego/ioc package so decorators and container\n // come from the same module instance. Fallback to Wood's own dependency.\n try {\n const consumerRequire = createRequire(path.resolve(projectRoot, 'package.json'));\n const consumerIoc = consumerRequire('@noego/ioc') as {\n Container?: new () => any;\n };\n if (consumerIoc.Container) {\n logger.info('container factory resolved from consumer app', { scope, source: 'Container' });\n return new consumerIoc.Container();\n }\n } catch (err) {\n logger.warn('consumer @noego/ioc resolution failed, using Wood fallback', {\n scope,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n\n const fallbackRequire = createRequire(import.meta.url);\n const fallbackIoc = fallbackRequire('@noego/ioc') as { Container: new () => any };\n logger.info('container factory resolved from Wood fallback', { scope });\n return new fallbackIoc.Container();\n}\n\n/**\n * Return a process-global scoped container from the registry.\n *\n * - First call for a scope creates and stores a container.\n * - Later calls for the same scope return the same instance.\n */\nexport function getContainer(options: GetContainerOptions = {}): any {\n const scope = options.scope ?? process.cwd();\n const containers = registry();\n\n const existing = containers.get(scope);\n if (existing) {\n logger.info('container reused', { scope });\n return existing;\n }\n\n const created = createContainerInstance(scope);\n containers.set(scope, created);\n logger.info('container created', { scope });\n\n if (options.configure) {\n options.configure(created);\n logger.info('container configured', { scope });\n }\n\n return created;\n}\n\nexport function clearContainerRegistryForTests(): void {\n const containers = registry();\n containers.clear();\n logger.info('container registry cleared');\n}\n"],"mappings":"AAAA,SAAS,qBAAqB;AAC9B,OAAO,UAAU;AACjB,SAAS,iBAAiB;AAE1B,MAAM,SAAS,UAAU,wBAAwB;AAEjD,MAAM,4BAA4B,uBAAO,IAAI,gCAAgC;AAW7E,SAAS,WAA8B;AACrC,QAAM,YAAY;AAIlB,MAAI,CAAC,UAAU,yBAAyB,GAAG;AACzC,cAAU,yBAAyB,IAAI,oBAAI,IAAiB;AAC5D,WAAO,KAAK,8BAA8B,EAAE,QAAQ,0BAA0B,SAAS,EAAE,CAAC;AAAA,EAC5F;AAEA,SAAO,UAAU,yBAAyB;AAC5C;AAEA,SAAS,wBAAwB,OAAoB;AACnD,QAAM,cAAc,QAAQ,IAAI;AAGhC,MAAI;AACF,UAAM,kBAAkB,cAAc,KAAK,QAAQ,aAAa,cAAc,CAAC;AAC/E,UAAM,cAAc,gBAAgB,YAAY;AAGhD,QAAI,YAAY,WAAW;AACzB,aAAO,KAAK,gDAAgD,EAAE,OAAO,QAAQ,YAAY,CAAC;AAC1F,aAAO,IAAI,YAAY,UAAU;AAAA,IACnC;AAAA,EACF,SAAS,KAAK;AACZ,WAAO,KAAK,8DAA8D;AAAA,MACxE;AAAA,MACA,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,IACxD,CAAC;AAAA,EACH;AAEA,QAAM,kBAAkB,cAAc,YAAY,GAAG;AACrD,QAAM,cAAc,gBAAgB,YAAY;AAChD,SAAO,KAAK,iDAAiD,EAAE,MAAM,CAAC;AACtE,SAAO,IAAI,YAAY,UAAU;AACnC;AAQO,SAAS,aAAa,UAA+B,CAAC,GAAQ;AACnE,QAAM,QAAQ,QAAQ,SAAS,QAAQ,IAAI;AAC3C,QAAM,aAAa,SAAS;AAE5B,QAAM,WAAW,WAAW,IAAI,KAAK;AACrC,MAAI,UAAU;AACZ,WAAO,KAAK,oBAAoB,EAAE,MAAM,CAAC;AACzC,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,wBAAwB,KAAK;AAC7C,aAAW,IAAI,OAAO,OAAO;AAC7B,SAAO,KAAK,qBAAqB,EAAE,MAAM,CAAC;AAE1C,MAAI,QAAQ,WAAW;AACrB,YAAQ,UAAU,OAAO;AACzB,WAAO,KAAK,wBAAwB,EAAE,MAAM,CAAC;AAAA,EAC/C;AAEA,SAAO;AACT;AAEO,SAAS,iCAAuC;AACrD,QAAM,aAAa,SAAS;AAC5B,aAAW,MAAM;AACjB,SAAO,KAAK,4BAA4B;AAC1C;","names":[]}
1
+ {"version":3,"sources":["../../src/runtime/get_container.ts"],"sourcesContent":["import { createContainer } from '@noego/ioc';\nimport type { IContainer } from '@noego/ioc';\nimport { getLogger } from '@noego/logger';\n\nconst logger = getLogger('wood:runtime:container');\n\nconst CONTAINER_REGISTRY_SYMBOL = Symbol.for('@noego/wood.container.registry');\n\nexport interface GetContainerOptions {\n /** Scope key for the container instance. Defaults to process.cwd(). */\n scope?: string;\n /** Called only when a new scoped container is created. */\n configure?: (container: any) => void;\n}\n\nexport interface CreateWoodRootOptions {\n /** Applied to the fresh root before it is returned. */\n configure?: (container: IContainer) => void;\n}\n\n/**\n * Create an explicit Wood composition root: a fresh real `@noego/ioc`\n * container owned by the caller. This is the canonical construction path —\n * runtime boot, tests, and tools receive/create a root explicitly and pass\n * it down; operation/renderer scopes are children of it.\n *\n * Decorator metadata uses `Symbol.for(...)` keys and the global\n * reflect-metadata registry, so consumer-decorated classes resolve\n * correctly regardless of which package instance created the container —\n * the old `createRequire` consumer-package resolution is unnecessary.\n */\nexport function createWoodRoot(options: CreateWoodRootOptions = {}): IContainer {\n const root = createContainer() as IContainer;\n options.configure?.(root);\n return root;\n}\n\ntype ContainerRegistry = Map<string, any>;\n\nfunction registry(): ContainerRegistry {\n const globalObj = globalThis as typeof globalThis & {\n [CONTAINER_REGISTRY_SYMBOL]?: ContainerRegistry;\n };\n\n if (!globalObj[CONTAINER_REGISTRY_SYMBOL]) {\n globalObj[CONTAINER_REGISTRY_SYMBOL] = new Map<string, any>();\n logger.info('container registry created', { symbol: CONTAINER_REGISTRY_SYMBOL.toString() });\n }\n\n return globalObj[CONTAINER_REGISTRY_SYMBOL]!;\n}\n\n/**\n * COMPAT: return a process-global scoped container from the registry.\n *\n * The canonical architecture owns an explicit root (see createWoodRoot);\n * this global accessor remains as a runtime-boundary convenience while\n * consumers migrate. Note its known trap: `configure` runs only on first\n * creation for a scope key.\n */\nexport function getContainer(options: GetContainerOptions = {}): any {\n const scope = options.scope ?? process.cwd();\n const containers = registry();\n\n const existing = containers.get(scope);\n if (existing) {\n logger.info('container reused', { scope });\n return existing;\n }\n\n const created = createWoodRoot();\n containers.set(scope, created);\n logger.info('container created', { scope });\n\n if (options.configure) {\n options.configure(created);\n logger.info('container configured', { scope });\n }\n\n return created;\n}\n\nexport function clearContainerRegistryForTests(): void {\n const containers = registry();\n containers.clear();\n logger.info('container registry cleared');\n}\n"],"mappings":"AAAA,SAAS,uBAAuB;AAEhC,SAAS,iBAAiB;AAE1B,MAAM,SAAS,UAAU,wBAAwB;AAEjD,MAAM,4BAA4B,uBAAO,IAAI,gCAAgC;AAyBtE,SAAS,eAAe,UAAiC,CAAC,GAAe;AAC9E,QAAM,OAAO,gBAAgB;AAC7B,UAAQ,YAAY,IAAI;AACxB,SAAO;AACT;AAIA,SAAS,WAA8B;AACrC,QAAM,YAAY;AAIlB,MAAI,CAAC,UAAU,yBAAyB,GAAG;AACzC,cAAU,yBAAyB,IAAI,oBAAI,IAAiB;AAC5D,WAAO,KAAK,8BAA8B,EAAE,QAAQ,0BAA0B,SAAS,EAAE,CAAC;AAAA,EAC5F;AAEA,SAAO,UAAU,yBAAyB;AAC5C;AAUO,SAAS,aAAa,UAA+B,CAAC,GAAQ;AACnE,QAAM,QAAQ,QAAQ,SAAS,QAAQ,IAAI;AAC3C,QAAM,aAAa,SAAS;AAE5B,QAAM,WAAW,WAAW,IAAI,KAAK;AACrC,MAAI,UAAU;AACZ,WAAO,KAAK,oBAAoB,EAAE,MAAM,CAAC;AACzC,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,eAAe;AAC/B,aAAW,IAAI,OAAO,OAAO;AAC7B,SAAO,KAAK,qBAAqB,EAAE,MAAM,CAAC;AAE1C,MAAI,QAAQ,WAAW;AACrB,YAAQ,UAAU,OAAO;AACzB,WAAO,KAAK,wBAAwB,EAAE,MAAM,CAAC;AAAA,EAC/C;AAEA,SAAO;AACT;AAEO,SAAS,iCAAuC;AACrD,QAAM,aAAa,SAAS;AAC5B,aAAW,MAAM;AACjB,SAAO,KAAK,4BAA4B;AAC1C;","names":[]}
@@ -22,13 +22,17 @@ __export(runtime_exports, {
22
22
  clearContainerRegistryForTests: () => import_get_container.clearContainerRegistryForTests,
23
23
  clearRendererLogDispatcherForTests: () => import_renderer_log_dispatcher.clearRendererLogDispatcherForTests,
24
24
  clearRendererTraceBatchReceiverForTests: () => import_renderer_trace_batch_receiver_registry.clearRendererTraceBatchReceiverForTests,
25
+ createWoodRoot: () => import_get_container.createWoodRoot,
25
26
  dispatchRendererTracePayload: () => import_tracing.dispatchRendererTracePayload,
26
27
  getApplicationRoot: () => import_application_root.getApplicationRoot,
27
28
  getContainer: () => import_get_container.getContainer,
29
+ getRendererConfigExtension: () => import_renderer_config_extension.getRendererConfigExtension,
28
30
  getRendererLogDispatcher: () => import_renderer_log_dispatcher.getRendererLogDispatcher,
29
31
  getRendererTraceBatchReceiver: () => import_renderer_trace_batch_receiver_registry.getRendererTraceBatchReceiver,
32
+ resolveRendererConfigExtension: () => import_renderer_config_extension.resolveRendererConfigExtension,
30
33
  runtime: () => import_runtime.runtime,
31
34
  setApplicationRoot: () => import_application_root.setApplicationRoot,
35
+ setRendererConfigExtension: () => import_renderer_config_extension.setRendererConfigExtension,
32
36
  setRendererTraceBatchReceiver: () => import_renderer_trace_batch_receiver_registry.setRendererTraceBatchReceiver
33
37
  });
34
38
  module.exports = __toCommonJS(runtime_exports);
@@ -37,6 +41,7 @@ var import_application_root = require("./application_root.js");
37
41
  var import_runtime = require("./runtime.js");
38
42
  var import_renderer_log_dispatcher = require("./renderer_log_dispatcher.js");
39
43
  var import_renderer_trace_batch_receiver_registry = require("./renderer_trace_batch_receiver_registry.js");
44
+ var import_renderer_config_extension = require("./renderer_config_extension.js");
40
45
  var import_tracing = require("../tracing/index.js");
41
46
  // Annotate the CommonJS export names for ESM import in node:
42
47
  0 && (module.exports = {
@@ -44,13 +49,17 @@ var import_tracing = require("../tracing/index.js");
44
49
  clearContainerRegistryForTests,
45
50
  clearRendererLogDispatcherForTests,
46
51
  clearRendererTraceBatchReceiverForTests,
52
+ createWoodRoot,
47
53
  dispatchRendererTracePayload,
48
54
  getApplicationRoot,
49
55
  getContainer,
56
+ getRendererConfigExtension,
50
57
  getRendererLogDispatcher,
51
58
  getRendererTraceBatchReceiver,
59
+ resolveRendererConfigExtension,
52
60
  runtime,
53
61
  setApplicationRoot,
62
+ setRendererConfigExtension,
54
63
  setRendererTraceBatchReceiver
55
64
  });
56
65
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/runtime/index.ts"],"sourcesContent":["export { getContainer, clearContainerRegistryForTests } from './get_container.js';\nexport type { GetContainerOptions } from './get_container.js';\n\nexport {\n getApplicationRoot,\n setApplicationRoot,\n clearApplicationRootForTests,\n} from './application_root.js';\n\nexport { runtime } from './runtime.js';\nexport type { RuntimeOptions, RuntimeResult, RegisterRuntimeRouter } from './runtime.js';\n\nexport {\n getRendererLogDispatcher,\n clearRendererLogDispatcherForTests,\n} from './renderer_log_dispatcher.js';\nexport type {\n RendererLogLevel,\n RendererLogEntry,\n RendererLogCallback,\n RendererLogDispatchResult,\n} from './renderer_log_dispatcher.js';\n\nexport {\n clearRendererTraceBatchReceiverForTests,\n getRendererTraceBatchReceiver,\n setRendererTraceBatchReceiver,\n} from './renderer_trace_batch_receiver_registry.js';\n\nexport { dispatchRendererTracePayload } from '../tracing/index.js';\nexport type { TraceDispatchResult } from '../tracing/index.js';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAA6D;AAG7D,8BAIO;AAEP,qBAAwB;AAGxB,qCAGO;AAQP,oDAIO;AAEP,qBAA6C;","names":[]}
1
+ {"version":3,"sources":["../../src/runtime/index.ts"],"sourcesContent":["export { createWoodRoot, getContainer, clearContainerRegistryForTests } from './get_container.js';\nexport type { GetContainerOptions, CreateWoodRootOptions } from './get_container.js';\n\nexport {\n getApplicationRoot,\n setApplicationRoot,\n clearApplicationRootForTests,\n} from './application_root.js';\n\nexport { runtime } from './runtime.js';\nexport type { RuntimeOptions, RuntimeResult, RegisterRuntimeRouter } from './runtime.js';\n\nexport {\n getRendererLogDispatcher,\n clearRendererLogDispatcherForTests,\n} from './renderer_log_dispatcher.js';\nexport type {\n RendererLogLevel,\n RendererLogEntry,\n RendererLogCallback,\n RendererLogDispatchResult,\n} from './renderer_log_dispatcher.js';\n\nexport {\n clearRendererTraceBatchReceiverForTests,\n getRendererTraceBatchReceiver,\n setRendererTraceBatchReceiver,\n} from './renderer_trace_batch_receiver_registry.js';\n\nexport {\n getRendererConfigExtension,\n resolveRendererConfigExtension,\n setRendererConfigExtension,\n} from './renderer_config_extension.js';\nexport type { RendererConfigExtension } from './renderer_config_extension.js';\n\nexport { dispatchRendererTracePayload } from '../tracing/index.js';\nexport type { TraceDispatchResult } from '../tracing/index.js';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAA6E;AAG7E,8BAIO;AAEP,qBAAwB;AAGxB,qCAGO;AAQP,oDAIO;AAEP,uCAIO;AAGP,qBAA6C;","names":[]}
@@ -1,11 +1,14 @@
1
- export { GetContainerOptions, clearContainerRegistryForTests, getContainer } from './get_container.cjs';
1
+ export { CreateWoodRootOptions, GetContainerOptions, clearContainerRegistryForTests, createWoodRoot, getContainer } from './get_container.cjs';
2
2
  export { clearApplicationRootForTests, getApplicationRoot, setApplicationRoot } from './application_root.cjs';
3
3
  export { RegisterRuntimeRouter, RuntimeOptions, RuntimeResult, runtime } from './runtime.cjs';
4
4
  export { RendererLogCallback, RendererLogDispatchResult, RendererLogEntry, RendererLogLevel, clearRendererLogDispatcherForTests, getRendererLogDispatcher } from './renderer_log_dispatcher.cjs';
5
5
  export { clearRendererTraceBatchReceiverForTests, getRendererTraceBatchReceiver, setRendererTraceBatchReceiver } from './renderer_trace_batch_receiver_registry.cjs';
6
- export { T as TraceDispatchResult, l as dispatchRendererTracePayload } from '../trace_hub-Cob54qRx.cjs';
6
+ export { RendererConfigExtension, getRendererConfigExtension, resolveRendererConfigExtension, setRendererConfigExtension } from './renderer_config_extension.cjs';
7
+ export { T as TraceDispatchResult, o as dispatchRendererTracePayload } from '../trace_hub-Cpo_nVze.cjs';
8
+ import '@noego/ioc';
7
9
  import '../router/wood_router.cjs';
8
10
  import '../types/operations.cjs';
11
+ import '../types/context.cjs';
9
12
  import '../tracing/types/wood_trace_batch.types.cjs';
10
13
  import '@noego/telemetry/core';
11
14
  import './app_env.cjs';
@@ -1,11 +1,14 @@
1
- export { GetContainerOptions, clearContainerRegistryForTests, getContainer } from './get_container.js';
1
+ export { CreateWoodRootOptions, GetContainerOptions, clearContainerRegistryForTests, createWoodRoot, getContainer } from './get_container.js';
2
2
  export { clearApplicationRootForTests, getApplicationRoot, setApplicationRoot } from './application_root.js';
3
3
  export { RegisterRuntimeRouter, RuntimeOptions, RuntimeResult, runtime } from './runtime.js';
4
4
  export { RendererLogCallback, RendererLogDispatchResult, RendererLogEntry, RendererLogLevel, clearRendererLogDispatcherForTests, getRendererLogDispatcher } from './renderer_log_dispatcher.js';
5
5
  export { clearRendererTraceBatchReceiverForTests, getRendererTraceBatchReceiver, setRendererTraceBatchReceiver } from './renderer_trace_batch_receiver_registry.js';
6
- export { T as TraceDispatchResult, l as dispatchRendererTracePayload } from '../trace_hub-Cob54qRx.js';
6
+ export { RendererConfigExtension, getRendererConfigExtension, resolveRendererConfigExtension, setRendererConfigExtension } from './renderer_config_extension.js';
7
+ export { T as TraceDispatchResult, o as dispatchRendererTracePayload } from '../trace_hub-Cpo_nVze.js';
8
+ import '@noego/ioc';
7
9
  import '../router/wood_router.js';
8
10
  import '../types/operations.js';
11
+ import '../types/context.js';
9
12
  import '../tracing/types/wood_trace_batch.types.js';
10
13
  import '@noego/telemetry/core';
11
14
  import './app_env.js';
@@ -1,4 +1,4 @@
1
- import { getContainer, clearContainerRegistryForTests } from "./get_container.js";
1
+ import { createWoodRoot, getContainer, clearContainerRegistryForTests } from "./get_container.js";
2
2
  import {
3
3
  getApplicationRoot,
4
4
  setApplicationRoot,
@@ -14,19 +14,28 @@ import {
14
14
  getRendererTraceBatchReceiver,
15
15
  setRendererTraceBatchReceiver
16
16
  } from "./renderer_trace_batch_receiver_registry.js";
17
+ import {
18
+ getRendererConfigExtension,
19
+ resolveRendererConfigExtension,
20
+ setRendererConfigExtension
21
+ } from "./renderer_config_extension.js";
17
22
  import { dispatchRendererTracePayload } from "../tracing/index.js";
18
23
  export {
19
24
  clearApplicationRootForTests,
20
25
  clearContainerRegistryForTests,
21
26
  clearRendererLogDispatcherForTests,
22
27
  clearRendererTraceBatchReceiverForTests,
28
+ createWoodRoot,
23
29
  dispatchRendererTracePayload,
24
30
  getApplicationRoot,
25
31
  getContainer,
32
+ getRendererConfigExtension,
26
33
  getRendererLogDispatcher,
27
34
  getRendererTraceBatchReceiver,
35
+ resolveRendererConfigExtension,
28
36
  runtime,
29
37
  setApplicationRoot,
38
+ setRendererConfigExtension,
30
39
  setRendererTraceBatchReceiver
31
40
  };
32
41
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/runtime/index.ts"],"sourcesContent":["export { getContainer, clearContainerRegistryForTests } from './get_container.js';\nexport type { GetContainerOptions } from './get_container.js';\n\nexport {\n getApplicationRoot,\n setApplicationRoot,\n clearApplicationRootForTests,\n} from './application_root.js';\n\nexport { runtime } from './runtime.js';\nexport type { RuntimeOptions, RuntimeResult, RegisterRuntimeRouter } from './runtime.js';\n\nexport {\n getRendererLogDispatcher,\n clearRendererLogDispatcherForTests,\n} from './renderer_log_dispatcher.js';\nexport type {\n RendererLogLevel,\n RendererLogEntry,\n RendererLogCallback,\n RendererLogDispatchResult,\n} from './renderer_log_dispatcher.js';\n\nexport {\n clearRendererTraceBatchReceiverForTests,\n getRendererTraceBatchReceiver,\n setRendererTraceBatchReceiver,\n} from './renderer_trace_batch_receiver_registry.js';\n\nexport { dispatchRendererTracePayload } from '../tracing/index.js';\nexport type { TraceDispatchResult } from '../tracing/index.js';\n"],"mappings":"AAAA,SAAS,cAAc,sCAAsC;AAG7D;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,eAAe;AAGxB;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAQP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,oCAAoC;","names":[]}
1
+ {"version":3,"sources":["../../src/runtime/index.ts"],"sourcesContent":["export { createWoodRoot, getContainer, clearContainerRegistryForTests } from './get_container.js';\nexport type { GetContainerOptions, CreateWoodRootOptions } from './get_container.js';\n\nexport {\n getApplicationRoot,\n setApplicationRoot,\n clearApplicationRootForTests,\n} from './application_root.js';\n\nexport { runtime } from './runtime.js';\nexport type { RuntimeOptions, RuntimeResult, RegisterRuntimeRouter } from './runtime.js';\n\nexport {\n getRendererLogDispatcher,\n clearRendererLogDispatcherForTests,\n} from './renderer_log_dispatcher.js';\nexport type {\n RendererLogLevel,\n RendererLogEntry,\n RendererLogCallback,\n RendererLogDispatchResult,\n} from './renderer_log_dispatcher.js';\n\nexport {\n clearRendererTraceBatchReceiverForTests,\n getRendererTraceBatchReceiver,\n setRendererTraceBatchReceiver,\n} from './renderer_trace_batch_receiver_registry.js';\n\nexport {\n getRendererConfigExtension,\n resolveRendererConfigExtension,\n setRendererConfigExtension,\n} from './renderer_config_extension.js';\nexport type { RendererConfigExtension } from './renderer_config_extension.js';\n\nexport { dispatchRendererTracePayload } from '../tracing/index.js';\nexport type { TraceDispatchResult } from '../tracing/index.js';\n"],"mappings":"AAAA,SAAS,gBAAgB,cAAc,sCAAsC;AAG7E;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,eAAe;AAGxB;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAQP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP,SAAS,oCAAoC;","names":[]}
@@ -0,0 +1,50 @@
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 renderer_config_extension_exports = {};
20
+ __export(renderer_config_extension_exports, {
21
+ getRendererConfigExtension: () => getRendererConfigExtension,
22
+ resolveRendererConfigExtension: () => resolveRendererConfigExtension,
23
+ setRendererConfigExtension: () => setRendererConfigExtension
24
+ });
25
+ module.exports = __toCommonJS(renderer_config_extension_exports);
26
+ const EXTENSION_SYMBOL = /* @__PURE__ */ Symbol.for("@noego/wood.runtime.renderer-config-extension");
27
+ function setRendererConfigExtension(extension) {
28
+ globalThis[EXTENSION_SYMBOL] = extension;
29
+ }
30
+ function getRendererConfigExtension() {
31
+ return globalThis[EXTENSION_SYMBOL] ?? null;
32
+ }
33
+ async function resolveRendererConfigExtension() {
34
+ const extension = getRendererConfigExtension();
35
+ if (!extension) return {};
36
+ try {
37
+ const value = await extension();
38
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return {};
39
+ return { ...value };
40
+ } catch {
41
+ return {};
42
+ }
43
+ }
44
+ // Annotate the CommonJS export names for ESM import in node:
45
+ 0 && (module.exports = {
46
+ getRendererConfigExtension,
47
+ resolveRendererConfigExtension,
48
+ setRendererConfigExtension
49
+ });
50
+ //# sourceMappingURL=renderer_config_extension.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/runtime/renderer_config_extension.ts"],"sourcesContent":["const EXTENSION_SYMBOL = Symbol.for('@noego/wood.runtime.renderer-config-extension');\n\n/**\n * App-supplied provider of extra fields merged into the `__woodConfig` payload\n * the renderer fetches at boot. Lets the main process hand renderers boot-time\n * facts Wood itself knows nothing about — e.g. the loopback port and per-boot\n * token of an external log sink — without a new IPC channel or preload method.\n *\n * Reserved Wood keys (rendererTrace*, appEnv) always win over extension keys.\n */\nexport type RendererConfigExtension = () =>\n | Readonly<Record<string, unknown>>\n | Promise<Readonly<Record<string, unknown>>>;\n\ntype GlobalWithExtension = typeof globalThis & {\n [EXTENSION_SYMBOL]?: RendererConfigExtension | null;\n};\n\nexport function setRendererConfigExtension(extension: RendererConfigExtension | null): void {\n (globalThis as GlobalWithExtension)[EXTENSION_SYMBOL] = extension;\n}\n\nexport function getRendererConfigExtension(): RendererConfigExtension | null {\n return (globalThis as GlobalWithExtension)[EXTENSION_SYMBOL] ?? null;\n}\n\n/**\n * Resolves the extension fields for one `__woodConfig` request. A throwing or\n * malformed extension yields `{}` — config delivery must never fail the\n * renderer boot because of an app-side provider.\n */\nexport async function resolveRendererConfigExtension(): Promise<Record<string, unknown>> {\n const extension = getRendererConfigExtension();\n if (!extension) return {};\n try {\n const value = await extension();\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return {};\n return { ...value };\n } catch {\n return {};\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAM,mBAAmB,uBAAO,IAAI,+CAA+C;AAkB5E,SAAS,2BAA2B,WAAiD;AAC1F,EAAC,WAAmC,gBAAgB,IAAI;AAC1D;AAEO,SAAS,6BAA6D;AAC3E,SAAQ,WAAmC,gBAAgB,KAAK;AAClE;AAOA,eAAsB,iCAAmE;AACvF,QAAM,YAAY,2BAA2B;AAC7C,MAAI,CAAC,UAAW,QAAO,CAAC;AACxB,MAAI;AACF,UAAM,QAAQ,MAAM,UAAU;AAC9B,QAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,EAAG,QAAO,CAAC;AACjF,WAAO,EAAE,GAAG,MAAM;AAAA,EACpB,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;","names":[]}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * App-supplied provider of extra fields merged into the `__woodConfig` payload
3
+ * the renderer fetches at boot. Lets the main process hand renderers boot-time
4
+ * facts Wood itself knows nothing about — e.g. the loopback port and per-boot
5
+ * token of an external log sink — without a new IPC channel or preload method.
6
+ *
7
+ * Reserved Wood keys (rendererTrace*, appEnv) always win over extension keys.
8
+ */
9
+ type RendererConfigExtension = () => Readonly<Record<string, unknown>> | Promise<Readonly<Record<string, unknown>>>;
10
+ declare function setRendererConfigExtension(extension: RendererConfigExtension | null): void;
11
+ declare function getRendererConfigExtension(): RendererConfigExtension | null;
12
+ /**
13
+ * Resolves the extension fields for one `__woodConfig` request. A throwing or
14
+ * malformed extension yields `{}` — config delivery must never fail the
15
+ * renderer boot because of an app-side provider.
16
+ */
17
+ declare function resolveRendererConfigExtension(): Promise<Record<string, unknown>>;
18
+
19
+ export { type RendererConfigExtension, getRendererConfigExtension, resolveRendererConfigExtension, setRendererConfigExtension };
@@ -0,0 +1,19 @@
1
+ /**
2
+ * App-supplied provider of extra fields merged into the `__woodConfig` payload
3
+ * the renderer fetches at boot. Lets the main process hand renderers boot-time
4
+ * facts Wood itself knows nothing about — e.g. the loopback port and per-boot
5
+ * token of an external log sink — without a new IPC channel or preload method.
6
+ *
7
+ * Reserved Wood keys (rendererTrace*, appEnv) always win over extension keys.
8
+ */
9
+ type RendererConfigExtension = () => Readonly<Record<string, unknown>> | Promise<Readonly<Record<string, unknown>>>;
10
+ declare function setRendererConfigExtension(extension: RendererConfigExtension | null): void;
11
+ declare function getRendererConfigExtension(): RendererConfigExtension | null;
12
+ /**
13
+ * Resolves the extension fields for one `__woodConfig` request. A throwing or
14
+ * malformed extension yields `{}` — config delivery must never fail the
15
+ * renderer boot because of an app-side provider.
16
+ */
17
+ declare function resolveRendererConfigExtension(): Promise<Record<string, unknown>>;
18
+
19
+ export { type RendererConfigExtension, getRendererConfigExtension, resolveRendererConfigExtension, setRendererConfigExtension };
@@ -0,0 +1,24 @@
1
+ const EXTENSION_SYMBOL = /* @__PURE__ */ Symbol.for("@noego/wood.runtime.renderer-config-extension");
2
+ function setRendererConfigExtension(extension) {
3
+ globalThis[EXTENSION_SYMBOL] = extension;
4
+ }
5
+ function getRendererConfigExtension() {
6
+ return globalThis[EXTENSION_SYMBOL] ?? null;
7
+ }
8
+ async function resolveRendererConfigExtension() {
9
+ const extension = getRendererConfigExtension();
10
+ if (!extension) return {};
11
+ try {
12
+ const value = await extension();
13
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return {};
14
+ return { ...value };
15
+ } catch {
16
+ return {};
17
+ }
18
+ }
19
+ export {
20
+ getRendererConfigExtension,
21
+ resolveRendererConfigExtension,
22
+ setRendererConfigExtension
23
+ };
24
+ //# sourceMappingURL=renderer_config_extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/runtime/renderer_config_extension.ts"],"sourcesContent":["const EXTENSION_SYMBOL = Symbol.for('@noego/wood.runtime.renderer-config-extension');\n\n/**\n * App-supplied provider of extra fields merged into the `__woodConfig` payload\n * the renderer fetches at boot. Lets the main process hand renderers boot-time\n * facts Wood itself knows nothing about — e.g. the loopback port and per-boot\n * token of an external log sink — without a new IPC channel or preload method.\n *\n * Reserved Wood keys (rendererTrace*, appEnv) always win over extension keys.\n */\nexport type RendererConfigExtension = () =>\n | Readonly<Record<string, unknown>>\n | Promise<Readonly<Record<string, unknown>>>;\n\ntype GlobalWithExtension = typeof globalThis & {\n [EXTENSION_SYMBOL]?: RendererConfigExtension | null;\n};\n\nexport function setRendererConfigExtension(extension: RendererConfigExtension | null): void {\n (globalThis as GlobalWithExtension)[EXTENSION_SYMBOL] = extension;\n}\n\nexport function getRendererConfigExtension(): RendererConfigExtension | null {\n return (globalThis as GlobalWithExtension)[EXTENSION_SYMBOL] ?? null;\n}\n\n/**\n * Resolves the extension fields for one `__woodConfig` request. A throwing or\n * malformed extension yields `{}` — config delivery must never fail the\n * renderer boot because of an app-side provider.\n */\nexport async function resolveRendererConfigExtension(): Promise<Record<string, unknown>> {\n const extension = getRendererConfigExtension();\n if (!extension) return {};\n try {\n const value = await extension();\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return {};\n return { ...value };\n } catch {\n return {};\n }\n}\n"],"mappings":"AAAA,MAAM,mBAAmB,uBAAO,IAAI,+CAA+C;AAkB5E,SAAS,2BAA2B,WAAiD;AAC1F,EAAC,WAAmC,gBAAgB,IAAI;AAC1D;AAEO,SAAS,6BAA6D;AAC3E,SAAQ,WAAmC,gBAAgB,KAAK;AAClE;AAOA,eAAsB,iCAAmE;AACvF,QAAM,YAAY,2BAA2B;AAC7C,MAAI,CAAC,UAAW,QAAO,CAAC;AACxB,MAAI;AACF,UAAM,QAAQ,MAAM,UAAU;AAC9B,QAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,EAAG,QAAO,CAAC;AACjF,WAAO,EAAE,GAAG,MAAM;AAAA,EACpB,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;","names":[]}
@@ -0,0 +1,73 @@
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 renderer_log_batch_receiver_exports = {};
20
+ __export(renderer_log_batch_receiver_exports, {
21
+ dispatchRendererLogBatch: () => dispatchRendererLogBatch,
22
+ setRendererLogRecordFilter: () => setRendererLogRecordFilter
23
+ });
24
+ module.exports = __toCommonJS(renderer_log_batch_receiver_exports);
25
+ var import_logger = require("@noego/logger");
26
+ var import_stream = require("@noego/trace/stream");
27
+ const FILTER_SYMBOL = /* @__PURE__ */ Symbol.for("@noego/wood.runtime.renderer-log-record-filter");
28
+ function setRendererLogRecordFilter(filter) {
29
+ globalThis[FILTER_SYMBOL] = filter;
30
+ }
31
+ function isValidRecord(value) {
32
+ if (typeof value !== "object" || value === null) return false;
33
+ const r = value;
34
+ return typeof r.id === "string" && Number.isFinite(r.occurredAtMs) && typeof r.producerId === "string" && Number.isSafeInteger(r.sequence) && typeof r.level === "string" && typeof r.logger === "string" && typeof r.message === "string" && typeof r.service === "string" && typeof r.environment === "string";
35
+ }
36
+ function dispatchRendererLogBatch(rawPayload) {
37
+ let records;
38
+ try {
39
+ records = (0, import_stream.unwrapRecordBatch)(rawPayload);
40
+ } catch (error) {
41
+ return {
42
+ ok: false,
43
+ ingested: 0,
44
+ filtered: 0,
45
+ reason: "malformed-batch",
46
+ errorMessage: error instanceof Error ? error.message : String(error)
47
+ };
48
+ }
49
+ for (const record of records) {
50
+ if (!isValidRecord(record)) {
51
+ return { ok: false, ingested: 0, filtered: 0, reason: "malformed-record" };
52
+ }
53
+ }
54
+ const filter = globalThis[FILTER_SYMBOL] ?? null;
55
+ const manager = (0, import_logger.getManager)();
56
+ let ingested = 0;
57
+ let filtered = 0;
58
+ for (const record of records) {
59
+ if (filter && !filter(record)) {
60
+ filtered += 1;
61
+ continue;
62
+ }
63
+ manager.ingest(Object.freeze({ ...record }));
64
+ ingested += 1;
65
+ }
66
+ return { ok: true, ingested, filtered };
67
+ }
68
+ // Annotate the CommonJS export names for ESM import in node:
69
+ 0 && (module.exports = {
70
+ dispatchRendererLogBatch,
71
+ setRendererLogRecordFilter
72
+ });
73
+ //# sourceMappingURL=renderer_log_batch_receiver.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/runtime/renderer_log_batch_receiver.ts"],"sourcesContent":["import { getManager, type LogRecord } from '@noego/logger';\nimport { unwrapRecordBatch, type RecordBatch } from '@noego/trace/stream';\n\nconst FILTER_SYMBOL = Symbol.for('@noego/wood.runtime.renderer-log-record-filter');\n\n/**\n * Optional app-installed predicate applied to each received renderer record\n * before it is merged into the main process log stream. Return false to drop\n * (e.g. known-noise ResizeObserver loop errors). Filtering never rewrites the\n * record.\n */\nexport type RendererLogRecordFilter = (record: LogRecord) => boolean;\n\ntype GlobalWithFilter = typeof globalThis & {\n [FILTER_SYMBOL]?: RendererLogRecordFilter | null;\n};\n\nexport function setRendererLogRecordFilter(filter: RendererLogRecordFilter | null): void {\n (globalThis as GlobalWithFilter)[FILTER_SYMBOL] = filter;\n}\n\nexport type RendererLogBatchResult = {\n ok: boolean;\n ingested: number;\n filtered: number;\n reason?: 'malformed-batch' | 'malformed-record';\n errorMessage?: string;\n};\n\nfunction isValidRecord(value: unknown): value is LogRecord {\n if (typeof value !== 'object' || value === null) return false;\n const r = value as Record<string, unknown>;\n return typeof r.id === 'string'\n && Number.isFinite(r.occurredAtMs)\n && typeof r.producerId === 'string'\n && Number.isSafeInteger(r.sequence)\n && typeof r.level === 'string'\n && typeof r.logger === 'string'\n && typeof r.message === 'string'\n && typeof r.service === 'string'\n && typeof r.environment === 'string';\n}\n\n/**\n * Receives one renderer log batch from the __log_batch IPC channel: validates\n * the envelope, verifies each record's admitted shape, applies the optional\n * app filter, and merges surviving records into the main process stream via\n * LoggingManager.ingest — identity and occurredAtMs preserved exactly.\n *\n * A malformed envelope or record rejects the batch whole (mirrors\n * unwrapRecordBatch semantics: never partially merge a corrupt batch).\n */\nexport function dispatchRendererLogBatch(rawPayload: unknown): RendererLogBatchResult {\n let records: readonly LogRecord[];\n try {\n records = unwrapRecordBatch(rawPayload as RecordBatch<LogRecord>);\n } catch (error) {\n return {\n ok: false,\n ingested: 0,\n filtered: 0,\n reason: 'malformed-batch',\n errorMessage: error instanceof Error ? error.message : String(error),\n };\n }\n\n for (const record of records) {\n if (!isValidRecord(record)) {\n return { ok: false, ingested: 0, filtered: 0, reason: 'malformed-record' };\n }\n }\n\n const filter = (globalThis as GlobalWithFilter)[FILTER_SYMBOL] ?? null;\n const manager = getManager();\n let ingested = 0;\n let filtered = 0;\n for (const record of records) {\n if (filter && !filter(record)) {\n filtered += 1;\n continue;\n }\n manager.ingest(Object.freeze({ ...record }) as LogRecord);\n ingested += 1;\n }\n\n return { ok: true, ingested, filtered };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA2C;AAC3C,oBAAoD;AAEpD,MAAM,gBAAgB,uBAAO,IAAI,gDAAgD;AAc1E,SAAS,2BAA2B,QAA8C;AACvF,EAAC,WAAgC,aAAa,IAAI;AACpD;AAUA,SAAS,cAAc,OAAoC;AACzD,MAAI,OAAO,UAAU,YAAY,UAAU,KAAM,QAAO;AACxD,QAAM,IAAI;AACV,SAAO,OAAO,EAAE,OAAO,YAClB,OAAO,SAAS,EAAE,YAAY,KAC9B,OAAO,EAAE,eAAe,YACxB,OAAO,cAAc,EAAE,QAAQ,KAC/B,OAAO,EAAE,UAAU,YACnB,OAAO,EAAE,WAAW,YACpB,OAAO,EAAE,YAAY,YACrB,OAAO,EAAE,YAAY,YACrB,OAAO,EAAE,gBAAgB;AAChC;AAWO,SAAS,yBAAyB,YAA6C;AACpF,MAAI;AACJ,MAAI;AACF,kBAAU,iCAAkB,UAAoC;AAAA,EAClE,SAAS,OAAO;AACd,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,UAAU;AAAA,MACV,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,cAAc,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IACrE;AAAA,EACF;AAEA,aAAW,UAAU,SAAS;AAC5B,QAAI,CAAC,cAAc,MAAM,GAAG;AAC1B,aAAO,EAAE,IAAI,OAAO,UAAU,GAAG,UAAU,GAAG,QAAQ,mBAAmB;AAAA,IAC3E;AAAA,EACF;AAEA,QAAM,SAAU,WAAgC,aAAa,KAAK;AAClE,QAAM,cAAU,0BAAW;AAC3B,MAAI,WAAW;AACf,MAAI,WAAW;AACf,aAAW,UAAU,SAAS;AAC5B,QAAI,UAAU,CAAC,OAAO,MAAM,GAAG;AAC7B,kBAAY;AACZ;AAAA,IACF;AACA,YAAQ,OAAO,OAAO,OAAO,EAAE,GAAG,OAAO,CAAC,CAAc;AACxD,gBAAY;AAAA,EACd;AAEA,SAAO,EAAE,IAAI,MAAM,UAAU,SAAS;AACxC;","names":[]}
@@ -0,0 +1,29 @@
1
+ import { LogRecord } from '@noego/logger';
2
+
3
+ /**
4
+ * Optional app-installed predicate applied to each received renderer record
5
+ * before it is merged into the main process log stream. Return false to drop
6
+ * (e.g. known-noise ResizeObserver loop errors). Filtering never rewrites the
7
+ * record.
8
+ */
9
+ type RendererLogRecordFilter = (record: LogRecord) => boolean;
10
+ declare function setRendererLogRecordFilter(filter: RendererLogRecordFilter | null): void;
11
+ type RendererLogBatchResult = {
12
+ ok: boolean;
13
+ ingested: number;
14
+ filtered: number;
15
+ reason?: 'malformed-batch' | 'malformed-record';
16
+ errorMessage?: string;
17
+ };
18
+ /**
19
+ * Receives one renderer log batch from the __log_batch IPC channel: validates
20
+ * the envelope, verifies each record's admitted shape, applies the optional
21
+ * app filter, and merges surviving records into the main process stream via
22
+ * LoggingManager.ingest — identity and occurredAtMs preserved exactly.
23
+ *
24
+ * A malformed envelope or record rejects the batch whole (mirrors
25
+ * unwrapRecordBatch semantics: never partially merge a corrupt batch).
26
+ */
27
+ declare function dispatchRendererLogBatch(rawPayload: unknown): RendererLogBatchResult;
28
+
29
+ export { type RendererLogBatchResult, type RendererLogRecordFilter, dispatchRendererLogBatch, setRendererLogRecordFilter };
@@ -0,0 +1,29 @@
1
+ import { LogRecord } from '@noego/logger';
2
+
3
+ /**
4
+ * Optional app-installed predicate applied to each received renderer record
5
+ * before it is merged into the main process log stream. Return false to drop
6
+ * (e.g. known-noise ResizeObserver loop errors). Filtering never rewrites the
7
+ * record.
8
+ */
9
+ type RendererLogRecordFilter = (record: LogRecord) => boolean;
10
+ declare function setRendererLogRecordFilter(filter: RendererLogRecordFilter | null): void;
11
+ type RendererLogBatchResult = {
12
+ ok: boolean;
13
+ ingested: number;
14
+ filtered: number;
15
+ reason?: 'malformed-batch' | 'malformed-record';
16
+ errorMessage?: string;
17
+ };
18
+ /**
19
+ * Receives one renderer log batch from the __log_batch IPC channel: validates
20
+ * the envelope, verifies each record's admitted shape, applies the optional
21
+ * app filter, and merges surviving records into the main process stream via
22
+ * LoggingManager.ingest — identity and occurredAtMs preserved exactly.
23
+ *
24
+ * A malformed envelope or record rejects the batch whole (mirrors
25
+ * unwrapRecordBatch semantics: never partially merge a corrupt batch).
26
+ */
27
+ declare function dispatchRendererLogBatch(rawPayload: unknown): RendererLogBatchResult;
28
+
29
+ export { type RendererLogBatchResult, type RendererLogRecordFilter, dispatchRendererLogBatch, setRendererLogRecordFilter };
@@ -0,0 +1,48 @@
1
+ import { getManager } from "@noego/logger";
2
+ import { unwrapRecordBatch } from "@noego/trace/stream";
3
+ const FILTER_SYMBOL = /* @__PURE__ */ Symbol.for("@noego/wood.runtime.renderer-log-record-filter");
4
+ function setRendererLogRecordFilter(filter) {
5
+ globalThis[FILTER_SYMBOL] = filter;
6
+ }
7
+ function isValidRecord(value) {
8
+ if (typeof value !== "object" || value === null) return false;
9
+ const r = value;
10
+ return typeof r.id === "string" && Number.isFinite(r.occurredAtMs) && typeof r.producerId === "string" && Number.isSafeInteger(r.sequence) && typeof r.level === "string" && typeof r.logger === "string" && typeof r.message === "string" && typeof r.service === "string" && typeof r.environment === "string";
11
+ }
12
+ function dispatchRendererLogBatch(rawPayload) {
13
+ let records;
14
+ try {
15
+ records = unwrapRecordBatch(rawPayload);
16
+ } catch (error) {
17
+ return {
18
+ ok: false,
19
+ ingested: 0,
20
+ filtered: 0,
21
+ reason: "malformed-batch",
22
+ errorMessage: error instanceof Error ? error.message : String(error)
23
+ };
24
+ }
25
+ for (const record of records) {
26
+ if (!isValidRecord(record)) {
27
+ return { ok: false, ingested: 0, filtered: 0, reason: "malformed-record" };
28
+ }
29
+ }
30
+ const filter = globalThis[FILTER_SYMBOL] ?? null;
31
+ const manager = getManager();
32
+ let ingested = 0;
33
+ let filtered = 0;
34
+ for (const record of records) {
35
+ if (filter && !filter(record)) {
36
+ filtered += 1;
37
+ continue;
38
+ }
39
+ manager.ingest(Object.freeze({ ...record }));
40
+ ingested += 1;
41
+ }
42
+ return { ok: true, ingested, filtered };
43
+ }
44
+ export {
45
+ dispatchRendererLogBatch,
46
+ setRendererLogRecordFilter
47
+ };
48
+ //# sourceMappingURL=renderer_log_batch_receiver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/runtime/renderer_log_batch_receiver.ts"],"sourcesContent":["import { getManager, type LogRecord } from '@noego/logger';\nimport { unwrapRecordBatch, type RecordBatch } from '@noego/trace/stream';\n\nconst FILTER_SYMBOL = Symbol.for('@noego/wood.runtime.renderer-log-record-filter');\n\n/**\n * Optional app-installed predicate applied to each received renderer record\n * before it is merged into the main process log stream. Return false to drop\n * (e.g. known-noise ResizeObserver loop errors). Filtering never rewrites the\n * record.\n */\nexport type RendererLogRecordFilter = (record: LogRecord) => boolean;\n\ntype GlobalWithFilter = typeof globalThis & {\n [FILTER_SYMBOL]?: RendererLogRecordFilter | null;\n};\n\nexport function setRendererLogRecordFilter(filter: RendererLogRecordFilter | null): void {\n (globalThis as GlobalWithFilter)[FILTER_SYMBOL] = filter;\n}\n\nexport type RendererLogBatchResult = {\n ok: boolean;\n ingested: number;\n filtered: number;\n reason?: 'malformed-batch' | 'malformed-record';\n errorMessage?: string;\n};\n\nfunction isValidRecord(value: unknown): value is LogRecord {\n if (typeof value !== 'object' || value === null) return false;\n const r = value as Record<string, unknown>;\n return typeof r.id === 'string'\n && Number.isFinite(r.occurredAtMs)\n && typeof r.producerId === 'string'\n && Number.isSafeInteger(r.sequence)\n && typeof r.level === 'string'\n && typeof r.logger === 'string'\n && typeof r.message === 'string'\n && typeof r.service === 'string'\n && typeof r.environment === 'string';\n}\n\n/**\n * Receives one renderer log batch from the __log_batch IPC channel: validates\n * the envelope, verifies each record's admitted shape, applies the optional\n * app filter, and merges surviving records into the main process stream via\n * LoggingManager.ingest — identity and occurredAtMs preserved exactly.\n *\n * A malformed envelope or record rejects the batch whole (mirrors\n * unwrapRecordBatch semantics: never partially merge a corrupt batch).\n */\nexport function dispatchRendererLogBatch(rawPayload: unknown): RendererLogBatchResult {\n let records: readonly LogRecord[];\n try {\n records = unwrapRecordBatch(rawPayload as RecordBatch<LogRecord>);\n } catch (error) {\n return {\n ok: false,\n ingested: 0,\n filtered: 0,\n reason: 'malformed-batch',\n errorMessage: error instanceof Error ? error.message : String(error),\n };\n }\n\n for (const record of records) {\n if (!isValidRecord(record)) {\n return { ok: false, ingested: 0, filtered: 0, reason: 'malformed-record' };\n }\n }\n\n const filter = (globalThis as GlobalWithFilter)[FILTER_SYMBOL] ?? null;\n const manager = getManager();\n let ingested = 0;\n let filtered = 0;\n for (const record of records) {\n if (filter && !filter(record)) {\n filtered += 1;\n continue;\n }\n manager.ingest(Object.freeze({ ...record }) as LogRecord);\n ingested += 1;\n }\n\n return { ok: true, ingested, filtered };\n}\n"],"mappings":"AAAA,SAAS,kBAAkC;AAC3C,SAAS,yBAA2C;AAEpD,MAAM,gBAAgB,uBAAO,IAAI,gDAAgD;AAc1E,SAAS,2BAA2B,QAA8C;AACvF,EAAC,WAAgC,aAAa,IAAI;AACpD;AAUA,SAAS,cAAc,OAAoC;AACzD,MAAI,OAAO,UAAU,YAAY,UAAU,KAAM,QAAO;AACxD,QAAM,IAAI;AACV,SAAO,OAAO,EAAE,OAAO,YAClB,OAAO,SAAS,EAAE,YAAY,KAC9B,OAAO,EAAE,eAAe,YACxB,OAAO,cAAc,EAAE,QAAQ,KAC/B,OAAO,EAAE,UAAU,YACnB,OAAO,EAAE,WAAW,YACpB,OAAO,EAAE,YAAY,YACrB,OAAO,EAAE,YAAY,YACrB,OAAO,EAAE,gBAAgB;AAChC;AAWO,SAAS,yBAAyB,YAA6C;AACpF,MAAI;AACJ,MAAI;AACF,cAAU,kBAAkB,UAAoC;AAAA,EAClE,SAAS,OAAO;AACd,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,UAAU;AAAA,MACV,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,cAAc,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IACrE;AAAA,EACF;AAEA,aAAW,UAAU,SAAS;AAC5B,QAAI,CAAC,cAAc,MAAM,GAAG;AAC1B,aAAO,EAAE,IAAI,OAAO,UAAU,GAAG,UAAU,GAAG,QAAQ,mBAAmB;AAAA,IAC3E;AAAA,EACF;AAEA,QAAM,SAAU,WAAgC,aAAa,KAAK;AAClE,QAAM,UAAU,WAAW;AAC3B,MAAI,WAAW;AACf,MAAI,WAAW;AACf,aAAW,UAAU,SAAS;AAC5B,QAAI,UAAU,CAAC,OAAO,MAAM,GAAG;AAC7B,kBAAY;AACZ;AAAA,IACF;AACA,YAAQ,OAAO,OAAO,OAAO,EAAE,GAAG,OAAO,CAAC,CAAc;AACxD,gBAAY;AAAA,EACd;AAEA,SAAO,EAAE,IAAI,MAAM,UAAU,SAAS;AACxC;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import { WoodTraceBatchReceiver } from '../tracing/types/wood_trace_batch.types.cjs';
2
2
  import '@noego/telemetry/core';
3
- import '../trace_hub-Cob54qRx.cjs';
3
+ import '../trace_hub-Cpo_nVze.cjs';
4
4
  import 'rxjs';
5
5
 
6
6
  declare function setRendererTraceBatchReceiver(receiver: WoodTraceBatchReceiver | null): void;
@@ -1,6 +1,6 @@
1
1
  import { WoodTraceBatchReceiver } from '../tracing/types/wood_trace_batch.types.js';
2
2
  import '@noego/telemetry/core';
3
- import '../trace_hub-Cob54qRx.js';
3
+ import '../trace_hub-Cpo_nVze.js';
4
4
  import 'rxjs';
5
5
 
6
6
  declare function setRendererTraceBatchReceiver(receiver: WoodTraceBatchReceiver | null): void;
@@ -27,6 +27,8 @@ var import_get_container = require("./get_container.cjs");
27
27
  var import_tracing = require("../tracing/index.js");
28
28
  var import_tracing2 = require("../tracing/index.js");
29
29
  var import_renderer_log_dispatcher = require("./renderer_log_dispatcher.js");
30
+ var import_renderer_log_batch_receiver = require("./renderer_log_batch_receiver.js");
31
+ var import_renderer_config_extension = require("./renderer_config_extension.js");
30
32
  var import_renderer_trace_batch_receiver_registry = require("./renderer_trace_batch_receiver_registry.js");
31
33
  var import_app_env = require("./app_env.js");
32
34
  const logger = (0, import_logger.getLogger)("wood:runtime");
@@ -137,6 +139,8 @@ function registerReservedRuntimeHandlers(router, options, settings, rendererTrac
137
139
  requireRuntimeHandler("__contextMenu", "onContextMenu", options.onContextMenu)
138
140
  );
139
141
  router.registerReservedHandler("__woodConfig", async () => ({
142
+ // App extension fields first so Wood's reserved keys always win.
143
+ ...await (0, import_renderer_config_extension.resolveRendererConfigExtension)(),
140
144
  rendererTraceEnabled: settings.rendererTraceEnabled,
141
145
  rendererTraceMinLevel: settings.rendererTraceMinLevel,
142
146
  rendererTraceBatchEnabled: settings.rendererTraceBatchEnabled,
@@ -187,6 +191,16 @@ function registerRendererLogBridge(ipcMain) {
187
191
  }
188
192
  });
189
193
  });
194
+ ipcMain.removeAllListeners?.("__log_batch");
195
+ ipcMain.on("__log_batch", (_event, rawPayload) => {
196
+ const result = (0, import_renderer_log_batch_receiver.dispatchRendererLogBatch)(rawPayload);
197
+ if (!result.ok) {
198
+ logger.warn("renderer log batch rejected", {
199
+ reason: result.reason ?? null,
200
+ errorMessage: result.errorMessage ?? null
201
+ });
202
+ }
203
+ });
190
204
  logger.info("renderer log bridge registered (fire-and-forget)");
191
205
  }
192
206
  // Annotate the CommonJS export names for ESM import in node: