@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.
- package/README.md +118 -42
- package/bin/axe.js +313 -98
- package/dist/{loader/__fixtures__/layouts/app.load.cjs → automation/actions.cjs} +3 -13
- package/dist/automation/actions.cjs.map +1 -0
- package/dist/automation/actions.d.cts +57 -0
- package/dist/automation/actions.d.ts +57 -0
- package/dist/automation/actions.js +1 -0
- package/dist/automation/actions.js.map +1 -0
- package/dist/automation/actions_executor.cjs +101 -0
- package/dist/automation/actions_executor.cjs.map +1 -0
- package/dist/automation/actions_executor.d.cts +16 -0
- package/dist/automation/actions_executor.d.ts +16 -0
- package/dist/automation/actions_executor.js +76 -0
- package/dist/automation/actions_executor.js.map +1 -0
- package/dist/automation/connection.cjs +86 -0
- package/dist/automation/connection.cjs.map +1 -0
- package/dist/automation/connection.d.cts +18 -0
- package/dist/automation/connection.d.ts +18 -0
- package/dist/automation/connection.js +51 -0
- package/dist/automation/connection.js.map +1 -0
- package/dist/{middleware/__fixtures__/middleware/sequence.cjs → automation/errors.cjs} +25 -22
- package/dist/automation/errors.cjs.map +1 -0
- package/dist/automation/errors.d.cts +31 -0
- package/dist/automation/errors.d.ts +31 -0
- package/dist/automation/errors.js +24 -0
- package/dist/automation/errors.js.map +1 -0
- package/dist/automation/index.cjs +49 -0
- package/dist/automation/index.cjs.map +1 -0
- package/dist/automation/index.d.cts +16 -0
- package/dist/automation/index.d.ts +16 -0
- package/dist/automation/index.js +15 -0
- package/dist/automation/index.js.map +1 -0
- package/dist/automation/introspection_reader.cjs +75 -0
- package/dist/automation/introspection_reader.cjs.map +1 -0
- package/dist/automation/introspection_reader.d.cts +20 -0
- package/dist/automation/introspection_reader.d.ts +20 -0
- package/dist/automation/introspection_reader.js +48 -0
- package/dist/automation/introspection_reader.js.map +1 -0
- package/dist/automation/locator.cjs +102 -0
- package/dist/automation/locator.cjs.map +1 -0
- package/dist/automation/locator.d.cts +51 -0
- package/dist/automation/locator.d.ts +51 -0
- package/dist/automation/locator.js +75 -0
- package/dist/automation/locator.js.map +1 -0
- package/dist/{loader/__fixtures__/views/test/page.load.cjs → automation/observation.cjs} +3 -13
- package/dist/automation/observation.cjs.map +1 -0
- package/dist/automation/observation.d.cts +44 -0
- package/dist/automation/observation.d.ts +44 -0
- package/dist/automation/observation.js +1 -0
- package/dist/automation/observation.js.map +1 -0
- package/dist/{controller/__fixtures__/controllers/test.cjs → automation/receipts.cjs} +3 -15
- package/dist/automation/receipts.cjs.map +1 -0
- package/dist/automation/receipts.d.cts +27 -0
- package/dist/automation/receipts.d.ts +27 -0
- package/dist/automation/receipts.js +1 -0
- package/dist/automation/receipts.js.map +1 -0
- package/dist/automation/scenario.cjs +696 -0
- package/dist/automation/scenario.cjs.map +1 -0
- package/dist/automation/scenario.d.cts +89 -0
- package/dist/automation/scenario.d.ts +89 -0
- package/dist/automation/scenario.js +660 -0
- package/dist/automation/scenario.js.map +1 -0
- package/dist/automation/scrolling.cjs +17 -0
- package/dist/automation/scrolling.cjs.map +1 -0
- package/dist/automation/scrolling.d.cts +51 -0
- package/dist/automation/scrolling.d.ts +51 -0
- package/dist/automation/scrolling.js +1 -0
- package/dist/automation/scrolling.js.map +1 -0
- package/dist/automation/scrolling_executor.cjs +109 -0
- package/dist/automation/scrolling_executor.cjs.map +1 -0
- package/dist/automation/scrolling_executor.d.cts +13 -0
- package/dist/automation/scrolling_executor.d.ts +13 -0
- package/dist/automation/scrolling_executor.js +84 -0
- package/dist/automation/scrolling_executor.js.map +1 -0
- package/dist/automation/target_identity.cjs +17 -0
- package/dist/automation/target_identity.cjs.map +1 -0
- package/dist/automation/target_identity.d.cts +28 -0
- package/dist/automation/target_identity.d.ts +28 -0
- package/dist/automation/target_identity.js +1 -0
- package/dist/automation/target_identity.js.map +1 -0
- package/dist/automation/target_registry.cjs +148 -0
- package/dist/automation/target_registry.cjs.map +1 -0
- package/dist/automation/target_registry.d.cts +32 -0
- package/dist/automation/target_registry.d.ts +32 -0
- package/dist/automation/target_registry.js +122 -0
- package/dist/automation/target_registry.js.map +1 -0
- package/dist/automation/waits.cjs +17 -0
- package/dist/automation/waits.cjs.map +1 -0
- package/dist/automation/waits.d.cts +44 -0
- package/dist/automation/waits.d.ts +44 -0
- package/dist/automation/waits.js +1 -0
- package/dist/automation/waits.js.map +1 -0
- package/dist/automation/waits_executor.cjs +104 -0
- package/dist/automation/waits_executor.cjs.map +1 -0
- package/dist/automation/waits_executor.d.cts +14 -0
- package/dist/automation/waits_executor.d.ts +14 -0
- package/dist/automation/waits_executor.js +79 -0
- package/dist/automation/waits_executor.js.map +1 -0
- package/dist/bridge/backend_bridge.cjs.map +1 -1
- package/dist/bridge/backend_bridge.js.map +1 -1
- package/dist/client/index.cjs +78 -21
- package/dist/client/index.cjs.map +1 -1
- package/dist/client/index.d.cts +19 -3
- package/dist/client/index.d.ts +19 -3
- package/dist/client/index.js +80 -22
- package/dist/client/index.js.map +1 -1
- package/dist/client/renderer_log_transport.cjs +151 -0
- package/dist/client/renderer_log_transport.cjs.map +1 -0
- package/dist/client/renderer_log_transport.d.cts +54 -0
- package/dist/client/renderer_log_transport.d.ts +54 -0
- package/dist/client/renderer_log_transport.js +123 -0
- package/dist/client/renderer_log_transport.js.map +1 -0
- package/dist/codegen/controller_registration_generator.cjs +13 -2
- package/dist/codegen/controller_registration_generator.cjs.map +1 -1
- package/dist/codegen/controller_registration_generator.d.cts +12 -1
- package/dist/codegen/controller_registration_generator.d.ts +12 -1
- package/dist/codegen/controller_registration_generator.js +10 -1
- package/dist/codegen/controller_registration_generator.js.map +1 -1
- package/dist/codegen/index.d.cts +1 -0
- package/dist/codegen/index.d.ts +1 -0
- package/dist/codegen/preload_generator.cjs +13 -6
- package/dist/codegen/preload_generator.cjs.map +1 -1
- package/dist/codegen/preload_generator.d.cts +11 -2
- package/dist/codegen/preload_generator.d.ts +11 -2
- package/dist/codegen/preload_generator.js +13 -6
- package/dist/codegen/preload_generator.js.map +1 -1
- package/dist/codegen/renderer_app_generator.cjs +95 -44
- package/dist/codegen/renderer_app_generator.cjs.map +1 -1
- package/dist/codegen/renderer_app_generator.js +95 -44
- package/dist/codegen/renderer_app_generator.js.map +1 -1
- package/dist/codegen/type_generator.cjs +1 -0
- package/dist/codegen/type_generator.cjs.map +1 -1
- package/dist/codegen/type_generator.js +1 -0
- package/dist/codegen/type_generator.js.map +1 -1
- package/dist/config/config_parser.cjs +95 -4
- package/dist/config/config_parser.cjs.map +1 -1
- package/dist/config/config_parser.d.cts +10 -2
- package/dist/config/config_parser.d.ts +10 -2
- package/dist/config/config_parser.js +92 -3
- package/dist/config/config_parser.js.map +1 -1
- package/dist/config/index.cjs +6 -2
- package/dist/config/index.cjs.map +1 -1
- package/dist/config/index.d.cts +2 -2
- package/dist/config/index.d.ts +2 -2
- package/dist/config/index.js +8 -2
- package/dist/config/index.js.map +1 -1
- package/dist/controller/controller_resolver.cjs +51 -3
- package/dist/controller/controller_resolver.cjs.map +1 -1
- package/dist/controller/controller_resolver.d.cts +27 -4
- package/dist/controller/controller_resolver.d.ts +27 -4
- package/dist/controller/controller_resolver.js +48 -2
- package/dist/controller/controller_resolver.js.map +1 -1
- package/dist/controller/index.cjs +6 -2
- package/dist/controller/index.cjs.map +1 -1
- package/dist/controller/index.d.cts +1 -1
- package/dist/controller/index.d.ts +1 -1
- package/dist/controller/index.js +4 -2
- package/dist/controller/index.js.map +1 -1
- package/dist/dev/wood_dev_server.cjs +4 -1
- package/dist/dev/wood_dev_server.cjs.map +1 -1
- package/dist/dev/wood_dev_server.js +5 -2
- package/dist/dev/wood_dev_server.js.map +1 -1
- package/dist/dev/yaml_watcher.cjs +1 -1
- package/dist/dev/yaml_watcher.cjs.map +1 -1
- package/dist/dev/yaml_watcher.d.cts +4 -0
- package/dist/dev/yaml_watcher.d.ts +4 -0
- package/dist/dev/yaml_watcher.js +1 -1
- package/dist/dev/yaml_watcher.js.map +1 -1
- package/dist/frontend/frontend_lifecycle.cjs +74 -0
- package/dist/frontend/frontend_lifecycle.cjs.map +1 -0
- package/dist/frontend/frontend_lifecycle.d.cts +50 -0
- package/dist/frontend/frontend_lifecycle.d.ts +50 -0
- package/dist/frontend/frontend_lifecycle.js +50 -0
- package/dist/frontend/frontend_lifecycle.js.map +1 -0
- package/dist/frontend/frontend_page.cjs +122 -0
- package/dist/frontend/frontend_page.cjs.map +1 -0
- package/dist/frontend/frontend_page.d.cts +62 -0
- package/dist/frontend/frontend_page.d.ts +62 -0
- package/dist/frontend/frontend_page.js +98 -0
- package/dist/frontend/frontend_page.js.map +1 -0
- package/dist/frontend/frontend_surface.cjs +249 -0
- package/dist/frontend/frontend_surface.cjs.map +1 -0
- package/dist/frontend/frontend_surface.d.cts +64 -0
- package/dist/frontend/frontend_surface.d.ts +64 -0
- package/dist/frontend/frontend_surface.js +224 -0
- package/dist/frontend/frontend_surface.js.map +1 -0
- package/dist/frontend/index.cjs +52 -0
- package/dist/frontend/index.cjs.map +1 -0
- package/dist/frontend/index.d.cts +10 -0
- package/dist/frontend/index.d.ts +10 -0
- package/dist/frontend/index.js +19 -0
- package/dist/frontend/index.js.map +1 -0
- package/dist/frontend/page_catalog.cjs +135 -0
- package/dist/frontend/page_catalog.cjs.map +1 -0
- package/dist/frontend/page_catalog.d.cts +56 -0
- package/dist/frontend/page_catalog.d.ts +56 -0
- package/dist/frontend/page_catalog.js +108 -0
- package/dist/frontend/page_catalog.js.map +1 -0
- package/dist/frontend/tracked_transport.cjs +55 -0
- package/dist/frontend/tracked_transport.cjs.map +1 -0
- package/dist/frontend/tracked_transport.d.cts +36 -0
- package/dist/frontend/tracked_transport.d.ts +36 -0
- package/dist/frontend/tracked_transport.js +31 -0
- package/dist/frontend/tracked_transport.js.map +1 -0
- package/dist/frontend/work_registry.cjs +153 -0
- package/dist/frontend/work_registry.cjs.map +1 -0
- package/dist/frontend/work_registry.d.cts +70 -0
- package/dist/frontend/work_registry.d.ts +70 -0
- package/dist/frontend/work_registry.js +128 -0
- package/dist/frontend/work_registry.js.map +1 -0
- package/dist/index.cjs +24 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -7
- package/dist/index.d.ts +11 -7
- package/dist/index.js +27 -4
- package/dist/index.js.map +1 -1
- package/dist/main/index.cjs +10 -0
- package/dist/main/index.cjs.map +1 -1
- package/dist/main/index.d.cts +14 -2
- package/dist/main/index.d.ts +14 -2
- package/dist/main/index.js +16 -0
- package/dist/main/index.js.map +1 -1
- package/dist/middleware/middleware_resolver.cjs +22 -1
- package/dist/middleware/middleware_resolver.cjs.map +1 -1
- package/dist/middleware/middleware_resolver.d.cts +13 -1
- package/dist/middleware/middleware_resolver.d.ts +13 -1
- package/dist/middleware/middleware_resolver.js +22 -1
- package/dist/middleware/middleware_resolver.js.map +1 -1
- package/dist/navigation/automation_introspection.cjs +110 -0
- package/dist/navigation/automation_introspection.cjs.map +1 -0
- package/dist/navigation/automation_introspection.d.cts +60 -0
- package/dist/navigation/automation_introspection.d.ts +60 -0
- package/dist/navigation/automation_introspection.js +85 -0
- package/dist/navigation/automation_introspection.js.map +1 -0
- package/dist/navigation/index.cjs +10 -2
- package/dist/navigation/index.cjs.map +1 -1
- package/dist/navigation/index.d.cts +27 -1
- package/dist/navigation/index.d.ts +27 -1
- package/dist/navigation/index.js +6 -1
- package/dist/navigation/index.js.map +1 -1
- package/dist/{middleware/__fixtures__/middleware/auth.cjs → navigation/layout_preservation.cjs} +18 -20
- package/dist/navigation/layout_preservation.cjs.map +1 -0
- package/dist/navigation/layout_preservation.d.cts +2 -0
- package/dist/navigation/layout_preservation.d.ts +2 -0
- package/dist/navigation/layout_preservation.js +18 -0
- package/dist/navigation/layout_preservation.js.map +1 -0
- package/dist/parser/index.cjs +2 -0
- package/dist/parser/index.cjs.map +1 -1
- package/dist/parser/index.d.cts +1 -1
- package/dist/parser/index.d.ts +1 -1
- package/dist/parser/index.js +2 -1
- package/dist/parser/index.js.map +1 -1
- package/dist/parser/operations_parser.cjs +6 -0
- package/dist/parser/operations_parser.cjs.map +1 -1
- package/dist/parser/operations_parser.d.cts +9 -2
- package/dist/parser/operations_parser.d.ts +9 -2
- package/dist/parser/operations_parser.js +5 -0
- package/dist/parser/operations_parser.js.map +1 -1
- package/dist/parser/views_parser.cjs.map +1 -1
- package/dist/parser/views_parser.js.map +1 -1
- package/dist/router/index.d.cts +1 -0
- package/dist/router/index.d.ts +1 -0
- package/dist/router/wood_router.cjs +35 -3
- package/dist/router/wood_router.cjs.map +1 -1
- package/dist/router/wood_router.d.cts +15 -0
- package/dist/router/wood_router.d.ts +15 -0
- package/dist/router/wood_router.js +36 -4
- package/dist/router/wood_router.js.map +1 -1
- package/dist/runtime/get_container.cjs +9 -34
- package/dist/runtime/get_container.cjs.map +1 -1
- package/dist/runtime/get_container.d.cts +24 -4
- package/dist/runtime/get_container.d.ts +24 -4
- package/dist/runtime/get_container.js +8 -23
- package/dist/runtime/get_container.js.map +1 -1
- package/dist/runtime/index.cjs +9 -0
- package/dist/runtime/index.cjs.map +1 -1
- package/dist/runtime/index.d.cts +5 -2
- package/dist/runtime/index.d.ts +5 -2
- package/dist/runtime/index.js +10 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/renderer_config_extension.cjs +50 -0
- package/dist/runtime/renderer_config_extension.cjs.map +1 -0
- package/dist/runtime/renderer_config_extension.d.cts +19 -0
- package/dist/runtime/renderer_config_extension.d.ts +19 -0
- package/dist/runtime/renderer_config_extension.js +24 -0
- package/dist/runtime/renderer_config_extension.js.map +1 -0
- package/dist/runtime/renderer_log_batch_receiver.cjs +73 -0
- package/dist/runtime/renderer_log_batch_receiver.cjs.map +1 -0
- package/dist/runtime/renderer_log_batch_receiver.d.cts +29 -0
- package/dist/runtime/renderer_log_batch_receiver.d.ts +29 -0
- package/dist/runtime/renderer_log_batch_receiver.js +48 -0
- package/dist/runtime/renderer_log_batch_receiver.js.map +1 -0
- package/dist/runtime/renderer_trace_batch_receiver_registry.d.cts +1 -1
- package/dist/runtime/renderer_trace_batch_receiver_registry.d.ts +1 -1
- package/dist/runtime/runtime.cjs +14 -0
- package/dist/runtime/runtime.cjs.map +1 -1
- package/dist/runtime/runtime.d.cts +2 -1
- package/dist/runtime/runtime.d.ts +2 -1
- package/dist/runtime/runtime.js +14 -0
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/stick/index.cjs.map +1 -1
- package/dist/stick/index.js.map +1 -1
- package/dist/testing/automation_assertions.cjs +417 -0
- package/dist/testing/automation_assertions.cjs.map +1 -0
- package/dist/testing/automation_assertions.d.cts +44 -0
- package/dist/testing/automation_assertions.d.ts +44 -0
- package/dist/testing/automation_assertions.js +385 -0
- package/dist/testing/automation_assertions.js.map +1 -0
- package/dist/testing/browser.cjs +130 -57
- package/dist/testing/browser.cjs.map +1 -1
- package/dist/testing/browser.d.cts +10 -4
- package/dist/testing/browser.d.ts +10 -4
- package/dist/testing/browser.js +132 -53
- package/dist/testing/browser.js.map +1 -1
- package/dist/testing/create_controller_harness.cjs +28 -8
- package/dist/testing/create_controller_harness.cjs.map +1 -1
- package/dist/testing/create_controller_harness.d.cts +18 -2
- package/dist/testing/create_controller_harness.d.ts +18 -2
- package/dist/testing/create_controller_harness.js +28 -8
- package/dist/testing/create_controller_harness.js.map +1 -1
- package/dist/testing/create_router_bridge.d.cts +1 -0
- package/dist/testing/create_router_bridge.d.ts +1 -0
- package/dist/testing/create_test_router.d.cts +1 -0
- package/dist/testing/create_test_router.d.ts +1 -0
- package/dist/testing/geometry.cjs +109 -0
- package/dist/testing/geometry.cjs.map +1 -0
- package/dist/testing/geometry.d.cts +45 -0
- package/dist/testing/geometry.d.ts +45 -0
- package/dist/testing/geometry.js +79 -0
- package/dist/testing/geometry.js.map +1 -0
- package/dist/testing/index.cjs +62 -2
- package/dist/testing/index.cjs.map +1 -1
- package/dist/testing/index.d.cts +23 -4
- package/dist/testing/index.d.ts +23 -4
- package/dist/testing/index.js +50 -2
- package/dist/testing/index.js.map +1 -1
- package/dist/{controller/__fixtures__/controllers/not_a_class.cjs → testing/test_wood.cjs} +15 -7
- package/dist/testing/test_wood.cjs.map +1 -0
- package/dist/testing/test_wood.d.cts +16 -0
- package/dist/testing/test_wood.d.ts +16 -0
- package/dist/testing/test_wood.js +12 -0
- package/dist/testing/test_wood.js.map +1 -0
- package/dist/testing/test_wood_config.cjs +272 -0
- package/dist/testing/test_wood_config.cjs.map +1 -0
- package/dist/testing/test_wood_config.d.cts +111 -0
- package/dist/testing/test_wood_config.d.ts +111 -0
- package/dist/testing/test_wood_config.js +247 -0
- package/dist/testing/test_wood_config.js.map +1 -0
- package/dist/testing/wood_config_source.cjs +146 -0
- package/dist/testing/wood_config_source.cjs.map +1 -0
- package/dist/testing/wood_config_source.d.cts +36 -0
- package/dist/testing/wood_config_source.d.ts +36 -0
- package/dist/testing/wood_config_source.js +112 -0
- package/dist/testing/wood_config_source.js.map +1 -0
- package/dist/testing/wood_env_renderer.cjs +210 -0
- package/dist/testing/wood_env_renderer.cjs.map +1 -0
- package/dist/testing/wood_env_renderer.d.cts +74 -0
- package/dist/testing/wood_env_renderer.d.ts +74 -0
- package/dist/testing/wood_env_renderer.js +188 -0
- package/dist/testing/wood_env_renderer.js.map +1 -0
- package/dist/testing/wood_test_selection.cjs +94 -0
- package/dist/testing/wood_test_selection.cjs.map +1 -0
- package/dist/testing/wood_test_selection.d.cts +39 -0
- package/dist/testing/wood_test_selection.d.ts +39 -0
- package/dist/testing/wood_test_selection.js +68 -0
- package/dist/testing/wood_test_selection.js.map +1 -0
- package/dist/trace-testing/index.d.cts +1 -2
- package/dist/trace-testing/index.d.ts +1 -2
- package/dist/trace-testing/trace_recorder.cjs +1 -1
- package/dist/trace-testing/trace_recorder.cjs.map +1 -1
- package/dist/trace-testing/trace_recorder.d.cts +1 -2
- package/dist/trace-testing/trace_recorder.d.ts +1 -2
- package/dist/trace-testing/trace_recorder.js +1 -1
- package/dist/trace-testing/trace_recorder.js.map +1 -1
- package/dist/trace-transport/index.d.cts +1 -1
- package/dist/trace-transport/index.d.ts +1 -1
- package/dist/{trace_hub-Cob54qRx.d.cts → trace_hub-Cpo_nVze.d.cts} +21 -1
- package/dist/{trace_hub-Cob54qRx.d.ts → trace_hub-Cpo_nVze.d.ts} +21 -1
- package/dist/tracing/index.cjs +9 -2
- package/dist/tracing/index.cjs.map +1 -1
- package/dist/tracing/index.d.cts +3 -2
- package/dist/tracing/index.d.ts +3 -2
- package/dist/tracing/index.js +7 -1
- package/dist/tracing/index.js.map +1 -1
- package/dist/tracing/renderer_trace_batch_host.d.cts +1 -1
- package/dist/tracing/renderer_trace_batch_host.d.ts +1 -1
- package/dist/tracing/renderer_trace_batch_transport.cjs +48 -6
- package/dist/tracing/renderer_trace_batch_transport.cjs.map +1 -1
- package/dist/tracing/renderer_trace_batch_transport.d.cts +17 -1
- package/dist/tracing/renderer_trace_batch_transport.d.ts +17 -1
- package/dist/tracing/renderer_trace_batch_transport.js +48 -6
- package/dist/tracing/renderer_trace_batch_transport.js.map +1 -1
- package/dist/tracing/trace_batch_adapter.cjs +110 -0
- package/dist/tracing/trace_batch_adapter.cjs.map +1 -0
- package/dist/tracing/trace_batch_adapter.d.cts +36 -0
- package/dist/tracing/trace_batch_adapter.d.ts +36 -0
- package/dist/tracing/trace_batch_adapter.js +86 -0
- package/dist/tracing/trace_batch_adapter.js.map +1 -0
- package/dist/tracing/trace_commit_writer.d.cts +1 -1
- package/dist/tracing/trace_commit_writer.d.ts +1 -1
- package/dist/tracing/trace_hub.cjs +87 -20
- package/dist/tracing/trace_hub.cjs.map +1 -1
- package/dist/tracing/trace_hub.d.cts +1 -1
- package/dist/tracing/trace_hub.d.ts +1 -1
- package/dist/tracing/trace_hub.js +85 -20
- package/dist/tracing/trace_hub.js.map +1 -1
- package/dist/tracing/trace_provider.cjs +21 -6
- package/dist/tracing/trace_provider.cjs.map +1 -1
- package/dist/tracing/trace_provider.d.cts +13 -4
- package/dist/tracing/trace_provider.d.ts +13 -4
- package/dist/tracing/trace_provider.js +22 -7
- package/dist/tracing/trace_provider.js.map +1 -1
- package/dist/tracing/types/wood_trace_batch.types.cjs.map +1 -1
- package/dist/tracing/types/wood_trace_batch.types.d.cts +15 -1
- package/dist/tracing/types/wood_trace_batch.types.d.ts +15 -1
- package/dist/tracing/types/wood_trace_sink.types.d.cts +1 -1
- package/dist/tracing/types/wood_trace_sink.types.d.ts +1 -1
- package/dist/tracing/wood_trace_batch_contract.cjs +2 -0
- package/dist/tracing/wood_trace_batch_contract.cjs.map +1 -1
- package/dist/tracing/wood_trace_batch_contract.d.cts +1 -1
- package/dist/tracing/wood_trace_batch_contract.d.ts +1 -1
- package/dist/tracing/wood_trace_batch_contract.js +2 -0
- package/dist/tracing/wood_trace_batch_contract.js.map +1 -1
- package/dist/transport/build_transport_bridge.cjs +4 -2
- package/dist/transport/build_transport_bridge.cjs.map +1 -1
- package/dist/transport/build_transport_bridge.d.cts +7 -1
- package/dist/transport/build_transport_bridge.d.ts +7 -1
- package/dist/transport/build_transport_bridge.js +2 -1
- package/dist/transport/build_transport_bridge.js.map +1 -1
- package/dist/transport/in_process_router_transport.d.cts +1 -0
- package/dist/transport/in_process_router_transport.d.ts +1 -0
- package/dist/transport/index.d.cts +1 -0
- package/dist/transport/index.d.ts +1 -0
- package/dist/types/config.cjs.map +1 -1
- package/dist/types/config.d.cts +47 -1
- package/dist/types/config.d.ts +47 -1
- package/dist/types/context.cjs +12 -0
- package/dist/types/context.cjs.map +1 -1
- package/dist/types/context.d.cts +27 -1
- package/dist/types/context.d.ts +27 -1
- package/dist/types/context.js +4 -0
- package/dist/types/context.js.map +1 -1
- package/dist/types/index.d.cts +2 -2
- package/dist/types/index.d.ts +2 -2
- package/dist/types/operations.cjs.map +1 -1
- package/dist/types/operations.d.cts +2 -0
- package/dist/types/operations.d.ts +2 -0
- package/docs/axe.md +706 -0
- package/package.json +19 -5
- package/src/components/NavigationShell.scopes.browser.test.ts +363 -0
- package/src/components/NavigationShell.svelte +126 -49
- package/dist/controller/__fixtures__/controllers/chat.cjs +0 -32
- package/dist/controller/__fixtures__/controllers/chat.cjs.map +0 -1
- package/dist/controller/__fixtures__/controllers/chat.d.cts +0 -11
- package/dist/controller/__fixtures__/controllers/chat.d.ts +0 -11
- package/dist/controller/__fixtures__/controllers/chat.js +0 -12
- package/dist/controller/__fixtures__/controllers/chat.js.map +0 -1
- package/dist/controller/__fixtures__/controllers/not_a_class.cjs.map +0 -1
- package/dist/controller/__fixtures__/controllers/not_a_class.d.cts +0 -3
- package/dist/controller/__fixtures__/controllers/not_a_class.d.ts +0 -3
- package/dist/controller/__fixtures__/controllers/not_a_class.js +0 -5
- package/dist/controller/__fixtures__/controllers/not_a_class.js.map +0 -1
- package/dist/controller/__fixtures__/controllers/settings.controller.cjs +0 -32
- package/dist/controller/__fixtures__/controllers/settings.controller.cjs.map +0 -1
- package/dist/controller/__fixtures__/controllers/settings.controller.d.cts +0 -12
- package/dist/controller/__fixtures__/controllers/settings.controller.d.ts +0 -12
- package/dist/controller/__fixtures__/controllers/settings.controller.js +0 -12
- package/dist/controller/__fixtures__/controllers/settings.controller.js.map +0 -1
- package/dist/controller/__fixtures__/controllers/test.cjs.map +0 -1
- package/dist/controller/__fixtures__/controllers/test.d.cts +0 -7
- package/dist/controller/__fixtures__/controllers/test.d.ts +0 -7
- package/dist/controller/__fixtures__/controllers/test.js +0 -9
- package/dist/controller/__fixtures__/controllers/test.js.map +0 -1
- package/dist/loader/__fixtures__/layouts/app.load.cjs.map +0 -1
- package/dist/loader/__fixtures__/layouts/app.load.d.cts +0 -5
- package/dist/loader/__fixtures__/layouts/app.load.d.ts +0 -5
- package/dist/loader/__fixtures__/layouts/app.load.js +0 -7
- package/dist/loader/__fixtures__/layouts/app.load.js.map +0 -1
- package/dist/loader/__fixtures__/views/test/page.load.cjs.map +0 -1
- package/dist/loader/__fixtures__/views/test/page.load.d.cts +0 -6
- package/dist/loader/__fixtures__/views/test/page.load.d.ts +0 -6
- package/dist/loader/__fixtures__/views/test/page.load.js +0 -7
- package/dist/loader/__fixtures__/views/test/page.load.js.map +0 -1
- package/dist/middleware/__fixtures__/middleware/auth.cjs.map +0 -1
- package/dist/middleware/__fixtures__/middleware/auth.d.cts +0 -6
- package/dist/middleware/__fixtures__/middleware/auth.d.ts +0 -6
- package/dist/middleware/__fixtures__/middleware/auth.js +0 -19
- package/dist/middleware/__fixtures__/middleware/auth.js.map +0 -1
- package/dist/middleware/__fixtures__/middleware/sequence.cjs.map +0 -1
- package/dist/middleware/__fixtures__/middleware/sequence.d.cts +0 -7
- package/dist/middleware/__fixtures__/middleware/sequence.d.ts +0 -7
- package/dist/middleware/__fixtures__/middleware/sequence.js +0 -21
- package/dist/middleware/__fixtures__/middleware/sequence.js.map +0 -1
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { TraceBatch } from '@noego/trace';
|
|
2
|
+
import { WoodTraceBatch, WoodTraceBatchRuntimeContext } from './types/wood_trace_batch.types.cjs';
|
|
3
|
+
import '@noego/telemetry/core';
|
|
4
|
+
import '../trace_hub-Cpo_nVze.cjs';
|
|
5
|
+
import 'rxjs';
|
|
6
|
+
|
|
7
|
+
type WoodTraceBatchConversion = {
|
|
8
|
+
ok: true;
|
|
9
|
+
batch: TraceBatch;
|
|
10
|
+
} | {
|
|
11
|
+
ok: false;
|
|
12
|
+
reason: string;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Converts a validated Wood renderer trace batch into the @noego/trace
|
|
16
|
+
* TraceBatch contract for the SQLite batch receiver.
|
|
17
|
+
*
|
|
18
|
+
* Identity is preserved, never regenerated:
|
|
19
|
+
* - occurredAtMs = the event's producer-assigned ISO timestamp, parsed;
|
|
20
|
+
* - sequence = the event's hub traceSeq (Wood batch ranges are queue
|
|
21
|
+
* sequences, i.e. traceSeq - 1, so the converted range shifts by +1);
|
|
22
|
+
* - producerId = the hub producerId when every event carries the same one,
|
|
23
|
+
* else a 'wood:<preload-session>' fallback uniformly for the whole batch
|
|
24
|
+
* (the TraceBatch contract requires one producer per batch);
|
|
25
|
+
* - id = '<producerId>:<sequence>' — deterministic, stable across retries;
|
|
26
|
+
* - batchId is reused verbatim so receiver-side duplicate detection keys on
|
|
27
|
+
* the same delivery identity the renderer retries with.
|
|
28
|
+
*
|
|
29
|
+
* Runtime context (windowId/webContentsId/routeKey/harnessId) merges into the
|
|
30
|
+
* event context without touching identity fields.
|
|
31
|
+
*/
|
|
32
|
+
declare function woodBatchToTraceBatch(batch: WoodTraceBatch, context?: WoodTraceBatchRuntimeContext, options?: {
|
|
33
|
+
createdAtMs?: number;
|
|
34
|
+
}): WoodTraceBatchConversion;
|
|
35
|
+
|
|
36
|
+
export { type WoodTraceBatchConversion, woodBatchToTraceBatch };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { TraceBatch } from '@noego/trace';
|
|
2
|
+
import { WoodTraceBatch, WoodTraceBatchRuntimeContext } from './types/wood_trace_batch.types.js';
|
|
3
|
+
import '@noego/telemetry/core';
|
|
4
|
+
import '../trace_hub-Cpo_nVze.js';
|
|
5
|
+
import 'rxjs';
|
|
6
|
+
|
|
7
|
+
type WoodTraceBatchConversion = {
|
|
8
|
+
ok: true;
|
|
9
|
+
batch: TraceBatch;
|
|
10
|
+
} | {
|
|
11
|
+
ok: false;
|
|
12
|
+
reason: string;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Converts a validated Wood renderer trace batch into the @noego/trace
|
|
16
|
+
* TraceBatch contract for the SQLite batch receiver.
|
|
17
|
+
*
|
|
18
|
+
* Identity is preserved, never regenerated:
|
|
19
|
+
* - occurredAtMs = the event's producer-assigned ISO timestamp, parsed;
|
|
20
|
+
* - sequence = the event's hub traceSeq (Wood batch ranges are queue
|
|
21
|
+
* sequences, i.e. traceSeq - 1, so the converted range shifts by +1);
|
|
22
|
+
* - producerId = the hub producerId when every event carries the same one,
|
|
23
|
+
* else a 'wood:<preload-session>' fallback uniformly for the whole batch
|
|
24
|
+
* (the TraceBatch contract requires one producer per batch);
|
|
25
|
+
* - id = '<producerId>:<sequence>' — deterministic, stable across retries;
|
|
26
|
+
* - batchId is reused verbatim so receiver-side duplicate detection keys on
|
|
27
|
+
* the same delivery identity the renderer retries with.
|
|
28
|
+
*
|
|
29
|
+
* Runtime context (windowId/webContentsId/routeKey/harnessId) merges into the
|
|
30
|
+
* event context without touching identity fields.
|
|
31
|
+
*/
|
|
32
|
+
declare function woodBatchToTraceBatch(batch: WoodTraceBatch, context?: WoodTraceBatchRuntimeContext, options?: {
|
|
33
|
+
createdAtMs?: number;
|
|
34
|
+
}): WoodTraceBatchConversion;
|
|
35
|
+
|
|
36
|
+
export { type WoodTraceBatchConversion, woodBatchToTraceBatch };
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { parseTraceLevel } from "@noego/trace";
|
|
2
|
+
function woodBatchToTraceBatch(batch, context = {}, options = {}) {
|
|
3
|
+
if (batch.events.length === 0) {
|
|
4
|
+
return { ok: false, reason: "Wood trace batch is empty" };
|
|
5
|
+
}
|
|
6
|
+
const producerId = resolveUniformProducerId(batch);
|
|
7
|
+
const records = [];
|
|
8
|
+
let previousSequence = 0;
|
|
9
|
+
for (const event of batch.events) {
|
|
10
|
+
const occurredAtMs = Date.parse(event.timestamp);
|
|
11
|
+
if (!Number.isFinite(occurredAtMs)) {
|
|
12
|
+
return { ok: false, reason: `Wood trace event timestamp is invalid: '${event.timestamp}'` };
|
|
13
|
+
}
|
|
14
|
+
if (!Number.isSafeInteger(event.traceSeq) || event.traceSeq < 1) {
|
|
15
|
+
return { ok: false, reason: `Wood trace event sequence is invalid: ${event.traceSeq}` };
|
|
16
|
+
}
|
|
17
|
+
if (event.traceSeq <= previousSequence) {
|
|
18
|
+
return { ok: false, reason: "Wood trace event sequences are not strictly increasing" };
|
|
19
|
+
}
|
|
20
|
+
previousSequence = event.traceSeq;
|
|
21
|
+
records.push(convertEvent(event, producerId, occurredAtMs, context));
|
|
22
|
+
}
|
|
23
|
+
const first = records[0];
|
|
24
|
+
const last = records[records.length - 1];
|
|
25
|
+
if (!first || !last) {
|
|
26
|
+
return { ok: false, reason: "Wood trace batch is empty" };
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
ok: true,
|
|
30
|
+
batch: Object.freeze({
|
|
31
|
+
schemaVersion: 1,
|
|
32
|
+
batchId: batch.batchId,
|
|
33
|
+
producerId,
|
|
34
|
+
sequenceStart: first.sequence,
|
|
35
|
+
sequenceEnd: last.sequence,
|
|
36
|
+
createdAtMs: options.createdAtMs ?? Date.now(),
|
|
37
|
+
records: Object.freeze(records)
|
|
38
|
+
})
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function resolveUniformProducerId(batch) {
|
|
42
|
+
const first = batch.events[0]?.producerId;
|
|
43
|
+
if (typeof first === "string" && first.trim().length > 0) {
|
|
44
|
+
const uniform = batch.events.every((event) => event.producerId === first);
|
|
45
|
+
if (uniform) {
|
|
46
|
+
return first;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return `wood:${batch.producerId}`;
|
|
50
|
+
}
|
|
51
|
+
function convertEvent(event, producerId, occurredAtMs, context) {
|
|
52
|
+
const extras = {
|
|
53
|
+
...event.payload ?? {}
|
|
54
|
+
};
|
|
55
|
+
const merged = { ...pickRuntimeContext(event), ...context };
|
|
56
|
+
if (merged.windowId !== void 0) extras.windowId = merged.windowId;
|
|
57
|
+
if (merged.webContentsId !== void 0) extras.webContentsId = merged.webContentsId;
|
|
58
|
+
if (merged.routeKey !== void 0) extras.routeKey = merged.routeKey;
|
|
59
|
+
if (merged.harnessId !== void 0) extras.harnessId = merged.harnessId;
|
|
60
|
+
return Object.freeze({
|
|
61
|
+
id: `${producerId}:${event.traceSeq}`,
|
|
62
|
+
occurredAtMs,
|
|
63
|
+
timestamp: occurredAtMs,
|
|
64
|
+
producerId,
|
|
65
|
+
sequence: event.traceSeq,
|
|
66
|
+
source: event.source,
|
|
67
|
+
event: event.type,
|
|
68
|
+
level: parseTraceLevel(event.level),
|
|
69
|
+
process: event.process,
|
|
70
|
+
...event.conversationId !== void 0 ? { conversationId: event.conversationId } : {},
|
|
71
|
+
...typeof event.message === "string" ? { message: event.message } : {},
|
|
72
|
+
...Object.keys(extras).length > 0 ? { context: Object.freeze(extras) } : {}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function pickRuntimeContext(event) {
|
|
76
|
+
return {
|
|
77
|
+
...event.windowId !== void 0 ? { windowId: event.windowId } : {},
|
|
78
|
+
...event.webContentsId !== void 0 ? { webContentsId: event.webContentsId } : {},
|
|
79
|
+
...event.routeKey !== void 0 ? { routeKey: event.routeKey } : {},
|
|
80
|
+
...event.harnessId !== void 0 ? { harnessId: event.harnessId } : {}
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
export {
|
|
84
|
+
woodBatchToTraceBatch
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=trace_batch_adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/tracing/trace_batch_adapter.ts"],"sourcesContent":["import type { AdmittedTraceEvent, TraceBatch } from '@noego/trace';\nimport { parseTraceLevel } from '@noego/trace';\nimport type {\n WoodRendererTraceEvent,\n WoodTraceBatch,\n WoodTraceBatchRuntimeContext,\n} from './types/wood_trace_batch.types.js';\n\nexport type WoodTraceBatchConversion =\n | { ok: true; batch: TraceBatch }\n | { ok: false; reason: string };\n\n/**\n * Converts a validated Wood renderer trace batch into the @noego/trace\n * TraceBatch contract for the SQLite batch receiver.\n *\n * Identity is preserved, never regenerated:\n * - occurredAtMs = the event's producer-assigned ISO timestamp, parsed;\n * - sequence = the event's hub traceSeq (Wood batch ranges are queue\n * sequences, i.e. traceSeq - 1, so the converted range shifts by +1);\n * - producerId = the hub producerId when every event carries the same one,\n * else a 'wood:<preload-session>' fallback uniformly for the whole batch\n * (the TraceBatch contract requires one producer per batch);\n * - id = '<producerId>:<sequence>' — deterministic, stable across retries;\n * - batchId is reused verbatim so receiver-side duplicate detection keys on\n * the same delivery identity the renderer retries with.\n *\n * Runtime context (windowId/webContentsId/routeKey/harnessId) merges into the\n * event context without touching identity fields.\n */\nexport function woodBatchToTraceBatch(\n batch: WoodTraceBatch,\n context: WoodTraceBatchRuntimeContext = {},\n options: { createdAtMs?: number } = {},\n): WoodTraceBatchConversion {\n if (batch.events.length === 0) {\n return { ok: false, reason: 'Wood trace batch is empty' };\n }\n\n const producerId = resolveUniformProducerId(batch);\n\n const records: AdmittedTraceEvent[] = [];\n let previousSequence = 0;\n for (const event of batch.events) {\n const occurredAtMs = Date.parse(event.timestamp);\n if (!Number.isFinite(occurredAtMs)) {\n return { ok: false, reason: `Wood trace event timestamp is invalid: '${event.timestamp}'` };\n }\n if (!Number.isSafeInteger(event.traceSeq) || event.traceSeq < 1) {\n return { ok: false, reason: `Wood trace event sequence is invalid: ${event.traceSeq}` };\n }\n if (event.traceSeq <= previousSequence) {\n return { ok: false, reason: 'Wood trace event sequences are not strictly increasing' };\n }\n previousSequence = event.traceSeq;\n records.push(convertEvent(event, producerId, occurredAtMs, context));\n }\n\n const first = records[0];\n const last = records[records.length - 1];\n if (!first || !last) {\n return { ok: false, reason: 'Wood trace batch is empty' };\n }\n\n return {\n ok: true,\n batch: Object.freeze({\n schemaVersion: 1,\n batchId: batch.batchId,\n producerId,\n sequenceStart: first.sequence,\n sequenceEnd: last.sequence,\n createdAtMs: options.createdAtMs ?? Date.now(),\n records: Object.freeze(records),\n }),\n };\n}\n\nfunction resolveUniformProducerId(batch: WoodTraceBatch): string {\n const first = batch.events[0]?.producerId;\n if (typeof first === 'string' && first.trim().length > 0) {\n const uniform = batch.events.every((event) => event.producerId === first);\n if (uniform) {\n return first;\n }\n }\n return `wood:${batch.producerId}`;\n}\n\nfunction convertEvent(\n event: WoodRendererTraceEvent,\n producerId: string,\n occurredAtMs: number,\n context: WoodTraceBatchRuntimeContext,\n): AdmittedTraceEvent {\n const extras: Record<string, unknown> = {\n ...(event.payload ?? {}),\n };\n const merged: WoodTraceBatchRuntimeContext = { ...pickRuntimeContext(event), ...context };\n if (merged.windowId !== undefined) extras.windowId = merged.windowId;\n if (merged.webContentsId !== undefined) extras.webContentsId = merged.webContentsId;\n if (merged.routeKey !== undefined) extras.routeKey = merged.routeKey;\n if (merged.harnessId !== undefined) extras.harnessId = merged.harnessId;\n\n return Object.freeze({\n id: `${producerId}:${event.traceSeq}`,\n occurredAtMs,\n timestamp: occurredAtMs,\n producerId,\n sequence: event.traceSeq,\n source: event.source,\n event: event.type,\n level: parseTraceLevel(event.level),\n process: event.process,\n ...(event.conversationId !== undefined ? { conversationId: event.conversationId } : {}),\n ...(typeof event.message === 'string' ? { message: event.message } : {}),\n ...(Object.keys(extras).length > 0 ? { context: Object.freeze(extras) } : {}),\n }) as AdmittedTraceEvent;\n}\n\nfunction pickRuntimeContext(event: WoodRendererTraceEvent): WoodTraceBatchRuntimeContext {\n return {\n ...(event.windowId !== undefined ? { windowId: event.windowId } : {}),\n ...(event.webContentsId !== undefined ? { webContentsId: event.webContentsId } : {}),\n ...(event.routeKey !== undefined ? { routeKey: event.routeKey } : {}),\n ...(event.harnessId !== undefined ? { harnessId: event.harnessId } : {}),\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -22,6 +22,8 @@ __export(trace_hub_exports, {
|
|
|
22
22
|
dispatchRendererTracePayload: () => dispatchRendererTracePayload,
|
|
23
23
|
emitRendererTrace: () => emitRendererTrace,
|
|
24
24
|
getTraceEvents$: () => getTraceEvents$,
|
|
25
|
+
getTraceProducerId: () => getTraceProducerId,
|
|
26
|
+
ingestRemoteTraceEvent: () => ingestRemoteTraceEvent,
|
|
25
27
|
normalizeTraceLevel: () => normalizeTraceLevel,
|
|
26
28
|
publishMainTrace: () => publishMainTrace,
|
|
27
29
|
publishTestTrace: () => publishTestTrace,
|
|
@@ -55,6 +57,24 @@ function traceLevelOrder(level) {
|
|
|
55
57
|
let rendererMinLevel = "debug";
|
|
56
58
|
let rendererEnabled = false;
|
|
57
59
|
let customRendererTraceTransport = null;
|
|
60
|
+
let traceProducerId = null;
|
|
61
|
+
function randomIdSuffix() {
|
|
62
|
+
const c = globalThis.crypto;
|
|
63
|
+
if (c && typeof c.randomUUID === "function") {
|
|
64
|
+
return c.randomUUID();
|
|
65
|
+
}
|
|
66
|
+
return `${Date.now().toString(36)}-${Math.random().toString(16).slice(2)}`;
|
|
67
|
+
}
|
|
68
|
+
function getTraceProducerId() {
|
|
69
|
+
if (traceProducerId === null) {
|
|
70
|
+
const processTag = typeof process !== "undefined" && process?.versions?.electron ? process.type === "renderer" ? "renderer" : "main" : typeof window !== "undefined" ? "renderer" : "main";
|
|
71
|
+
traceProducerId = `${processTag}:${randomIdSuffix()}`;
|
|
72
|
+
}
|
|
73
|
+
return traceProducerId;
|
|
74
|
+
}
|
|
75
|
+
function hasValidRemoteIdentity(event) {
|
|
76
|
+
return typeof event.timestamp === "string" && Number.isFinite(Date.parse(event.timestamp)) && typeof event.traceSeq === "number" && Number.isSafeInteger(event.traceSeq) && event.traceSeq >= 1;
|
|
77
|
+
}
|
|
58
78
|
function normalizeTraceInput(raw) {
|
|
59
79
|
const input = raw ?? {};
|
|
60
80
|
const source = typeof input.source === "string" && input.source.trim().length > 0 ? input.source : "unknown";
|
|
@@ -113,8 +133,8 @@ class TraceHub {
|
|
|
113
133
|
get events$() {
|
|
114
134
|
return this.shared$;
|
|
115
135
|
}
|
|
116
|
-
setMinLevel(
|
|
117
|
-
this.minLevels[
|
|
136
|
+
setMinLevel(process2, level) {
|
|
137
|
+
this.minLevels[process2] = level;
|
|
118
138
|
}
|
|
119
139
|
registerSink(sink) {
|
|
120
140
|
this.sinks.add(sink);
|
|
@@ -122,36 +142,61 @@ class TraceHub {
|
|
|
122
142
|
this.sinks.delete(sink);
|
|
123
143
|
};
|
|
124
144
|
}
|
|
125
|
-
publish(
|
|
145
|
+
publish(process2, level, input) {
|
|
126
146
|
const normalized = normalizeTraceInput(input);
|
|
127
147
|
const event = {
|
|
128
148
|
...normalized,
|
|
129
149
|
level,
|
|
130
|
-
process,
|
|
150
|
+
process: process2,
|
|
131
151
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
132
|
-
traceSeq: this.nextTraceSeq
|
|
152
|
+
traceSeq: this.nextTraceSeq++,
|
|
153
|
+
producerId: getTraceProducerId()
|
|
133
154
|
};
|
|
134
|
-
if (traceLevelOrder(level) >= traceLevelOrder(this.minLevels[
|
|
155
|
+
if (traceLevelOrder(level) >= traceLevelOrder(this.minLevels[process2])) {
|
|
135
156
|
this.publishToSinks(event);
|
|
136
157
|
this.subject.next(event);
|
|
137
158
|
}
|
|
138
159
|
return event;
|
|
139
160
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
161
|
+
/**
|
|
162
|
+
* Single renderer admission point: assigns timestamp, traceSeq, and
|
|
163
|
+
* producerId exactly once, then delivers the same event to sinks and
|
|
164
|
+
* events$ subscribers. The returned event is what the renderer transport
|
|
165
|
+
* must forward — no downstream stage may regenerate its identity.
|
|
166
|
+
*
|
|
167
|
+
* Callers gate on rendererEnabled/level BEFORE calling, so gated-out events
|
|
168
|
+
* consume no traceSeq.
|
|
169
|
+
*/
|
|
170
|
+
admitRenderer(level, input) {
|
|
147
171
|
const event = {
|
|
148
172
|
...input,
|
|
149
173
|
level,
|
|
150
174
|
process: "renderer",
|
|
151
175
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
152
|
-
traceSeq: this.nextTraceSeq
|
|
176
|
+
traceSeq: this.nextTraceSeq++,
|
|
177
|
+
producerId: getTraceProducerId()
|
|
153
178
|
};
|
|
154
179
|
this.publishToSinks(event);
|
|
180
|
+
this.subject.next(event);
|
|
181
|
+
return event;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Delivers an event admitted by a remote producer (e.g. a renderer event
|
|
185
|
+
* received over IPC) to this hub's sinks and events$ subscribers without
|
|
186
|
+
* reassigning identity or advancing this hub's own traceSeq counter.
|
|
187
|
+
* The min-level gate for the event's process still applies — delivery
|
|
188
|
+
* filtering is not identity assignment.
|
|
189
|
+
*/
|
|
190
|
+
ingest(event) {
|
|
191
|
+
if (event.producerId !== void 0 && event.producerId === getTraceProducerId()) {
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
const gate = this.minLevels[event.process] ?? this.minLevels.renderer;
|
|
195
|
+
if (traceLevelOrder(event.level) < traceLevelOrder(gate)) {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
this.publishToSinks(event);
|
|
199
|
+
this.subject.next(event);
|
|
155
200
|
}
|
|
156
201
|
publishToSinks(event) {
|
|
157
202
|
if (this.sinks.size === 0) {
|
|
@@ -195,18 +240,38 @@ function setRendererTraceEnabled(enabled) {
|
|
|
195
240
|
function publishMainTrace(level, input) {
|
|
196
241
|
return getGlobalTraceHub().publish("main", level, input);
|
|
197
242
|
}
|
|
198
|
-
function publishTestTrace(
|
|
199
|
-
return getGlobalTraceHub().publish(
|
|
243
|
+
function publishTestTrace(process2, level, input) {
|
|
244
|
+
return getGlobalTraceHub().publish(process2, level, input);
|
|
200
245
|
}
|
|
201
246
|
function dispatchRendererTracePayload(rawPayload, context) {
|
|
202
247
|
const payload = rawPayload ?? {};
|
|
203
248
|
const level = normalizeTraceLevel(payload.level);
|
|
249
|
+
if (hasValidRemoteIdentity(payload)) {
|
|
250
|
+
const merged = mergeTraceRuntimeContext(payload, context);
|
|
251
|
+
getGlobalTraceHub().ingest({
|
|
252
|
+
...merged,
|
|
253
|
+
level,
|
|
254
|
+
process: "renderer",
|
|
255
|
+
timestamp: payload.timestamp,
|
|
256
|
+
traceSeq: payload.traceSeq,
|
|
257
|
+
...typeof payload.producerId === "string" && payload.producerId.trim().length > 0 ? { producerId: payload.producerId } : {}
|
|
258
|
+
});
|
|
259
|
+
return { ok: true, forwarded: true };
|
|
260
|
+
}
|
|
204
261
|
getGlobalTraceHub().publish("renderer", level, mergeTraceRuntimeContext(payload, context));
|
|
205
262
|
return {
|
|
206
263
|
ok: true,
|
|
207
264
|
forwarded: true
|
|
208
265
|
};
|
|
209
266
|
}
|
|
267
|
+
function ingestRemoteTraceEvent(event, context) {
|
|
268
|
+
if (!hasValidRemoteIdentity(event)) {
|
|
269
|
+
return false;
|
|
270
|
+
}
|
|
271
|
+
const merged = context ? { ...mergeTraceRuntimeContext(event, context), level: event.level, process: event.process, timestamp: event.timestamp, traceSeq: event.traceSeq, ...event.producerId ? { producerId: event.producerId } : {} } : event;
|
|
272
|
+
getGlobalTraceHub().ingest(merged);
|
|
273
|
+
return true;
|
|
274
|
+
}
|
|
210
275
|
function setRendererTraceTransport(fn) {
|
|
211
276
|
customRendererTraceTransport = fn;
|
|
212
277
|
}
|
|
@@ -217,11 +282,10 @@ function emitRendererTrace(level, input) {
|
|
|
217
282
|
if (traceLevelOrder(level) < traceLevelOrder(rendererMinLevel)) {
|
|
218
283
|
return;
|
|
219
284
|
}
|
|
220
|
-
const
|
|
221
|
-
getGlobalTraceHub().publishRendererToSinks(level, normalized);
|
|
285
|
+
const event = getGlobalTraceHub().admitRenderer(level, normalizeTraceInput(input));
|
|
222
286
|
if (customRendererTraceTransport) {
|
|
223
287
|
try {
|
|
224
|
-
customRendererTraceTransport(
|
|
288
|
+
customRendererTraceTransport(event);
|
|
225
289
|
return;
|
|
226
290
|
} catch {
|
|
227
291
|
}
|
|
@@ -231,7 +295,7 @@ function emitRendererTrace(level, input) {
|
|
|
231
295
|
return;
|
|
232
296
|
}
|
|
233
297
|
try {
|
|
234
|
-
bridge.__trace(
|
|
298
|
+
bridge.__trace(event);
|
|
235
299
|
} catch {
|
|
236
300
|
}
|
|
237
301
|
}
|
|
@@ -241,6 +305,7 @@ function clearTraceHubForTests() {
|
|
|
241
305
|
rendererMinLevel = "debug";
|
|
242
306
|
rendererEnabled = false;
|
|
243
307
|
customRendererTraceTransport = null;
|
|
308
|
+
traceProducerId = null;
|
|
244
309
|
}
|
|
245
310
|
// Annotate the CommonJS export names for ESM import in node:
|
|
246
311
|
0 && (module.exports = {
|
|
@@ -248,6 +313,8 @@ function clearTraceHubForTests() {
|
|
|
248
313
|
dispatchRendererTracePayload,
|
|
249
314
|
emitRendererTrace,
|
|
250
315
|
getTraceEvents$,
|
|
316
|
+
getTraceProducerId,
|
|
317
|
+
ingestRemoteTraceEvent,
|
|
251
318
|
normalizeTraceLevel,
|
|
252
319
|
publishMainTrace,
|
|
253
320
|
publishTestTrace,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/tracing/trace_hub.ts"],"sourcesContent":["import { Observable, Subject } from 'rxjs';\nimport { share } from 'rxjs/operators';\nimport type {\n WoodTraceEventSink,\n WoodTraceEventSnapshot,\n WoodTraceSinkDisposer,\n} from './types/wood_trace_sink.types.js';\n\nexport type StandardTraceLevel = 'debug' | 'info' | 'warn' | 'error';\nexport type TraceLevel = StandardTraceLevel | (string & {});\nexport type TraceProcess = 'main' | 'renderer' | 'test';\n\nexport type TraceInput = {\n source: string;\n type: string;\n message?: string;\n conversationId?: number | string;\n payload?: Record<string, unknown>;\n windowId?: string;\n webContentsId?: number;\n routeKey?: string;\n harnessId?: string;\n};\n\nexport type TraceEvent = TraceInput & {\n level: TraceLevel;\n process: TraceProcess;\n timestamp: string;\n traceSeq: number;\n};\n\nexport type TraceDispatchResult = {\n ok: boolean;\n forwarded: boolean;\n};\n\nexport type TraceRuntimeContext = {\n windowId?: string;\n webContentsId?: number;\n routeKey?: string;\n harnessId?: string;\n};\n\nexport type TraceWaitOptions = {\n timeoutMs?: number;\n};\n\nconst TRACE_HUB_SYMBOL = Symbol.for('@noego/wood.trace.hub');\n\nconst LEVEL_ORDER: Record<StandardTraceLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\nconst CUSTOM_LEVEL_ORDER = LEVEL_ORDER.info;\n\nexport function normalizeTraceLevel(level: unknown, fallback: TraceLevel = 'info'): TraceLevel {\n if (typeof level !== 'string') {\n return fallback;\n }\n\n const normalized = level.trim().toLowerCase();\n return normalized.length > 0 ? normalized : fallback;\n}\n\nfunction traceLevelOrder(level: TraceLevel): number {\n return LEVEL_ORDER[level as StandardTraceLevel] ?? CUSTOM_LEVEL_ORDER;\n}\n\nlet rendererMinLevel: TraceLevel = 'debug';\nlet rendererEnabled = false;\nlet customRendererTraceTransport: ((payload: unknown) => void) | null = null;\n\ntype GlobalWithTraceHub = typeof globalThis & {\n [TRACE_HUB_SYMBOL]?: TraceHub;\n};\n\ntype TraceBridgeLike = Record<string, unknown> & {\n __trace?: (payload: unknown) => void;\n};\n\ntype GlobalWithTraceBridge = typeof globalThis & {\n __NOEGO_WOOD_BRIDGE__?: unknown;\n wood?: unknown;\n window?: {\n __NOEGO_WOOD_BRIDGE__?: unknown;\n wood?: unknown;\n };\n};\n\nfunction normalizeTraceInput(raw: unknown): TraceInput {\n const input = (raw ?? {}) as Partial<TraceInput> & Record<string, unknown>;\n const source = typeof input.source === 'string' && input.source.trim().length > 0\n ? input.source\n : 'unknown';\n const type = typeof input.type === 'string' && input.type.trim().length > 0\n ? input.type\n : 'unknown';\n const message = typeof input.message === 'string' ? input.message : undefined;\n const conversationId = typeof input.conversationId === 'number' || typeof input.conversationId === 'string'\n ? input.conversationId\n : undefined;\n const windowId = typeof input.windowId === 'string' && input.windowId.trim().length > 0\n ? input.windowId\n : undefined;\n const webContentsId = typeof input.webContentsId === 'number' && Number.isFinite(input.webContentsId)\n ? input.webContentsId\n : undefined;\n const routeKey = typeof input.routeKey === 'string' && input.routeKey.trim().length > 0\n ? input.routeKey\n : undefined;\n const harnessId = typeof input.harnessId === 'string' && input.harnessId.trim().length > 0\n ? input.harnessId\n : undefined;\n const payload = isRecord(input.payload) ? { ...input.payload } : undefined;\n\n return {\n source,\n type,\n ...(message ? { message } : {}),\n ...(conversationId !== undefined ? { conversationId } : {}),\n ...(windowId !== undefined ? { windowId } : {}),\n ...(webContentsId !== undefined ? { webContentsId } : {}),\n ...(routeKey !== undefined ? { routeKey } : {}),\n ...(harnessId !== undefined ? { harnessId } : {}),\n ...(payload ? { payload } : {}),\n };\n}\n\nfunction mergeTraceRuntimeContext(input: unknown, context: TraceRuntimeContext | undefined): TraceInput {\n if (!context) {\n return normalizeTraceInput(input);\n }\n return normalizeTraceInput({\n ...(isRecord(input) ? input : {}),\n ...context,\n });\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction resolveTraceBridge(): TraceBridgeLike | null {\n const globalObj = globalThis as GlobalWithTraceBridge;\n const bridge = globalObj.__NOEGO_WOOD_BRIDGE__\n ?? globalObj.window?.__NOEGO_WOOD_BRIDGE__\n ?? globalObj.wood\n ?? globalObj.window?.wood;\n if (!bridge || typeof bridge !== 'object') {\n return null;\n }\n return bridge as TraceBridgeLike;\n}\n\nclass TraceHub {\n private readonly subject = new Subject<TraceEvent>();\n private readonly shared$ = this.subject.asObservable().pipe(share());\n private readonly sinks = new Set<WoodTraceEventSink>();\n private nextTraceSeq = 1;\n private minLevels: Record<TraceProcess, TraceLevel> = {\n main: 'debug',\n renderer: 'debug',\n test: 'debug',\n };\n\n get events$(): Observable<TraceEvent> {\n return this.shared$;\n }\n\n setMinLevel(process: TraceProcess, level: TraceLevel): void {\n this.minLevels[process] = level;\n }\n\n registerSink(sink: WoodTraceEventSink): WoodTraceSinkDisposer {\n this.sinks.add(sink);\n return () => {\n this.sinks.delete(sink);\n };\n }\n\n publish(process: TraceProcess, level: TraceLevel, input: unknown): TraceEvent {\n const normalized = normalizeTraceInput(input);\n const event: TraceEvent = {\n ...normalized,\n level,\n process,\n timestamp: new Date().toISOString(),\n traceSeq: this.nextTraceSeq++,\n };\n if (traceLevelOrder(level) >= traceLevelOrder(this.minLevels[process])) {\n this.publishToSinks(event);\n this.subject.next(event);\n }\n return event;\n }\n\n publishRendererToSinks(level: TraceLevel, input: TraceInput): void {\n if (this.sinks.size === 0) {\n return;\n }\n if (traceLevelOrder(level) < traceLevelOrder(this.minLevels.renderer)) {\n return;\n }\n const event: TraceEvent = {\n ...input,\n level,\n process: 'renderer',\n timestamp: new Date().toISOString(),\n traceSeq: this.nextTraceSeq++,\n };\n this.publishToSinks(event);\n }\n\n private publishToSinks(event: TraceEvent): void {\n if (this.sinks.size === 0) {\n return;\n }\n const snapshot: WoodTraceEventSnapshot = Object.freeze({\n ...event,\n ...(event.payload ? { payload: Object.freeze({ ...event.payload }) } : {}),\n });\n for (const sink of this.sinks) {\n try {\n sink(snapshot);\n } catch {\n // Trace sinks are observational and cannot fail trace callers or peers.\n }\n }\n }\n}\n\nfunction getGlobalTraceHub(): TraceHub {\n const globalObj = globalThis as GlobalWithTraceHub;\n if (!globalObj[TRACE_HUB_SYMBOL]) {\n globalObj[TRACE_HUB_SYMBOL] = new TraceHub();\n }\n return globalObj[TRACE_HUB_SYMBOL] as TraceHub;\n}\n\nexport function getTraceEvents$(): Observable<TraceEvent> {\n return getGlobalTraceHub().events$;\n}\n\nexport function registerTraceSink(sink: WoodTraceEventSink): WoodTraceSinkDisposer {\n return getGlobalTraceHub().registerSink(sink);\n}\n\nexport function setMainTraceMinLevel(level: TraceLevel): void {\n getGlobalTraceHub().setMinLevel('main', level);\n}\n\nexport function setRendererTraceMinLevel(level: TraceLevel): void {\n rendererMinLevel = level;\n getGlobalTraceHub().setMinLevel('renderer', level);\n}\n\nexport function setRendererTraceEnabled(enabled: boolean): void {\n rendererEnabled = enabled;\n}\n\nexport function publishMainTrace(level: TraceLevel, input: unknown): TraceEvent {\n return getGlobalTraceHub().publish('main', level, input);\n}\n\nexport function publishTestTrace(process: TraceProcess, level: TraceLevel, input: unknown): TraceEvent {\n return getGlobalTraceHub().publish(process, level, input);\n}\n\nexport function dispatchRendererTracePayload(\n rawPayload: unknown,\n context?: TraceRuntimeContext,\n): TraceDispatchResult {\n const payload = (rawPayload ?? {}) as Partial<TraceInput> & { level?: unknown };\n const level = normalizeTraceLevel(payload.level);\n getGlobalTraceHub().publish('renderer', level, mergeTraceRuntimeContext(payload, context));\n return {\n ok: true,\n forwarded: true,\n };\n}\n\nexport function setRendererTraceTransport(fn: ((payload: unknown) => void) | null): void {\n customRendererTraceTransport = fn;\n}\n\nexport function emitRendererTrace(level: TraceLevel, input: TraceInput): void {\n if (!rendererEnabled) {\n return;\n }\n if (traceLevelOrder(level) < traceLevelOrder(rendererMinLevel)) {\n return;\n }\n const normalized = { ...normalizeTraceInput(input), level };\n getGlobalTraceHub().publishRendererToSinks(level, normalized);\n\n if (customRendererTraceTransport) {\n try {\n customRendererTraceTransport(normalized);\n return;\n } catch {\n // Fall through to bridge.__trace\n }\n }\n\n const bridge = resolveTraceBridge();\n if (!bridge || typeof bridge.__trace !== 'function') {\n return;\n }\n try {\n bridge.__trace(normalized);\n } catch {\n // Tracing is observational and must never break the caller.\n }\n}\n\nexport function clearTraceHubForTests(): void {\n const globalObj = globalThis as GlobalWithTraceHub;\n delete globalObj[TRACE_HUB_SYMBOL];\n rendererMinLevel = 'debug';\n rendererEnabled = false;\n customRendererTraceTransport = null;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/tracing/trace_hub.ts"],"sourcesContent":["import { Observable, Subject } from 'rxjs';\nimport { share } from 'rxjs/operators';\nimport type {\n WoodTraceEventSink,\n WoodTraceEventSnapshot,\n WoodTraceSinkDisposer,\n} from './types/wood_trace_sink.types.js';\n\nexport type StandardTraceLevel = 'debug' | 'info' | 'warn' | 'error';\nexport type TraceLevel = StandardTraceLevel | (string & {});\nexport type TraceProcess = 'main' | 'renderer' | 'test';\n\nexport type TraceInput = {\n source: string;\n type: string;\n message?: string;\n conversationId?: number | string;\n payload?: Record<string, unknown>;\n windowId?: string;\n webContentsId?: number;\n routeKey?: string;\n harnessId?: string;\n};\n\nexport type TraceEvent = TraceInput & {\n level: TraceLevel;\n process: TraceProcess;\n timestamp: string;\n traceSeq: number;\n /**\n * Durable producer identity stamped at admission. Together with traceSeq it\n * forms the identity key `(producerId, traceSeq)` across merged streams\n * (main + ingested renderer events).\n */\n producerId?: string;\n};\n\nexport type TraceDispatchResult = {\n ok: boolean;\n forwarded: boolean;\n};\n\nexport type TraceRuntimeContext = {\n windowId?: string;\n webContentsId?: number;\n routeKey?: string;\n harnessId?: string;\n};\n\nexport type TraceWaitOptions = {\n timeoutMs?: number;\n};\n\nconst TRACE_HUB_SYMBOL = Symbol.for('@noego/wood.trace.hub');\n\nconst LEVEL_ORDER: Record<StandardTraceLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\nconst CUSTOM_LEVEL_ORDER = LEVEL_ORDER.info;\n\nexport function normalizeTraceLevel(level: unknown, fallback: TraceLevel = 'info'): TraceLevel {\n if (typeof level !== 'string') {\n return fallback;\n }\n\n const normalized = level.trim().toLowerCase();\n return normalized.length > 0 ? normalized : fallback;\n}\n\nfunction traceLevelOrder(level: TraceLevel): number {\n return LEVEL_ORDER[level as StandardTraceLevel] ?? CUSTOM_LEVEL_ORDER;\n}\n\nlet rendererMinLevel: TraceLevel = 'debug';\nlet rendererEnabled = false;\nlet customRendererTraceTransport: ((payload: unknown) => void) | null = null;\nlet traceProducerId: string | null = null;\n\nfunction randomIdSuffix(): string {\n const c = globalThis.crypto;\n if (c && typeof c.randomUUID === 'function') {\n return c.randomUUID();\n }\n return `${Date.now().toString(36)}-${Math.random().toString(16).slice(2)}`;\n}\n\n/**\n * Returns this process's durable trace producer identity, created lazily.\n * The identity is stable for the process lifetime represented by the hub's\n * traceSeq stream.\n */\nexport function getTraceProducerId(): string {\n if (traceProducerId === null) {\n const processTag = typeof process !== 'undefined' && process?.versions?.electron\n ? (process.type === 'renderer' ? 'renderer' : 'main')\n : (typeof window !== 'undefined' ? 'renderer' : 'main');\n traceProducerId = `${processTag}:${randomIdSuffix()}`;\n }\n return traceProducerId;\n}\n\n/** Validates that an event carries usable remote identity fields. */\nfunction hasValidRemoteIdentity(event: Partial<TraceEvent>): event is Partial<TraceEvent> & {\n timestamp: string;\n traceSeq: number;\n} {\n return typeof event.timestamp === 'string'\n && Number.isFinite(Date.parse(event.timestamp))\n && typeof event.traceSeq === 'number'\n && Number.isSafeInteger(event.traceSeq)\n && event.traceSeq >= 1;\n}\n\ntype GlobalWithTraceHub = typeof globalThis & {\n [TRACE_HUB_SYMBOL]?: TraceHub;\n};\n\ntype TraceBridgeLike = Record<string, unknown> & {\n __trace?: (payload: unknown) => void;\n};\n\ntype GlobalWithTraceBridge = typeof globalThis & {\n __NOEGO_WOOD_BRIDGE__?: unknown;\n wood?: unknown;\n window?: {\n __NOEGO_WOOD_BRIDGE__?: unknown;\n wood?: unknown;\n };\n};\n\nfunction normalizeTraceInput(raw: unknown): TraceInput {\n const input = (raw ?? {}) as Partial<TraceInput> & Record<string, unknown>;\n const source = typeof input.source === 'string' && input.source.trim().length > 0\n ? input.source\n : 'unknown';\n const type = typeof input.type === 'string' && input.type.trim().length > 0\n ? input.type\n : 'unknown';\n const message = typeof input.message === 'string' ? input.message : undefined;\n const conversationId = typeof input.conversationId === 'number' || typeof input.conversationId === 'string'\n ? input.conversationId\n : undefined;\n const windowId = typeof input.windowId === 'string' && input.windowId.trim().length > 0\n ? input.windowId\n : undefined;\n const webContentsId = typeof input.webContentsId === 'number' && Number.isFinite(input.webContentsId)\n ? input.webContentsId\n : undefined;\n const routeKey = typeof input.routeKey === 'string' && input.routeKey.trim().length > 0\n ? input.routeKey\n : undefined;\n const harnessId = typeof input.harnessId === 'string' && input.harnessId.trim().length > 0\n ? input.harnessId\n : undefined;\n const payload = isRecord(input.payload) ? { ...input.payload } : undefined;\n\n return {\n source,\n type,\n ...(message ? { message } : {}),\n ...(conversationId !== undefined ? { conversationId } : {}),\n ...(windowId !== undefined ? { windowId } : {}),\n ...(webContentsId !== undefined ? { webContentsId } : {}),\n ...(routeKey !== undefined ? { routeKey } : {}),\n ...(harnessId !== undefined ? { harnessId } : {}),\n ...(payload ? { payload } : {}),\n };\n}\n\nfunction mergeTraceRuntimeContext(input: unknown, context: TraceRuntimeContext | undefined): TraceInput {\n if (!context) {\n return normalizeTraceInput(input);\n }\n return normalizeTraceInput({\n ...(isRecord(input) ? input : {}),\n ...context,\n });\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction resolveTraceBridge(): TraceBridgeLike | null {\n const globalObj = globalThis as GlobalWithTraceBridge;\n const bridge = globalObj.__NOEGO_WOOD_BRIDGE__\n ?? globalObj.window?.__NOEGO_WOOD_BRIDGE__\n ?? globalObj.wood\n ?? globalObj.window?.wood;\n if (!bridge || typeof bridge !== 'object') {\n return null;\n }\n return bridge as TraceBridgeLike;\n}\n\nclass TraceHub {\n private readonly subject = new Subject<TraceEvent>();\n private readonly shared$ = this.subject.asObservable().pipe(share());\n private readonly sinks = new Set<WoodTraceEventSink>();\n private nextTraceSeq = 1;\n private minLevels: Record<TraceProcess, TraceLevel> = {\n main: 'debug',\n renderer: 'debug',\n test: 'debug',\n };\n\n get events$(): Observable<TraceEvent> {\n return this.shared$;\n }\n\n setMinLevel(process: TraceProcess, level: TraceLevel): void {\n this.minLevels[process] = level;\n }\n\n registerSink(sink: WoodTraceEventSink): WoodTraceSinkDisposer {\n this.sinks.add(sink);\n return () => {\n this.sinks.delete(sink);\n };\n }\n\n publish(process: TraceProcess, level: TraceLevel, input: unknown): TraceEvent {\n const normalized = normalizeTraceInput(input);\n const event: TraceEvent = {\n ...normalized,\n level,\n process,\n timestamp: new Date().toISOString(),\n traceSeq: this.nextTraceSeq++,\n producerId: getTraceProducerId(),\n };\n if (traceLevelOrder(level) >= traceLevelOrder(this.minLevels[process])) {\n this.publishToSinks(event);\n this.subject.next(event);\n }\n return event;\n }\n\n /**\n * Single renderer admission point: assigns timestamp, traceSeq, and\n * producerId exactly once, then delivers the same event to sinks and\n * events$ subscribers. The returned event is what the renderer transport\n * must forward — no downstream stage may regenerate its identity.\n *\n * Callers gate on rendererEnabled/level BEFORE calling, so gated-out events\n * consume no traceSeq.\n */\n admitRenderer(level: TraceLevel, input: TraceInput): TraceEvent {\n const event: TraceEvent = {\n ...input,\n level,\n process: 'renderer',\n timestamp: new Date().toISOString(),\n traceSeq: this.nextTraceSeq++,\n producerId: getTraceProducerId(),\n };\n this.publishToSinks(event);\n this.subject.next(event);\n return event;\n }\n\n /**\n * Delivers an event admitted by a remote producer (e.g. a renderer event\n * received over IPC) to this hub's sinks and events$ subscribers without\n * reassigning identity or advancing this hub's own traceSeq counter.\n * The min-level gate for the event's process still applies — delivery\n * filtering is not identity assignment.\n */\n ingest(event: TraceEvent): void {\n // Same-process echo suppression: an event this process's own producer\n // admitted was already delivered to sinks and events$ at admission\n // (same-process bridge/test compositions loop the transport back into the\n // same hub). Ingest is for events admitted by a REMOTE producer.\n if (event.producerId !== undefined && event.producerId === getTraceProducerId()) {\n return;\n }\n const gate = this.minLevels[event.process as TraceProcess] ?? this.minLevels.renderer;\n if (traceLevelOrder(event.level) < traceLevelOrder(gate)) {\n return;\n }\n this.publishToSinks(event);\n this.subject.next(event);\n }\n\n private publishToSinks(event: TraceEvent): void {\n if (this.sinks.size === 0) {\n return;\n }\n const snapshot: WoodTraceEventSnapshot = Object.freeze({\n ...event,\n ...(event.payload ? { payload: Object.freeze({ ...event.payload }) } : {}),\n });\n for (const sink of this.sinks) {\n try {\n sink(snapshot);\n } catch {\n // Trace sinks are observational and cannot fail trace callers or peers.\n }\n }\n }\n}\n\nfunction getGlobalTraceHub(): TraceHub {\n const globalObj = globalThis as GlobalWithTraceHub;\n if (!globalObj[TRACE_HUB_SYMBOL]) {\n globalObj[TRACE_HUB_SYMBOL] = new TraceHub();\n }\n return globalObj[TRACE_HUB_SYMBOL] as TraceHub;\n}\n\nexport function getTraceEvents$(): Observable<TraceEvent> {\n return getGlobalTraceHub().events$;\n}\n\nexport function registerTraceSink(sink: WoodTraceEventSink): WoodTraceSinkDisposer {\n return getGlobalTraceHub().registerSink(sink);\n}\n\nexport function setMainTraceMinLevel(level: TraceLevel): void {\n getGlobalTraceHub().setMinLevel('main', level);\n}\n\nexport function setRendererTraceMinLevel(level: TraceLevel): void {\n rendererMinLevel = level;\n getGlobalTraceHub().setMinLevel('renderer', level);\n}\n\nexport function setRendererTraceEnabled(enabled: boolean): void {\n rendererEnabled = enabled;\n}\n\nexport function publishMainTrace(level: TraceLevel, input: unknown): TraceEvent {\n return getGlobalTraceHub().publish('main', level, input);\n}\n\nexport function publishTestTrace(process: TraceProcess, level: TraceLevel, input: unknown): TraceEvent {\n return getGlobalTraceHub().publish(process, level, input);\n}\n\nexport function dispatchRendererTracePayload(\n rawPayload: unknown,\n context?: TraceRuntimeContext,\n): TraceDispatchResult {\n const payload = (rawPayload ?? {}) as Partial<TraceEvent> & { level?: unknown };\n const level = normalizeTraceLevel(payload.level);\n\n if (hasValidRemoteIdentity(payload)) {\n // The renderer already admitted this event: preserve its identity, merge\n // main-side runtime context, and ingest without re-stamping.\n const merged = mergeTraceRuntimeContext(payload, context);\n getGlobalTraceHub().ingest({\n ...merged,\n level,\n process: 'renderer',\n timestamp: payload.timestamp,\n traceSeq: payload.traceSeq,\n ...(typeof payload.producerId === 'string' && payload.producerId.trim().length > 0\n ? { producerId: payload.producerId }\n : {}),\n });\n return { ok: true, forwarded: true };\n }\n\n // Legacy sender without identity: fall back to main-side re-admission.\n getGlobalTraceHub().publish('renderer', level, mergeTraceRuntimeContext(payload, context));\n return {\n ok: true,\n forwarded: true,\n };\n}\n\n/**\n * Delivers an already-admitted remote trace event (e.g. a renderer event\n * unwrapped from a persisted IPC batch) to this process's sinks and events$\n * observers. Identity is preserved: no new timestamp, traceSeq, or producerId\n * is assigned, this hub's own counter does not advance, and the event is not\n * re-forwarded through any renderer transport.\n */\nexport function ingestRemoteTraceEvent(\n event: TraceEvent,\n context?: TraceRuntimeContext,\n): boolean {\n if (!hasValidRemoteIdentity(event)) {\n return false;\n }\n const merged = context\n ? { ...mergeTraceRuntimeContext(event, context), level: event.level, process: event.process, timestamp: event.timestamp, traceSeq: event.traceSeq, ...(event.producerId ? { producerId: event.producerId } : {}) }\n : event;\n getGlobalTraceHub().ingest(merged as TraceEvent);\n return true;\n}\n\nexport function setRendererTraceTransport(fn: ((payload: unknown) => void) | null): void {\n customRendererTraceTransport = fn;\n}\n\nexport function emitRendererTrace(level: TraceLevel, input: TraceInput): void {\n if (!rendererEnabled) {\n return;\n }\n // Gate before admission so gated-out events consume no traceSeq.\n if (traceLevelOrder(level) < traceLevelOrder(rendererMinLevel)) {\n return;\n }\n\n // Single admission point: the same event (with timestamp/traceSeq/producerId)\n // is what local sinks, events$ subscribers, and the transport all see.\n const event = getGlobalTraceHub().admitRenderer(level, normalizeTraceInput(input));\n\n if (customRendererTraceTransport) {\n try {\n customRendererTraceTransport(event);\n return;\n } catch {\n // Fall through to bridge.__trace\n }\n }\n\n const bridge = resolveTraceBridge();\n if (!bridge || typeof bridge.__trace !== 'function') {\n return;\n }\n try {\n bridge.__trace(event);\n } catch {\n // Tracing is observational and must never break the caller.\n }\n}\n\nexport function clearTraceHubForTests(): void {\n const globalObj = globalThis as GlobalWithTraceHub;\n delete globalObj[TRACE_HUB_SYMBOL];\n rendererMinLevel = 'debug';\n rendererEnabled = false;\n customRendererTraceTransport = null;\n traceProducerId = null;\n}\n"],"mappings":"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","names":["process"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import 'rxjs';
|
|
2
|
-
export { S as StandardTraceLevel, T as TraceDispatchResult, a as TraceEvent, b as TraceInput, c as TraceLevel, d as TraceProcess, e as TraceRuntimeContext, f as TraceWaitOptions, i as clearTraceHubForTests,
|
|
2
|
+
export { S as StandardTraceLevel, T as TraceDispatchResult, a as TraceEvent, b as TraceInput, c as TraceLevel, d as TraceProcess, e as TraceRuntimeContext, f as TraceWaitOptions, i as clearTraceHubForTests, o as dispatchRendererTracePayload, q as emitRendererTrace, j as getTraceEvents$, k as getTraceProducerId, l as ingestRemoteTraceEvent, v as normalizeTraceLevel, p as publishMainTrace, m as publishTestTrace, r as registerTraceSink, t as setMainTraceMinLevel, s as setRendererTraceEnabled, u as setRendererTraceMinLevel, n as setRendererTraceTransport } from '../trace_hub-Cpo_nVze.cjs';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import 'rxjs';
|
|
2
|
-
export { S as StandardTraceLevel, T as TraceDispatchResult, a as TraceEvent, b as TraceInput, c as TraceLevel, d as TraceProcess, e as TraceRuntimeContext, f as TraceWaitOptions, i as clearTraceHubForTests,
|
|
2
|
+
export { S as StandardTraceLevel, T as TraceDispatchResult, a as TraceEvent, b as TraceInput, c as TraceLevel, d as TraceProcess, e as TraceRuntimeContext, f as TraceWaitOptions, i as clearTraceHubForTests, o as dispatchRendererTracePayload, q as emitRendererTrace, j as getTraceEvents$, k as getTraceProducerId, l as ingestRemoteTraceEvent, v as normalizeTraceLevel, p as publishMainTrace, m as publishTestTrace, r as registerTraceSink, t as setMainTraceMinLevel, s as setRendererTraceEnabled, u as setRendererTraceMinLevel, n as setRendererTraceTransport } from '../trace_hub-Cpo_nVze.js';
|