@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,22 @@
|
|
|
1
|
+
import { BackendBridge } from '../bridge/backend_bridge.cjs';
|
|
2
|
+
|
|
3
|
+
interface BackendWatcherOptions {
|
|
4
|
+
patterns: string[];
|
|
5
|
+
bridge: BackendBridge;
|
|
6
|
+
buildFn: () => Promise<void>;
|
|
7
|
+
cwd: string;
|
|
8
|
+
}
|
|
9
|
+
declare class BackendWatcher {
|
|
10
|
+
private options;
|
|
11
|
+
private watcher;
|
|
12
|
+
private change$;
|
|
13
|
+
private crashCount;
|
|
14
|
+
private lastStartTime;
|
|
15
|
+
private paused;
|
|
16
|
+
constructor(options: BackendWatcherOptions);
|
|
17
|
+
start(): void;
|
|
18
|
+
stop(): void;
|
|
19
|
+
private rebuild;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export { BackendWatcher, type BackendWatcherOptions };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { BackendBridge } from '../bridge/backend_bridge.js';
|
|
2
|
+
|
|
3
|
+
interface BackendWatcherOptions {
|
|
4
|
+
patterns: string[];
|
|
5
|
+
bridge: BackendBridge;
|
|
6
|
+
buildFn: () => Promise<void>;
|
|
7
|
+
cwd: string;
|
|
8
|
+
}
|
|
9
|
+
declare class BackendWatcher {
|
|
10
|
+
private options;
|
|
11
|
+
private watcher;
|
|
12
|
+
private change$;
|
|
13
|
+
private crashCount;
|
|
14
|
+
private lastStartTime;
|
|
15
|
+
private paused;
|
|
16
|
+
constructor(options: BackendWatcherOptions);
|
|
17
|
+
start(): void;
|
|
18
|
+
stop(): void;
|
|
19
|
+
private rebuild;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export { BackendWatcher, type BackendWatcherOptions };
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { watch } from "chokidar";
|
|
2
|
+
import { Subject, debounceTime, switchMap, from } from "rxjs";
|
|
3
|
+
import { getLogger } from "@noego/logger";
|
|
4
|
+
const logger = getLogger("wood:dev:backend-watcher");
|
|
5
|
+
const MAX_CRASH_RESTARTS = 3;
|
|
6
|
+
const STABILITY_THRESHOLD = 3e4;
|
|
7
|
+
const BOOT_ERROR_THRESHOLD = 5e3;
|
|
8
|
+
class BackendWatcher {
|
|
9
|
+
constructor(options) {
|
|
10
|
+
this.options = options;
|
|
11
|
+
this.watcher = null;
|
|
12
|
+
this.change$ = new Subject();
|
|
13
|
+
this.crashCount = 0;
|
|
14
|
+
this.lastStartTime = 0;
|
|
15
|
+
this.paused = false;
|
|
16
|
+
}
|
|
17
|
+
start() {
|
|
18
|
+
this.watcher = watch(this.options.patterns, {
|
|
19
|
+
cwd: this.options.cwd,
|
|
20
|
+
ignoreInitial: true
|
|
21
|
+
});
|
|
22
|
+
this.watcher.on("change", (filePath) => {
|
|
23
|
+
if (this.paused) {
|
|
24
|
+
logger.info("file change detected while paused, resuming restarts");
|
|
25
|
+
this.paused = false;
|
|
26
|
+
this.crashCount = 0;
|
|
27
|
+
}
|
|
28
|
+
logger.debug("backend file changed", { filePath });
|
|
29
|
+
this.change$.next(filePath);
|
|
30
|
+
});
|
|
31
|
+
this.change$.pipe(
|
|
32
|
+
debounceTime(100),
|
|
33
|
+
switchMap(() => from(this.rebuild()))
|
|
34
|
+
).subscribe({
|
|
35
|
+
error: (err) => {
|
|
36
|
+
logger.error("backend watcher pipeline error", { error: String(err) });
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
stop() {
|
|
41
|
+
this.watcher?.close();
|
|
42
|
+
this.change$.complete();
|
|
43
|
+
}
|
|
44
|
+
async rebuild() {
|
|
45
|
+
if (this.paused) return;
|
|
46
|
+
try {
|
|
47
|
+
logger.info("restarting backend");
|
|
48
|
+
await this.options.bridge.stop();
|
|
49
|
+
await this.options.buildFn();
|
|
50
|
+
const timeSinceLastStart = Date.now() - this.lastStartTime;
|
|
51
|
+
if (this.lastStartTime > 0 && timeSinceLastStart < STABILITY_THRESHOLD) {
|
|
52
|
+
this.crashCount++;
|
|
53
|
+
if (this.crashCount >= MAX_CRASH_RESTARTS) {
|
|
54
|
+
logger.error(
|
|
55
|
+
"backend crashed too many times in quick succession, pausing restarts",
|
|
56
|
+
{ crashCount: this.crashCount }
|
|
57
|
+
);
|
|
58
|
+
this.paused = true;
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
} else {
|
|
62
|
+
this.crashCount = 0;
|
|
63
|
+
}
|
|
64
|
+
this.lastStartTime = Date.now();
|
|
65
|
+
await this.options.bridge.start();
|
|
66
|
+
logger.info("backend restarted successfully");
|
|
67
|
+
} catch (err) {
|
|
68
|
+
const timeSinceBoot = Date.now() - this.lastStartTime;
|
|
69
|
+
if (timeSinceBoot < BOOT_ERROR_THRESHOLD) {
|
|
70
|
+
logger.error(
|
|
71
|
+
"backend failed to boot (exited within 5s), pausing auto-restart \u2014 fix the error and save to retry",
|
|
72
|
+
{ error: String(err) }
|
|
73
|
+
);
|
|
74
|
+
this.paused = true;
|
|
75
|
+
} else {
|
|
76
|
+
logger.error("backend rebuild/restart failed", { error: String(err) });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
export {
|
|
82
|
+
BackendWatcher
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=backend_watcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/dev/backend_watcher.ts"],"sourcesContent":["import { watch, type FSWatcher } from 'chokidar';\nimport { Subject, debounceTime, switchMap, from } from 'rxjs';\nimport { getLogger } from '@noego/logger';\nimport { BackendBridge } from '../bridge/backend_bridge.js';\n\nconst logger = getLogger('wood:dev:backend-watcher');\n\nexport interface BackendWatcherOptions {\n patterns: string[];\n bridge: BackendBridge;\n buildFn: () => Promise<void>;\n cwd: string;\n}\n\nconst MAX_CRASH_RESTARTS = 3;\nconst STABILITY_THRESHOLD = 30_000; // 30 seconds\nconst BOOT_ERROR_THRESHOLD = 5_000; // 5 seconds — quick exit = boot error, don't retry\n\nexport class BackendWatcher {\n private watcher: FSWatcher | null = null;\n private change$ = new Subject<string>();\n private crashCount = 0;\n private lastStartTime = 0;\n private paused = false;\n\n constructor(private options: BackendWatcherOptions) {}\n\n start(): void {\n this.watcher = watch(this.options.patterns, {\n cwd: this.options.cwd,\n ignoreInitial: true,\n });\n\n this.watcher.on('change', (filePath: string) => {\n if (this.paused) {\n // A file change while paused resets the pause — the developer likely fixed the issue\n logger.info('file change detected while paused, resuming restarts');\n this.paused = false;\n this.crashCount = 0;\n }\n logger.debug('backend file changed', { filePath });\n this.change$.next(filePath);\n });\n\n // RxJS pipeline: debounce rapid saves, switchMap cancels in-progress restarts\n this.change$.pipe(\n debounceTime(100),\n switchMap(() => from(this.rebuild())),\n ).subscribe({\n error: (err) => {\n logger.error('backend watcher pipeline error', { error: String(err) });\n },\n });\n }\n\n stop(): void {\n this.watcher?.close();\n this.change$.complete();\n }\n\n private async rebuild(): Promise<void> {\n if (this.paused) return;\n\n try {\n logger.info('restarting backend');\n\n // Stop backend\n await this.options.bridge.stop();\n\n // Rebuild\n await this.options.buildFn();\n\n // Check crash threshold — rapid crashes indicate a persistent issue\n const timeSinceLastStart = Date.now() - this.lastStartTime;\n if (this.lastStartTime > 0 && timeSinceLastStart < STABILITY_THRESHOLD) {\n this.crashCount++;\n if (this.crashCount >= MAX_CRASH_RESTARTS) {\n logger.error(\n 'backend crashed too many times in quick succession, pausing restarts',\n { crashCount: this.crashCount },\n );\n this.paused = true;\n return;\n }\n } else {\n this.crashCount = 0;\n }\n\n // Start backend\n this.lastStartTime = Date.now();\n await this.options.bridge.start();\n\n // Boot error detection: if the backend exits very quickly after start,\n // it likely has a fatal error (syntax error, missing dep, etc.)\n // The bridge's onExit fires and state goes to 'stopped'.\n // We check inline here — if bridge.start() resolved but then\n // immediately exits, the next change will see it as a crash.\n // However, we can also detect it if start() itself throws\n // (bridge.waitForReady rejects on exit).\n\n logger.info('backend restarted successfully');\n } catch (err) {\n const timeSinceBoot = Date.now() - this.lastStartTime;\n if (timeSinceBoot < BOOT_ERROR_THRESHOLD) {\n logger.error(\n 'backend failed to boot (exited within 5s), pausing auto-restart — fix the error and save to retry',\n { error: String(err) },\n );\n this.paused = true;\n } else {\n logger.error('backend rebuild/restart failed', { error: String(err) });\n }\n }\n }\n}\n"],"mappings":"AAAA,SAAS,aAA6B;AACtC,SAAS,SAAS,cAAc,WAAW,YAAY;AACvD,SAAS,iBAAiB;AAG1B,MAAM,SAAS,UAAU,0BAA0B;AASnD,MAAM,qBAAqB;AAC3B,MAAM,sBAAsB;AAC5B,MAAM,uBAAuB;AAEtB,MAAM,eAAe;AAAA,EAO1B,YAAoB,SAAgC;AAAhC;AANpB,SAAQ,UAA4B;AACpC,SAAQ,UAAU,IAAI,QAAgB;AACtC,SAAQ,aAAa;AACrB,SAAQ,gBAAgB;AACxB,SAAQ,SAAS;AAAA,EAEoC;AAAA,EAErD,QAAc;AACZ,SAAK,UAAU,MAAM,KAAK,QAAQ,UAAU;AAAA,MAC1C,KAAK,KAAK,QAAQ;AAAA,MAClB,eAAe;AAAA,IACjB,CAAC;AAED,SAAK,QAAQ,GAAG,UAAU,CAAC,aAAqB;AAC9C,UAAI,KAAK,QAAQ;AAEf,eAAO,KAAK,sDAAsD;AAClE,aAAK,SAAS;AACd,aAAK,aAAa;AAAA,MACpB;AACA,aAAO,MAAM,wBAAwB,EAAE,SAAS,CAAC;AACjD,WAAK,QAAQ,KAAK,QAAQ;AAAA,IAC5B,CAAC;AAGD,SAAK,QAAQ;AAAA,MACX,aAAa,GAAG;AAAA,MAChB,UAAU,MAAM,KAAK,KAAK,QAAQ,CAAC,CAAC;AAAA,IACtC,EAAE,UAAU;AAAA,MACV,OAAO,CAAC,QAAQ;AACd,eAAO,MAAM,kCAAkC,EAAE,OAAO,OAAO,GAAG,EAAE,CAAC;AAAA,MACvE;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,OAAa;AACX,SAAK,SAAS,MAAM;AACpB,SAAK,QAAQ,SAAS;AAAA,EACxB;AAAA,EAEA,MAAc,UAAyB;AACrC,QAAI,KAAK,OAAQ;AAEjB,QAAI;AACF,aAAO,KAAK,oBAAoB;AAGhC,YAAM,KAAK,QAAQ,OAAO,KAAK;AAG/B,YAAM,KAAK,QAAQ,QAAQ;AAG3B,YAAM,qBAAqB,KAAK,IAAI,IAAI,KAAK;AAC7C,UAAI,KAAK,gBAAgB,KAAK,qBAAqB,qBAAqB;AACtE,aAAK;AACL,YAAI,KAAK,cAAc,oBAAoB;AACzC,iBAAO;AAAA,YACL;AAAA,YACA,EAAE,YAAY,KAAK,WAAW;AAAA,UAChC;AACA,eAAK,SAAS;AACd;AAAA,QACF;AAAA,MACF,OAAO;AACL,aAAK,aAAa;AAAA,MACpB;AAGA,WAAK,gBAAgB,KAAK,IAAI;AAC9B,YAAM,KAAK,QAAQ,OAAO,MAAM;AAUhC,aAAO,KAAK,gCAAgC;AAAA,IAC9C,SAAS,KAAK;AACZ,YAAM,gBAAgB,KAAK,IAAI,IAAI,KAAK;AACxC,UAAI,gBAAgB,sBAAsB;AACxC,eAAO;AAAA,UACL;AAAA,UACA,EAAE,OAAO,OAAO,GAAG,EAAE;AAAA,QACvB;AACA,aAAK,SAAS;AAAA,MAChB,OAAO;AACL,eAAO,MAAM,kCAAkC,EAAE,OAAO,OAAO,GAAG,EAAE,CAAC;AAAA,MACvE;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1,94 @@
|
|
|
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 dev_metadata_exports = {};
|
|
30
|
+
__export(dev_metadata_exports, {
|
|
31
|
+
DEFAULT_WOOD_REMOTE_DEBUGGING_PORT: () => DEFAULT_WOOD_REMOTE_DEBUGGING_PORT,
|
|
32
|
+
WOOD_DEV_DIRECTORY: () => WOOD_DEV_DIRECTORY,
|
|
33
|
+
WOOD_DEV_METADATA_BASENAME: () => WOOD_DEV_METADATA_BASENAME,
|
|
34
|
+
readWoodDevMetadata: () => readWoodDevMetadata,
|
|
35
|
+
removeWoodDevMetadata: () => removeWoodDevMetadata,
|
|
36
|
+
resolveWoodDevDirectory: () => resolveWoodDevDirectory,
|
|
37
|
+
resolveWoodDevMetadataPath: () => resolveWoodDevMetadataPath,
|
|
38
|
+
resolveWoodRemoteDebuggingPort: () => resolveWoodRemoteDebuggingPort,
|
|
39
|
+
writeWoodDevMetadata: () => writeWoodDevMetadata
|
|
40
|
+
});
|
|
41
|
+
module.exports = __toCommonJS(dev_metadata_exports);
|
|
42
|
+
var import_node_fs = require("node:fs");
|
|
43
|
+
var import_node_path = __toESM(require("node:path"), 1);
|
|
44
|
+
const DEFAULT_WOOD_REMOTE_DEBUGGING_PORT = 9333;
|
|
45
|
+
const WOOD_DEV_DIRECTORY = ".wood";
|
|
46
|
+
const WOOD_DEV_METADATA_BASENAME = "dev.json";
|
|
47
|
+
function resolveWoodRemoteDebuggingPort(env = process.env) {
|
|
48
|
+
const rawPort = env.WOOD_REMOTE_DEBUGGING_PORT;
|
|
49
|
+
const parsedPort = rawPort ? Number.parseInt(rawPort, 10) : DEFAULT_WOOD_REMOTE_DEBUGGING_PORT;
|
|
50
|
+
if (Number.isFinite(parsedPort) && parsedPort > 0) {
|
|
51
|
+
return parsedPort;
|
|
52
|
+
}
|
|
53
|
+
return DEFAULT_WOOD_REMOTE_DEBUGGING_PORT;
|
|
54
|
+
}
|
|
55
|
+
function resolveWoodDevDirectory(projectRoot) {
|
|
56
|
+
return import_node_path.default.join(projectRoot, WOOD_DEV_DIRECTORY);
|
|
57
|
+
}
|
|
58
|
+
function resolveWoodDevMetadataPath(projectRoot) {
|
|
59
|
+
return import_node_path.default.join(resolveWoodDevDirectory(projectRoot), WOOD_DEV_METADATA_BASENAME);
|
|
60
|
+
}
|
|
61
|
+
function writeWoodDevMetadata(projectRoot, metadata) {
|
|
62
|
+
const directory = resolveWoodDevDirectory(projectRoot);
|
|
63
|
+
(0, import_node_fs.mkdirSync)(directory, { recursive: true });
|
|
64
|
+
const metadataPath = resolveWoodDevMetadataPath(projectRoot);
|
|
65
|
+
(0, import_node_fs.writeFileSync)(metadataPath, `${JSON.stringify(metadata, null, 2)}
|
|
66
|
+
`, "utf8");
|
|
67
|
+
return metadataPath;
|
|
68
|
+
}
|
|
69
|
+
function readWoodDevMetadata(projectRoot) {
|
|
70
|
+
const metadataPath = resolveWoodDevMetadataPath(projectRoot);
|
|
71
|
+
if (!(0, import_node_fs.existsSync)(metadataPath)) {
|
|
72
|
+
throw new Error(`Wood dev metadata not found at ${metadataPath}. Start the app with "wood dev" first.`);
|
|
73
|
+
}
|
|
74
|
+
return JSON.parse((0, import_node_fs.readFileSync)(metadataPath, "utf8"));
|
|
75
|
+
}
|
|
76
|
+
function removeWoodDevMetadata(projectRoot) {
|
|
77
|
+
const metadataPath = resolveWoodDevMetadataPath(projectRoot);
|
|
78
|
+
if ((0, import_node_fs.existsSync)(metadataPath)) {
|
|
79
|
+
(0, import_node_fs.rmSync)(metadataPath, { force: true });
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
83
|
+
0 && (module.exports = {
|
|
84
|
+
DEFAULT_WOOD_REMOTE_DEBUGGING_PORT,
|
|
85
|
+
WOOD_DEV_DIRECTORY,
|
|
86
|
+
WOOD_DEV_METADATA_BASENAME,
|
|
87
|
+
readWoodDevMetadata,
|
|
88
|
+
removeWoodDevMetadata,
|
|
89
|
+
resolveWoodDevDirectory,
|
|
90
|
+
resolveWoodDevMetadataPath,
|
|
91
|
+
resolveWoodRemoteDebuggingPort,
|
|
92
|
+
writeWoodDevMetadata
|
|
93
|
+
});
|
|
94
|
+
//# sourceMappingURL=dev_metadata.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/dev/dev_metadata.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';\nimport path from 'node:path';\n\nexport const DEFAULT_WOOD_REMOTE_DEBUGGING_PORT = 9333;\nexport const WOOD_DEV_DIRECTORY = '.wood';\nexport const WOOD_DEV_METADATA_BASENAME = 'dev.json';\n\nexport interface WoodDevMetadata {\n projectRoot: string;\n projectName: string;\n mode: 'development';\n debugPort: number;\n browserUrl: string;\n pid?: number;\n startedAt: string;\n}\n\nexport function resolveWoodRemoteDebuggingPort(\n env: NodeJS.ProcessEnv = process.env,\n): number {\n const rawPort = env.WOOD_REMOTE_DEBUGGING_PORT;\n const parsedPort = rawPort ? Number.parseInt(rawPort, 10) : DEFAULT_WOOD_REMOTE_DEBUGGING_PORT;\n if (Number.isFinite(parsedPort) && parsedPort > 0) {\n return parsedPort;\n }\n return DEFAULT_WOOD_REMOTE_DEBUGGING_PORT;\n}\n\nexport function resolveWoodDevDirectory(projectRoot: string): string {\n return path.join(projectRoot, WOOD_DEV_DIRECTORY);\n}\n\nexport function resolveWoodDevMetadataPath(projectRoot: string): string {\n return path.join(resolveWoodDevDirectory(projectRoot), WOOD_DEV_METADATA_BASENAME);\n}\n\nexport function writeWoodDevMetadata(projectRoot: string, metadata: WoodDevMetadata): string {\n const directory = resolveWoodDevDirectory(projectRoot);\n mkdirSync(directory, { recursive: true });\n const metadataPath = resolveWoodDevMetadataPath(projectRoot);\n writeFileSync(metadataPath, `${JSON.stringify(metadata, null, 2)}\\n`, 'utf8');\n return metadataPath;\n}\n\nexport function readWoodDevMetadata(projectRoot: string): WoodDevMetadata {\n const metadataPath = resolveWoodDevMetadataPath(projectRoot);\n if (!existsSync(metadataPath)) {\n throw new Error(`Wood dev metadata not found at ${metadataPath}. Start the app with \"wood dev\" first.`);\n }\n\n return JSON.parse(readFileSync(metadataPath, 'utf8')) as WoodDevMetadata;\n}\n\nexport function removeWoodDevMetadata(projectRoot: string): void {\n const metadataPath = resolveWoodDevMetadataPath(projectRoot);\n if (existsSync(metadataPath)) {\n rmSync(metadataPath, { force: true });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAA2E;AAC3E,uBAAiB;AAEV,MAAM,qCAAqC;AAC3C,MAAM,qBAAqB;AAC3B,MAAM,6BAA6B;AAYnC,SAAS,+BACd,MAAyB,QAAQ,KACzB;AACR,QAAM,UAAU,IAAI;AACpB,QAAM,aAAa,UAAU,OAAO,SAAS,SAAS,EAAE,IAAI;AAC5D,MAAI,OAAO,SAAS,UAAU,KAAK,aAAa,GAAG;AACjD,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,wBAAwB,aAA6B;AACnE,SAAO,iBAAAA,QAAK,KAAK,aAAa,kBAAkB;AAClD;AAEO,SAAS,2BAA2B,aAA6B;AACtE,SAAO,iBAAAA,QAAK,KAAK,wBAAwB,WAAW,GAAG,0BAA0B;AACnF;AAEO,SAAS,qBAAqB,aAAqB,UAAmC;AAC3F,QAAM,YAAY,wBAAwB,WAAW;AACrD,gCAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AACxC,QAAM,eAAe,2BAA2B,WAAW;AAC3D,oCAAc,cAAc,GAAG,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AAAA,GAAM,MAAM;AAC5E,SAAO;AACT;AAEO,SAAS,oBAAoB,aAAsC;AACxE,QAAM,eAAe,2BAA2B,WAAW;AAC3D,MAAI,KAAC,2BAAW,YAAY,GAAG;AAC7B,UAAM,IAAI,MAAM,kCAAkC,YAAY,wCAAwC;AAAA,EACxG;AAEA,SAAO,KAAK,UAAM,6BAAa,cAAc,MAAM,CAAC;AACtD;AAEO,SAAS,sBAAsB,aAA2B;AAC/D,QAAM,eAAe,2BAA2B,WAAW;AAC3D,UAAI,2BAAW,YAAY,GAAG;AAC5B,+BAAO,cAAc,EAAE,OAAO,KAAK,CAAC;AAAA,EACtC;AACF;","names":["path"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
declare const DEFAULT_WOOD_REMOTE_DEBUGGING_PORT = 9333;
|
|
2
|
+
declare const WOOD_DEV_DIRECTORY = ".wood";
|
|
3
|
+
declare const WOOD_DEV_METADATA_BASENAME = "dev.json";
|
|
4
|
+
interface WoodDevMetadata {
|
|
5
|
+
projectRoot: string;
|
|
6
|
+
projectName: string;
|
|
7
|
+
mode: 'development';
|
|
8
|
+
debugPort: number;
|
|
9
|
+
browserUrl: string;
|
|
10
|
+
pid?: number;
|
|
11
|
+
startedAt: string;
|
|
12
|
+
}
|
|
13
|
+
declare function resolveWoodRemoteDebuggingPort(env?: NodeJS.ProcessEnv): number;
|
|
14
|
+
declare function resolveWoodDevDirectory(projectRoot: string): string;
|
|
15
|
+
declare function resolveWoodDevMetadataPath(projectRoot: string): string;
|
|
16
|
+
declare function writeWoodDevMetadata(projectRoot: string, metadata: WoodDevMetadata): string;
|
|
17
|
+
declare function readWoodDevMetadata(projectRoot: string): WoodDevMetadata;
|
|
18
|
+
declare function removeWoodDevMetadata(projectRoot: string): void;
|
|
19
|
+
|
|
20
|
+
export { DEFAULT_WOOD_REMOTE_DEBUGGING_PORT, WOOD_DEV_DIRECTORY, WOOD_DEV_METADATA_BASENAME, type WoodDevMetadata, readWoodDevMetadata, removeWoodDevMetadata, resolveWoodDevDirectory, resolveWoodDevMetadataPath, resolveWoodRemoteDebuggingPort, writeWoodDevMetadata };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
declare const DEFAULT_WOOD_REMOTE_DEBUGGING_PORT = 9333;
|
|
2
|
+
declare const WOOD_DEV_DIRECTORY = ".wood";
|
|
3
|
+
declare const WOOD_DEV_METADATA_BASENAME = "dev.json";
|
|
4
|
+
interface WoodDevMetadata {
|
|
5
|
+
projectRoot: string;
|
|
6
|
+
projectName: string;
|
|
7
|
+
mode: 'development';
|
|
8
|
+
debugPort: number;
|
|
9
|
+
browserUrl: string;
|
|
10
|
+
pid?: number;
|
|
11
|
+
startedAt: string;
|
|
12
|
+
}
|
|
13
|
+
declare function resolveWoodRemoteDebuggingPort(env?: NodeJS.ProcessEnv): number;
|
|
14
|
+
declare function resolveWoodDevDirectory(projectRoot: string): string;
|
|
15
|
+
declare function resolveWoodDevMetadataPath(projectRoot: string): string;
|
|
16
|
+
declare function writeWoodDevMetadata(projectRoot: string, metadata: WoodDevMetadata): string;
|
|
17
|
+
declare function readWoodDevMetadata(projectRoot: string): WoodDevMetadata;
|
|
18
|
+
declare function removeWoodDevMetadata(projectRoot: string): void;
|
|
19
|
+
|
|
20
|
+
export { DEFAULT_WOOD_REMOTE_DEBUGGING_PORT, WOOD_DEV_DIRECTORY, WOOD_DEV_METADATA_BASENAME, type WoodDevMetadata, readWoodDevMetadata, removeWoodDevMetadata, resolveWoodDevDirectory, resolveWoodDevMetadataPath, resolveWoodRemoteDebuggingPort, writeWoodDevMetadata };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
const DEFAULT_WOOD_REMOTE_DEBUGGING_PORT = 9333;
|
|
4
|
+
const WOOD_DEV_DIRECTORY = ".wood";
|
|
5
|
+
const WOOD_DEV_METADATA_BASENAME = "dev.json";
|
|
6
|
+
function resolveWoodRemoteDebuggingPort(env = process.env) {
|
|
7
|
+
const rawPort = env.WOOD_REMOTE_DEBUGGING_PORT;
|
|
8
|
+
const parsedPort = rawPort ? Number.parseInt(rawPort, 10) : DEFAULT_WOOD_REMOTE_DEBUGGING_PORT;
|
|
9
|
+
if (Number.isFinite(parsedPort) && parsedPort > 0) {
|
|
10
|
+
return parsedPort;
|
|
11
|
+
}
|
|
12
|
+
return DEFAULT_WOOD_REMOTE_DEBUGGING_PORT;
|
|
13
|
+
}
|
|
14
|
+
function resolveWoodDevDirectory(projectRoot) {
|
|
15
|
+
return path.join(projectRoot, WOOD_DEV_DIRECTORY);
|
|
16
|
+
}
|
|
17
|
+
function resolveWoodDevMetadataPath(projectRoot) {
|
|
18
|
+
return path.join(resolveWoodDevDirectory(projectRoot), WOOD_DEV_METADATA_BASENAME);
|
|
19
|
+
}
|
|
20
|
+
function writeWoodDevMetadata(projectRoot, metadata) {
|
|
21
|
+
const directory = resolveWoodDevDirectory(projectRoot);
|
|
22
|
+
mkdirSync(directory, { recursive: true });
|
|
23
|
+
const metadataPath = resolveWoodDevMetadataPath(projectRoot);
|
|
24
|
+
writeFileSync(metadataPath, `${JSON.stringify(metadata, null, 2)}
|
|
25
|
+
`, "utf8");
|
|
26
|
+
return metadataPath;
|
|
27
|
+
}
|
|
28
|
+
function readWoodDevMetadata(projectRoot) {
|
|
29
|
+
const metadataPath = resolveWoodDevMetadataPath(projectRoot);
|
|
30
|
+
if (!existsSync(metadataPath)) {
|
|
31
|
+
throw new Error(`Wood dev metadata not found at ${metadataPath}. Start the app with "wood dev" first.`);
|
|
32
|
+
}
|
|
33
|
+
return JSON.parse(readFileSync(metadataPath, "utf8"));
|
|
34
|
+
}
|
|
35
|
+
function removeWoodDevMetadata(projectRoot) {
|
|
36
|
+
const metadataPath = resolveWoodDevMetadataPath(projectRoot);
|
|
37
|
+
if (existsSync(metadataPath)) {
|
|
38
|
+
rmSync(metadataPath, { force: true });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export {
|
|
42
|
+
DEFAULT_WOOD_REMOTE_DEBUGGING_PORT,
|
|
43
|
+
WOOD_DEV_DIRECTORY,
|
|
44
|
+
WOOD_DEV_METADATA_BASENAME,
|
|
45
|
+
readWoodDevMetadata,
|
|
46
|
+
removeWoodDevMetadata,
|
|
47
|
+
resolveWoodDevDirectory,
|
|
48
|
+
resolveWoodDevMetadataPath,
|
|
49
|
+
resolveWoodRemoteDebuggingPort,
|
|
50
|
+
writeWoodDevMetadata
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=dev_metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/dev/dev_metadata.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';\nimport path from 'node:path';\n\nexport const DEFAULT_WOOD_REMOTE_DEBUGGING_PORT = 9333;\nexport const WOOD_DEV_DIRECTORY = '.wood';\nexport const WOOD_DEV_METADATA_BASENAME = 'dev.json';\n\nexport interface WoodDevMetadata {\n projectRoot: string;\n projectName: string;\n mode: 'development';\n debugPort: number;\n browserUrl: string;\n pid?: number;\n startedAt: string;\n}\n\nexport function resolveWoodRemoteDebuggingPort(\n env: NodeJS.ProcessEnv = process.env,\n): number {\n const rawPort = env.WOOD_REMOTE_DEBUGGING_PORT;\n const parsedPort = rawPort ? Number.parseInt(rawPort, 10) : DEFAULT_WOOD_REMOTE_DEBUGGING_PORT;\n if (Number.isFinite(parsedPort) && parsedPort > 0) {\n return parsedPort;\n }\n return DEFAULT_WOOD_REMOTE_DEBUGGING_PORT;\n}\n\nexport function resolveWoodDevDirectory(projectRoot: string): string {\n return path.join(projectRoot, WOOD_DEV_DIRECTORY);\n}\n\nexport function resolveWoodDevMetadataPath(projectRoot: string): string {\n return path.join(resolveWoodDevDirectory(projectRoot), WOOD_DEV_METADATA_BASENAME);\n}\n\nexport function writeWoodDevMetadata(projectRoot: string, metadata: WoodDevMetadata): string {\n const directory = resolveWoodDevDirectory(projectRoot);\n mkdirSync(directory, { recursive: true });\n const metadataPath = resolveWoodDevMetadataPath(projectRoot);\n writeFileSync(metadataPath, `${JSON.stringify(metadata, null, 2)}\\n`, 'utf8');\n return metadataPath;\n}\n\nexport function readWoodDevMetadata(projectRoot: string): WoodDevMetadata {\n const metadataPath = resolveWoodDevMetadataPath(projectRoot);\n if (!existsSync(metadataPath)) {\n throw new Error(`Wood dev metadata not found at ${metadataPath}. Start the app with \"wood dev\" first.`);\n }\n\n return JSON.parse(readFileSync(metadataPath, 'utf8')) as WoodDevMetadata;\n}\n\nexport function removeWoodDevMetadata(projectRoot: string): void {\n const metadataPath = resolveWoodDevMetadataPath(projectRoot);\n if (existsSync(metadataPath)) {\n rmSync(metadataPath, { force: true });\n }\n}\n"],"mappings":"AAAA,SAAS,YAAY,WAAW,cAAc,QAAQ,qBAAqB;AAC3E,OAAO,UAAU;AAEV,MAAM,qCAAqC;AAC3C,MAAM,qBAAqB;AAC3B,MAAM,6BAA6B;AAYnC,SAAS,+BACd,MAAyB,QAAQ,KACzB;AACR,QAAM,UAAU,IAAI;AACpB,QAAM,aAAa,UAAU,OAAO,SAAS,SAAS,EAAE,IAAI;AAC5D,MAAI,OAAO,SAAS,UAAU,KAAK,aAAa,GAAG;AACjD,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,wBAAwB,aAA6B;AACnE,SAAO,KAAK,KAAK,aAAa,kBAAkB;AAClD;AAEO,SAAS,2BAA2B,aAA6B;AACtE,SAAO,KAAK,KAAK,wBAAwB,WAAW,GAAG,0BAA0B;AACnF;AAEO,SAAS,qBAAqB,aAAqB,UAAmC;AAC3F,QAAM,YAAY,wBAAwB,WAAW;AACrD,YAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AACxC,QAAM,eAAe,2BAA2B,WAAW;AAC3D,gBAAc,cAAc,GAAG,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AAAA,GAAM,MAAM;AAC5E,SAAO;AACT;AAEO,SAAS,oBAAoB,aAAsC;AACxE,QAAM,eAAe,2BAA2B,WAAW;AAC3D,MAAI,CAAC,WAAW,YAAY,GAAG;AAC7B,UAAM,IAAI,MAAM,kCAAkC,YAAY,wCAAwC;AAAA,EACxG;AAEA,SAAO,KAAK,MAAM,aAAa,cAAc,MAAM,CAAC;AACtD;AAEO,SAAS,sBAAsB,aAA2B;AAC/D,QAAM,eAAe,2BAA2B,WAAW;AAC3D,MAAI,WAAW,YAAY,GAAG;AAC5B,WAAO,cAAc,EAAE,OAAO,KAAK,CAAC;AAAA,EACtC;AACF;","names":[]}
|
|
@@ -0,0 +1,124 @@
|
|
|
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 esbuild_backend_exports = {};
|
|
30
|
+
__export(esbuild_backend_exports, {
|
|
31
|
+
EsbuildBackend: () => EsbuildBackend
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(esbuild_backend_exports);
|
|
34
|
+
var import_esbuild = require("esbuild");
|
|
35
|
+
var import_path = __toESM(require("path"), 1);
|
|
36
|
+
var import_logger = require("@noego/logger");
|
|
37
|
+
const logger = (0, import_logger.getLogger)("wood:dev:esbuild");
|
|
38
|
+
const DEFAULT_EXTERNALS = [
|
|
39
|
+
"electron",
|
|
40
|
+
"better-sqlite3",
|
|
41
|
+
"original-fs"
|
|
42
|
+
];
|
|
43
|
+
class EsbuildBackend {
|
|
44
|
+
constructor(options) {
|
|
45
|
+
this.ctx = null;
|
|
46
|
+
this.options = options;
|
|
47
|
+
}
|
|
48
|
+
/** Run a one-shot build of the backend bundle. */
|
|
49
|
+
async build() {
|
|
50
|
+
const external = [
|
|
51
|
+
...DEFAULT_EXTERNALS,
|
|
52
|
+
...this.options.external ?? []
|
|
53
|
+
];
|
|
54
|
+
logger.info("building backend", { entryPoint: this.options.entryPoint });
|
|
55
|
+
const startTime = Date.now();
|
|
56
|
+
const result = await (0, import_esbuild.build)({
|
|
57
|
+
entryPoints: [import_path.default.resolve(this.options.cwd, this.options.entryPoint)],
|
|
58
|
+
outfile: import_path.default.resolve(this.options.cwd, this.options.outfile),
|
|
59
|
+
bundle: true,
|
|
60
|
+
platform: "node",
|
|
61
|
+
format: "esm",
|
|
62
|
+
target: "node20",
|
|
63
|
+
sourcemap: true,
|
|
64
|
+
external,
|
|
65
|
+
logLevel: "warning"
|
|
66
|
+
});
|
|
67
|
+
const elapsed = Date.now() - startTime;
|
|
68
|
+
logger.info("backend built", { elapsed: `${elapsed}ms` });
|
|
69
|
+
if (result.errors.length > 0) {
|
|
70
|
+
logger.error("esbuild errors", { errors: result.errors });
|
|
71
|
+
}
|
|
72
|
+
if (result.warnings.length > 0) {
|
|
73
|
+
logger.warn("esbuild warnings", { warnings: result.warnings });
|
|
74
|
+
}
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Create an incremental build context for fast rebuilds.
|
|
79
|
+
* Call `rebuild()` after the initial `build()` for subsequent builds.
|
|
80
|
+
*/
|
|
81
|
+
async createContext() {
|
|
82
|
+
const external = [
|
|
83
|
+
...DEFAULT_EXTERNALS,
|
|
84
|
+
...this.options.external ?? []
|
|
85
|
+
];
|
|
86
|
+
this.ctx = await (0, import_esbuild.context)({
|
|
87
|
+
entryPoints: [import_path.default.resolve(this.options.cwd, this.options.entryPoint)],
|
|
88
|
+
outfile: import_path.default.resolve(this.options.cwd, this.options.outfile),
|
|
89
|
+
bundle: true,
|
|
90
|
+
platform: "node",
|
|
91
|
+
format: "esm",
|
|
92
|
+
target: "node20",
|
|
93
|
+
sourcemap: true,
|
|
94
|
+
external,
|
|
95
|
+
logLevel: "warning"
|
|
96
|
+
});
|
|
97
|
+
logger.info("esbuild incremental context created");
|
|
98
|
+
}
|
|
99
|
+
/** Perform an incremental rebuild using the existing context. */
|
|
100
|
+
async rebuild() {
|
|
101
|
+
if (!this.ctx) {
|
|
102
|
+
throw new Error("No esbuild context \u2014 call createContext() first");
|
|
103
|
+
}
|
|
104
|
+
logger.debug("rebuilding backend (incremental)");
|
|
105
|
+
const startTime = Date.now();
|
|
106
|
+
const result = await this.ctx.rebuild();
|
|
107
|
+
const elapsed = Date.now() - startTime;
|
|
108
|
+
logger.info("backend rebuilt", { elapsed: `${elapsed}ms` });
|
|
109
|
+
return result;
|
|
110
|
+
}
|
|
111
|
+
/** Dispose the incremental context. */
|
|
112
|
+
async dispose() {
|
|
113
|
+
if (this.ctx) {
|
|
114
|
+
await this.ctx.dispose();
|
|
115
|
+
this.ctx = null;
|
|
116
|
+
logger.debug("esbuild context disposed");
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
121
|
+
0 && (module.exports = {
|
|
122
|
+
EsbuildBackend
|
|
123
|
+
});
|
|
124
|
+
//# sourceMappingURL=esbuild_backend.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/dev/esbuild_backend.ts"],"sourcesContent":["import { build, type BuildResult, type BuildContext, context } from 'esbuild';\nimport path from 'path';\nimport { getLogger } from '@noego/logger';\n\nconst logger = getLogger('wood:dev:esbuild');\n\nexport interface EsbuildBackendOptions {\n /** Entry point for the backend (e.g. src/main/backend.ts) */\n entryPoint: string;\n /** Output file path (e.g. out/backend/index.js) */\n outfile: string;\n /** Working directory for resolution */\n cwd: string;\n /** Extra externals beyond the defaults */\n external?: string[];\n}\n\n/** Externals that should never be bundled into the backend */\nconst DEFAULT_EXTERNALS = [\n 'electron',\n 'better-sqlite3',\n 'original-fs',\n];\n\nexport class EsbuildBackend {\n private ctx: BuildContext | null = null;\n private options: EsbuildBackendOptions;\n\n constructor(options: EsbuildBackendOptions) {\n this.options = options;\n }\n\n /** Run a one-shot build of the backend bundle. */\n async build(): Promise<BuildResult> {\n const external = [\n ...DEFAULT_EXTERNALS,\n ...(this.options.external ?? []),\n ];\n\n logger.info('building backend', { entryPoint: this.options.entryPoint });\n const startTime = Date.now();\n\n const result = await build({\n entryPoints: [path.resolve(this.options.cwd, this.options.entryPoint)],\n outfile: path.resolve(this.options.cwd, this.options.outfile),\n bundle: true,\n platform: 'node',\n format: 'esm',\n target: 'node20',\n sourcemap: true,\n external,\n logLevel: 'warning',\n });\n\n const elapsed = Date.now() - startTime;\n logger.info('backend built', { elapsed: `${elapsed}ms` });\n\n if (result.errors.length > 0) {\n logger.error('esbuild errors', { errors: result.errors });\n }\n if (result.warnings.length > 0) {\n logger.warn('esbuild warnings', { warnings: result.warnings });\n }\n\n return result;\n }\n\n /**\n * Create an incremental build context for fast rebuilds.\n * Call `rebuild()` after the initial `build()` for subsequent builds.\n */\n async createContext(): Promise<void> {\n const external = [\n ...DEFAULT_EXTERNALS,\n ...(this.options.external ?? []),\n ];\n\n this.ctx = await context({\n entryPoints: [path.resolve(this.options.cwd, this.options.entryPoint)],\n outfile: path.resolve(this.options.cwd, this.options.outfile),\n bundle: true,\n platform: 'node',\n format: 'esm',\n target: 'node20',\n sourcemap: true,\n external,\n logLevel: 'warning',\n });\n\n logger.info('esbuild incremental context created');\n }\n\n /** Perform an incremental rebuild using the existing context. */\n async rebuild(): Promise<BuildResult> {\n if (!this.ctx) {\n throw new Error('No esbuild context — call createContext() first');\n }\n\n logger.debug('rebuilding backend (incremental)');\n const startTime = Date.now();\n\n const result = await this.ctx.rebuild();\n\n const elapsed = Date.now() - startTime;\n logger.info('backend rebuilt', { elapsed: `${elapsed}ms` });\n\n return result;\n }\n\n /** Dispose the incremental context. */\n async dispose(): Promise<void> {\n if (this.ctx) {\n await this.ctx.dispose();\n this.ctx = null;\n logger.debug('esbuild context disposed');\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAoE;AACpE,kBAAiB;AACjB,oBAA0B;AAE1B,MAAM,aAAS,yBAAU,kBAAkB;AAc3C,MAAM,oBAAoB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AACF;AAEO,MAAM,eAAe;AAAA,EAI1B,YAAY,SAAgC;AAH5C,SAAQ,MAA2B;AAIjC,SAAK,UAAU;AAAA,EACjB;AAAA;AAAA,EAGA,MAAM,QAA8B;AAClC,UAAM,WAAW;AAAA,MACf,GAAG;AAAA,MACH,GAAI,KAAK,QAAQ,YAAY,CAAC;AAAA,IAChC;AAEA,WAAO,KAAK,oBAAoB,EAAE,YAAY,KAAK,QAAQ,WAAW,CAAC;AACvE,UAAM,YAAY,KAAK,IAAI;AAE3B,UAAM,SAAS,UAAM,sBAAM;AAAA,MACzB,aAAa,CAAC,YAAAA,QAAK,QAAQ,KAAK,QAAQ,KAAK,KAAK,QAAQ,UAAU,CAAC;AAAA,MACrE,SAAS,YAAAA,QAAK,QAAQ,KAAK,QAAQ,KAAK,KAAK,QAAQ,OAAO;AAAA,MAC5D,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,WAAW;AAAA,MACX;AAAA,MACA,UAAU;AAAA,IACZ,CAAC;AAED,UAAM,UAAU,KAAK,IAAI,IAAI;AAC7B,WAAO,KAAK,iBAAiB,EAAE,SAAS,GAAG,OAAO,KAAK,CAAC;AAExD,QAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,aAAO,MAAM,kBAAkB,EAAE,QAAQ,OAAO,OAAO,CAAC;AAAA,IAC1D;AACA,QAAI,OAAO,SAAS,SAAS,GAAG;AAC9B,aAAO,KAAK,oBAAoB,EAAE,UAAU,OAAO,SAAS,CAAC;AAAA,IAC/D;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,gBAA+B;AACnC,UAAM,WAAW;AAAA,MACf,GAAG;AAAA,MACH,GAAI,KAAK,QAAQ,YAAY,CAAC;AAAA,IAChC;AAEA,SAAK,MAAM,UAAM,wBAAQ;AAAA,MACvB,aAAa,CAAC,YAAAA,QAAK,QAAQ,KAAK,QAAQ,KAAK,KAAK,QAAQ,UAAU,CAAC;AAAA,MACrE,SAAS,YAAAA,QAAK,QAAQ,KAAK,QAAQ,KAAK,KAAK,QAAQ,OAAO;AAAA,MAC5D,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,WAAW;AAAA,MACX;AAAA,MACA,UAAU;AAAA,IACZ,CAAC;AAED,WAAO,KAAK,qCAAqC;AAAA,EACnD;AAAA;AAAA,EAGA,MAAM,UAAgC;AACpC,QAAI,CAAC,KAAK,KAAK;AACb,YAAM,IAAI,MAAM,sDAAiD;AAAA,IACnE;AAEA,WAAO,MAAM,kCAAkC;AAC/C,UAAM,YAAY,KAAK,IAAI;AAE3B,UAAM,SAAS,MAAM,KAAK,IAAI,QAAQ;AAEtC,UAAM,UAAU,KAAK,IAAI,IAAI;AAC7B,WAAO,KAAK,mBAAmB,EAAE,SAAS,GAAG,OAAO,KAAK,CAAC;AAE1D,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,MAAM,UAAyB;AAC7B,QAAI,KAAK,KAAK;AACZ,YAAM,KAAK,IAAI,QAAQ;AACvB,WAAK,MAAM;AACX,aAAO,MAAM,0BAA0B;AAAA,IACzC;AAAA,EACF;AACF;","names":["path"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { BuildResult } from 'esbuild';
|
|
2
|
+
|
|
3
|
+
interface EsbuildBackendOptions {
|
|
4
|
+
/** Entry point for the backend (e.g. src/main/backend.ts) */
|
|
5
|
+
entryPoint: string;
|
|
6
|
+
/** Output file path (e.g. out/backend/index.js) */
|
|
7
|
+
outfile: string;
|
|
8
|
+
/** Working directory for resolution */
|
|
9
|
+
cwd: string;
|
|
10
|
+
/** Extra externals beyond the defaults */
|
|
11
|
+
external?: string[];
|
|
12
|
+
}
|
|
13
|
+
declare class EsbuildBackend {
|
|
14
|
+
private ctx;
|
|
15
|
+
private options;
|
|
16
|
+
constructor(options: EsbuildBackendOptions);
|
|
17
|
+
/** Run a one-shot build of the backend bundle. */
|
|
18
|
+
build(): Promise<BuildResult>;
|
|
19
|
+
/**
|
|
20
|
+
* Create an incremental build context for fast rebuilds.
|
|
21
|
+
* Call `rebuild()` after the initial `build()` for subsequent builds.
|
|
22
|
+
*/
|
|
23
|
+
createContext(): Promise<void>;
|
|
24
|
+
/** Perform an incremental rebuild using the existing context. */
|
|
25
|
+
rebuild(): Promise<BuildResult>;
|
|
26
|
+
/** Dispose the incremental context. */
|
|
27
|
+
dispose(): Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export { EsbuildBackend, type EsbuildBackendOptions };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { BuildResult } from 'esbuild';
|
|
2
|
+
|
|
3
|
+
interface EsbuildBackendOptions {
|
|
4
|
+
/** Entry point for the backend (e.g. src/main/backend.ts) */
|
|
5
|
+
entryPoint: string;
|
|
6
|
+
/** Output file path (e.g. out/backend/index.js) */
|
|
7
|
+
outfile: string;
|
|
8
|
+
/** Working directory for resolution */
|
|
9
|
+
cwd: string;
|
|
10
|
+
/** Extra externals beyond the defaults */
|
|
11
|
+
external?: string[];
|
|
12
|
+
}
|
|
13
|
+
declare class EsbuildBackend {
|
|
14
|
+
private ctx;
|
|
15
|
+
private options;
|
|
16
|
+
constructor(options: EsbuildBackendOptions);
|
|
17
|
+
/** Run a one-shot build of the backend bundle. */
|
|
18
|
+
build(): Promise<BuildResult>;
|
|
19
|
+
/**
|
|
20
|
+
* Create an incremental build context for fast rebuilds.
|
|
21
|
+
* Call `rebuild()` after the initial `build()` for subsequent builds.
|
|
22
|
+
*/
|
|
23
|
+
createContext(): Promise<void>;
|
|
24
|
+
/** Perform an incremental rebuild using the existing context. */
|
|
25
|
+
rebuild(): Promise<BuildResult>;
|
|
26
|
+
/** Dispose the incremental context. */
|
|
27
|
+
dispose(): Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export { EsbuildBackend, type EsbuildBackendOptions };
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { build, context } from "esbuild";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { getLogger } from "@noego/logger";
|
|
4
|
+
const logger = getLogger("wood:dev:esbuild");
|
|
5
|
+
const DEFAULT_EXTERNALS = [
|
|
6
|
+
"electron",
|
|
7
|
+
"better-sqlite3",
|
|
8
|
+
"original-fs"
|
|
9
|
+
];
|
|
10
|
+
class EsbuildBackend {
|
|
11
|
+
constructor(options) {
|
|
12
|
+
this.ctx = null;
|
|
13
|
+
this.options = options;
|
|
14
|
+
}
|
|
15
|
+
/** Run a one-shot build of the backend bundle. */
|
|
16
|
+
async build() {
|
|
17
|
+
const external = [
|
|
18
|
+
...DEFAULT_EXTERNALS,
|
|
19
|
+
...this.options.external ?? []
|
|
20
|
+
];
|
|
21
|
+
logger.info("building backend", { entryPoint: this.options.entryPoint });
|
|
22
|
+
const startTime = Date.now();
|
|
23
|
+
const result = await build({
|
|
24
|
+
entryPoints: [path.resolve(this.options.cwd, this.options.entryPoint)],
|
|
25
|
+
outfile: path.resolve(this.options.cwd, this.options.outfile),
|
|
26
|
+
bundle: true,
|
|
27
|
+
platform: "node",
|
|
28
|
+
format: "esm",
|
|
29
|
+
target: "node20",
|
|
30
|
+
sourcemap: true,
|
|
31
|
+
external,
|
|
32
|
+
logLevel: "warning"
|
|
33
|
+
});
|
|
34
|
+
const elapsed = Date.now() - startTime;
|
|
35
|
+
logger.info("backend built", { elapsed: `${elapsed}ms` });
|
|
36
|
+
if (result.errors.length > 0) {
|
|
37
|
+
logger.error("esbuild errors", { errors: result.errors });
|
|
38
|
+
}
|
|
39
|
+
if (result.warnings.length > 0) {
|
|
40
|
+
logger.warn("esbuild warnings", { warnings: result.warnings });
|
|
41
|
+
}
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Create an incremental build context for fast rebuilds.
|
|
46
|
+
* Call `rebuild()` after the initial `build()` for subsequent builds.
|
|
47
|
+
*/
|
|
48
|
+
async createContext() {
|
|
49
|
+
const external = [
|
|
50
|
+
...DEFAULT_EXTERNALS,
|
|
51
|
+
...this.options.external ?? []
|
|
52
|
+
];
|
|
53
|
+
this.ctx = await context({
|
|
54
|
+
entryPoints: [path.resolve(this.options.cwd, this.options.entryPoint)],
|
|
55
|
+
outfile: path.resolve(this.options.cwd, this.options.outfile),
|
|
56
|
+
bundle: true,
|
|
57
|
+
platform: "node",
|
|
58
|
+
format: "esm",
|
|
59
|
+
target: "node20",
|
|
60
|
+
sourcemap: true,
|
|
61
|
+
external,
|
|
62
|
+
logLevel: "warning"
|
|
63
|
+
});
|
|
64
|
+
logger.info("esbuild incremental context created");
|
|
65
|
+
}
|
|
66
|
+
/** Perform an incremental rebuild using the existing context. */
|
|
67
|
+
async rebuild() {
|
|
68
|
+
if (!this.ctx) {
|
|
69
|
+
throw new Error("No esbuild context \u2014 call createContext() first");
|
|
70
|
+
}
|
|
71
|
+
logger.debug("rebuilding backend (incremental)");
|
|
72
|
+
const startTime = Date.now();
|
|
73
|
+
const result = await this.ctx.rebuild();
|
|
74
|
+
const elapsed = Date.now() - startTime;
|
|
75
|
+
logger.info("backend rebuilt", { elapsed: `${elapsed}ms` });
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
/** Dispose the incremental context. */
|
|
79
|
+
async dispose() {
|
|
80
|
+
if (this.ctx) {
|
|
81
|
+
await this.ctx.dispose();
|
|
82
|
+
this.ctx = null;
|
|
83
|
+
logger.debug("esbuild context disposed");
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
export {
|
|
88
|
+
EsbuildBackend
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=esbuild_backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/dev/esbuild_backend.ts"],"sourcesContent":["import { build, type BuildResult, type BuildContext, context } from 'esbuild';\nimport path from 'path';\nimport { getLogger } from '@noego/logger';\n\nconst logger = getLogger('wood:dev:esbuild');\n\nexport interface EsbuildBackendOptions {\n /** Entry point for the backend (e.g. src/main/backend.ts) */\n entryPoint: string;\n /** Output file path (e.g. out/backend/index.js) */\n outfile: string;\n /** Working directory for resolution */\n cwd: string;\n /** Extra externals beyond the defaults */\n external?: string[];\n}\n\n/** Externals that should never be bundled into the backend */\nconst DEFAULT_EXTERNALS = [\n 'electron',\n 'better-sqlite3',\n 'original-fs',\n];\n\nexport class EsbuildBackend {\n private ctx: BuildContext | null = null;\n private options: EsbuildBackendOptions;\n\n constructor(options: EsbuildBackendOptions) {\n this.options = options;\n }\n\n /** Run a one-shot build of the backend bundle. */\n async build(): Promise<BuildResult> {\n const external = [\n ...DEFAULT_EXTERNALS,\n ...(this.options.external ?? []),\n ];\n\n logger.info('building backend', { entryPoint: this.options.entryPoint });\n const startTime = Date.now();\n\n const result = await build({\n entryPoints: [path.resolve(this.options.cwd, this.options.entryPoint)],\n outfile: path.resolve(this.options.cwd, this.options.outfile),\n bundle: true,\n platform: 'node',\n format: 'esm',\n target: 'node20',\n sourcemap: true,\n external,\n logLevel: 'warning',\n });\n\n const elapsed = Date.now() - startTime;\n logger.info('backend built', { elapsed: `${elapsed}ms` });\n\n if (result.errors.length > 0) {\n logger.error('esbuild errors', { errors: result.errors });\n }\n if (result.warnings.length > 0) {\n logger.warn('esbuild warnings', { warnings: result.warnings });\n }\n\n return result;\n }\n\n /**\n * Create an incremental build context for fast rebuilds.\n * Call `rebuild()` after the initial `build()` for subsequent builds.\n */\n async createContext(): Promise<void> {\n const external = [\n ...DEFAULT_EXTERNALS,\n ...(this.options.external ?? []),\n ];\n\n this.ctx = await context({\n entryPoints: [path.resolve(this.options.cwd, this.options.entryPoint)],\n outfile: path.resolve(this.options.cwd, this.options.outfile),\n bundle: true,\n platform: 'node',\n format: 'esm',\n target: 'node20',\n sourcemap: true,\n external,\n logLevel: 'warning',\n });\n\n logger.info('esbuild incremental context created');\n }\n\n /** Perform an incremental rebuild using the existing context. */\n async rebuild(): Promise<BuildResult> {\n if (!this.ctx) {\n throw new Error('No esbuild context — call createContext() first');\n }\n\n logger.debug('rebuilding backend (incremental)');\n const startTime = Date.now();\n\n const result = await this.ctx.rebuild();\n\n const elapsed = Date.now() - startTime;\n logger.info('backend rebuilt', { elapsed: `${elapsed}ms` });\n\n return result;\n }\n\n /** Dispose the incremental context. */\n async dispose(): Promise<void> {\n if (this.ctx) {\n await this.ctx.dispose();\n this.ctx = null;\n logger.debug('esbuild context disposed');\n }\n }\n}\n"],"mappings":"AAAA,SAAS,OAA4C,eAAe;AACpE,OAAO,UAAU;AACjB,SAAS,iBAAiB;AAE1B,MAAM,SAAS,UAAU,kBAAkB;AAc3C,MAAM,oBAAoB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AACF;AAEO,MAAM,eAAe;AAAA,EAI1B,YAAY,SAAgC;AAH5C,SAAQ,MAA2B;AAIjC,SAAK,UAAU;AAAA,EACjB;AAAA;AAAA,EAGA,MAAM,QAA8B;AAClC,UAAM,WAAW;AAAA,MACf,GAAG;AAAA,MACH,GAAI,KAAK,QAAQ,YAAY,CAAC;AAAA,IAChC;AAEA,WAAO,KAAK,oBAAoB,EAAE,YAAY,KAAK,QAAQ,WAAW,CAAC;AACvE,UAAM,YAAY,KAAK,IAAI;AAE3B,UAAM,SAAS,MAAM,MAAM;AAAA,MACzB,aAAa,CAAC,KAAK,QAAQ,KAAK,QAAQ,KAAK,KAAK,QAAQ,UAAU,CAAC;AAAA,MACrE,SAAS,KAAK,QAAQ,KAAK,QAAQ,KAAK,KAAK,QAAQ,OAAO;AAAA,MAC5D,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,WAAW;AAAA,MACX;AAAA,MACA,UAAU;AAAA,IACZ,CAAC;AAED,UAAM,UAAU,KAAK,IAAI,IAAI;AAC7B,WAAO,KAAK,iBAAiB,EAAE,SAAS,GAAG,OAAO,KAAK,CAAC;AAExD,QAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,aAAO,MAAM,kBAAkB,EAAE,QAAQ,OAAO,OAAO,CAAC;AAAA,IAC1D;AACA,QAAI,OAAO,SAAS,SAAS,GAAG;AAC9B,aAAO,KAAK,oBAAoB,EAAE,UAAU,OAAO,SAAS,CAAC;AAAA,IAC/D;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,gBAA+B;AACnC,UAAM,WAAW;AAAA,MACf,GAAG;AAAA,MACH,GAAI,KAAK,QAAQ,YAAY,CAAC;AAAA,IAChC;AAEA,SAAK,MAAM,MAAM,QAAQ;AAAA,MACvB,aAAa,CAAC,KAAK,QAAQ,KAAK,QAAQ,KAAK,KAAK,QAAQ,UAAU,CAAC;AAAA,MACrE,SAAS,KAAK,QAAQ,KAAK,QAAQ,KAAK,KAAK,QAAQ,OAAO;AAAA,MAC5D,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,WAAW;AAAA,MACX;AAAA,MACA,UAAU;AAAA,IACZ,CAAC;AAED,WAAO,KAAK,qCAAqC;AAAA,EACnD;AAAA;AAAA,EAGA,MAAM,UAAgC;AACpC,QAAI,CAAC,KAAK,KAAK;AACb,YAAM,IAAI,MAAM,sDAAiD;AAAA,IACnE;AAEA,WAAO,MAAM,kCAAkC;AAC/C,UAAM,YAAY,KAAK,IAAI;AAE3B,UAAM,SAAS,MAAM,KAAK,IAAI,QAAQ;AAEtC,UAAM,UAAU,KAAK,IAAI,IAAI;AAC7B,WAAO,KAAK,mBAAmB,EAAE,SAAS,GAAG,OAAO,KAAK,CAAC;AAE1D,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,MAAM,UAAyB;AAC7B,QAAI,KAAK,KAAK;AACZ,YAAM,KAAK,IAAI,QAAQ;AACvB,WAAK,MAAM;AACX,aAAO,MAAM,0BAA0B;AAAA,IACzC;AAAA,EACF;AACF;","names":[]}
|