@noego/wood 0.0.1
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 +107 -0
- package/bin/axe.js +202 -0
- package/bin/stick.js +96 -0
- package/bin/wood.js +572 -0
- package/dist/bridge/backend_bridge.cjs +186 -0
- package/dist/bridge/backend_bridge.cjs.map +1 -0
- package/dist/bridge/backend_bridge.d.cts +32 -0
- package/dist/bridge/backend_bridge.d.ts +32 -0
- package/dist/bridge/backend_bridge.js +152 -0
- package/dist/bridge/backend_bridge.js.map +1 -0
- package/dist/bridge/backend_entry.cjs +64 -0
- package/dist/bridge/backend_entry.cjs.map +1 -0
- package/dist/bridge/backend_entry.d.cts +14 -0
- package/dist/bridge/backend_entry.d.ts +14 -0
- package/dist/bridge/backend_entry.js +39 -0
- package/dist/bridge/backend_entry.js.map +1 -0
- package/dist/bridge/index.cjs +34 -0
- package/dist/bridge/index.cjs.map +1 -0
- package/dist/bridge/index.d.cts +2 -0
- package/dist/bridge/index.d.ts +2 -0
- package/dist/bridge/index.js +8 -0
- package/dist/bridge/index.js.map +1 -0
- package/dist/client/controller_contract.cjs +17 -0
- package/dist/client/controller_contract.cjs.map +1 -0
- package/dist/client/controller_contract.d.cts +15 -0
- package/dist/client/controller_contract.d.ts +15 -0
- package/dist/client/controller_contract.js +1 -0
- package/dist/client/controller_contract.js.map +1 -0
- package/dist/client/global_polyfill.cjs +6 -0
- package/dist/client/global_polyfill.cjs.map +1 -0
- package/dist/client/global_polyfill.d.cts +2 -0
- package/dist/client/global_polyfill.d.ts +2 -0
- package/dist/client/global_polyfill.js +5 -0
- package/dist/client/global_polyfill.js.map +1 -0
- package/dist/client/index.cjs +451 -0
- package/dist/client/index.cjs.map +1 -0
- package/dist/client/index.d.cts +75 -0
- package/dist/client/index.d.ts +75 -0
- package/dist/client/index.js +414 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/wood_controller.svelte.cjs +110 -0
- package/dist/client/wood_controller.svelte.cjs.map +1 -0
- package/dist/client/wood_controller.svelte.d.cts +30 -0
- package/dist/client/wood_controller.svelte.d.ts +30 -0
- package/dist/client/wood_controller.svelte.js +86 -0
- package/dist/client/wood_controller.svelte.js.map +1 -0
- package/dist/codegen/controller_registration_generator.cjs +138 -0
- package/dist/codegen/controller_registration_generator.cjs.map +1 -0
- package/dist/codegen/controller_registration_generator.d.cts +18 -0
- package/dist/codegen/controller_registration_generator.d.ts +18 -0
- package/dist/codegen/controller_registration_generator.js +104 -0
- package/dist/codegen/controller_registration_generator.js.map +1 -0
- package/dist/codegen/index.cjs +50 -0
- package/dist/codegen/index.cjs.map +1 -0
- package/dist/codegen/index.d.cts +10 -0
- package/dist/codegen/index.d.ts +10 -0
- package/dist/codegen/index.js +19 -0
- package/dist/codegen/index.js.map +1 -0
- package/dist/codegen/preload_generator.cjs +151 -0
- package/dist/codegen/preload_generator.cjs.map +1 -0
- package/dist/codegen/preload_generator.d.cts +8 -0
- package/dist/codegen/preload_generator.d.ts +8 -0
- package/dist/codegen/preload_generator.js +127 -0
- package/dist/codegen/preload_generator.js.map +1 -0
- package/dist/codegen/renderer_app_generator.cjs +397 -0
- package/dist/codegen/renderer_app_generator.cjs.map +1 -0
- package/dist/codegen/renderer_app_generator.d.cts +13 -0
- package/dist/codegen/renderer_app_generator.d.ts +13 -0
- package/dist/codegen/renderer_app_generator.js +363 -0
- package/dist/codegen/renderer_app_generator.js.map +1 -0
- package/dist/codegen/renderer_controller_registration_generator.cjs +122 -0
- package/dist/codegen/renderer_controller_registration_generator.cjs.map +1 -0
- package/dist/codegen/renderer_controller_registration_generator.d.cts +9 -0
- package/dist/codegen/renderer_controller_registration_generator.d.ts +9 -0
- package/dist/codegen/renderer_controller_registration_generator.js +88 -0
- package/dist/codegen/renderer_controller_registration_generator.js.map +1 -0
- package/dist/codegen/renderer_view_manifest_generator.cjs +126 -0
- package/dist/codegen/renderer_view_manifest_generator.cjs.map +1 -0
- package/dist/codegen/renderer_view_manifest_generator.d.cts +11 -0
- package/dist/codegen/renderer_view_manifest_generator.d.ts +11 -0
- package/dist/codegen/renderer_view_manifest_generator.js +92 -0
- package/dist/codegen/renderer_view_manifest_generator.js.map +1 -0
- package/dist/codegen/runtime_generator.cjs +156 -0
- package/dist/codegen/runtime_generator.cjs.map +1 -0
- package/dist/codegen/runtime_generator.d.cts +14 -0
- package/dist/codegen/runtime_generator.d.ts +14 -0
- package/dist/codegen/runtime_generator.js +122 -0
- package/dist/codegen/runtime_generator.js.map +1 -0
- package/dist/codegen/test_mock_generator.cjs +98 -0
- package/dist/codegen/test_mock_generator.cjs.map +1 -0
- package/dist/codegen/test_mock_generator.d.cts +5 -0
- package/dist/codegen/test_mock_generator.d.ts +5 -0
- package/dist/codegen/test_mock_generator.js +74 -0
- package/dist/codegen/test_mock_generator.js.map +1 -0
- package/dist/codegen/type_generator.cjs +203 -0
- package/dist/codegen/type_generator.cjs.map +1 -0
- package/dist/codegen/type_generator.d.cts +5 -0
- package/dist/codegen/type_generator.d.ts +5 -0
- package/dist/codegen/type_generator.js +179 -0
- package/dist/codegen/type_generator.js.map +1 -0
- package/dist/components/contextMenu.cjs +163 -0
- package/dist/components/contextMenu.cjs.map +1 -0
- package/dist/components/contextMenu.d.cts +43 -0
- package/dist/components/contextMenu.d.ts +43 -0
- package/dist/components/contextMenu.js +138 -0
- package/dist/components/contextMenu.js.map +1 -0
- package/dist/config/config_parser.cjs +176 -0
- package/dist/config/config_parser.cjs.map +1 -0
- package/dist/config/config_parser.d.cts +9 -0
- package/dist/config/config_parser.d.ts +9 -0
- package/dist/config/config_parser.js +142 -0
- package/dist/config/config_parser.js.map +1 -0
- package/dist/config/index.cjs +29 -0
- package/dist/config/index.cjs.map +1 -0
- package/dist/config/index.d.cts +2 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.js +5 -0
- package/dist/config/index.js.map +1 -0
- package/dist/controller/__fixtures__/controllers/chat.cjs +32 -0
- package/dist/controller/__fixtures__/controllers/chat.cjs.map +1 -0
- package/dist/controller/__fixtures__/controllers/chat.d.cts +11 -0
- package/dist/controller/__fixtures__/controllers/chat.d.ts +11 -0
- package/dist/controller/__fixtures__/controllers/chat.js +12 -0
- package/dist/controller/__fixtures__/controllers/chat.js.map +1 -0
- package/dist/controller/__fixtures__/controllers/not_a_class.cjs +29 -0
- package/dist/controller/__fixtures__/controllers/not_a_class.cjs.map +1 -0
- package/dist/controller/__fixtures__/controllers/not_a_class.d.cts +3 -0
- package/dist/controller/__fixtures__/controllers/not_a_class.d.ts +3 -0
- package/dist/controller/__fixtures__/controllers/not_a_class.js +5 -0
- package/dist/controller/__fixtures__/controllers/not_a_class.js.map +1 -0
- package/dist/controller/__fixtures__/controllers/settings.controller.cjs +32 -0
- package/dist/controller/__fixtures__/controllers/settings.controller.cjs.map +1 -0
- package/dist/controller/__fixtures__/controllers/settings.controller.d.cts +12 -0
- package/dist/controller/__fixtures__/controllers/settings.controller.d.ts +12 -0
- package/dist/controller/__fixtures__/controllers/settings.controller.js +12 -0
- package/dist/controller/__fixtures__/controllers/settings.controller.js.map +1 -0
- package/dist/controller/__fixtures__/controllers/test.cjs +29 -0
- package/dist/controller/__fixtures__/controllers/test.cjs.map +1 -0
- package/dist/controller/__fixtures__/controllers/test.d.cts +7 -0
- package/dist/controller/__fixtures__/controllers/test.d.ts +7 -0
- package/dist/controller/__fixtures__/controllers/test.js +9 -0
- package/dist/controller/__fixtures__/controllers/test.js.map +1 -0
- package/dist/controller/controller_resolver.cjs +180 -0
- package/dist/controller/controller_resolver.cjs.map +1 -0
- package/dist/controller/controller_resolver.d.cts +51 -0
- package/dist/controller/controller_resolver.d.ts +51 -0
- package/dist/controller/controller_resolver.js +145 -0
- package/dist/controller/controller_resolver.js.map +1 -0
- package/dist/controller/index.cjs +31 -0
- package/dist/controller/index.cjs.map +1 -0
- package/dist/controller/index.d.cts +2 -0
- package/dist/controller/index.d.ts +2 -0
- package/dist/controller/index.js +6 -0
- package/dist/controller/index.js.map +1 -0
- package/dist/dev/backend_watcher.cjs +108 -0
- package/dist/dev/backend_watcher.cjs.map +1 -0
- package/dist/dev/backend_watcher.d.cts +22 -0
- package/dist/dev/backend_watcher.d.ts +22 -0
- package/dist/dev/backend_watcher.js +84 -0
- package/dist/dev/backend_watcher.js.map +1 -0
- package/dist/dev/dev_metadata.cjs +94 -0
- package/dist/dev/dev_metadata.cjs.map +1 -0
- package/dist/dev/dev_metadata.d.cts +20 -0
- package/dist/dev/dev_metadata.d.ts +20 -0
- package/dist/dev/dev_metadata.js +52 -0
- package/dist/dev/dev_metadata.js.map +1 -0
- package/dist/dev/esbuild_backend.cjs +124 -0
- package/dist/dev/esbuild_backend.cjs.map +1 -0
- package/dist/dev/esbuild_backend.d.cts +30 -0
- package/dist/dev/esbuild_backend.d.ts +30 -0
- package/dist/dev/esbuild_backend.js +90 -0
- package/dist/dev/esbuild_backend.js.map +1 -0
- package/dist/dev/index.cjs +57 -0
- package/dist/dev/index.cjs.map +1 -0
- package/dist/dev/index.d.cts +8 -0
- package/dist/dev/index.d.ts +8 -0
- package/dist/dev/index.js +31 -0
- package/dist/dev/index.js.map +1 -0
- package/dist/dev/wood_dev_server.cjs +220 -0
- package/dist/dev/wood_dev_server.cjs.map +1 -0
- package/dist/dev/wood_dev_server.d.cts +39 -0
- package/dist/dev/wood_dev_server.d.ts +39 -0
- package/dist/dev/wood_dev_server.js +186 -0
- package/dist/dev/wood_dev_server.js.map +1 -0
- package/dist/dev/yaml_watcher.cjs +142 -0
- package/dist/dev/yaml_watcher.cjs.map +1 -0
- package/dist/dev/yaml_watcher.d.cts +22 -0
- package/dist/dev/yaml_watcher.d.ts +22 -0
- package/dist/dev/yaml_watcher.js +108 -0
- package/dist/dev/yaml_watcher.js.map +1 -0
- package/dist/electron/index.cjs +176 -0
- package/dist/electron/index.cjs.map +1 -0
- package/dist/electron/index.d.cts +29 -0
- package/dist/electron/index.d.ts +29 -0
- package/dist/electron/index.js +140 -0
- package/dist/electron/index.js.map +1 -0
- package/dist/index.cjs +178 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +41 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.js +122 -0
- package/dist/index.js.map +1 -0
- package/dist/ipc/index.cjs +80 -0
- package/dist/ipc/index.cjs.map +1 -0
- package/dist/ipc/index.d.cts +12 -0
- package/dist/ipc/index.d.ts +12 -0
- package/dist/ipc/index.js +57 -0
- package/dist/ipc/index.js.map +1 -0
- package/dist/ipc/shared.cjs +50 -0
- package/dist/ipc/shared.cjs.map +1 -0
- package/dist/ipc/shared.d.cts +10 -0
- package/dist/ipc/shared.d.ts +10 -0
- package/dist/ipc/shared.js +23 -0
- package/dist/ipc/shared.js.map +1 -0
- package/dist/loader/__fixtures__/layouts/app.load.cjs +27 -0
- package/dist/loader/__fixtures__/layouts/app.load.cjs.map +1 -0
- package/dist/loader/__fixtures__/layouts/app.load.d.cts +5 -0
- package/dist/loader/__fixtures__/layouts/app.load.d.ts +5 -0
- package/dist/loader/__fixtures__/layouts/app.load.js +7 -0
- package/dist/loader/__fixtures__/layouts/app.load.js.map +1 -0
- package/dist/loader/__fixtures__/views/test/page.load.cjs +27 -0
- package/dist/loader/__fixtures__/views/test/page.load.cjs.map +1 -0
- package/dist/loader/__fixtures__/views/test/page.load.d.cts +6 -0
- package/dist/loader/__fixtures__/views/test/page.load.d.ts +6 -0
- package/dist/loader/__fixtures__/views/test/page.load.js +7 -0
- package/dist/loader/__fixtures__/views/test/page.load.js.map +1 -0
- package/dist/loader/index.cjs +29 -0
- package/dist/loader/index.cjs.map +1 -0
- package/dist/loader/index.d.cts +3 -0
- package/dist/loader/index.d.ts +3 -0
- package/dist/loader/index.js +5 -0
- package/dist/loader/index.js.map +1 -0
- package/dist/loader/loader_runner.cjs +109 -0
- package/dist/loader/loader_runner.cjs.map +1 -0
- package/dist/loader/loader_runner.d.cts +27 -0
- package/dist/loader/loader_runner.d.ts +27 -0
- package/dist/loader/loader_runner.js +75 -0
- package/dist/loader/loader_runner.js.map +1 -0
- package/dist/main/index.cjs +500 -0
- package/dist/main/index.cjs.map +1 -0
- package/dist/main/index.d.cts +98 -0
- package/dist/main/index.d.ts +98 -0
- package/dist/main/index.js +475 -0
- package/dist/main/index.js.map +1 -0
- package/dist/middleware/__fixtures__/middleware/auth.cjs +44 -0
- package/dist/middleware/__fixtures__/middleware/auth.cjs.map +1 -0
- package/dist/middleware/__fixtures__/middleware/auth.d.cts +6 -0
- package/dist/middleware/__fixtures__/middleware/auth.d.ts +6 -0
- package/dist/middleware/__fixtures__/middleware/auth.js +19 -0
- package/dist/middleware/__fixtures__/middleware/auth.js.map +1 -0
- package/dist/middleware/__fixtures__/middleware/sequence.cjs +47 -0
- package/dist/middleware/__fixtures__/middleware/sequence.cjs.map +1 -0
- package/dist/middleware/__fixtures__/middleware/sequence.d.cts +7 -0
- package/dist/middleware/__fixtures__/middleware/sequence.d.ts +7 -0
- package/dist/middleware/__fixtures__/middleware/sequence.js +21 -0
- package/dist/middleware/__fixtures__/middleware/sequence.js.map +1 -0
- package/dist/middleware/index.cjs +34 -0
- package/dist/middleware/index.cjs.map +1 -0
- package/dist/middleware/index.d.cts +3 -0
- package/dist/middleware/index.d.ts +3 -0
- package/dist/middleware/index.js +8 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/middleware_pipeline.cjs +55 -0
- package/dist/middleware/middleware_pipeline.cjs.map +1 -0
- package/dist/middleware/middleware_pipeline.d.cts +13 -0
- package/dist/middleware/middleware_pipeline.d.ts +13 -0
- package/dist/middleware/middleware_pipeline.js +30 -0
- package/dist/middleware/middleware_pipeline.js.map +1 -0
- package/dist/middleware/middleware_resolver.cjs +91 -0
- package/dist/middleware/middleware_resolver.cjs.map +1 -0
- package/dist/middleware/middleware_resolver.d.cts +19 -0
- package/dist/middleware/middleware_resolver.d.ts +19 -0
- package/dist/middleware/middleware_resolver.js +57 -0
- package/dist/middleware/middleware_resolver.js.map +1 -0
- package/dist/navigation/index.cjs +205 -0
- package/dist/navigation/index.cjs.map +1 -0
- package/dist/navigation/index.d.cts +34 -0
- package/dist/navigation/index.d.ts +34 -0
- package/dist/navigation/index.js +176 -0
- package/dist/navigation/index.js.map +1 -0
- package/dist/parser/index.cjs +36 -0
- package/dist/parser/index.cjs.map +1 -0
- package/dist/parser/index.d.cts +4 -0
- package/dist/parser/index.d.ts +4 -0
- package/dist/parser/index.js +9 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/operations_parser.cjs +94 -0
- package/dist/parser/operations_parser.cjs.map +1 -0
- package/dist/parser/operations_parser.d.cts +7 -0
- package/dist/parser/operations_parser.d.ts +7 -0
- package/dist/parser/operations_parser.js +59 -0
- package/dist/parser/operations_parser.js.map +1 -0
- package/dist/parser/views_parser.cjs +153 -0
- package/dist/parser/views_parser.cjs.map +1 -0
- package/dist/parser/views_parser.d.cts +11 -0
- package/dist/parser/views_parser.d.ts +11 -0
- package/dist/parser/views_parser.js +118 -0
- package/dist/parser/views_parser.js.map +1 -0
- package/dist/router/index.cjs +31 -0
- package/dist/router/index.cjs.map +1 -0
- package/dist/router/index.d.cts +2 -0
- package/dist/router/index.d.ts +2 -0
- package/dist/router/index.js +6 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/wood_router.cjs +246 -0
- package/dist/router/wood_router.cjs.map +1 -0
- package/dist/router/wood_router.d.cts +70 -0
- package/dist/router/wood_router.d.ts +70 -0
- package/dist/router/wood_router.js +221 -0
- package/dist/router/wood_router.js.map +1 -0
- package/dist/runtime/application_root.cjs +98 -0
- package/dist/runtime/application_root.cjs.map +1 -0
- package/dist/runtime/application_root.d.cts +5 -0
- package/dist/runtime/application_root.d.ts +5 -0
- package/dist/runtime/application_root.js +61 -0
- package/dist/runtime/application_root.js.map +1 -0
- package/dist/runtime/get_container.cjs +96 -0
- package/dist/runtime/get_container.cjs.map +1 -0
- package/dist/runtime/get_container.d.cts +16 -0
- package/dist/runtime/get_container.d.ts +16 -0
- package/dist/runtime/get_container.js +60 -0
- package/dist/runtime/get_container.js.map +1 -0
- package/dist/runtime/index.cjs +49 -0
- package/dist/runtime/index.cjs.map +1 -0
- package/dist/runtime/index.d.cts +8 -0
- package/dist/runtime/index.d.ts +8 -0
- package/dist/runtime/index.js +24 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/renderer_log_dispatcher.cjs +79 -0
- package/dist/runtime/renderer_log_dispatcher.cjs.map +1 -0
- package/dist/runtime/renderer_log_dispatcher.d.cts +27 -0
- package/dist/runtime/renderer_log_dispatcher.d.ts +27 -0
- package/dist/runtime/renderer_log_dispatcher.js +54 -0
- package/dist/runtime/renderer_log_dispatcher.js.map +1 -0
- package/dist/runtime/runtime.cjs +158 -0
- package/dist/runtime/runtime.cjs.map +1 -0
- package/dist/runtime/runtime.d.cts +35 -0
- package/dist/runtime/runtime.d.ts +35 -0
- package/dist/runtime/runtime.js +136 -0
- package/dist/runtime/runtime.js.map +1 -0
- package/dist/stick/allow_cli.cjs +39 -0
- package/dist/stick/allow_cli.cjs.map +1 -0
- package/dist/stick/allow_cli.d.cts +6 -0
- package/dist/stick/allow_cli.d.ts +6 -0
- package/dist/stick/allow_cli.js +15 -0
- package/dist/stick/allow_cli.js.map +1 -0
- package/dist/stick/index.cjs +276 -0
- package/dist/stick/index.cjs.map +1 -0
- package/dist/stick/index.d.cts +111 -0
- package/dist/stick/index.d.ts +111 -0
- package/dist/stick/index.js +237 -0
- package/dist/stick/index.js.map +1 -0
- package/dist/stick/static_renderer.cjs +144 -0
- package/dist/stick/static_renderer.cjs.map +1 -0
- package/dist/stick/static_renderer.d.cts +51 -0
- package/dist/stick/static_renderer.d.ts +51 -0
- package/dist/stick/static_renderer.js +119 -0
- package/dist/stick/static_renderer.js.map +1 -0
- package/dist/stick/template_resolver.cjs +156 -0
- package/dist/stick/template_resolver.cjs.map +1 -0
- package/dist/stick/template_resolver.d.cts +7 -0
- package/dist/stick/template_resolver.d.ts +7 -0
- package/dist/stick/template_resolver.js +122 -0
- package/dist/stick/template_resolver.js.map +1 -0
- package/dist/testing/create_controller_harness.cjs +175 -0
- package/dist/testing/create_controller_harness.cjs.map +1 -0
- package/dist/testing/create_controller_harness.d.cts +37 -0
- package/dist/testing/create_controller_harness.d.ts +37 -0
- package/dist/testing/create_controller_harness.js +162 -0
- package/dist/testing/create_controller_harness.js.map +1 -0
- package/dist/testing/create_router_bridge.cjs +103 -0
- package/dist/testing/create_router_bridge.cjs.map +1 -0
- package/dist/testing/create_router_bridge.d.cts +71 -0
- package/dist/testing/create_router_bridge.d.ts +71 -0
- package/dist/testing/create_router_bridge.js +78 -0
- package/dist/testing/create_router_bridge.js.map +1 -0
- package/dist/testing/create_test_container.cjs +72 -0
- package/dist/testing/create_test_container.cjs.map +1 -0
- package/dist/testing/create_test_container.d.cts +14 -0
- package/dist/testing/create_test_container.d.ts +14 -0
- package/dist/testing/create_test_container.js +48 -0
- package/dist/testing/create_test_container.js.map +1 -0
- package/dist/testing/create_test_router.cjs +57 -0
- package/dist/testing/create_test_router.cjs.map +1 -0
- package/dist/testing/create_test_router.d.cts +19 -0
- package/dist/testing/create_test_router.d.ts +19 -0
- package/dist/testing/create_test_router.js +33 -0
- package/dist/testing/create_test_router.js.map +1 -0
- package/dist/testing/index.cjs +48 -0
- package/dist/testing/index.cjs.map +1 -0
- package/dist/testing/index.d.cts +12 -0
- package/dist/testing/index.d.ts +12 -0
- package/dist/testing/index.js +22 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/mock_electron.cjs +100 -0
- package/dist/testing/mock_electron.cjs.map +1 -0
- package/dist/testing/mock_electron.d.cts +12 -0
- package/dist/testing/mock_electron.d.ts +12 -0
- package/dist/testing/mock_electron.js +75 -0
- package/dist/testing/mock_electron.js.map +1 -0
- package/dist/tracing/index.cjs +56 -0
- package/dist/tracing/index.cjs.map +1 -0
- package/dist/tracing/index.d.cts +4 -0
- package/dist/tracing/index.d.ts +4 -0
- package/dist/tracing/index.js +35 -0
- package/dist/tracing/index.js.map +1 -0
- package/dist/tracing/trace_hub.cjs +213 -0
- package/dist/tracing/trace_hub.cjs.map +1 -0
- package/dist/tracing/trace_hub.d.cts +47 -0
- package/dist/tracing/trace_hub.d.ts +47 -0
- package/dist/tracing/trace_hub.js +172 -0
- package/dist/tracing/trace_hub.js.map +1 -0
- package/dist/tracing/trace_provider.cjs +200 -0
- package/dist/tracing/trace_provider.cjs.map +1 -0
- package/dist/tracing/trace_provider.d.cts +69 -0
- package/dist/tracing/trace_provider.d.ts +69 -0
- package/dist/tracing/trace_provider.js +179 -0
- package/dist/tracing/trace_provider.js.map +1 -0
- package/dist/types/bridge.cjs +51 -0
- package/dist/types/bridge.cjs.map +1 -0
- package/dist/types/bridge.d.cts +56 -0
- package/dist/types/bridge.d.ts +56 -0
- package/dist/types/bridge.js +25 -0
- package/dist/types/bridge.js.map +1 -0
- package/dist/types/config.cjs +17 -0
- package/dist/types/config.cjs.map +1 -0
- package/dist/types/config.d.cts +74 -0
- package/dist/types/config.d.ts +74 -0
- package/dist/types/config.js +1 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/context.cjs +17 -0
- package/dist/types/context.cjs.map +1 -0
- package/dist/types/context.d.cts +61 -0
- package/dist/types/context.d.ts +61 -0
- package/dist/types/context.js +1 -0
- package/dist/types/context.js.map +1 -0
- package/dist/types/context_menu.cjs +17 -0
- package/dist/types/context_menu.cjs.map +1 -0
- package/dist/types/context_menu.d.cts +30 -0
- package/dist/types/context_menu.d.ts +30 -0
- package/dist/types/context_menu.js +1 -0
- package/dist/types/context_menu.js.map +1 -0
- package/dist/types/index.cjs +33 -0
- package/dist/types/index.cjs.map +1 -0
- package/dist/types/index.d.cts +6 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/operations.cjs +17 -0
- package/dist/types/operations.cjs.map +1 -0
- package/dist/types/operations.d.cts +39 -0
- package/dist/types/operations.d.ts +39 -0
- package/dist/types/operations.js +1 -0
- package/dist/types/operations.js.map +1 -0
- package/dist/types/views.cjs +17 -0
- package/dist/types/views.cjs.map +1 -0
- package/dist/types/views.d.cts +44 -0
- package/dist/types/views.d.ts +44 -0
- package/dist/types/views.js +1 -0
- package/dist/types/views.js.map +1 -0
- package/dist/validation/index.cjs +29 -0
- package/dist/validation/index.cjs.map +1 -0
- package/dist/validation/index.d.cts +1 -0
- package/dist/validation/index.d.ts +1 -0
- package/dist/validation/index.js +5 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/schema_validator.cjs +86 -0
- package/dist/validation/schema_validator.cjs.map +1 -0
- package/dist/validation/schema_validator.d.cts +24 -0
- package/dist/validation/schema_validator.d.ts +24 -0
- package/dist/validation/schema_validator.js +52 -0
- package/dist/validation/schema_validator.js.map +1 -0
- package/dist/window/index.cjs +32 -0
- package/dist/window/index.cjs.map +1 -0
- package/dist/window/index.d.cts +4 -0
- package/dist/window/index.d.ts +4 -0
- package/dist/window/index.js +7 -0
- package/dist/window/index.js.map +1 -0
- package/dist/window/window_manager.cjs +354 -0
- package/dist/window/window_manager.cjs.map +1 -0
- package/dist/window/window_manager.d.cts +172 -0
- package/dist/window/window_manager.d.ts +172 -0
- package/dist/window/window_manager.js +330 -0
- package/dist/window/window_manager.js.map +1 -0
- package/dist/window/window_state_store.cjs +129 -0
- package/dist/window/window_state_store.cjs.map +1 -0
- package/dist/window/window_state_store.d.cts +39 -0
- package/dist/window/window_state_store.d.ts +39 -0
- package/dist/window/window_state_store.js +105 -0
- package/dist/window/window_state_store.js.map +1 -0
- package/loaders/loader.mjs +46 -0
- package/package.json +119 -0
- package/src/components/ContextMenuProvider.svelte +145 -0
- package/src/components/NavigationShell.svelte +204 -0
- package/src/components/WoodRecursiveRender.svelte +91 -0
- package/src/components/contextMenu.ts +228 -0
- package/src/components/index.d.ts +14 -0
- package/src/components/index.js +2 -0
- package/src/stick/WoodRecursiveRender.svelte +74 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/tracing/index.ts"],"sourcesContent":["export {\n clearTraceHubForTests,\n createTraceCapture,\n dispatchRendererTracePayload,\n emitRendererTrace,\n getTraceEvents$,\n publishMainTrace,\n publishTestTrace,\n TraceCapture,\n type TraceCaptureOptions,\n type TraceDispatchResult,\n type TraceEvent,\n type TraceInput,\n type TraceLevel,\n type TraceProcess,\n type TraceWaitOptions,\n} from './trace_hub.js';\n\nexport {\n FrameworkTracer,\n MainTracer,\n RendererTracer,\n TestTracer,\n TraceProvider,\n TraceProviderConfiguration,\n type TraceProviderMode,\n type TraceRuntime,\n} from './trace_provider.js';\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAQK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;","names":[]}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var trace_hub_exports = {};
|
|
30
|
+
__export(trace_hub_exports, {
|
|
31
|
+
TraceCapture: () => TraceCapture,
|
|
32
|
+
clearTraceHubForTests: () => clearTraceHubForTests,
|
|
33
|
+
createTraceCapture: () => createTraceCapture,
|
|
34
|
+
dispatchRendererTracePayload: () => dispatchRendererTracePayload,
|
|
35
|
+
emitRendererTrace: () => emitRendererTrace,
|
|
36
|
+
getTraceEvents$: () => getTraceEvents$,
|
|
37
|
+
publishMainTrace: () => publishMainTrace,
|
|
38
|
+
publishTestTrace: () => publishTestTrace
|
|
39
|
+
});
|
|
40
|
+
module.exports = __toCommonJS(trace_hub_exports);
|
|
41
|
+
var import_rxjs = require("rxjs");
|
|
42
|
+
var import_operators = require("rxjs/operators");
|
|
43
|
+
const TRACE_HUB_SYMBOL = /* @__PURE__ */ Symbol.for("@noego/wood.trace.hub");
|
|
44
|
+
function normalizeTraceInput(raw) {
|
|
45
|
+
const input = raw ?? {};
|
|
46
|
+
const source = typeof input.source === "string" && input.source.trim().length > 0 ? input.source : "unknown";
|
|
47
|
+
const type = typeof input.type === "string" && input.type.trim().length > 0 ? input.type : "unknown";
|
|
48
|
+
const message = typeof input.message === "string" ? input.message : void 0;
|
|
49
|
+
const conversationId = typeof input.conversationId === "number" || typeof input.conversationId === "string" ? input.conversationId : void 0;
|
|
50
|
+
const payload = isRecord(input.payload) ? { ...input.payload } : void 0;
|
|
51
|
+
return {
|
|
52
|
+
source,
|
|
53
|
+
type,
|
|
54
|
+
...message ? { message } : {},
|
|
55
|
+
...conversationId !== void 0 ? { conversationId } : {},
|
|
56
|
+
...payload ? { payload } : {}
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function isRecord(value) {
|
|
60
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
61
|
+
}
|
|
62
|
+
function resolveTraceBridge() {
|
|
63
|
+
const globalObj = globalThis;
|
|
64
|
+
const bridge = globalObj.__NOEGO_WOOD_BRIDGE__ ?? globalObj.window?.__NOEGO_WOOD_BRIDGE__ ?? globalObj.wood ?? globalObj.window?.wood;
|
|
65
|
+
if (!bridge || typeof bridge !== "object") {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
return bridge;
|
|
69
|
+
}
|
|
70
|
+
class TraceCapture {
|
|
71
|
+
constructor(source$, options = {}) {
|
|
72
|
+
this.buffer = [];
|
|
73
|
+
this.pending = /* @__PURE__ */ new Set();
|
|
74
|
+
this.maxEvents = Math.max(1, options.maxEvents ?? 1e3);
|
|
75
|
+
this.subscription = source$.subscribe((event) => {
|
|
76
|
+
this.buffer.push(event);
|
|
77
|
+
if (this.buffer.length > this.maxEvents) {
|
|
78
|
+
this.buffer.splice(0, this.buffer.length - this.maxEvents);
|
|
79
|
+
}
|
|
80
|
+
for (const waiter of Array.from(this.pending)) {
|
|
81
|
+
if (!waiter.predicate(event)) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (waiter.timeoutId) {
|
|
85
|
+
clearTimeout(waiter.timeoutId);
|
|
86
|
+
}
|
|
87
|
+
this.pending.delete(waiter);
|
|
88
|
+
waiter.resolve(event);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
events() {
|
|
93
|
+
return [...this.buffer];
|
|
94
|
+
}
|
|
95
|
+
async waitFor(predicate, options = {}) {
|
|
96
|
+
const existing = this.buffer.find(predicate);
|
|
97
|
+
if (existing) {
|
|
98
|
+
return existing;
|
|
99
|
+
}
|
|
100
|
+
return new Promise((resolve, reject) => {
|
|
101
|
+
const waiter = {
|
|
102
|
+
predicate,
|
|
103
|
+
resolve,
|
|
104
|
+
reject
|
|
105
|
+
};
|
|
106
|
+
const timeoutMs = options.timeoutMs ?? 5e3;
|
|
107
|
+
waiter.timeoutId = setTimeout(() => {
|
|
108
|
+
this.pending.delete(waiter);
|
|
109
|
+
reject(new Error(`Timed out waiting for trace event after ${timeoutMs}ms`));
|
|
110
|
+
}, timeoutMs);
|
|
111
|
+
this.pending.add(waiter);
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
async writeArtifact(targetPath) {
|
|
115
|
+
const [{ mkdir, writeFile }, pathModule] = await Promise.all([
|
|
116
|
+
import("node:fs/promises"),
|
|
117
|
+
import("node:path")
|
|
118
|
+
]);
|
|
119
|
+
await mkdir(pathModule.dirname(targetPath), { recursive: true });
|
|
120
|
+
const lines = this.buffer.map((event) => JSON.stringify(event)).join("\n");
|
|
121
|
+
await writeFile(targetPath, `${lines}${lines.length > 0 ? "\n" : ""}`, "utf8");
|
|
122
|
+
}
|
|
123
|
+
stop() {
|
|
124
|
+
for (const waiter of this.pending) {
|
|
125
|
+
if (waiter.timeoutId) {
|
|
126
|
+
clearTimeout(waiter.timeoutId);
|
|
127
|
+
}
|
|
128
|
+
waiter.reject(new Error("Trace capture stopped before predicate matched"));
|
|
129
|
+
}
|
|
130
|
+
this.pending.clear();
|
|
131
|
+
this.subscription.unsubscribe();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
class TraceHub {
|
|
135
|
+
constructor() {
|
|
136
|
+
this.subject = new import_rxjs.Subject();
|
|
137
|
+
this.shared$ = this.subject.asObservable().pipe((0, import_operators.share)());
|
|
138
|
+
this.nextTraceSeq = 1;
|
|
139
|
+
}
|
|
140
|
+
get events$() {
|
|
141
|
+
return this.shared$;
|
|
142
|
+
}
|
|
143
|
+
publish(process, level, input) {
|
|
144
|
+
const normalized = normalizeTraceInput(input);
|
|
145
|
+
const event = {
|
|
146
|
+
...normalized,
|
|
147
|
+
level,
|
|
148
|
+
process,
|
|
149
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
150
|
+
traceSeq: this.nextTraceSeq++
|
|
151
|
+
};
|
|
152
|
+
this.subject.next(event);
|
|
153
|
+
return event;
|
|
154
|
+
}
|
|
155
|
+
capture(options = {}) {
|
|
156
|
+
return new TraceCapture(this.events$, options);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
function getGlobalTraceHub() {
|
|
160
|
+
const globalObj = globalThis;
|
|
161
|
+
if (!globalObj[TRACE_HUB_SYMBOL]) {
|
|
162
|
+
globalObj[TRACE_HUB_SYMBOL] = new TraceHub();
|
|
163
|
+
}
|
|
164
|
+
return globalObj[TRACE_HUB_SYMBOL];
|
|
165
|
+
}
|
|
166
|
+
function getTraceEvents$() {
|
|
167
|
+
return getGlobalTraceHub().events$;
|
|
168
|
+
}
|
|
169
|
+
function publishMainTrace(level, input) {
|
|
170
|
+
return getGlobalTraceHub().publish("main", level, input);
|
|
171
|
+
}
|
|
172
|
+
function publishTestTrace(process, level, input) {
|
|
173
|
+
return getGlobalTraceHub().publish(process, level, input);
|
|
174
|
+
}
|
|
175
|
+
function dispatchRendererTracePayload(rawPayload) {
|
|
176
|
+
const payload = rawPayload ?? {};
|
|
177
|
+
const level = payload.level === "debug" || payload.level === "info" || payload.level === "warn" || payload.level === "error" ? payload.level : "info";
|
|
178
|
+
getGlobalTraceHub().publish("renderer", level, payload);
|
|
179
|
+
return {
|
|
180
|
+
ok: true,
|
|
181
|
+
forwarded: true
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
function emitRendererTrace(level, input) {
|
|
185
|
+
const bridge = resolveTraceBridge();
|
|
186
|
+
if (!bridge || typeof bridge.__trace !== "function") {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
void bridge.__trace({
|
|
190
|
+
...normalizeTraceInput(input),
|
|
191
|
+
level
|
|
192
|
+
}).catch(() => {
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
function createTraceCapture(options = {}) {
|
|
196
|
+
return getGlobalTraceHub().capture(options);
|
|
197
|
+
}
|
|
198
|
+
function clearTraceHubForTests() {
|
|
199
|
+
const globalObj = globalThis;
|
|
200
|
+
delete globalObj[TRACE_HUB_SYMBOL];
|
|
201
|
+
}
|
|
202
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
203
|
+
0 && (module.exports = {
|
|
204
|
+
TraceCapture,
|
|
205
|
+
clearTraceHubForTests,
|
|
206
|
+
createTraceCapture,
|
|
207
|
+
dispatchRendererTracePayload,
|
|
208
|
+
emitRendererTrace,
|
|
209
|
+
getTraceEvents$,
|
|
210
|
+
publishMainTrace,
|
|
211
|
+
publishTestTrace
|
|
212
|
+
});
|
|
213
|
+
//# sourceMappingURL=trace_hub.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/tracing/trace_hub.ts"],"sourcesContent":["import { Observable, Subject, Subscription } from 'rxjs';\nimport { share } from 'rxjs/operators';\n\nexport type TraceLevel = 'debug' | 'info' | 'warn' | 'error';\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};\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 TraceCaptureOptions = {\n maxEvents?: number;\n};\n\nexport type TraceWaitOptions = {\n timeoutMs?: number;\n};\n\nconst TRACE_HUB_SYMBOL = Symbol.for('@noego/wood.trace.hub');\n\ntype PendingWaiter = {\n predicate: (event: TraceEvent) => boolean;\n resolve: (event: TraceEvent) => void;\n reject: (error: Error) => void;\n timeoutId?: ReturnType<typeof setTimeout>;\n};\n\ntype GlobalWithTraceHub = typeof globalThis & {\n [TRACE_HUB_SYMBOL]?: TraceHub;\n};\n\ntype TraceBridgeLike = Record<string, unknown> & {\n __trace?: (payload: unknown) => Promise<TraceDispatchResult>;\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 payload = isRecord(input.payload) ? { ...input.payload } : undefined;\n\n return {\n source,\n type,\n ...(message ? { message } : {}),\n ...(conversationId !== undefined ? { conversationId } : {}),\n ...(payload ? { payload } : {}),\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\nexport class TraceCapture {\n private readonly buffer: TraceEvent[] = [];\n private readonly pending = new Set<PendingWaiter>();\n private readonly maxEvents: number;\n private subscription: Subscription;\n\n constructor(\n source$: Observable<TraceEvent>,\n options: TraceCaptureOptions = {},\n ) {\n this.maxEvents = Math.max(1, options.maxEvents ?? 1000);\n this.subscription = source$.subscribe((event) => {\n this.buffer.push(event);\n if (this.buffer.length > this.maxEvents) {\n this.buffer.splice(0, this.buffer.length - this.maxEvents);\n }\n for (const waiter of Array.from(this.pending)) {\n if (!waiter.predicate(event)) {\n continue;\n }\n if (waiter.timeoutId) {\n clearTimeout(waiter.timeoutId);\n }\n this.pending.delete(waiter);\n waiter.resolve(event);\n }\n });\n }\n\n events(): TraceEvent[] {\n return [...this.buffer];\n }\n\n async waitFor(\n predicate: (event: TraceEvent) => boolean,\n options: TraceWaitOptions = {},\n ): Promise<TraceEvent> {\n const existing = this.buffer.find(predicate);\n if (existing) {\n return existing;\n }\n\n return new Promise<TraceEvent>((resolve, reject) => {\n const waiter: PendingWaiter = {\n predicate,\n resolve,\n reject,\n };\n const timeoutMs = options.timeoutMs ?? 5000;\n waiter.timeoutId = setTimeout(() => {\n this.pending.delete(waiter);\n reject(new Error(`Timed out waiting for trace event after ${timeoutMs}ms`));\n }, timeoutMs);\n this.pending.add(waiter);\n });\n }\n\n async writeArtifact(targetPath: string): Promise<void> {\n const [{ mkdir, writeFile }, pathModule] = await Promise.all([\n import('node:fs/promises'),\n import('node:path'),\n ]);\n await mkdir(pathModule.dirname(targetPath), { recursive: true });\n const lines = this.buffer.map((event) => JSON.stringify(event)).join('\\n');\n await writeFile(targetPath, `${lines}${lines.length > 0 ? '\\n' : ''}`, 'utf8');\n }\n\n stop(): void {\n for (const waiter of this.pending) {\n if (waiter.timeoutId) {\n clearTimeout(waiter.timeoutId);\n }\n waiter.reject(new Error('Trace capture stopped before predicate matched'));\n }\n this.pending.clear();\n this.subscription.unsubscribe();\n }\n}\n\nclass TraceHub {\n private readonly subject = new Subject<TraceEvent>();\n private readonly shared$ = this.subject.asObservable().pipe(share());\n private nextTraceSeq = 1;\n\n get events$(): Observable<TraceEvent> {\n return this.shared$;\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 this.subject.next(event);\n return event;\n }\n\n capture(options: TraceCaptureOptions = {}): TraceCapture {\n return new TraceCapture(this.events$, options);\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 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(rawPayload: unknown): TraceDispatchResult {\n const payload = (rawPayload ?? {}) as Partial<TraceInput> & { level?: TraceLevel };\n const level = payload.level === 'debug' || payload.level === 'info' || payload.level === 'warn' || payload.level === 'error'\n ? payload.level\n : 'info';\n getGlobalTraceHub().publish('renderer', level, payload);\n return {\n ok: true,\n forwarded: true,\n };\n}\n\nexport function emitRendererTrace(level: TraceLevel, input: TraceInput): void {\n const bridge = resolveTraceBridge();\n if (!bridge || typeof bridge.__trace !== 'function') {\n return;\n }\n void bridge.__trace({\n ...normalizeTraceInput(input),\n level,\n }).catch(() => {\n // Tracing is observational and must never break the caller.\n });\n}\n\nexport function createTraceCapture(options: TraceCaptureOptions = {}): TraceCapture {\n return getGlobalTraceHub().capture(options);\n}\n\nexport function clearTraceHubForTests(): void {\n const globalObj = globalThis as GlobalWithTraceHub;\n delete globalObj[TRACE_HUB_SYMBOL];\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
|
|
3
|
+
type TraceLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
4
|
+
type TraceProcess = 'main' | 'renderer' | 'test';
|
|
5
|
+
type TraceInput = {
|
|
6
|
+
source: string;
|
|
7
|
+
type: string;
|
|
8
|
+
message?: string;
|
|
9
|
+
conversationId?: number | string;
|
|
10
|
+
payload?: Record<string, unknown>;
|
|
11
|
+
};
|
|
12
|
+
type TraceEvent = TraceInput & {
|
|
13
|
+
level: TraceLevel;
|
|
14
|
+
process: TraceProcess;
|
|
15
|
+
timestamp: string;
|
|
16
|
+
traceSeq: number;
|
|
17
|
+
};
|
|
18
|
+
type TraceDispatchResult = {
|
|
19
|
+
ok: boolean;
|
|
20
|
+
forwarded: boolean;
|
|
21
|
+
};
|
|
22
|
+
type TraceCaptureOptions = {
|
|
23
|
+
maxEvents?: number;
|
|
24
|
+
};
|
|
25
|
+
type TraceWaitOptions = {
|
|
26
|
+
timeoutMs?: number;
|
|
27
|
+
};
|
|
28
|
+
declare class TraceCapture {
|
|
29
|
+
private readonly buffer;
|
|
30
|
+
private readonly pending;
|
|
31
|
+
private readonly maxEvents;
|
|
32
|
+
private subscription;
|
|
33
|
+
constructor(source$: Observable<TraceEvent>, options?: TraceCaptureOptions);
|
|
34
|
+
events(): TraceEvent[];
|
|
35
|
+
waitFor(predicate: (event: TraceEvent) => boolean, options?: TraceWaitOptions): Promise<TraceEvent>;
|
|
36
|
+
writeArtifact(targetPath: string): Promise<void>;
|
|
37
|
+
stop(): void;
|
|
38
|
+
}
|
|
39
|
+
declare function getTraceEvents$(): Observable<TraceEvent>;
|
|
40
|
+
declare function publishMainTrace(level: TraceLevel, input: unknown): TraceEvent;
|
|
41
|
+
declare function publishTestTrace(process: TraceProcess, level: TraceLevel, input: unknown): TraceEvent;
|
|
42
|
+
declare function dispatchRendererTracePayload(rawPayload: unknown): TraceDispatchResult;
|
|
43
|
+
declare function emitRendererTrace(level: TraceLevel, input: TraceInput): void;
|
|
44
|
+
declare function createTraceCapture(options?: TraceCaptureOptions): TraceCapture;
|
|
45
|
+
declare function clearTraceHubForTests(): void;
|
|
46
|
+
|
|
47
|
+
export { TraceCapture, type TraceCaptureOptions, type TraceDispatchResult, type TraceEvent, type TraceInput, type TraceLevel, type TraceProcess, type TraceWaitOptions, clearTraceHubForTests, createTraceCapture, dispatchRendererTracePayload, emitRendererTrace, getTraceEvents$, publishMainTrace, publishTestTrace };
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
|
|
3
|
+
type TraceLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
4
|
+
type TraceProcess = 'main' | 'renderer' | 'test';
|
|
5
|
+
type TraceInput = {
|
|
6
|
+
source: string;
|
|
7
|
+
type: string;
|
|
8
|
+
message?: string;
|
|
9
|
+
conversationId?: number | string;
|
|
10
|
+
payload?: Record<string, unknown>;
|
|
11
|
+
};
|
|
12
|
+
type TraceEvent = TraceInput & {
|
|
13
|
+
level: TraceLevel;
|
|
14
|
+
process: TraceProcess;
|
|
15
|
+
timestamp: string;
|
|
16
|
+
traceSeq: number;
|
|
17
|
+
};
|
|
18
|
+
type TraceDispatchResult = {
|
|
19
|
+
ok: boolean;
|
|
20
|
+
forwarded: boolean;
|
|
21
|
+
};
|
|
22
|
+
type TraceCaptureOptions = {
|
|
23
|
+
maxEvents?: number;
|
|
24
|
+
};
|
|
25
|
+
type TraceWaitOptions = {
|
|
26
|
+
timeoutMs?: number;
|
|
27
|
+
};
|
|
28
|
+
declare class TraceCapture {
|
|
29
|
+
private readonly buffer;
|
|
30
|
+
private readonly pending;
|
|
31
|
+
private readonly maxEvents;
|
|
32
|
+
private subscription;
|
|
33
|
+
constructor(source$: Observable<TraceEvent>, options?: TraceCaptureOptions);
|
|
34
|
+
events(): TraceEvent[];
|
|
35
|
+
waitFor(predicate: (event: TraceEvent) => boolean, options?: TraceWaitOptions): Promise<TraceEvent>;
|
|
36
|
+
writeArtifact(targetPath: string): Promise<void>;
|
|
37
|
+
stop(): void;
|
|
38
|
+
}
|
|
39
|
+
declare function getTraceEvents$(): Observable<TraceEvent>;
|
|
40
|
+
declare function publishMainTrace(level: TraceLevel, input: unknown): TraceEvent;
|
|
41
|
+
declare function publishTestTrace(process: TraceProcess, level: TraceLevel, input: unknown): TraceEvent;
|
|
42
|
+
declare function dispatchRendererTracePayload(rawPayload: unknown): TraceDispatchResult;
|
|
43
|
+
declare function emitRendererTrace(level: TraceLevel, input: TraceInput): void;
|
|
44
|
+
declare function createTraceCapture(options?: TraceCaptureOptions): TraceCapture;
|
|
45
|
+
declare function clearTraceHubForTests(): void;
|
|
46
|
+
|
|
47
|
+
export { TraceCapture, type TraceCaptureOptions, type TraceDispatchResult, type TraceEvent, type TraceInput, type TraceLevel, type TraceProcess, type TraceWaitOptions, clearTraceHubForTests, createTraceCapture, dispatchRendererTracePayload, emitRendererTrace, getTraceEvents$, publishMainTrace, publishTestTrace };
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { Subject } from "rxjs";
|
|
2
|
+
import { share } from "rxjs/operators";
|
|
3
|
+
const TRACE_HUB_SYMBOL = /* @__PURE__ */ Symbol.for("@noego/wood.trace.hub");
|
|
4
|
+
function normalizeTraceInput(raw) {
|
|
5
|
+
const input = raw ?? {};
|
|
6
|
+
const source = typeof input.source === "string" && input.source.trim().length > 0 ? input.source : "unknown";
|
|
7
|
+
const type = typeof input.type === "string" && input.type.trim().length > 0 ? input.type : "unknown";
|
|
8
|
+
const message = typeof input.message === "string" ? input.message : void 0;
|
|
9
|
+
const conversationId = typeof input.conversationId === "number" || typeof input.conversationId === "string" ? input.conversationId : void 0;
|
|
10
|
+
const payload = isRecord(input.payload) ? { ...input.payload } : void 0;
|
|
11
|
+
return {
|
|
12
|
+
source,
|
|
13
|
+
type,
|
|
14
|
+
...message ? { message } : {},
|
|
15
|
+
...conversationId !== void 0 ? { conversationId } : {},
|
|
16
|
+
...payload ? { payload } : {}
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function isRecord(value) {
|
|
20
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
21
|
+
}
|
|
22
|
+
function resolveTraceBridge() {
|
|
23
|
+
const globalObj = globalThis;
|
|
24
|
+
const bridge = globalObj.__NOEGO_WOOD_BRIDGE__ ?? globalObj.window?.__NOEGO_WOOD_BRIDGE__ ?? globalObj.wood ?? globalObj.window?.wood;
|
|
25
|
+
if (!bridge || typeof bridge !== "object") {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
return bridge;
|
|
29
|
+
}
|
|
30
|
+
class TraceCapture {
|
|
31
|
+
constructor(source$, options = {}) {
|
|
32
|
+
this.buffer = [];
|
|
33
|
+
this.pending = /* @__PURE__ */ new Set();
|
|
34
|
+
this.maxEvents = Math.max(1, options.maxEvents ?? 1e3);
|
|
35
|
+
this.subscription = source$.subscribe((event) => {
|
|
36
|
+
this.buffer.push(event);
|
|
37
|
+
if (this.buffer.length > this.maxEvents) {
|
|
38
|
+
this.buffer.splice(0, this.buffer.length - this.maxEvents);
|
|
39
|
+
}
|
|
40
|
+
for (const waiter of Array.from(this.pending)) {
|
|
41
|
+
if (!waiter.predicate(event)) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
if (waiter.timeoutId) {
|
|
45
|
+
clearTimeout(waiter.timeoutId);
|
|
46
|
+
}
|
|
47
|
+
this.pending.delete(waiter);
|
|
48
|
+
waiter.resolve(event);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
events() {
|
|
53
|
+
return [...this.buffer];
|
|
54
|
+
}
|
|
55
|
+
async waitFor(predicate, options = {}) {
|
|
56
|
+
const existing = this.buffer.find(predicate);
|
|
57
|
+
if (existing) {
|
|
58
|
+
return existing;
|
|
59
|
+
}
|
|
60
|
+
return new Promise((resolve, reject) => {
|
|
61
|
+
const waiter = {
|
|
62
|
+
predicate,
|
|
63
|
+
resolve,
|
|
64
|
+
reject
|
|
65
|
+
};
|
|
66
|
+
const timeoutMs = options.timeoutMs ?? 5e3;
|
|
67
|
+
waiter.timeoutId = setTimeout(() => {
|
|
68
|
+
this.pending.delete(waiter);
|
|
69
|
+
reject(new Error(`Timed out waiting for trace event after ${timeoutMs}ms`));
|
|
70
|
+
}, timeoutMs);
|
|
71
|
+
this.pending.add(waiter);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
async writeArtifact(targetPath) {
|
|
75
|
+
const [{ mkdir, writeFile }, pathModule] = await Promise.all([
|
|
76
|
+
import("node:fs/promises"),
|
|
77
|
+
import("node:path")
|
|
78
|
+
]);
|
|
79
|
+
await mkdir(pathModule.dirname(targetPath), { recursive: true });
|
|
80
|
+
const lines = this.buffer.map((event) => JSON.stringify(event)).join("\n");
|
|
81
|
+
await writeFile(targetPath, `${lines}${lines.length > 0 ? "\n" : ""}`, "utf8");
|
|
82
|
+
}
|
|
83
|
+
stop() {
|
|
84
|
+
for (const waiter of this.pending) {
|
|
85
|
+
if (waiter.timeoutId) {
|
|
86
|
+
clearTimeout(waiter.timeoutId);
|
|
87
|
+
}
|
|
88
|
+
waiter.reject(new Error("Trace capture stopped before predicate matched"));
|
|
89
|
+
}
|
|
90
|
+
this.pending.clear();
|
|
91
|
+
this.subscription.unsubscribe();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
class TraceHub {
|
|
95
|
+
constructor() {
|
|
96
|
+
this.subject = new Subject();
|
|
97
|
+
this.shared$ = this.subject.asObservable().pipe(share());
|
|
98
|
+
this.nextTraceSeq = 1;
|
|
99
|
+
}
|
|
100
|
+
get events$() {
|
|
101
|
+
return this.shared$;
|
|
102
|
+
}
|
|
103
|
+
publish(process, level, input) {
|
|
104
|
+
const normalized = normalizeTraceInput(input);
|
|
105
|
+
const event = {
|
|
106
|
+
...normalized,
|
|
107
|
+
level,
|
|
108
|
+
process,
|
|
109
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
110
|
+
traceSeq: this.nextTraceSeq++
|
|
111
|
+
};
|
|
112
|
+
this.subject.next(event);
|
|
113
|
+
return event;
|
|
114
|
+
}
|
|
115
|
+
capture(options = {}) {
|
|
116
|
+
return new TraceCapture(this.events$, options);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function getGlobalTraceHub() {
|
|
120
|
+
const globalObj = globalThis;
|
|
121
|
+
if (!globalObj[TRACE_HUB_SYMBOL]) {
|
|
122
|
+
globalObj[TRACE_HUB_SYMBOL] = new TraceHub();
|
|
123
|
+
}
|
|
124
|
+
return globalObj[TRACE_HUB_SYMBOL];
|
|
125
|
+
}
|
|
126
|
+
function getTraceEvents$() {
|
|
127
|
+
return getGlobalTraceHub().events$;
|
|
128
|
+
}
|
|
129
|
+
function publishMainTrace(level, input) {
|
|
130
|
+
return getGlobalTraceHub().publish("main", level, input);
|
|
131
|
+
}
|
|
132
|
+
function publishTestTrace(process, level, input) {
|
|
133
|
+
return getGlobalTraceHub().publish(process, level, input);
|
|
134
|
+
}
|
|
135
|
+
function dispatchRendererTracePayload(rawPayload) {
|
|
136
|
+
const payload = rawPayload ?? {};
|
|
137
|
+
const level = payload.level === "debug" || payload.level === "info" || payload.level === "warn" || payload.level === "error" ? payload.level : "info";
|
|
138
|
+
getGlobalTraceHub().publish("renderer", level, payload);
|
|
139
|
+
return {
|
|
140
|
+
ok: true,
|
|
141
|
+
forwarded: true
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
function emitRendererTrace(level, input) {
|
|
145
|
+
const bridge = resolveTraceBridge();
|
|
146
|
+
if (!bridge || typeof bridge.__trace !== "function") {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
void bridge.__trace({
|
|
150
|
+
...normalizeTraceInput(input),
|
|
151
|
+
level
|
|
152
|
+
}).catch(() => {
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
function createTraceCapture(options = {}) {
|
|
156
|
+
return getGlobalTraceHub().capture(options);
|
|
157
|
+
}
|
|
158
|
+
function clearTraceHubForTests() {
|
|
159
|
+
const globalObj = globalThis;
|
|
160
|
+
delete globalObj[TRACE_HUB_SYMBOL];
|
|
161
|
+
}
|
|
162
|
+
export {
|
|
163
|
+
TraceCapture,
|
|
164
|
+
clearTraceHubForTests,
|
|
165
|
+
createTraceCapture,
|
|
166
|
+
dispatchRendererTracePayload,
|
|
167
|
+
emitRendererTrace,
|
|
168
|
+
getTraceEvents$,
|
|
169
|
+
publishMainTrace,
|
|
170
|
+
publishTestTrace
|
|
171
|
+
};
|
|
172
|
+
//# sourceMappingURL=trace_hub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/tracing/trace_hub.ts"],"sourcesContent":["import { Observable, Subject, Subscription } from 'rxjs';\nimport { share } from 'rxjs/operators';\n\nexport type TraceLevel = 'debug' | 'info' | 'warn' | 'error';\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};\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 TraceCaptureOptions = {\n maxEvents?: number;\n};\n\nexport type TraceWaitOptions = {\n timeoutMs?: number;\n};\n\nconst TRACE_HUB_SYMBOL = Symbol.for('@noego/wood.trace.hub');\n\ntype PendingWaiter = {\n predicate: (event: TraceEvent) => boolean;\n resolve: (event: TraceEvent) => void;\n reject: (error: Error) => void;\n timeoutId?: ReturnType<typeof setTimeout>;\n};\n\ntype GlobalWithTraceHub = typeof globalThis & {\n [TRACE_HUB_SYMBOL]?: TraceHub;\n};\n\ntype TraceBridgeLike = Record<string, unknown> & {\n __trace?: (payload: unknown) => Promise<TraceDispatchResult>;\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 payload = isRecord(input.payload) ? { ...input.payload } : undefined;\n\n return {\n source,\n type,\n ...(message ? { message } : {}),\n ...(conversationId !== undefined ? { conversationId } : {}),\n ...(payload ? { payload } : {}),\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\nexport class TraceCapture {\n private readonly buffer: TraceEvent[] = [];\n private readonly pending = new Set<PendingWaiter>();\n private readonly maxEvents: number;\n private subscription: Subscription;\n\n constructor(\n source$: Observable<TraceEvent>,\n options: TraceCaptureOptions = {},\n ) {\n this.maxEvents = Math.max(1, options.maxEvents ?? 1000);\n this.subscription = source$.subscribe((event) => {\n this.buffer.push(event);\n if (this.buffer.length > this.maxEvents) {\n this.buffer.splice(0, this.buffer.length - this.maxEvents);\n }\n for (const waiter of Array.from(this.pending)) {\n if (!waiter.predicate(event)) {\n continue;\n }\n if (waiter.timeoutId) {\n clearTimeout(waiter.timeoutId);\n }\n this.pending.delete(waiter);\n waiter.resolve(event);\n }\n });\n }\n\n events(): TraceEvent[] {\n return [...this.buffer];\n }\n\n async waitFor(\n predicate: (event: TraceEvent) => boolean,\n options: TraceWaitOptions = {},\n ): Promise<TraceEvent> {\n const existing = this.buffer.find(predicate);\n if (existing) {\n return existing;\n }\n\n return new Promise<TraceEvent>((resolve, reject) => {\n const waiter: PendingWaiter = {\n predicate,\n resolve,\n reject,\n };\n const timeoutMs = options.timeoutMs ?? 5000;\n waiter.timeoutId = setTimeout(() => {\n this.pending.delete(waiter);\n reject(new Error(`Timed out waiting for trace event after ${timeoutMs}ms`));\n }, timeoutMs);\n this.pending.add(waiter);\n });\n }\n\n async writeArtifact(targetPath: string): Promise<void> {\n const [{ mkdir, writeFile }, pathModule] = await Promise.all([\n import('node:fs/promises'),\n import('node:path'),\n ]);\n await mkdir(pathModule.dirname(targetPath), { recursive: true });\n const lines = this.buffer.map((event) => JSON.stringify(event)).join('\\n');\n await writeFile(targetPath, `${lines}${lines.length > 0 ? '\\n' : ''}`, 'utf8');\n }\n\n stop(): void {\n for (const waiter of this.pending) {\n if (waiter.timeoutId) {\n clearTimeout(waiter.timeoutId);\n }\n waiter.reject(new Error('Trace capture stopped before predicate matched'));\n }\n this.pending.clear();\n this.subscription.unsubscribe();\n }\n}\n\nclass TraceHub {\n private readonly subject = new Subject<TraceEvent>();\n private readonly shared$ = this.subject.asObservable().pipe(share());\n private nextTraceSeq = 1;\n\n get events$(): Observable<TraceEvent> {\n return this.shared$;\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 this.subject.next(event);\n return event;\n }\n\n capture(options: TraceCaptureOptions = {}): TraceCapture {\n return new TraceCapture(this.events$, options);\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 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(rawPayload: unknown): TraceDispatchResult {\n const payload = (rawPayload ?? {}) as Partial<TraceInput> & { level?: TraceLevel };\n const level = payload.level === 'debug' || payload.level === 'info' || payload.level === 'warn' || payload.level === 'error'\n ? payload.level\n : 'info';\n getGlobalTraceHub().publish('renderer', level, payload);\n return {\n ok: true,\n forwarded: true,\n };\n}\n\nexport function emitRendererTrace(level: TraceLevel, input: TraceInput): void {\n const bridge = resolveTraceBridge();\n if (!bridge || typeof bridge.__trace !== 'function') {\n return;\n }\n void bridge.__trace({\n ...normalizeTraceInput(input),\n level,\n }).catch(() => {\n // Tracing is observational and must never break the caller.\n });\n}\n\nexport function createTraceCapture(options: TraceCaptureOptions = {}): TraceCapture {\n return getGlobalTraceHub().capture(options);\n}\n\nexport function clearTraceHubForTests(): void {\n const globalObj = globalThis as GlobalWithTraceHub;\n delete globalObj[TRACE_HUB_SYMBOL];\n}\n"],"mappings":"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","names":[]}
|