@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,126 @@
|
|
|
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 renderer_view_manifest_generator_exports = {};
|
|
30
|
+
__export(renderer_view_manifest_generator_exports, {
|
|
31
|
+
generateRendererViewManifest: () => generateRendererViewManifest
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(renderer_view_manifest_generator_exports);
|
|
34
|
+
var import_path = __toESM(require("path"), 1);
|
|
35
|
+
function computeImportPath(fromDir, toFile) {
|
|
36
|
+
let rel = import_path.default.relative(fromDir, toFile);
|
|
37
|
+
if (!rel.startsWith(".")) {
|
|
38
|
+
rel = "./" + rel;
|
|
39
|
+
}
|
|
40
|
+
return rel.replace(/\\/g, "/");
|
|
41
|
+
}
|
|
42
|
+
function toIdentifier(prefix, value) {
|
|
43
|
+
const core = value.replace(/[^a-zA-Z0-9]+/g, " ").trim().split(/\s+/).map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1)).join("");
|
|
44
|
+
return `${prefix}${core || "Component"}`;
|
|
45
|
+
}
|
|
46
|
+
function viewKey(view) {
|
|
47
|
+
return `${view.windowName}.${view.pageName}`;
|
|
48
|
+
}
|
|
49
|
+
function generateRendererViewManifest(views, options) {
|
|
50
|
+
const sortedViews = [...views].sort((a, b) => viewKey(a).localeCompare(viewKey(b)));
|
|
51
|
+
const importLines = [];
|
|
52
|
+
const viewIdentifiers = /* @__PURE__ */ new Map();
|
|
53
|
+
const layoutIdentifiers = /* @__PURE__ */ new Map();
|
|
54
|
+
const usedNames = /* @__PURE__ */ new Set();
|
|
55
|
+
const allocateName = (prefix, filePath) => {
|
|
56
|
+
const base = toIdentifier(prefix, filePath);
|
|
57
|
+
let name = base;
|
|
58
|
+
let suffix = 2;
|
|
59
|
+
while (usedNames.has(name)) {
|
|
60
|
+
name = `${base}${suffix}`;
|
|
61
|
+
suffix += 1;
|
|
62
|
+
}
|
|
63
|
+
usedNames.add(name);
|
|
64
|
+
return name;
|
|
65
|
+
};
|
|
66
|
+
for (const view of sortedViews) {
|
|
67
|
+
if (!viewIdentifiers.has(view.viewPath)) {
|
|
68
|
+
const identifier = allocateName("View", view.viewPath);
|
|
69
|
+
viewIdentifiers.set(view.viewPath, identifier);
|
|
70
|
+
const abs = import_path.default.resolve(options.componentDir, view.viewPath);
|
|
71
|
+
const importPath = computeImportPath(options.outDir, abs);
|
|
72
|
+
importLines.push(`import ${identifier} from '${importPath}';`);
|
|
73
|
+
}
|
|
74
|
+
for (const layoutPath of view.layouts) {
|
|
75
|
+
if (layoutIdentifiers.has(layoutPath)) continue;
|
|
76
|
+
const identifier = allocateName("Layout", layoutPath);
|
|
77
|
+
layoutIdentifiers.set(layoutPath, identifier);
|
|
78
|
+
const abs = import_path.default.resolve(options.componentDir, layoutPath);
|
|
79
|
+
const importPath = computeImportPath(options.outDir, abs);
|
|
80
|
+
importLines.push(`import ${identifier} from '${importPath}';`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const manifestEntries = sortedViews.map((view) => {
|
|
84
|
+
const key = viewKey(view);
|
|
85
|
+
const viewIdentifier = viewIdentifiers.get(view.viewPath);
|
|
86
|
+
const layoutList = view.layouts.map((layoutPath) => layoutIdentifiers.get(layoutPath));
|
|
87
|
+
const controllerValue = view.controller ? `'${view.controller.replace(/'/g, "\\'")}'` : "undefined";
|
|
88
|
+
return ` '${key}': {
|
|
89
|
+
key: '${key}',
|
|
90
|
+
windowName: '${view.windowName}',
|
|
91
|
+
pageName: '${view.pageName}',
|
|
92
|
+
viewPath: '${view.viewPath}',
|
|
93
|
+
layoutPaths: ${JSON.stringify(view.layouts)},
|
|
94
|
+
controller: ${controllerValue},
|
|
95
|
+
view: ${viewIdentifier},
|
|
96
|
+
layouts: [${layoutList.join(", ")}],
|
|
97
|
+
},`;
|
|
98
|
+
});
|
|
99
|
+
return `// AUTO-GENERATED by @noego/wood -- do not edit
|
|
100
|
+
${importLines.join("\n")}
|
|
101
|
+
|
|
102
|
+
export interface GeneratedViewManifestEntry {
|
|
103
|
+
key: string;
|
|
104
|
+
windowName: string;
|
|
105
|
+
pageName: string;
|
|
106
|
+
viewPath: string;
|
|
107
|
+
layoutPaths: string[];
|
|
108
|
+
controller?: string;
|
|
109
|
+
view: any;
|
|
110
|
+
layouts: any[];
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export const VIEW_MANIFEST: Record<string, GeneratedViewManifestEntry> = {
|
|
114
|
+
${manifestEntries.join("\n")}
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
export function getViewManifestEntry(viewKey: string): GeneratedViewManifestEntry | null {
|
|
118
|
+
return VIEW_MANIFEST[viewKey] ?? null;
|
|
119
|
+
}
|
|
120
|
+
`;
|
|
121
|
+
}
|
|
122
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
123
|
+
0 && (module.exports = {
|
|
124
|
+
generateRendererViewManifest
|
|
125
|
+
});
|
|
126
|
+
//# sourceMappingURL=renderer_view_manifest_generator.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/codegen/renderer_view_manifest_generator.ts"],"sourcesContent":["import path from 'path';\nimport type { ViewDef } from '../types/index.cjs';\n\nexport interface RendererViewManifestGeneratorOptions {\n /** Absolute path to renderer component root (e.g. /app/ui) */\n componentDir: string;\n /** Absolute output directory where generated file will be written */\n outDir: string;\n}\n\nfunction computeImportPath(fromDir: string, toFile: string): string {\n let rel = path.relative(fromDir, toFile);\n\n if (!rel.startsWith('.')) {\n rel = './' + rel;\n }\n\n return rel.replace(/\\\\/g, '/');\n}\n\nfunction toIdentifier(prefix: string, value: string): string {\n const core = value\n .replace(/[^a-zA-Z0-9]+/g, ' ')\n .trim()\n .split(/\\s+/)\n .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1))\n .join('');\n\n return `${prefix}${core || 'Component'}`;\n}\n\nfunction viewKey(view: ViewDef): string {\n return `${view.windowName}.${view.pageName}`;\n}\n\nexport function generateRendererViewManifest(\n views: ViewDef[],\n options: RendererViewManifestGeneratorOptions,\n): string {\n const sortedViews = [...views].sort((a, b) => viewKey(a).localeCompare(viewKey(b)));\n\n const importLines: string[] = [];\n const viewIdentifiers = new Map<string, string>();\n const layoutIdentifiers = new Map<string, string>();\n const usedNames = new Set<string>();\n\n const allocateName = (prefix: string, filePath: string): string => {\n const base = toIdentifier(prefix, filePath);\n let name = base;\n let suffix = 2;\n while (usedNames.has(name)) {\n name = `${base}${suffix}`;\n suffix += 1;\n }\n usedNames.add(name);\n return name;\n };\n\n for (const view of sortedViews) {\n if (!viewIdentifiers.has(view.viewPath)) {\n const identifier = allocateName('View', view.viewPath);\n viewIdentifiers.set(view.viewPath, identifier);\n const abs = path.resolve(options.componentDir, view.viewPath);\n const importPath = computeImportPath(options.outDir, abs);\n importLines.push(`import ${identifier} from '${importPath}';`);\n }\n\n for (const layoutPath of view.layouts) {\n if (layoutIdentifiers.has(layoutPath)) continue;\n const identifier = allocateName('Layout', layoutPath);\n layoutIdentifiers.set(layoutPath, identifier);\n const abs = path.resolve(options.componentDir, layoutPath);\n const importPath = computeImportPath(options.outDir, abs);\n importLines.push(`import ${identifier} from '${importPath}';`);\n }\n }\n\n const manifestEntries = sortedViews.map((view) => {\n const key = viewKey(view);\n const viewIdentifier = viewIdentifiers.get(view.viewPath)!;\n const layoutList = view.layouts.map((layoutPath) => layoutIdentifiers.get(layoutPath)!);\n const controllerValue = view.controller ? `'${view.controller.replace(/'/g, \"\\\\'\")}'` : 'undefined';\n\n return ` '${key}': {\n key: '${key}',\n windowName: '${view.windowName}',\n pageName: '${view.pageName}',\n viewPath: '${view.viewPath}',\n layoutPaths: ${JSON.stringify(view.layouts)},\n controller: ${controllerValue},\n view: ${viewIdentifier},\n layouts: [${layoutList.join(', ')}],\n },`;\n });\n\n return `// AUTO-GENERATED by @noego/wood -- do not edit\n${importLines.join('\\n')}\n\nexport interface GeneratedViewManifestEntry {\n key: string;\n windowName: string;\n pageName: string;\n viewPath: string;\n layoutPaths: string[];\n controller?: string;\n view: any;\n layouts: any[];\n}\n\nexport const VIEW_MANIFEST: Record<string, GeneratedViewManifestEntry> = {\n${manifestEntries.join('\\n')}\n};\n\nexport function getViewManifestEntry(viewKey: string): GeneratedViewManifestEntry | null {\n return VIEW_MANIFEST[viewKey] ?? null;\n}\n`;\n}\n"],"mappings":"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","names":["path"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ViewDef } from '../types/views.cjs';
|
|
2
|
+
|
|
3
|
+
interface RendererViewManifestGeneratorOptions {
|
|
4
|
+
/** Absolute path to renderer component root (e.g. /app/ui) */
|
|
5
|
+
componentDir: string;
|
|
6
|
+
/** Absolute output directory where generated file will be written */
|
|
7
|
+
outDir: string;
|
|
8
|
+
}
|
|
9
|
+
declare function generateRendererViewManifest(views: ViewDef[], options: RendererViewManifestGeneratorOptions): string;
|
|
10
|
+
|
|
11
|
+
export { type RendererViewManifestGeneratorOptions, generateRendererViewManifest };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ViewDef } from '../types/views.js';
|
|
2
|
+
|
|
3
|
+
interface RendererViewManifestGeneratorOptions {
|
|
4
|
+
/** Absolute path to renderer component root (e.g. /app/ui) */
|
|
5
|
+
componentDir: string;
|
|
6
|
+
/** Absolute output directory where generated file will be written */
|
|
7
|
+
outDir: string;
|
|
8
|
+
}
|
|
9
|
+
declare function generateRendererViewManifest(views: ViewDef[], options: RendererViewManifestGeneratorOptions): string;
|
|
10
|
+
|
|
11
|
+
export { type RendererViewManifestGeneratorOptions, generateRendererViewManifest };
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
function computeImportPath(fromDir, toFile) {
|
|
3
|
+
let rel = path.relative(fromDir, toFile);
|
|
4
|
+
if (!rel.startsWith(".")) {
|
|
5
|
+
rel = "./" + rel;
|
|
6
|
+
}
|
|
7
|
+
return rel.replace(/\\/g, "/");
|
|
8
|
+
}
|
|
9
|
+
function toIdentifier(prefix, value) {
|
|
10
|
+
const core = value.replace(/[^a-zA-Z0-9]+/g, " ").trim().split(/\s+/).map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1)).join("");
|
|
11
|
+
return `${prefix}${core || "Component"}`;
|
|
12
|
+
}
|
|
13
|
+
function viewKey(view) {
|
|
14
|
+
return `${view.windowName}.${view.pageName}`;
|
|
15
|
+
}
|
|
16
|
+
function generateRendererViewManifest(views, options) {
|
|
17
|
+
const sortedViews = [...views].sort((a, b) => viewKey(a).localeCompare(viewKey(b)));
|
|
18
|
+
const importLines = [];
|
|
19
|
+
const viewIdentifiers = /* @__PURE__ */ new Map();
|
|
20
|
+
const layoutIdentifiers = /* @__PURE__ */ new Map();
|
|
21
|
+
const usedNames = /* @__PURE__ */ new Set();
|
|
22
|
+
const allocateName = (prefix, filePath) => {
|
|
23
|
+
const base = toIdentifier(prefix, filePath);
|
|
24
|
+
let name = base;
|
|
25
|
+
let suffix = 2;
|
|
26
|
+
while (usedNames.has(name)) {
|
|
27
|
+
name = `${base}${suffix}`;
|
|
28
|
+
suffix += 1;
|
|
29
|
+
}
|
|
30
|
+
usedNames.add(name);
|
|
31
|
+
return name;
|
|
32
|
+
};
|
|
33
|
+
for (const view of sortedViews) {
|
|
34
|
+
if (!viewIdentifiers.has(view.viewPath)) {
|
|
35
|
+
const identifier = allocateName("View", view.viewPath);
|
|
36
|
+
viewIdentifiers.set(view.viewPath, identifier);
|
|
37
|
+
const abs = path.resolve(options.componentDir, view.viewPath);
|
|
38
|
+
const importPath = computeImportPath(options.outDir, abs);
|
|
39
|
+
importLines.push(`import ${identifier} from '${importPath}';`);
|
|
40
|
+
}
|
|
41
|
+
for (const layoutPath of view.layouts) {
|
|
42
|
+
if (layoutIdentifiers.has(layoutPath)) continue;
|
|
43
|
+
const identifier = allocateName("Layout", layoutPath);
|
|
44
|
+
layoutIdentifiers.set(layoutPath, identifier);
|
|
45
|
+
const abs = path.resolve(options.componentDir, layoutPath);
|
|
46
|
+
const importPath = computeImportPath(options.outDir, abs);
|
|
47
|
+
importLines.push(`import ${identifier} from '${importPath}';`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const manifestEntries = sortedViews.map((view) => {
|
|
51
|
+
const key = viewKey(view);
|
|
52
|
+
const viewIdentifier = viewIdentifiers.get(view.viewPath);
|
|
53
|
+
const layoutList = view.layouts.map((layoutPath) => layoutIdentifiers.get(layoutPath));
|
|
54
|
+
const controllerValue = view.controller ? `'${view.controller.replace(/'/g, "\\'")}'` : "undefined";
|
|
55
|
+
return ` '${key}': {
|
|
56
|
+
key: '${key}',
|
|
57
|
+
windowName: '${view.windowName}',
|
|
58
|
+
pageName: '${view.pageName}',
|
|
59
|
+
viewPath: '${view.viewPath}',
|
|
60
|
+
layoutPaths: ${JSON.stringify(view.layouts)},
|
|
61
|
+
controller: ${controllerValue},
|
|
62
|
+
view: ${viewIdentifier},
|
|
63
|
+
layouts: [${layoutList.join(", ")}],
|
|
64
|
+
},`;
|
|
65
|
+
});
|
|
66
|
+
return `// AUTO-GENERATED by @noego/wood -- do not edit
|
|
67
|
+
${importLines.join("\n")}
|
|
68
|
+
|
|
69
|
+
export interface GeneratedViewManifestEntry {
|
|
70
|
+
key: string;
|
|
71
|
+
windowName: string;
|
|
72
|
+
pageName: string;
|
|
73
|
+
viewPath: string;
|
|
74
|
+
layoutPaths: string[];
|
|
75
|
+
controller?: string;
|
|
76
|
+
view: any;
|
|
77
|
+
layouts: any[];
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export const VIEW_MANIFEST: Record<string, GeneratedViewManifestEntry> = {
|
|
81
|
+
${manifestEntries.join("\n")}
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export function getViewManifestEntry(viewKey: string): GeneratedViewManifestEntry | null {
|
|
85
|
+
return VIEW_MANIFEST[viewKey] ?? null;
|
|
86
|
+
}
|
|
87
|
+
`;
|
|
88
|
+
}
|
|
89
|
+
export {
|
|
90
|
+
generateRendererViewManifest
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=renderer_view_manifest_generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/codegen/renderer_view_manifest_generator.ts"],"sourcesContent":["import path from 'path';\nimport type { ViewDef } from '../types/index.js';\n\nexport interface RendererViewManifestGeneratorOptions {\n /** Absolute path to renderer component root (e.g. /app/ui) */\n componentDir: string;\n /** Absolute output directory where generated file will be written */\n outDir: string;\n}\n\nfunction computeImportPath(fromDir: string, toFile: string): string {\n let rel = path.relative(fromDir, toFile);\n\n if (!rel.startsWith('.')) {\n rel = './' + rel;\n }\n\n return rel.replace(/\\\\/g, '/');\n}\n\nfunction toIdentifier(prefix: string, value: string): string {\n const core = value\n .replace(/[^a-zA-Z0-9]+/g, ' ')\n .trim()\n .split(/\\s+/)\n .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1))\n .join('');\n\n return `${prefix}${core || 'Component'}`;\n}\n\nfunction viewKey(view: ViewDef): string {\n return `${view.windowName}.${view.pageName}`;\n}\n\nexport function generateRendererViewManifest(\n views: ViewDef[],\n options: RendererViewManifestGeneratorOptions,\n): string {\n const sortedViews = [...views].sort((a, b) => viewKey(a).localeCompare(viewKey(b)));\n\n const importLines: string[] = [];\n const viewIdentifiers = new Map<string, string>();\n const layoutIdentifiers = new Map<string, string>();\n const usedNames = new Set<string>();\n\n const allocateName = (prefix: string, filePath: string): string => {\n const base = toIdentifier(prefix, filePath);\n let name = base;\n let suffix = 2;\n while (usedNames.has(name)) {\n name = `${base}${suffix}`;\n suffix += 1;\n }\n usedNames.add(name);\n return name;\n };\n\n for (const view of sortedViews) {\n if (!viewIdentifiers.has(view.viewPath)) {\n const identifier = allocateName('View', view.viewPath);\n viewIdentifiers.set(view.viewPath, identifier);\n const abs = path.resolve(options.componentDir, view.viewPath);\n const importPath = computeImportPath(options.outDir, abs);\n importLines.push(`import ${identifier} from '${importPath}';`);\n }\n\n for (const layoutPath of view.layouts) {\n if (layoutIdentifiers.has(layoutPath)) continue;\n const identifier = allocateName('Layout', layoutPath);\n layoutIdentifiers.set(layoutPath, identifier);\n const abs = path.resolve(options.componentDir, layoutPath);\n const importPath = computeImportPath(options.outDir, abs);\n importLines.push(`import ${identifier} from '${importPath}';`);\n }\n }\n\n const manifestEntries = sortedViews.map((view) => {\n const key = viewKey(view);\n const viewIdentifier = viewIdentifiers.get(view.viewPath)!;\n const layoutList = view.layouts.map((layoutPath) => layoutIdentifiers.get(layoutPath)!);\n const controllerValue = view.controller ? `'${view.controller.replace(/'/g, \"\\\\'\")}'` : 'undefined';\n\n return ` '${key}': {\n key: '${key}',\n windowName: '${view.windowName}',\n pageName: '${view.pageName}',\n viewPath: '${view.viewPath}',\n layoutPaths: ${JSON.stringify(view.layouts)},\n controller: ${controllerValue},\n view: ${viewIdentifier},\n layouts: [${layoutList.join(', ')}],\n },`;\n });\n\n return `// AUTO-GENERATED by @noego/wood -- do not edit\n${importLines.join('\\n')}\n\nexport interface GeneratedViewManifestEntry {\n key: string;\n windowName: string;\n pageName: string;\n viewPath: string;\n layoutPaths: string[];\n controller?: string;\n view: any;\n layouts: any[];\n}\n\nexport const VIEW_MANIFEST: Record<string, GeneratedViewManifestEntry> = {\n${manifestEntries.join('\\n')}\n};\n\nexport function getViewManifestEntry(viewKey: string): GeneratedViewManifestEntry | null {\n return VIEW_MANIFEST[viewKey] ?? null;\n}\n`;\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 runtime_generator_exports = {};
|
|
30
|
+
__export(runtime_generator_exports, {
|
|
31
|
+
generateRuntime: () => generateRuntime
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(runtime_generator_exports);
|
|
34
|
+
var import_fs = require("fs");
|
|
35
|
+
var import_path = __toESM(require("path"), 1);
|
|
36
|
+
const CANDIDATE_SUFFIXES = [
|
|
37
|
+
".ts",
|
|
38
|
+
".controller.ts",
|
|
39
|
+
".js",
|
|
40
|
+
".controller.js"
|
|
41
|
+
];
|
|
42
|
+
const INDEX_CANDIDATES = [
|
|
43
|
+
"index.ts",
|
|
44
|
+
"index.js"
|
|
45
|
+
];
|
|
46
|
+
function resolveControllerFile(controllerName, controllersDir) {
|
|
47
|
+
const basePath = import_path.default.resolve(controllersDir, controllerName);
|
|
48
|
+
for (const suffix of CANDIDATE_SUFFIXES) {
|
|
49
|
+
const candidate = basePath + suffix;
|
|
50
|
+
if ((0, import_fs.existsSync)(candidate)) return candidate;
|
|
51
|
+
}
|
|
52
|
+
for (const indexFile of INDEX_CANDIDATES) {
|
|
53
|
+
const candidate = import_path.default.resolve(controllersDir, controllerName, indexFile);
|
|
54
|
+
if ((0, import_fs.existsSync)(candidate)) return candidate;
|
|
55
|
+
}
|
|
56
|
+
return void 0;
|
|
57
|
+
}
|
|
58
|
+
function computeImportPath(fromDir, toFile) {
|
|
59
|
+
let rel = import_path.default.relative(fromDir, toFile);
|
|
60
|
+
if (!rel.startsWith(".")) {
|
|
61
|
+
rel = "./" + rel;
|
|
62
|
+
}
|
|
63
|
+
if (rel.endsWith(".ts")) {
|
|
64
|
+
rel = rel.slice(0, -3);
|
|
65
|
+
}
|
|
66
|
+
return rel.replace(/\\/g, "/");
|
|
67
|
+
}
|
|
68
|
+
function toControllerClassName(controllerName) {
|
|
69
|
+
const pascal = controllerName.split(/[_\-.]/).map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1)).join("");
|
|
70
|
+
return pascal + "Controller";
|
|
71
|
+
}
|
|
72
|
+
function extractControllerNames(operations) {
|
|
73
|
+
const names = /* @__PURE__ */ new Set();
|
|
74
|
+
operations.forEach((op) => names.add(op.controller));
|
|
75
|
+
return Array.from(names).sort();
|
|
76
|
+
}
|
|
77
|
+
function serializeOperation(op) {
|
|
78
|
+
const payload = {
|
|
79
|
+
channel: op.channel,
|
|
80
|
+
controller: op.controller,
|
|
81
|
+
action: op.action,
|
|
82
|
+
middleware: op.middleware
|
|
83
|
+
};
|
|
84
|
+
if (op.inputSchema !== void 0) {
|
|
85
|
+
payload.inputSchema = op.inputSchema;
|
|
86
|
+
}
|
|
87
|
+
if (op.outputSchema !== void 0) {
|
|
88
|
+
payload.outputSchema = op.outputSchema;
|
|
89
|
+
}
|
|
90
|
+
return JSON.stringify(payload);
|
|
91
|
+
}
|
|
92
|
+
function generateRuntime(operations, options) {
|
|
93
|
+
const controllerNames = extractControllerNames(operations);
|
|
94
|
+
const outDirResolved = import_path.default.resolve(options.outDir);
|
|
95
|
+
const imports = [];
|
|
96
|
+
const registrations = [];
|
|
97
|
+
const unresolved = [];
|
|
98
|
+
for (const name of controllerNames) {
|
|
99
|
+
const filePath = resolveControllerFile(name, options.controllersDir);
|
|
100
|
+
if (!filePath) {
|
|
101
|
+
unresolved.push(name);
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
const importPath = computeImportPath(outDirResolved, filePath);
|
|
105
|
+
const className = toControllerClassName(name);
|
|
106
|
+
imports.push(`import ${className} from '${importPath}';`);
|
|
107
|
+
registrations.push(` router.registerController('${name}', ${className});`);
|
|
108
|
+
}
|
|
109
|
+
if (unresolved.length > 0 && !options.allowUnresolved) {
|
|
110
|
+
throw new Error(
|
|
111
|
+
`Runtime codegen failed: ${unresolved.length} controller(s) not found on disk:
|
|
112
|
+
` + unresolved.map((name) => ` - "${name}" (searched in ${options.controllersDir})`).join("\n") + `
|
|
113
|
+
|
|
114
|
+
Ensure each controller file exists with one of these suffixes: .ts, .controller.ts, .js, .controller.js`
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
const operationEntries = Array.from(operations.entries()).sort(([a], [b]) => a.localeCompare(b)).map(([channel, op]) => ` ['${channel}', ${serializeOperation(op)}],`);
|
|
118
|
+
const lines = [
|
|
119
|
+
"// AUTO-GENERATED by @noego/wood -- do not edit",
|
|
120
|
+
"//",
|
|
121
|
+
"// Static imports ensure all controllers are bundled and available at startup.",
|
|
122
|
+
"// Operations are pre-parsed at build time to avoid runtime YAML I/O in Electron bundles.",
|
|
123
|
+
""
|
|
124
|
+
];
|
|
125
|
+
lines.push(...imports);
|
|
126
|
+
if (imports.length > 0) {
|
|
127
|
+
lines.push("");
|
|
128
|
+
}
|
|
129
|
+
if (unresolved.length > 0) {
|
|
130
|
+
lines.push(
|
|
131
|
+
"// WARNING: The following controllers could not be resolved on disk:",
|
|
132
|
+
...unresolved.map((name) => `// - ${name}`),
|
|
133
|
+
""
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
lines.push(
|
|
137
|
+
"const OPERATIONS = new Map<string, any>([",
|
|
138
|
+
...operationEntries,
|
|
139
|
+
"]);",
|
|
140
|
+
"",
|
|
141
|
+
"export function registerRuntime(router: {",
|
|
142
|
+
" registerController(name: string, cls: any): void;",
|
|
143
|
+
" loadOperations(operations: Map<string, any>): void;",
|
|
144
|
+
"}): void {",
|
|
145
|
+
...registrations,
|
|
146
|
+
" router.loadOperations(OPERATIONS);",
|
|
147
|
+
"}",
|
|
148
|
+
""
|
|
149
|
+
);
|
|
150
|
+
return lines.join("\n");
|
|
151
|
+
}
|
|
152
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
153
|
+
0 && (module.exports = {
|
|
154
|
+
generateRuntime
|
|
155
|
+
});
|
|
156
|
+
//# sourceMappingURL=runtime_generator.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/codegen/runtime_generator.ts"],"sourcesContent":["import { existsSync } from 'fs';\nimport path from 'path';\nimport type { OperationDef } from '../types/index.cjs';\n\nconst CANDIDATE_SUFFIXES = [\n '.ts',\n '.controller.ts',\n '.js',\n '.controller.js',\n] as const;\n\nconst INDEX_CANDIDATES = [\n 'index.ts',\n 'index.js',\n] as const;\n\nfunction resolveControllerFile(controllerName: string, controllersDir: string): string | undefined {\n const basePath = path.resolve(controllersDir, controllerName);\n\n for (const suffix of CANDIDATE_SUFFIXES) {\n const candidate = basePath + suffix;\n if (existsSync(candidate)) return candidate;\n }\n\n for (const indexFile of INDEX_CANDIDATES) {\n const candidate = path.resolve(controllersDir, controllerName, indexFile);\n if (existsSync(candidate)) return candidate;\n }\n\n return undefined;\n}\n\nfunction computeImportPath(fromDir: string, toFile: string): string {\n let rel = path.relative(fromDir, toFile);\n\n if (!rel.startsWith('.')) {\n rel = './' + rel;\n }\n\n if (rel.endsWith('.ts')) {\n rel = rel.slice(0, -3);\n }\n\n return rel.replace(/\\\\/g, '/');\n}\n\nfunction toControllerClassName(controllerName: string): string {\n const pascal = controllerName\n .split(/[_\\-.]/)\n .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1))\n .join('');\n\n return pascal + 'Controller';\n}\n\nfunction extractControllerNames(operations: Map<string, OperationDef>): string[] {\n const names = new Set<string>();\n operations.forEach((op) => names.add(op.controller));\n return Array.from(names).sort();\n}\n\nexport interface RuntimeGeneratorOptions {\n controllersDir: string;\n outDir: string;\n allowUnresolved?: boolean;\n}\n\nfunction serializeOperation(op: OperationDef): string {\n const payload: Record<string, unknown> = {\n channel: op.channel,\n controller: op.controller,\n action: op.action,\n middleware: op.middleware,\n };\n\n if (op.inputSchema !== undefined) {\n payload.inputSchema = op.inputSchema;\n }\n if (op.outputSchema !== undefined) {\n payload.outputSchema = op.outputSchema;\n }\n\n return JSON.stringify(payload);\n}\n\n/**\n * Generate a single runtime registration file that registers controllers and\n * pre-parsed operations with a WoodRouter-compatible target.\n */\nexport function generateRuntime(\n operations: Map<string, OperationDef>,\n options: RuntimeGeneratorOptions,\n): string {\n const controllerNames = extractControllerNames(operations);\n const outDirResolved = path.resolve(options.outDir);\n\n const imports: string[] = [];\n const registrations: string[] = [];\n const unresolved: string[] = [];\n\n for (const name of controllerNames) {\n const filePath = resolveControllerFile(name, options.controllersDir);\n if (!filePath) {\n unresolved.push(name);\n continue;\n }\n\n const importPath = computeImportPath(outDirResolved, filePath);\n const className = toControllerClassName(name);\n\n imports.push(`import ${className} from '${importPath}';`);\n registrations.push(` router.registerController('${name}', ${className});`);\n }\n\n if (unresolved.length > 0 && !options.allowUnresolved) {\n throw new Error(\n `Runtime codegen failed: ${unresolved.length} controller(s) not found on disk:\\n` +\n unresolved.map(name => ` - \"${name}\" (searched in ${options.controllersDir})`).join('\\n') +\n `\\n\\nEnsure each controller file exists with one of these suffixes: .ts, .controller.ts, .js, .controller.js`\n );\n }\n\n const operationEntries = Array.from(operations.entries())\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([channel, op]) => ` ['${channel}', ${serializeOperation(op)}],`);\n\n const lines: string[] = [\n '// AUTO-GENERATED by @noego/wood -- do not edit',\n '//',\n '// Static imports ensure all controllers are bundled and available at startup.',\n '// Operations are pre-parsed at build time to avoid runtime YAML I/O in Electron bundles.',\n '',\n ];\n\n lines.push(...imports);\n\n if (imports.length > 0) {\n lines.push('');\n }\n\n if (unresolved.length > 0) {\n lines.push(\n '// WARNING: The following controllers could not be resolved on disk:',\n ...unresolved.map((name) => `// - ${name}`),\n '',\n );\n }\n\n lines.push(\n 'const OPERATIONS = new Map<string, any>([',\n ...operationEntries,\n ']);',\n '',\n 'export function registerRuntime(router: {',\n ' registerController(name: string, cls: any): void;',\n ' loadOperations(operations: Map<string, any>): void;',\n '}): void {',\n ...registrations,\n ' router.loadOperations(OPERATIONS);',\n '}',\n '',\n );\n\n return lines.join('\\n');\n}\n"],"mappings":"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","names":["path"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { OperationDef } from '../types/operations.cjs';
|
|
2
|
+
|
|
3
|
+
interface RuntimeGeneratorOptions {
|
|
4
|
+
controllersDir: string;
|
|
5
|
+
outDir: string;
|
|
6
|
+
allowUnresolved?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Generate a single runtime registration file that registers controllers and
|
|
10
|
+
* pre-parsed operations with a WoodRouter-compatible target.
|
|
11
|
+
*/
|
|
12
|
+
declare function generateRuntime(operations: Map<string, OperationDef>, options: RuntimeGeneratorOptions): string;
|
|
13
|
+
|
|
14
|
+
export { type RuntimeGeneratorOptions, generateRuntime };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { OperationDef } from '../types/operations.js';
|
|
2
|
+
|
|
3
|
+
interface RuntimeGeneratorOptions {
|
|
4
|
+
controllersDir: string;
|
|
5
|
+
outDir: string;
|
|
6
|
+
allowUnresolved?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Generate a single runtime registration file that registers controllers and
|
|
10
|
+
* pre-parsed operations with a WoodRouter-compatible target.
|
|
11
|
+
*/
|
|
12
|
+
declare function generateRuntime(operations: Map<string, OperationDef>, options: RuntimeGeneratorOptions): string;
|
|
13
|
+
|
|
14
|
+
export { type RuntimeGeneratorOptions, generateRuntime };
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { existsSync } from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
const CANDIDATE_SUFFIXES = [
|
|
4
|
+
".ts",
|
|
5
|
+
".controller.ts",
|
|
6
|
+
".js",
|
|
7
|
+
".controller.js"
|
|
8
|
+
];
|
|
9
|
+
const INDEX_CANDIDATES = [
|
|
10
|
+
"index.ts",
|
|
11
|
+
"index.js"
|
|
12
|
+
];
|
|
13
|
+
function resolveControllerFile(controllerName, controllersDir) {
|
|
14
|
+
const basePath = path.resolve(controllersDir, controllerName);
|
|
15
|
+
for (const suffix of CANDIDATE_SUFFIXES) {
|
|
16
|
+
const candidate = basePath + suffix;
|
|
17
|
+
if (existsSync(candidate)) return candidate;
|
|
18
|
+
}
|
|
19
|
+
for (const indexFile of INDEX_CANDIDATES) {
|
|
20
|
+
const candidate = path.resolve(controllersDir, controllerName, indexFile);
|
|
21
|
+
if (existsSync(candidate)) return candidate;
|
|
22
|
+
}
|
|
23
|
+
return void 0;
|
|
24
|
+
}
|
|
25
|
+
function computeImportPath(fromDir, toFile) {
|
|
26
|
+
let rel = path.relative(fromDir, toFile);
|
|
27
|
+
if (!rel.startsWith(".")) {
|
|
28
|
+
rel = "./" + rel;
|
|
29
|
+
}
|
|
30
|
+
if (rel.endsWith(".ts")) {
|
|
31
|
+
rel = rel.slice(0, -3);
|
|
32
|
+
}
|
|
33
|
+
return rel.replace(/\\/g, "/");
|
|
34
|
+
}
|
|
35
|
+
function toControllerClassName(controllerName) {
|
|
36
|
+
const pascal = controllerName.split(/[_\-.]/).map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1)).join("");
|
|
37
|
+
return pascal + "Controller";
|
|
38
|
+
}
|
|
39
|
+
function extractControllerNames(operations) {
|
|
40
|
+
const names = /* @__PURE__ */ new Set();
|
|
41
|
+
operations.forEach((op) => names.add(op.controller));
|
|
42
|
+
return Array.from(names).sort();
|
|
43
|
+
}
|
|
44
|
+
function serializeOperation(op) {
|
|
45
|
+
const payload = {
|
|
46
|
+
channel: op.channel,
|
|
47
|
+
controller: op.controller,
|
|
48
|
+
action: op.action,
|
|
49
|
+
middleware: op.middleware
|
|
50
|
+
};
|
|
51
|
+
if (op.inputSchema !== void 0) {
|
|
52
|
+
payload.inputSchema = op.inputSchema;
|
|
53
|
+
}
|
|
54
|
+
if (op.outputSchema !== void 0) {
|
|
55
|
+
payload.outputSchema = op.outputSchema;
|
|
56
|
+
}
|
|
57
|
+
return JSON.stringify(payload);
|
|
58
|
+
}
|
|
59
|
+
function generateRuntime(operations, options) {
|
|
60
|
+
const controllerNames = extractControllerNames(operations);
|
|
61
|
+
const outDirResolved = path.resolve(options.outDir);
|
|
62
|
+
const imports = [];
|
|
63
|
+
const registrations = [];
|
|
64
|
+
const unresolved = [];
|
|
65
|
+
for (const name of controllerNames) {
|
|
66
|
+
const filePath = resolveControllerFile(name, options.controllersDir);
|
|
67
|
+
if (!filePath) {
|
|
68
|
+
unresolved.push(name);
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const importPath = computeImportPath(outDirResolved, filePath);
|
|
72
|
+
const className = toControllerClassName(name);
|
|
73
|
+
imports.push(`import ${className} from '${importPath}';`);
|
|
74
|
+
registrations.push(` router.registerController('${name}', ${className});`);
|
|
75
|
+
}
|
|
76
|
+
if (unresolved.length > 0 && !options.allowUnresolved) {
|
|
77
|
+
throw new Error(
|
|
78
|
+
`Runtime codegen failed: ${unresolved.length} controller(s) not found on disk:
|
|
79
|
+
` + unresolved.map((name) => ` - "${name}" (searched in ${options.controllersDir})`).join("\n") + `
|
|
80
|
+
|
|
81
|
+
Ensure each controller file exists with one of these suffixes: .ts, .controller.ts, .js, .controller.js`
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
const operationEntries = Array.from(operations.entries()).sort(([a], [b]) => a.localeCompare(b)).map(([channel, op]) => ` ['${channel}', ${serializeOperation(op)}],`);
|
|
85
|
+
const lines = [
|
|
86
|
+
"// AUTO-GENERATED by @noego/wood -- do not edit",
|
|
87
|
+
"//",
|
|
88
|
+
"// Static imports ensure all controllers are bundled and available at startup.",
|
|
89
|
+
"// Operations are pre-parsed at build time to avoid runtime YAML I/O in Electron bundles.",
|
|
90
|
+
""
|
|
91
|
+
];
|
|
92
|
+
lines.push(...imports);
|
|
93
|
+
if (imports.length > 0) {
|
|
94
|
+
lines.push("");
|
|
95
|
+
}
|
|
96
|
+
if (unresolved.length > 0) {
|
|
97
|
+
lines.push(
|
|
98
|
+
"// WARNING: The following controllers could not be resolved on disk:",
|
|
99
|
+
...unresolved.map((name) => `// - ${name}`),
|
|
100
|
+
""
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
lines.push(
|
|
104
|
+
"const OPERATIONS = new Map<string, any>([",
|
|
105
|
+
...operationEntries,
|
|
106
|
+
"]);",
|
|
107
|
+
"",
|
|
108
|
+
"export function registerRuntime(router: {",
|
|
109
|
+
" registerController(name: string, cls: any): void;",
|
|
110
|
+
" loadOperations(operations: Map<string, any>): void;",
|
|
111
|
+
"}): void {",
|
|
112
|
+
...registrations,
|
|
113
|
+
" router.loadOperations(OPERATIONS);",
|
|
114
|
+
"}",
|
|
115
|
+
""
|
|
116
|
+
);
|
|
117
|
+
return lines.join("\n");
|
|
118
|
+
}
|
|
119
|
+
export {
|
|
120
|
+
generateRuntime
|
|
121
|
+
};
|
|
122
|
+
//# sourceMappingURL=runtime_generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/codegen/runtime_generator.ts"],"sourcesContent":["import { existsSync } from 'fs';\nimport path from 'path';\nimport type { OperationDef } from '../types/index.js';\n\nconst CANDIDATE_SUFFIXES = [\n '.ts',\n '.controller.ts',\n '.js',\n '.controller.js',\n] as const;\n\nconst INDEX_CANDIDATES = [\n 'index.ts',\n 'index.js',\n] as const;\n\nfunction resolveControllerFile(controllerName: string, controllersDir: string): string | undefined {\n const basePath = path.resolve(controllersDir, controllerName);\n\n for (const suffix of CANDIDATE_SUFFIXES) {\n const candidate = basePath + suffix;\n if (existsSync(candidate)) return candidate;\n }\n\n for (const indexFile of INDEX_CANDIDATES) {\n const candidate = path.resolve(controllersDir, controllerName, indexFile);\n if (existsSync(candidate)) return candidate;\n }\n\n return undefined;\n}\n\nfunction computeImportPath(fromDir: string, toFile: string): string {\n let rel = path.relative(fromDir, toFile);\n\n if (!rel.startsWith('.')) {\n rel = './' + rel;\n }\n\n if (rel.endsWith('.ts')) {\n rel = rel.slice(0, -3);\n }\n\n return rel.replace(/\\\\/g, '/');\n}\n\nfunction toControllerClassName(controllerName: string): string {\n const pascal = controllerName\n .split(/[_\\-.]/)\n .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1))\n .join('');\n\n return pascal + 'Controller';\n}\n\nfunction extractControllerNames(operations: Map<string, OperationDef>): string[] {\n const names = new Set<string>();\n operations.forEach((op) => names.add(op.controller));\n return Array.from(names).sort();\n}\n\nexport interface RuntimeGeneratorOptions {\n controllersDir: string;\n outDir: string;\n allowUnresolved?: boolean;\n}\n\nfunction serializeOperation(op: OperationDef): string {\n const payload: Record<string, unknown> = {\n channel: op.channel,\n controller: op.controller,\n action: op.action,\n middleware: op.middleware,\n };\n\n if (op.inputSchema !== undefined) {\n payload.inputSchema = op.inputSchema;\n }\n if (op.outputSchema !== undefined) {\n payload.outputSchema = op.outputSchema;\n }\n\n return JSON.stringify(payload);\n}\n\n/**\n * Generate a single runtime registration file that registers controllers and\n * pre-parsed operations with a WoodRouter-compatible target.\n */\nexport function generateRuntime(\n operations: Map<string, OperationDef>,\n options: RuntimeGeneratorOptions,\n): string {\n const controllerNames = extractControllerNames(operations);\n const outDirResolved = path.resolve(options.outDir);\n\n const imports: string[] = [];\n const registrations: string[] = [];\n const unresolved: string[] = [];\n\n for (const name of controllerNames) {\n const filePath = resolveControllerFile(name, options.controllersDir);\n if (!filePath) {\n unresolved.push(name);\n continue;\n }\n\n const importPath = computeImportPath(outDirResolved, filePath);\n const className = toControllerClassName(name);\n\n imports.push(`import ${className} from '${importPath}';`);\n registrations.push(` router.registerController('${name}', ${className});`);\n }\n\n if (unresolved.length > 0 && !options.allowUnresolved) {\n throw new Error(\n `Runtime codegen failed: ${unresolved.length} controller(s) not found on disk:\\n` +\n unresolved.map(name => ` - \"${name}\" (searched in ${options.controllersDir})`).join('\\n') +\n `\\n\\nEnsure each controller file exists with one of these suffixes: .ts, .controller.ts, .js, .controller.js`\n );\n }\n\n const operationEntries = Array.from(operations.entries())\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([channel, op]) => ` ['${channel}', ${serializeOperation(op)}],`);\n\n const lines: string[] = [\n '// AUTO-GENERATED by @noego/wood -- do not edit',\n '//',\n '// Static imports ensure all controllers are bundled and available at startup.',\n '// Operations are pre-parsed at build time to avoid runtime YAML I/O in Electron bundles.',\n '',\n ];\n\n lines.push(...imports);\n\n if (imports.length > 0) {\n lines.push('');\n }\n\n if (unresolved.length > 0) {\n lines.push(\n '// WARNING: The following controllers could not be resolved on disk:',\n ...unresolved.map((name) => `// - ${name}`),\n '',\n );\n }\n\n lines.push(\n 'const OPERATIONS = new Map<string, any>([',\n ...operationEntries,\n ']);',\n '',\n 'export function registerRuntime(router: {',\n ' registerController(name: string, cls: any): void;',\n ' loadOperations(operations: Map<string, any>): void;',\n '}): void {',\n ...registrations,\n ' router.loadOperations(OPERATIONS);',\n '}',\n '',\n );\n\n return lines.join('\\n');\n}\n"],"mappings":"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","names":[]}
|