@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/stick/static_renderer.ts"],"sourcesContent":["import { pathToFileURL } from 'url';\nimport { resolve } from 'path';\nimport { parseViewsFile } from '../parser/views_parser.js';\nimport type { ViewDef } from '../types/index.js';\n\n// ─────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────\n\nexport interface WoodStaticRendererConfig {\n /** Path to views.yaml (e.g., './ui/views.yaml') */\n viewsConfig: string;\n /** Base directory for components (e.g., './ui') */\n componentDir: string;\n}\n\nexport interface WoodRenderOptions {\n /** Dot-path view key (e.g., 'chat.main') */\n viewKey: string;\n /** Mock data for layouts and view */\n data?: {\n layout?: any[];\n view?: any;\n };\n /** Wood bridge object passed as a prop to layouts and views */\n wood?: any;\n}\n\nexport interface WoodRenderToPageOptions extends WoodRenderOptions {\n /** Custom HTML template. Use {{{HEAD}}}, {{{CSS}}}, {{{APP}}} placeholders */\n template?: string;\n}\n\nexport interface WoodRenderResult {\n /** Rendered component HTML */\n html: string;\n /** Content from <svelte:head> tags */\n head: string;\n /** Component CSS */\n css: string;\n /** The matched view definition */\n viewDef: ViewDef;\n}\n\nasync function loadWoodRecursiveRenderComponent(): Promise<any> {\n const candidates = [\n './WoodRecursiveRender.svelte',\n '../../src/stick/WoodRecursiveRender.svelte',\n ];\n\n let lastNotFoundError: unknown;\n for (const candidate of candidates) {\n try {\n return await import(/* @vite-ignore */ candidate);\n } catch (error) {\n const code = (error as { code?: string })?.code;\n const message = error instanceof Error ? error.message : String(error);\n const isNotFound = code === 'ERR_MODULE_NOT_FOUND' || message.includes('Cannot find module');\n if (!isNotFound) {\n throw error;\n }\n lastNotFoundError = error;\n }\n }\n\n throw lastNotFoundError ?? new Error('Failed to load WoodRecursiveRender.svelte.');\n}\n\n// ─────────────────────────────────────────────────────────────\n// WoodStaticRenderer\n// ─────────────────────────────────────────────────────────────\n\nexport class WoodStaticRenderer {\n private views: ViewDef[];\n private componentDir: string;\n\n constructor(views: ViewDef[], componentDir: string) {\n this.views = views;\n this.componentDir = componentDir;\n }\n\n /** Find a ViewDef by dot-path key (e.g., 'chat.main') */\n private findView(viewKey: string): ViewDef {\n const segments = viewKey.split('.');\n const windowName = segments[0];\n const pageName = segments.slice(1).join('.');\n\n const found = this.views.find(\n v => v.windowName === windowName && v.pageName === pageName\n );\n if (!found) {\n const available = this.views.map(v => `${v.windowName}.${v.pageName}`).join(', ');\n throw new Error(\n `No view found for key \"${viewKey}\". Available views: ${available}`\n );\n }\n return found;\n }\n\n /** Dynamically import a Svelte component via the ESM loader */\n private async loadComponent(relativePath: string): Promise<any> {\n const absPath = resolve(this.componentDir, relativePath);\n const fileUrl = pathToFileURL(absPath).href;\n const mod = await import(fileUrl);\n return mod.default;\n }\n\n async render(options: WoodRenderOptions): Promise<WoodRenderResult> {\n const { viewKey, data = {}, wood } = options;\n\n const viewDef = this.findView(viewKey);\n\n // Load view component\n const view = await this.loadComponent(viewDef.viewPath);\n\n // Load layout components\n const layouts = [];\n for (const layoutPath of viewDef.layouts) {\n layouts.push(await this.loadComponent(layoutPath));\n }\n\n // Build server data\n const serverData = {\n layout: data.layout || [],\n view: data.view || {},\n };\n\n // Variable-based dynamic imports so tsc doesn't try to resolve these\n // modules during DTS generation (svelte is a peer dep, .svelte needs the loader).\n const svelteServer = 'svelte/server';\n const { render } = await import(/* @vite-ignore */ svelteServer);\n const WoodRecursiveRenderMod = await loadWoodRecursiveRenderComponent();\n const WoodRecursiveRender = WoodRecursiveRenderMod.default;\n\n const result = render(WoodRecursiveRender, {\n props: {\n layouts,\n view,\n data: serverData,\n wood,\n },\n });\n\n return {\n html: result.html,\n head: result.head,\n css: (result as any).css?.code || '',\n viewDef,\n };\n }\n\n /**\n * Render to a full HTML document.\n * Uses default template or custom template with {{{HEAD}}}, {{{CSS}}}, {{{APP}}} placeholders.\n */\n async renderToPage(options: WoodRenderToPageOptions): Promise<string> {\n const { html, head, css } = await this.render(options);\n\n const defaultTemplate = `<!DOCTYPE html>\n<html>\n<head>\n {{{HEAD}}}\n <style>{{{CSS}}}</style>\n</head>\n<body>\n <div id=\"app\">{{{APP}}}</div>\n</body>\n</html>`;\n\n const template = options.template || defaultTemplate;\n\n return template\n .replace('{{{HEAD}}}', head)\n .replace('{{{CSS}}}', css)\n .replace('{{{APP}}}', html);\n }\n}\n\n// ─────────────────────────────────────────────────────────────\n// Factory Function\n// ─────────────────────────────────────────────────────────────\n\nexport function createWoodStaticRenderer(\n config: WoodStaticRendererConfig\n): WoodStaticRenderer {\n const views = parseViewsFile(config.viewsConfig);\n const componentDir = resolve(config.componentDir);\n return new WoodStaticRenderer(views, componentDir);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,156 @@
|
|
|
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 template_resolver_exports = {};
|
|
30
|
+
__export(template_resolver_exports, {
|
|
31
|
+
resolveImageRendererTemplate: () => resolveImageRendererTemplate
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(template_resolver_exports);
|
|
34
|
+
var fs = __toESM(require("fs"), 1);
|
|
35
|
+
var path = __toESM(require("path"), 1);
|
|
36
|
+
function resolveImageRendererTemplate(input) {
|
|
37
|
+
if (input.template) {
|
|
38
|
+
return input.template;
|
|
39
|
+
}
|
|
40
|
+
if (!input.componentDir) {
|
|
41
|
+
return void 0;
|
|
42
|
+
}
|
|
43
|
+
const componentDir = path.resolve(input.componentDir);
|
|
44
|
+
const htmlPath = path.join(componentDir, "index.html");
|
|
45
|
+
if (!fs.existsSync(htmlPath)) {
|
|
46
|
+
return void 0;
|
|
47
|
+
}
|
|
48
|
+
let template = fs.readFileSync(htmlPath, "utf8");
|
|
49
|
+
template = stripRuntimeScripts(template);
|
|
50
|
+
template = ensureAppPlaceholder(template);
|
|
51
|
+
const cssPath = path.join(componentDir, "styles.css");
|
|
52
|
+
const globalCss = fs.existsSync(cssPath) ? fs.readFileSync(cssPath, "utf8") : void 0;
|
|
53
|
+
template = ensureHeadPlaceholders(template, globalCss);
|
|
54
|
+
return template;
|
|
55
|
+
}
|
|
56
|
+
function stripRuntimeScripts(template) {
|
|
57
|
+
return template.replace(
|
|
58
|
+
/<script\b[^>]*type=["']module["'][^>]*>\s*<\/script>\s*/gi,
|
|
59
|
+
""
|
|
60
|
+
).replace(
|
|
61
|
+
/<script\b[^>]*src=["'][^"']*main\.[^"']+["'][^>]*>\s*<\/script>\s*/gi,
|
|
62
|
+
""
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
function ensureAppPlaceholder(template) {
|
|
66
|
+
if (template.includes("{{{APP}}}")) {
|
|
67
|
+
return template;
|
|
68
|
+
}
|
|
69
|
+
const appRootPattern = /<div\s+id=["']app["'][^>]*>\s*<\/div>/i;
|
|
70
|
+
if (!appRootPattern.test(template)) {
|
|
71
|
+
throw new Error(
|
|
72
|
+
'Renderer HTML template must contain <div id="app"></div> or {{{APP}}}.'
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
return template.replace(appRootPattern, '<div id="app">{{{APP}}}</div>');
|
|
76
|
+
}
|
|
77
|
+
function ensureHeadPlaceholders(template, globalCss) {
|
|
78
|
+
const injections = [];
|
|
79
|
+
if (globalCss && globalCss.trim().length > 0) {
|
|
80
|
+
if (/@tailwind\b/.test(globalCss)) {
|
|
81
|
+
injections.push('<script src="https://cdn.tailwindcss.com"></script>');
|
|
82
|
+
injections.push('<style type="text/tailwindcss">');
|
|
83
|
+
injections.push(globalCss);
|
|
84
|
+
injections.push("</style>");
|
|
85
|
+
} else {
|
|
86
|
+
injections.push("<style>");
|
|
87
|
+
injections.push(globalCss);
|
|
88
|
+
injections.push("</style>");
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (!template.includes("{{{HEAD}}}")) {
|
|
92
|
+
injections.push("{{{HEAD}}}");
|
|
93
|
+
}
|
|
94
|
+
if (!template.includes("{{{CSS}}}")) {
|
|
95
|
+
injections.push("<style>{{{CSS}}}</style>");
|
|
96
|
+
}
|
|
97
|
+
if (shouldInjectPreviewBackdrop(globalCss)) {
|
|
98
|
+
injections.push("<style data-wood-stick-preview-backdrop>");
|
|
99
|
+
injections.push(getPreviewBackdropCss());
|
|
100
|
+
injections.push("</style>");
|
|
101
|
+
}
|
|
102
|
+
if (injections.length === 0) {
|
|
103
|
+
return template;
|
|
104
|
+
}
|
|
105
|
+
if (!/<\/head>/i.test(template)) {
|
|
106
|
+
throw new Error("Renderer HTML template must contain a </head> tag.");
|
|
107
|
+
}
|
|
108
|
+
return template.replace(/<\/head>/i, `${injections.join("\n")}
|
|
109
|
+
</head>`);
|
|
110
|
+
}
|
|
111
|
+
function shouldInjectPreviewBackdrop(globalCss) {
|
|
112
|
+
if (!globalCss) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
const hasTransparentBackground = /background(?:-color)?\s*:\s*transparent\b/i.test(globalCss);
|
|
116
|
+
const bodyBackgroundMatches = globalCss.matchAll(
|
|
117
|
+
/body[^{}]*\{[^}]*background(?:-color)?\s*:\s*([^;]+);?/gis
|
|
118
|
+
);
|
|
119
|
+
let hasOpaqueBodyBackground = false;
|
|
120
|
+
for (const match of bodyBackgroundMatches) {
|
|
121
|
+
const value = match[1]?.trim().toLowerCase() || "";
|
|
122
|
+
if (value !== "transparent") {
|
|
123
|
+
hasOpaqueBodyBackground = true;
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return hasTransparentBackground && !hasOpaqueBodyBackground;
|
|
128
|
+
}
|
|
129
|
+
function getPreviewBackdropCss() {
|
|
130
|
+
return [
|
|
131
|
+
"html, body, #app {",
|
|
132
|
+
" min-height: 100%;",
|
|
133
|
+
"}",
|
|
134
|
+
"body {",
|
|
135
|
+
" margin: 0;",
|
|
136
|
+
" background: radial-gradient(130% 120% at 50% 100%, #0d3f59 0%, #0a2a3f 38%, #061a30 62%, #020617 100%) !important;",
|
|
137
|
+
" color: #e2e8f0;",
|
|
138
|
+
"}",
|
|
139
|
+
"#app {",
|
|
140
|
+
" position: relative;",
|
|
141
|
+
" z-index: 1;",
|
|
142
|
+
"}",
|
|
143
|
+
"body::before {",
|
|
144
|
+
" content: '';",
|
|
145
|
+
" position: fixed;",
|
|
146
|
+
" inset: 0;",
|
|
147
|
+
" pointer-events: none;",
|
|
148
|
+
" background: linear-gradient(90deg, rgba(2, 6, 23, 0.62) 0%, rgba(2, 6, 23, 0.24) 20%, rgba(2, 6, 23, 0.08) 50%, rgba(2, 6, 23, 0.24) 80%, rgba(2, 6, 23, 0.62) 100%);",
|
|
149
|
+
"}"
|
|
150
|
+
].join("\n");
|
|
151
|
+
}
|
|
152
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
153
|
+
0 && (module.exports = {
|
|
154
|
+
resolveImageRendererTemplate
|
|
155
|
+
});
|
|
156
|
+
//# sourceMappingURL=template_resolver.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/stick/template_resolver.ts"],"sourcesContent":["import * as fs from 'fs';\nimport * as path from 'path';\n\nexport interface ResolveImageRendererTemplateInput {\n template?: string;\n componentDir?: string;\n}\n\nexport function resolveImageRendererTemplate(\n input: ResolveImageRendererTemplateInput\n): string | undefined {\n if (input.template) {\n return input.template;\n }\n\n if (!input.componentDir) {\n return undefined;\n }\n\n const componentDir = path.resolve(input.componentDir);\n const htmlPath = path.join(componentDir, 'index.html');\n if (!fs.existsSync(htmlPath)) {\n return undefined;\n }\n\n let template = fs.readFileSync(htmlPath, 'utf8');\n template = stripRuntimeScripts(template);\n template = ensureAppPlaceholder(template);\n\n const cssPath = path.join(componentDir, 'styles.css');\n const globalCss = fs.existsSync(cssPath)\n ? fs.readFileSync(cssPath, 'utf8')\n : undefined;\n\n template = ensureHeadPlaceholders(template, globalCss);\n return template;\n}\n\nfunction stripRuntimeScripts(template: string): string {\n return template\n .replace(\n /<script\\b[^>]*type=[\"']module[\"'][^>]*>\\s*<\\/script>\\s*/gi,\n ''\n )\n .replace(\n /<script\\b[^>]*src=[\"'][^\"']*main\\.[^\"']+[\"'][^>]*>\\s*<\\/script>\\s*/gi,\n ''\n );\n}\n\nfunction ensureAppPlaceholder(template: string): string {\n if (template.includes('{{{APP}}}')) {\n return template;\n }\n\n const appRootPattern = /<div\\s+id=[\"']app[\"'][^>]*>\\s*<\\/div>/i;\n if (!appRootPattern.test(template)) {\n throw new Error(\n 'Renderer HTML template must contain <div id=\"app\"></div> or {{{APP}}}.'\n );\n }\n\n return template.replace(appRootPattern, '<div id=\"app\">{{{APP}}}</div>');\n}\n\nfunction ensureHeadPlaceholders(template: string, globalCss?: string): string {\n const injections: string[] = [];\n\n if (globalCss && globalCss.trim().length > 0) {\n if (/@tailwind\\b/.test(globalCss)) {\n injections.push('<script src=\"https://cdn.tailwindcss.com\"></script>');\n injections.push('<style type=\"text/tailwindcss\">');\n injections.push(globalCss);\n injections.push('</style>');\n } else {\n injections.push('<style>');\n injections.push(globalCss);\n injections.push('</style>');\n }\n }\n\n if (!template.includes('{{{HEAD}}}')) {\n injections.push('{{{HEAD}}}');\n }\n if (!template.includes('{{{CSS}}}')) {\n injections.push('<style>{{{CSS}}}</style>');\n }\n\n if (shouldInjectPreviewBackdrop(globalCss)) {\n injections.push('<style data-wood-stick-preview-backdrop>');\n injections.push(getPreviewBackdropCss());\n injections.push('</style>');\n }\n\n if (injections.length === 0) {\n return template;\n }\n\n if (!/<\\/head>/i.test(template)) {\n throw new Error('Renderer HTML template must contain a </head> tag.');\n }\n\n return template.replace(/<\\/head>/i, `${injections.join('\\n')}\\n</head>`);\n}\n\nfunction shouldInjectPreviewBackdrop(globalCss?: string): boolean {\n if (!globalCss) {\n return false;\n }\n\n const hasTransparentBackground =\n /background(?:-color)?\\s*:\\s*transparent\\b/i.test(globalCss);\n\n const bodyBackgroundMatches = globalCss.matchAll(\n /body[^{}]*\\{[^}]*background(?:-color)?\\s*:\\s*([^;]+);?/gis\n );\n\n let hasOpaqueBodyBackground = false;\n for (const match of bodyBackgroundMatches) {\n const value = match[1]?.trim().toLowerCase() || '';\n if (value !== 'transparent') {\n hasOpaqueBodyBackground = true;\n break;\n }\n }\n\n return hasTransparentBackground && !hasOpaqueBodyBackground;\n}\n\nfunction getPreviewBackdropCss(): string {\n return [\n 'html, body, #app {',\n ' min-height: 100%;',\n '}',\n 'body {',\n ' margin: 0;',\n ' background: radial-gradient(130% 120% at 50% 100%, #0d3f59 0%, #0a2a3f 38%, #061a30 62%, #020617 100%) !important;',\n ' color: #e2e8f0;',\n '}',\n '#app {',\n ' position: relative;',\n ' z-index: 1;',\n '}',\n 'body::before {',\n \" content: '';\",\n ' position: fixed;',\n ' inset: 0;',\n ' pointer-events: none;',\n ' background: linear-gradient(90deg, rgba(2, 6, 23, 0.62) 0%, rgba(2, 6, 23, 0.24) 20%, rgba(2, 6, 23, 0.08) 50%, rgba(2, 6, 23, 0.24) 80%, rgba(2, 6, 23, 0.62) 100%);',\n '}',\n ].join('\\n');\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface ResolveImageRendererTemplateInput {
|
|
2
|
+
template?: string;
|
|
3
|
+
componentDir?: string;
|
|
4
|
+
}
|
|
5
|
+
declare function resolveImageRendererTemplate(input: ResolveImageRendererTemplateInput): string | undefined;
|
|
6
|
+
|
|
7
|
+
export { type ResolveImageRendererTemplateInput, resolveImageRendererTemplate };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface ResolveImageRendererTemplateInput {
|
|
2
|
+
template?: string;
|
|
3
|
+
componentDir?: string;
|
|
4
|
+
}
|
|
5
|
+
declare function resolveImageRendererTemplate(input: ResolveImageRendererTemplateInput): string | undefined;
|
|
6
|
+
|
|
7
|
+
export { type ResolveImageRendererTemplateInput, resolveImageRendererTemplate };
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import * as fs from "fs";
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
function resolveImageRendererTemplate(input) {
|
|
4
|
+
if (input.template) {
|
|
5
|
+
return input.template;
|
|
6
|
+
}
|
|
7
|
+
if (!input.componentDir) {
|
|
8
|
+
return void 0;
|
|
9
|
+
}
|
|
10
|
+
const componentDir = path.resolve(input.componentDir);
|
|
11
|
+
const htmlPath = path.join(componentDir, "index.html");
|
|
12
|
+
if (!fs.existsSync(htmlPath)) {
|
|
13
|
+
return void 0;
|
|
14
|
+
}
|
|
15
|
+
let template = fs.readFileSync(htmlPath, "utf8");
|
|
16
|
+
template = stripRuntimeScripts(template);
|
|
17
|
+
template = ensureAppPlaceholder(template);
|
|
18
|
+
const cssPath = path.join(componentDir, "styles.css");
|
|
19
|
+
const globalCss = fs.existsSync(cssPath) ? fs.readFileSync(cssPath, "utf8") : void 0;
|
|
20
|
+
template = ensureHeadPlaceholders(template, globalCss);
|
|
21
|
+
return template;
|
|
22
|
+
}
|
|
23
|
+
function stripRuntimeScripts(template) {
|
|
24
|
+
return template.replace(
|
|
25
|
+
/<script\b[^>]*type=["']module["'][^>]*>\s*<\/script>\s*/gi,
|
|
26
|
+
""
|
|
27
|
+
).replace(
|
|
28
|
+
/<script\b[^>]*src=["'][^"']*main\.[^"']+["'][^>]*>\s*<\/script>\s*/gi,
|
|
29
|
+
""
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
function ensureAppPlaceholder(template) {
|
|
33
|
+
if (template.includes("{{{APP}}}")) {
|
|
34
|
+
return template;
|
|
35
|
+
}
|
|
36
|
+
const appRootPattern = /<div\s+id=["']app["'][^>]*>\s*<\/div>/i;
|
|
37
|
+
if (!appRootPattern.test(template)) {
|
|
38
|
+
throw new Error(
|
|
39
|
+
'Renderer HTML template must contain <div id="app"></div> or {{{APP}}}.'
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
return template.replace(appRootPattern, '<div id="app">{{{APP}}}</div>');
|
|
43
|
+
}
|
|
44
|
+
function ensureHeadPlaceholders(template, globalCss) {
|
|
45
|
+
const injections = [];
|
|
46
|
+
if (globalCss && globalCss.trim().length > 0) {
|
|
47
|
+
if (/@tailwind\b/.test(globalCss)) {
|
|
48
|
+
injections.push('<script src="https://cdn.tailwindcss.com"></script>');
|
|
49
|
+
injections.push('<style type="text/tailwindcss">');
|
|
50
|
+
injections.push(globalCss);
|
|
51
|
+
injections.push("</style>");
|
|
52
|
+
} else {
|
|
53
|
+
injections.push("<style>");
|
|
54
|
+
injections.push(globalCss);
|
|
55
|
+
injections.push("</style>");
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (!template.includes("{{{HEAD}}}")) {
|
|
59
|
+
injections.push("{{{HEAD}}}");
|
|
60
|
+
}
|
|
61
|
+
if (!template.includes("{{{CSS}}}")) {
|
|
62
|
+
injections.push("<style>{{{CSS}}}</style>");
|
|
63
|
+
}
|
|
64
|
+
if (shouldInjectPreviewBackdrop(globalCss)) {
|
|
65
|
+
injections.push("<style data-wood-stick-preview-backdrop>");
|
|
66
|
+
injections.push(getPreviewBackdropCss());
|
|
67
|
+
injections.push("</style>");
|
|
68
|
+
}
|
|
69
|
+
if (injections.length === 0) {
|
|
70
|
+
return template;
|
|
71
|
+
}
|
|
72
|
+
if (!/<\/head>/i.test(template)) {
|
|
73
|
+
throw new Error("Renderer HTML template must contain a </head> tag.");
|
|
74
|
+
}
|
|
75
|
+
return template.replace(/<\/head>/i, `${injections.join("\n")}
|
|
76
|
+
</head>`);
|
|
77
|
+
}
|
|
78
|
+
function shouldInjectPreviewBackdrop(globalCss) {
|
|
79
|
+
if (!globalCss) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
const hasTransparentBackground = /background(?:-color)?\s*:\s*transparent\b/i.test(globalCss);
|
|
83
|
+
const bodyBackgroundMatches = globalCss.matchAll(
|
|
84
|
+
/body[^{}]*\{[^}]*background(?:-color)?\s*:\s*([^;]+);?/gis
|
|
85
|
+
);
|
|
86
|
+
let hasOpaqueBodyBackground = false;
|
|
87
|
+
for (const match of bodyBackgroundMatches) {
|
|
88
|
+
const value = match[1]?.trim().toLowerCase() || "";
|
|
89
|
+
if (value !== "transparent") {
|
|
90
|
+
hasOpaqueBodyBackground = true;
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return hasTransparentBackground && !hasOpaqueBodyBackground;
|
|
95
|
+
}
|
|
96
|
+
function getPreviewBackdropCss() {
|
|
97
|
+
return [
|
|
98
|
+
"html, body, #app {",
|
|
99
|
+
" min-height: 100%;",
|
|
100
|
+
"}",
|
|
101
|
+
"body {",
|
|
102
|
+
" margin: 0;",
|
|
103
|
+
" background: radial-gradient(130% 120% at 50% 100%, #0d3f59 0%, #0a2a3f 38%, #061a30 62%, #020617 100%) !important;",
|
|
104
|
+
" color: #e2e8f0;",
|
|
105
|
+
"}",
|
|
106
|
+
"#app {",
|
|
107
|
+
" position: relative;",
|
|
108
|
+
" z-index: 1;",
|
|
109
|
+
"}",
|
|
110
|
+
"body::before {",
|
|
111
|
+
" content: '';",
|
|
112
|
+
" position: fixed;",
|
|
113
|
+
" inset: 0;",
|
|
114
|
+
" pointer-events: none;",
|
|
115
|
+
" background: linear-gradient(90deg, rgba(2, 6, 23, 0.62) 0%, rgba(2, 6, 23, 0.24) 20%, rgba(2, 6, 23, 0.08) 50%, rgba(2, 6, 23, 0.24) 80%, rgba(2, 6, 23, 0.62) 100%);",
|
|
116
|
+
"}"
|
|
117
|
+
].join("\n");
|
|
118
|
+
}
|
|
119
|
+
export {
|
|
120
|
+
resolveImageRendererTemplate
|
|
121
|
+
};
|
|
122
|
+
//# sourceMappingURL=template_resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/stick/template_resolver.ts"],"sourcesContent":["import * as fs from 'fs';\nimport * as path from 'path';\n\nexport interface ResolveImageRendererTemplateInput {\n template?: string;\n componentDir?: string;\n}\n\nexport function resolveImageRendererTemplate(\n input: ResolveImageRendererTemplateInput\n): string | undefined {\n if (input.template) {\n return input.template;\n }\n\n if (!input.componentDir) {\n return undefined;\n }\n\n const componentDir = path.resolve(input.componentDir);\n const htmlPath = path.join(componentDir, 'index.html');\n if (!fs.existsSync(htmlPath)) {\n return undefined;\n }\n\n let template = fs.readFileSync(htmlPath, 'utf8');\n template = stripRuntimeScripts(template);\n template = ensureAppPlaceholder(template);\n\n const cssPath = path.join(componentDir, 'styles.css');\n const globalCss = fs.existsSync(cssPath)\n ? fs.readFileSync(cssPath, 'utf8')\n : undefined;\n\n template = ensureHeadPlaceholders(template, globalCss);\n return template;\n}\n\nfunction stripRuntimeScripts(template: string): string {\n return template\n .replace(\n /<script\\b[^>]*type=[\"']module[\"'][^>]*>\\s*<\\/script>\\s*/gi,\n ''\n )\n .replace(\n /<script\\b[^>]*src=[\"'][^\"']*main\\.[^\"']+[\"'][^>]*>\\s*<\\/script>\\s*/gi,\n ''\n );\n}\n\nfunction ensureAppPlaceholder(template: string): string {\n if (template.includes('{{{APP}}}')) {\n return template;\n }\n\n const appRootPattern = /<div\\s+id=[\"']app[\"'][^>]*>\\s*<\\/div>/i;\n if (!appRootPattern.test(template)) {\n throw new Error(\n 'Renderer HTML template must contain <div id=\"app\"></div> or {{{APP}}}.'\n );\n }\n\n return template.replace(appRootPattern, '<div id=\"app\">{{{APP}}}</div>');\n}\n\nfunction ensureHeadPlaceholders(template: string, globalCss?: string): string {\n const injections: string[] = [];\n\n if (globalCss && globalCss.trim().length > 0) {\n if (/@tailwind\\b/.test(globalCss)) {\n injections.push('<script src=\"https://cdn.tailwindcss.com\"></script>');\n injections.push('<style type=\"text/tailwindcss\">');\n injections.push(globalCss);\n injections.push('</style>');\n } else {\n injections.push('<style>');\n injections.push(globalCss);\n injections.push('</style>');\n }\n }\n\n if (!template.includes('{{{HEAD}}}')) {\n injections.push('{{{HEAD}}}');\n }\n if (!template.includes('{{{CSS}}}')) {\n injections.push('<style>{{{CSS}}}</style>');\n }\n\n if (shouldInjectPreviewBackdrop(globalCss)) {\n injections.push('<style data-wood-stick-preview-backdrop>');\n injections.push(getPreviewBackdropCss());\n injections.push('</style>');\n }\n\n if (injections.length === 0) {\n return template;\n }\n\n if (!/<\\/head>/i.test(template)) {\n throw new Error('Renderer HTML template must contain a </head> tag.');\n }\n\n return template.replace(/<\\/head>/i, `${injections.join('\\n')}\\n</head>`);\n}\n\nfunction shouldInjectPreviewBackdrop(globalCss?: string): boolean {\n if (!globalCss) {\n return false;\n }\n\n const hasTransparentBackground =\n /background(?:-color)?\\s*:\\s*transparent\\b/i.test(globalCss);\n\n const bodyBackgroundMatches = globalCss.matchAll(\n /body[^{}]*\\{[^}]*background(?:-color)?\\s*:\\s*([^;]+);?/gis\n );\n\n let hasOpaqueBodyBackground = false;\n for (const match of bodyBackgroundMatches) {\n const value = match[1]?.trim().toLowerCase() || '';\n if (value !== 'transparent') {\n hasOpaqueBodyBackground = true;\n break;\n }\n }\n\n return hasTransparentBackground && !hasOpaqueBodyBackground;\n}\n\nfunction getPreviewBackdropCss(): string {\n return [\n 'html, body, #app {',\n ' min-height: 100%;',\n '}',\n 'body {',\n ' margin: 0;',\n ' background: radial-gradient(130% 120% at 50% 100%, #0d3f59 0%, #0a2a3f 38%, #061a30 62%, #020617 100%) !important;',\n ' color: #e2e8f0;',\n '}',\n '#app {',\n ' position: relative;',\n ' z-index: 1;',\n '}',\n 'body::before {',\n \" content: '';\",\n ' position: fixed;',\n ' inset: 0;',\n ' pointer-events: none;',\n ' background: linear-gradient(90deg, rgba(2, 6, 23, 0.62) 0%, rgba(2, 6, 23, 0.24) 20%, rgba(2, 6, 23, 0.08) 50%, rgba(2, 6, 23, 0.24) 80%, rgba(2, 6, 23, 0.62) 100%);',\n '}',\n ].join('\\n');\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var create_controller_harness_exports = {};
|
|
20
|
+
__export(create_controller_harness_exports, {
|
|
21
|
+
createControllerHarness: () => createControllerHarness
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(create_controller_harness_exports);
|
|
24
|
+
var import_node_fs = require("node:fs");
|
|
25
|
+
var import_client = require("../client/index.js");
|
|
26
|
+
var import_ipc = require("../ipc/index.js");
|
|
27
|
+
var import_navigation = require("../navigation/index.js");
|
|
28
|
+
var import_tracing = require("../tracing/index.js");
|
|
29
|
+
var import_operations_parser = require("../parser/operations_parser.cjs");
|
|
30
|
+
var import_create_router_bridge = require("./create_router_bridge.cjs");
|
|
31
|
+
var import_create_test_router = require("./create_test_router.cjs");
|
|
32
|
+
function readOperations(input) {
|
|
33
|
+
if (input.includes("\n") || input.includes(":")) {
|
|
34
|
+
return (0, import_operations_parser.parseOperations)(input);
|
|
35
|
+
}
|
|
36
|
+
return (0, import_operations_parser.parseOperations)((0, import_node_fs.readFileSync)(input, "utf-8"));
|
|
37
|
+
}
|
|
38
|
+
function mergeOperations(inputs) {
|
|
39
|
+
const merged = /* @__PURE__ */ new Map();
|
|
40
|
+
for (const input of Array.isArray(inputs) ? inputs : [inputs]) {
|
|
41
|
+
for (const [channel, operation] of readOperations(input)) {
|
|
42
|
+
merged.set(channel, operation);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return merged;
|
|
46
|
+
}
|
|
47
|
+
function createRpcManifest(operations) {
|
|
48
|
+
return Array.from(operations.values()).map((operation) => ({
|
|
49
|
+
channel: operation.channel,
|
|
50
|
+
controller: operation.controller,
|
|
51
|
+
action: operation.action,
|
|
52
|
+
path: operation.channel.split("."),
|
|
53
|
+
hasInput: !!operation.inputSchema
|
|
54
|
+
}));
|
|
55
|
+
}
|
|
56
|
+
function registerClientBuiltins(container) {
|
|
57
|
+
if (typeof container.registerFunction !== "function") {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const traceConfiguration = new import_tracing.TraceProviderConfiguration();
|
|
61
|
+
traceConfiguration.configureMode("test");
|
|
62
|
+
traceConfiguration.configureRuntime("renderer");
|
|
63
|
+
container.registerFunction(import_navigation.Navigation, () => (0, import_navigation.getNavigation)());
|
|
64
|
+
container.registerFunction(import_client.App, () => (0, import_client.getApp)());
|
|
65
|
+
container.registerFunction(import_client.Ipc, () => (0, import_ipc.getIpc)());
|
|
66
|
+
container.registerFunction(WindowControls, () => (0, import_client.getWindowControls)());
|
|
67
|
+
container.registerFunction(import_tracing.TraceProviderConfiguration, () => traceConfiguration);
|
|
68
|
+
}
|
|
69
|
+
class WindowControls {
|
|
70
|
+
async open(_windowId, _options) {
|
|
71
|
+
}
|
|
72
|
+
async close(_windowId) {
|
|
73
|
+
}
|
|
74
|
+
async focus(_windowId) {
|
|
75
|
+
}
|
|
76
|
+
async minimize(_windowId) {
|
|
77
|
+
}
|
|
78
|
+
async maximize(_windowId) {
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async function createControllerHarness(options) {
|
|
82
|
+
await options.configureContainer?.(options.container);
|
|
83
|
+
if (typeof options.container.instance === "function") {
|
|
84
|
+
const rootTraceConfiguration = await options.container.instance(import_tracing.TraceProviderConfiguration);
|
|
85
|
+
rootTraceConfiguration.configureMode("test");
|
|
86
|
+
rootTraceConfiguration.configureRuntime("main");
|
|
87
|
+
}
|
|
88
|
+
const operations = mergeOperations(options.operations);
|
|
89
|
+
const { router } = (0, import_create_test_router.createTestRouter)("", {
|
|
90
|
+
container: options.container,
|
|
91
|
+
controllersDir: options.controllersDir,
|
|
92
|
+
middlewareDir: options.middlewareDir
|
|
93
|
+
});
|
|
94
|
+
router.loadOperations(operations);
|
|
95
|
+
await options.configureRouter?.(router);
|
|
96
|
+
const { bridge, events } = (0, import_create_router_bridge.createRouterBridge)(router);
|
|
97
|
+
const harnessBridge = Object.assign(bridge, {
|
|
98
|
+
__rpcManifest: createRpcManifest(operations)
|
|
99
|
+
});
|
|
100
|
+
const globalObj = globalThis;
|
|
101
|
+
const previousInternalBridge = globalObj[import_client.WOOD_INTERNAL_BRIDGE_KEY];
|
|
102
|
+
const previousWoodBridge = globalObj.wood;
|
|
103
|
+
globalObj[import_client.WOOD_INTERNAL_BRIDGE_KEY] = harnessBridge;
|
|
104
|
+
globalObj.wood = harnessBridge;
|
|
105
|
+
(0, import_client.clearClientContainerForTests)();
|
|
106
|
+
(0, import_client.clearClientAppForTests)();
|
|
107
|
+
(0, import_client.clearClientNavigationForTests)();
|
|
108
|
+
(0, import_client.clearClientWindowControlsForTests)();
|
|
109
|
+
(0, import_client.clearClientLoggersForTests)();
|
|
110
|
+
const scopedContainer = options.container.extend();
|
|
111
|
+
registerClientBuiltins(scopedContainer);
|
|
112
|
+
if (typeof scopedContainer.registerClass === "function") {
|
|
113
|
+
scopedContainer.registerClass(options.controllerClass);
|
|
114
|
+
}
|
|
115
|
+
const navigation = (0, import_navigation.getNavigation)();
|
|
116
|
+
await options.prepareClient?.({
|
|
117
|
+
bridge: harnessBridge,
|
|
118
|
+
events,
|
|
119
|
+
navigation,
|
|
120
|
+
container: scopedContainer
|
|
121
|
+
});
|
|
122
|
+
const controller = await scopedContainer.instance(options.controllerClass);
|
|
123
|
+
const trace = await scopedContainer.instance(import_tracing.TraceProvider);
|
|
124
|
+
if (options.initialize && typeof controller.initialize === "function") {
|
|
125
|
+
await Promise.resolve(
|
|
126
|
+
controller.initialize()
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
trace.info({
|
|
130
|
+
source: "wood.testing.controller-harness",
|
|
131
|
+
type: "harness.created",
|
|
132
|
+
payload: {
|
|
133
|
+
controllerClass: options.controllerClass.name
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
return {
|
|
137
|
+
controller,
|
|
138
|
+
bridge: harnessBridge,
|
|
139
|
+
events,
|
|
140
|
+
router,
|
|
141
|
+
container: scopedContainer,
|
|
142
|
+
navigation,
|
|
143
|
+
trace,
|
|
144
|
+
destroy: () => {
|
|
145
|
+
trace.info({
|
|
146
|
+
source: "wood.testing.controller-harness",
|
|
147
|
+
type: "harness.destroyed"
|
|
148
|
+
});
|
|
149
|
+
if (typeof controller.destroy === "function") {
|
|
150
|
+
controller.destroy();
|
|
151
|
+
}
|
|
152
|
+
events.clear();
|
|
153
|
+
(0, import_client.clearClientContainerForTests)();
|
|
154
|
+
(0, import_client.clearClientAppForTests)();
|
|
155
|
+
(0, import_client.clearClientNavigationForTests)();
|
|
156
|
+
(0, import_client.clearClientWindowControlsForTests)();
|
|
157
|
+
(0, import_client.clearClientLoggersForTests)();
|
|
158
|
+
if (previousInternalBridge === void 0) {
|
|
159
|
+
delete globalObj[import_client.WOOD_INTERNAL_BRIDGE_KEY];
|
|
160
|
+
} else {
|
|
161
|
+
globalObj[import_client.WOOD_INTERNAL_BRIDGE_KEY] = previousInternalBridge;
|
|
162
|
+
}
|
|
163
|
+
if (previousWoodBridge === void 0) {
|
|
164
|
+
delete globalObj.wood;
|
|
165
|
+
} else {
|
|
166
|
+
globalObj.wood = previousWoodBridge;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
172
|
+
0 && (module.exports = {
|
|
173
|
+
createControllerHarness
|
|
174
|
+
});
|
|
175
|
+
//# sourceMappingURL=create_controller_harness.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/testing/create_controller_harness.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\nimport {\n App,\n clearClientAppForTests,\n clearClientContainerForTests,\n clearClientLoggersForTests,\n clearClientNavigationForTests,\n clearClientWindowControlsForTests,\n getApp,\n getWindowControls,\n Ipc,\n WOOD_INTERNAL_BRIDGE_KEY,\n} from '../client/index.js';\nimport { getIpc } from '../ipc/index.js';\nimport { Navigation, getNavigation } from '../navigation/index.js';\nimport { TraceProvider, TraceProviderConfiguration } from '../tracing/index.js';\nimport { parseOperations } from '../parser/operations_parser.cjs';\nimport type { OperationDef } from '../types/operations.cjs';\nimport { createRouterBridge, type RouterBridgeResult } from './create_router_bridge.cjs';\nimport { createTestRouter } from './create_test_router.cjs';\n\nexport interface CreateControllerHarnessOptions<T> {\n controllerClass: new (...args: any[]) => T;\n container: any;\n operations: string | string[];\n controllersDir: string;\n middlewareDir?: string;\n configureContainer?: (container: any) => void | Promise<void>;\n configureRouter?: (router: ReturnType<typeof createTestRouter>['router']) => void | Promise<void>;\n prepareClient?: (context: {\n bridge: Record<string, any>;\n events: RouterBridgeResult['events'];\n navigation: Navigation;\n container: any;\n }) => void | Promise<void>;\n initialize?: boolean;\n}\n\nexport interface ControllerHarnessResult<T> extends RouterBridgeResult {\n controller: T;\n container: any;\n router: ReturnType<typeof createTestRouter>['router'];\n navigation: Navigation;\n trace: TraceProvider;\n destroy: () => void;\n}\n\ntype MutableGlobal = typeof globalThis & {\n [WOOD_INTERNAL_BRIDGE_KEY]?: unknown;\n wood?: unknown;\n};\n\nfunction readOperations(input: string): Map<string, OperationDef> {\n if (input.includes('\\n') || input.includes(':')) {\n return parseOperations(input);\n }\n\n return parseOperations(readFileSync(input, 'utf-8'));\n}\n\nfunction mergeOperations(inputs: string | string[]): Map<string, OperationDef> {\n const merged = new Map<string, OperationDef>();\n\n for (const input of Array.isArray(inputs) ? inputs : [inputs]) {\n for (const [channel, operation] of readOperations(input)) {\n merged.set(channel, operation);\n }\n }\n\n return merged;\n}\n\nfunction createRpcManifest(operations: Map<string, OperationDef>) {\n return Array.from(operations.values()).map((operation) => ({\n channel: operation.channel,\n controller: operation.controller,\n action: operation.action,\n path: operation.channel.split('.'),\n hasInput: !!operation.inputSchema,\n }));\n}\n\nfunction registerClientBuiltins(container: any): void {\n if (typeof container.registerFunction !== 'function') {\n return;\n }\n\n const traceConfiguration = new TraceProviderConfiguration();\n traceConfiguration.configureMode('test');\n traceConfiguration.configureRuntime('renderer');\n\n container.registerFunction(Navigation, () => getNavigation());\n container.registerFunction(App, () => getApp());\n container.registerFunction(Ipc, () => getIpc());\n container.registerFunction(WindowControls, () => getWindowControls());\n container.registerFunction(TraceProviderConfiguration, () => traceConfiguration);\n}\n\nclass WindowControls {\n async open(_windowId: string, _options?: Record<string, unknown>): Promise<void> {}\n async close(_windowId?: string): Promise<void> {}\n async focus(_windowId: string): Promise<void> {}\n async minimize(_windowId?: string): Promise<void> {}\n async maximize(_windowId?: string): Promise<void> {}\n}\n\nexport async function createControllerHarness<T>(\n options: CreateControllerHarnessOptions<T>,\n): Promise<ControllerHarnessResult<T>> {\n await options.configureContainer?.(options.container);\n\n if (typeof options.container.instance === 'function') {\n const rootTraceConfiguration = await options.container.instance(TraceProviderConfiguration);\n rootTraceConfiguration.configureMode('test');\n rootTraceConfiguration.configureRuntime('main');\n }\n\n const operations = mergeOperations(options.operations);\n const { router } = createTestRouter('', {\n container: options.container,\n controllersDir: options.controllersDir,\n middlewareDir: options.middlewareDir,\n });\n router.loadOperations(operations);\n await options.configureRouter?.(router);\n\n const { bridge, events } = createRouterBridge(router);\n const harnessBridge = Object.assign(bridge, {\n __rpcManifest: createRpcManifest(operations),\n });\n\n const globalObj = globalThis as MutableGlobal;\n const previousInternalBridge = globalObj[WOOD_INTERNAL_BRIDGE_KEY];\n const previousWoodBridge = globalObj.wood;\n globalObj[WOOD_INTERNAL_BRIDGE_KEY] = harnessBridge;\n globalObj.wood = harnessBridge;\n\n clearClientContainerForTests();\n clearClientAppForTests();\n clearClientNavigationForTests();\n clearClientWindowControlsForTests();\n clearClientLoggersForTests();\n\n const scopedContainer = options.container.extend();\n registerClientBuiltins(scopedContainer);\n if (typeof scopedContainer.registerClass === 'function') {\n scopedContainer.registerClass(options.controllerClass);\n }\n const navigation = getNavigation();\n await options.prepareClient?.({\n bridge: harnessBridge,\n events,\n navigation,\n container: scopedContainer,\n });\n\n const controller = await scopedContainer.instance(options.controllerClass);\n const trace = await scopedContainer.instance(TraceProvider);\n if (options.initialize && typeof (controller as { initialize?: () => void }).initialize === 'function') {\n await Promise.resolve(\n (controller as { initialize: () => void | Promise<void> }).initialize(),\n );\n }\n\n trace.info({\n source: 'wood.testing.controller-harness',\n type: 'harness.created',\n payload: {\n controllerClass: options.controllerClass.name,\n },\n });\n\n return {\n controller,\n bridge: harnessBridge,\n events,\n router,\n container: scopedContainer,\n navigation,\n trace,\n destroy: () => {\n trace.info({\n source: 'wood.testing.controller-harness',\n type: 'harness.destroyed',\n });\n if (typeof (controller as { destroy?: () => void }).destroy === 'function') {\n (controller as { destroy: () => void }).destroy();\n }\n events.clear();\n clearClientContainerForTests();\n clearClientAppForTests();\n clearClientNavigationForTests();\n clearClientWindowControlsForTests();\n clearClientLoggersForTests();\n\n if (previousInternalBridge === undefined) {\n delete globalObj[WOOD_INTERNAL_BRIDGE_KEY];\n } else {\n globalObj[WOOD_INTERNAL_BRIDGE_KEY] = previousInternalBridge;\n }\n\n if (previousWoodBridge === undefined) {\n delete globalObj.wood;\n } else {\n globalObj.wood = previousWoodBridge;\n }\n },\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Navigation } from '../navigation/index.cjs';
|
|
2
|
+
import { TraceProvider } from '../tracing/trace_provider.cjs';
|
|
3
|
+
import { RouterBridgeResult } from './create_router_bridge.cjs';
|
|
4
|
+
import { createTestRouter } from './create_test_router.cjs';
|
|
5
|
+
import '../tracing/trace_hub.cjs';
|
|
6
|
+
import 'rxjs';
|
|
7
|
+
import '@noego/ioc';
|
|
8
|
+
import '../router/wood_router.cjs';
|
|
9
|
+
import '../types/operations.cjs';
|
|
10
|
+
|
|
11
|
+
interface CreateControllerHarnessOptions<T> {
|
|
12
|
+
controllerClass: new (...args: any[]) => T;
|
|
13
|
+
container: any;
|
|
14
|
+
operations: string | string[];
|
|
15
|
+
controllersDir: string;
|
|
16
|
+
middlewareDir?: string;
|
|
17
|
+
configureContainer?: (container: any) => void | Promise<void>;
|
|
18
|
+
configureRouter?: (router: ReturnType<typeof createTestRouter>['router']) => void | Promise<void>;
|
|
19
|
+
prepareClient?: (context: {
|
|
20
|
+
bridge: Record<string, any>;
|
|
21
|
+
events: RouterBridgeResult['events'];
|
|
22
|
+
navigation: Navigation;
|
|
23
|
+
container: any;
|
|
24
|
+
}) => void | Promise<void>;
|
|
25
|
+
initialize?: boolean;
|
|
26
|
+
}
|
|
27
|
+
interface ControllerHarnessResult<T> extends RouterBridgeResult {
|
|
28
|
+
controller: T;
|
|
29
|
+
container: any;
|
|
30
|
+
router: ReturnType<typeof createTestRouter>['router'];
|
|
31
|
+
navigation: Navigation;
|
|
32
|
+
trace: TraceProvider;
|
|
33
|
+
destroy: () => void;
|
|
34
|
+
}
|
|
35
|
+
declare function createControllerHarness<T>(options: CreateControllerHarnessOptions<T>): Promise<ControllerHarnessResult<T>>;
|
|
36
|
+
|
|
37
|
+
export { type ControllerHarnessResult, type CreateControllerHarnessOptions, createControllerHarness };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Navigation } from '../navigation/index.js';
|
|
2
|
+
import { TraceProvider } from '../tracing/trace_provider.js';
|
|
3
|
+
import { RouterBridgeResult } from './create_router_bridge.js';
|
|
4
|
+
import { createTestRouter } from './create_test_router.js';
|
|
5
|
+
import '../tracing/trace_hub.js';
|
|
6
|
+
import 'rxjs';
|
|
7
|
+
import '@noego/ioc';
|
|
8
|
+
import '../router/wood_router.js';
|
|
9
|
+
import '../types/operations.js';
|
|
10
|
+
|
|
11
|
+
interface CreateControllerHarnessOptions<T> {
|
|
12
|
+
controllerClass: new (...args: any[]) => T;
|
|
13
|
+
container: any;
|
|
14
|
+
operations: string | string[];
|
|
15
|
+
controllersDir: string;
|
|
16
|
+
middlewareDir?: string;
|
|
17
|
+
configureContainer?: (container: any) => void | Promise<void>;
|
|
18
|
+
configureRouter?: (router: ReturnType<typeof createTestRouter>['router']) => void | Promise<void>;
|
|
19
|
+
prepareClient?: (context: {
|
|
20
|
+
bridge: Record<string, any>;
|
|
21
|
+
events: RouterBridgeResult['events'];
|
|
22
|
+
navigation: Navigation;
|
|
23
|
+
container: any;
|
|
24
|
+
}) => void | Promise<void>;
|
|
25
|
+
initialize?: boolean;
|
|
26
|
+
}
|
|
27
|
+
interface ControllerHarnessResult<T> extends RouterBridgeResult {
|
|
28
|
+
controller: T;
|
|
29
|
+
container: any;
|
|
30
|
+
router: ReturnType<typeof createTestRouter>['router'];
|
|
31
|
+
navigation: Navigation;
|
|
32
|
+
trace: TraceProvider;
|
|
33
|
+
destroy: () => void;
|
|
34
|
+
}
|
|
35
|
+
declare function createControllerHarness<T>(options: CreateControllerHarnessOptions<T>): Promise<ControllerHarnessResult<T>>;
|
|
36
|
+
|
|
37
|
+
export { type ControllerHarnessResult, type CreateControllerHarnessOptions, createControllerHarness };
|