@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.
Files changed (499) hide show
  1. package/README.md +107 -0
  2. package/bin/axe.js +202 -0
  3. package/bin/stick.js +96 -0
  4. package/bin/wood.js +572 -0
  5. package/dist/bridge/backend_bridge.cjs +186 -0
  6. package/dist/bridge/backend_bridge.cjs.map +1 -0
  7. package/dist/bridge/backend_bridge.d.cts +32 -0
  8. package/dist/bridge/backend_bridge.d.ts +32 -0
  9. package/dist/bridge/backend_bridge.js +152 -0
  10. package/dist/bridge/backend_bridge.js.map +1 -0
  11. package/dist/bridge/backend_entry.cjs +64 -0
  12. package/dist/bridge/backend_entry.cjs.map +1 -0
  13. package/dist/bridge/backend_entry.d.cts +14 -0
  14. package/dist/bridge/backend_entry.d.ts +14 -0
  15. package/dist/bridge/backend_entry.js +39 -0
  16. package/dist/bridge/backend_entry.js.map +1 -0
  17. package/dist/bridge/index.cjs +34 -0
  18. package/dist/bridge/index.cjs.map +1 -0
  19. package/dist/bridge/index.d.cts +2 -0
  20. package/dist/bridge/index.d.ts +2 -0
  21. package/dist/bridge/index.js +8 -0
  22. package/dist/bridge/index.js.map +1 -0
  23. package/dist/client/controller_contract.cjs +17 -0
  24. package/dist/client/controller_contract.cjs.map +1 -0
  25. package/dist/client/controller_contract.d.cts +15 -0
  26. package/dist/client/controller_contract.d.ts +15 -0
  27. package/dist/client/controller_contract.js +1 -0
  28. package/dist/client/controller_contract.js.map +1 -0
  29. package/dist/client/global_polyfill.cjs +6 -0
  30. package/dist/client/global_polyfill.cjs.map +1 -0
  31. package/dist/client/global_polyfill.d.cts +2 -0
  32. package/dist/client/global_polyfill.d.ts +2 -0
  33. package/dist/client/global_polyfill.js +5 -0
  34. package/dist/client/global_polyfill.js.map +1 -0
  35. package/dist/client/index.cjs +451 -0
  36. package/dist/client/index.cjs.map +1 -0
  37. package/dist/client/index.d.cts +75 -0
  38. package/dist/client/index.d.ts +75 -0
  39. package/dist/client/index.js +414 -0
  40. package/dist/client/index.js.map +1 -0
  41. package/dist/client/wood_controller.svelte.cjs +110 -0
  42. package/dist/client/wood_controller.svelte.cjs.map +1 -0
  43. package/dist/client/wood_controller.svelte.d.cts +30 -0
  44. package/dist/client/wood_controller.svelte.d.ts +30 -0
  45. package/dist/client/wood_controller.svelte.js +86 -0
  46. package/dist/client/wood_controller.svelte.js.map +1 -0
  47. package/dist/codegen/controller_registration_generator.cjs +138 -0
  48. package/dist/codegen/controller_registration_generator.cjs.map +1 -0
  49. package/dist/codegen/controller_registration_generator.d.cts +18 -0
  50. package/dist/codegen/controller_registration_generator.d.ts +18 -0
  51. package/dist/codegen/controller_registration_generator.js +104 -0
  52. package/dist/codegen/controller_registration_generator.js.map +1 -0
  53. package/dist/codegen/index.cjs +50 -0
  54. package/dist/codegen/index.cjs.map +1 -0
  55. package/dist/codegen/index.d.cts +10 -0
  56. package/dist/codegen/index.d.ts +10 -0
  57. package/dist/codegen/index.js +19 -0
  58. package/dist/codegen/index.js.map +1 -0
  59. package/dist/codegen/preload_generator.cjs +151 -0
  60. package/dist/codegen/preload_generator.cjs.map +1 -0
  61. package/dist/codegen/preload_generator.d.cts +8 -0
  62. package/dist/codegen/preload_generator.d.ts +8 -0
  63. package/dist/codegen/preload_generator.js +127 -0
  64. package/dist/codegen/preload_generator.js.map +1 -0
  65. package/dist/codegen/renderer_app_generator.cjs +397 -0
  66. package/dist/codegen/renderer_app_generator.cjs.map +1 -0
  67. package/dist/codegen/renderer_app_generator.d.cts +13 -0
  68. package/dist/codegen/renderer_app_generator.d.ts +13 -0
  69. package/dist/codegen/renderer_app_generator.js +363 -0
  70. package/dist/codegen/renderer_app_generator.js.map +1 -0
  71. package/dist/codegen/renderer_controller_registration_generator.cjs +122 -0
  72. package/dist/codegen/renderer_controller_registration_generator.cjs.map +1 -0
  73. package/dist/codegen/renderer_controller_registration_generator.d.cts +9 -0
  74. package/dist/codegen/renderer_controller_registration_generator.d.ts +9 -0
  75. package/dist/codegen/renderer_controller_registration_generator.js +88 -0
  76. package/dist/codegen/renderer_controller_registration_generator.js.map +1 -0
  77. package/dist/codegen/renderer_view_manifest_generator.cjs +126 -0
  78. package/dist/codegen/renderer_view_manifest_generator.cjs.map +1 -0
  79. package/dist/codegen/renderer_view_manifest_generator.d.cts +11 -0
  80. package/dist/codegen/renderer_view_manifest_generator.d.ts +11 -0
  81. package/dist/codegen/renderer_view_manifest_generator.js +92 -0
  82. package/dist/codegen/renderer_view_manifest_generator.js.map +1 -0
  83. package/dist/codegen/runtime_generator.cjs +156 -0
  84. package/dist/codegen/runtime_generator.cjs.map +1 -0
  85. package/dist/codegen/runtime_generator.d.cts +14 -0
  86. package/dist/codegen/runtime_generator.d.ts +14 -0
  87. package/dist/codegen/runtime_generator.js +122 -0
  88. package/dist/codegen/runtime_generator.js.map +1 -0
  89. package/dist/codegen/test_mock_generator.cjs +98 -0
  90. package/dist/codegen/test_mock_generator.cjs.map +1 -0
  91. package/dist/codegen/test_mock_generator.d.cts +5 -0
  92. package/dist/codegen/test_mock_generator.d.ts +5 -0
  93. package/dist/codegen/test_mock_generator.js +74 -0
  94. package/dist/codegen/test_mock_generator.js.map +1 -0
  95. package/dist/codegen/type_generator.cjs +203 -0
  96. package/dist/codegen/type_generator.cjs.map +1 -0
  97. package/dist/codegen/type_generator.d.cts +5 -0
  98. package/dist/codegen/type_generator.d.ts +5 -0
  99. package/dist/codegen/type_generator.js +179 -0
  100. package/dist/codegen/type_generator.js.map +1 -0
  101. package/dist/components/contextMenu.cjs +163 -0
  102. package/dist/components/contextMenu.cjs.map +1 -0
  103. package/dist/components/contextMenu.d.cts +43 -0
  104. package/dist/components/contextMenu.d.ts +43 -0
  105. package/dist/components/contextMenu.js +138 -0
  106. package/dist/components/contextMenu.js.map +1 -0
  107. package/dist/config/config_parser.cjs +176 -0
  108. package/dist/config/config_parser.cjs.map +1 -0
  109. package/dist/config/config_parser.d.cts +9 -0
  110. package/dist/config/config_parser.d.ts +9 -0
  111. package/dist/config/config_parser.js +142 -0
  112. package/dist/config/config_parser.js.map +1 -0
  113. package/dist/config/index.cjs +29 -0
  114. package/dist/config/index.cjs.map +1 -0
  115. package/dist/config/index.d.cts +2 -0
  116. package/dist/config/index.d.ts +2 -0
  117. package/dist/config/index.js +5 -0
  118. package/dist/config/index.js.map +1 -0
  119. package/dist/controller/__fixtures__/controllers/chat.cjs +32 -0
  120. package/dist/controller/__fixtures__/controllers/chat.cjs.map +1 -0
  121. package/dist/controller/__fixtures__/controllers/chat.d.cts +11 -0
  122. package/dist/controller/__fixtures__/controllers/chat.d.ts +11 -0
  123. package/dist/controller/__fixtures__/controllers/chat.js +12 -0
  124. package/dist/controller/__fixtures__/controllers/chat.js.map +1 -0
  125. package/dist/controller/__fixtures__/controllers/not_a_class.cjs +29 -0
  126. package/dist/controller/__fixtures__/controllers/not_a_class.cjs.map +1 -0
  127. package/dist/controller/__fixtures__/controllers/not_a_class.d.cts +3 -0
  128. package/dist/controller/__fixtures__/controllers/not_a_class.d.ts +3 -0
  129. package/dist/controller/__fixtures__/controllers/not_a_class.js +5 -0
  130. package/dist/controller/__fixtures__/controllers/not_a_class.js.map +1 -0
  131. package/dist/controller/__fixtures__/controllers/settings.controller.cjs +32 -0
  132. package/dist/controller/__fixtures__/controllers/settings.controller.cjs.map +1 -0
  133. package/dist/controller/__fixtures__/controllers/settings.controller.d.cts +12 -0
  134. package/dist/controller/__fixtures__/controllers/settings.controller.d.ts +12 -0
  135. package/dist/controller/__fixtures__/controllers/settings.controller.js +12 -0
  136. package/dist/controller/__fixtures__/controllers/settings.controller.js.map +1 -0
  137. package/dist/controller/__fixtures__/controllers/test.cjs +29 -0
  138. package/dist/controller/__fixtures__/controllers/test.cjs.map +1 -0
  139. package/dist/controller/__fixtures__/controllers/test.d.cts +7 -0
  140. package/dist/controller/__fixtures__/controllers/test.d.ts +7 -0
  141. package/dist/controller/__fixtures__/controllers/test.js +9 -0
  142. package/dist/controller/__fixtures__/controllers/test.js.map +1 -0
  143. package/dist/controller/controller_resolver.cjs +180 -0
  144. package/dist/controller/controller_resolver.cjs.map +1 -0
  145. package/dist/controller/controller_resolver.d.cts +51 -0
  146. package/dist/controller/controller_resolver.d.ts +51 -0
  147. package/dist/controller/controller_resolver.js +145 -0
  148. package/dist/controller/controller_resolver.js.map +1 -0
  149. package/dist/controller/index.cjs +31 -0
  150. package/dist/controller/index.cjs.map +1 -0
  151. package/dist/controller/index.d.cts +2 -0
  152. package/dist/controller/index.d.ts +2 -0
  153. package/dist/controller/index.js +6 -0
  154. package/dist/controller/index.js.map +1 -0
  155. package/dist/dev/backend_watcher.cjs +108 -0
  156. package/dist/dev/backend_watcher.cjs.map +1 -0
  157. package/dist/dev/backend_watcher.d.cts +22 -0
  158. package/dist/dev/backend_watcher.d.ts +22 -0
  159. package/dist/dev/backend_watcher.js +84 -0
  160. package/dist/dev/backend_watcher.js.map +1 -0
  161. package/dist/dev/dev_metadata.cjs +94 -0
  162. package/dist/dev/dev_metadata.cjs.map +1 -0
  163. package/dist/dev/dev_metadata.d.cts +20 -0
  164. package/dist/dev/dev_metadata.d.ts +20 -0
  165. package/dist/dev/dev_metadata.js +52 -0
  166. package/dist/dev/dev_metadata.js.map +1 -0
  167. package/dist/dev/esbuild_backend.cjs +124 -0
  168. package/dist/dev/esbuild_backend.cjs.map +1 -0
  169. package/dist/dev/esbuild_backend.d.cts +30 -0
  170. package/dist/dev/esbuild_backend.d.ts +30 -0
  171. package/dist/dev/esbuild_backend.js +90 -0
  172. package/dist/dev/esbuild_backend.js.map +1 -0
  173. package/dist/dev/index.cjs +57 -0
  174. package/dist/dev/index.cjs.map +1 -0
  175. package/dist/dev/index.d.cts +8 -0
  176. package/dist/dev/index.d.ts +8 -0
  177. package/dist/dev/index.js +31 -0
  178. package/dist/dev/index.js.map +1 -0
  179. package/dist/dev/wood_dev_server.cjs +220 -0
  180. package/dist/dev/wood_dev_server.cjs.map +1 -0
  181. package/dist/dev/wood_dev_server.d.cts +39 -0
  182. package/dist/dev/wood_dev_server.d.ts +39 -0
  183. package/dist/dev/wood_dev_server.js +186 -0
  184. package/dist/dev/wood_dev_server.js.map +1 -0
  185. package/dist/dev/yaml_watcher.cjs +142 -0
  186. package/dist/dev/yaml_watcher.cjs.map +1 -0
  187. package/dist/dev/yaml_watcher.d.cts +22 -0
  188. package/dist/dev/yaml_watcher.d.ts +22 -0
  189. package/dist/dev/yaml_watcher.js +108 -0
  190. package/dist/dev/yaml_watcher.js.map +1 -0
  191. package/dist/electron/index.cjs +176 -0
  192. package/dist/electron/index.cjs.map +1 -0
  193. package/dist/electron/index.d.cts +29 -0
  194. package/dist/electron/index.d.ts +29 -0
  195. package/dist/electron/index.js +140 -0
  196. package/dist/electron/index.js.map +1 -0
  197. package/dist/index.cjs +178 -0
  198. package/dist/index.cjs.map +1 -0
  199. package/dist/index.d.cts +41 -0
  200. package/dist/index.d.ts +41 -0
  201. package/dist/index.js +122 -0
  202. package/dist/index.js.map +1 -0
  203. package/dist/ipc/index.cjs +80 -0
  204. package/dist/ipc/index.cjs.map +1 -0
  205. package/dist/ipc/index.d.cts +12 -0
  206. package/dist/ipc/index.d.ts +12 -0
  207. package/dist/ipc/index.js +57 -0
  208. package/dist/ipc/index.js.map +1 -0
  209. package/dist/ipc/shared.cjs +50 -0
  210. package/dist/ipc/shared.cjs.map +1 -0
  211. package/dist/ipc/shared.d.cts +10 -0
  212. package/dist/ipc/shared.d.ts +10 -0
  213. package/dist/ipc/shared.js +23 -0
  214. package/dist/ipc/shared.js.map +1 -0
  215. package/dist/loader/__fixtures__/layouts/app.load.cjs +27 -0
  216. package/dist/loader/__fixtures__/layouts/app.load.cjs.map +1 -0
  217. package/dist/loader/__fixtures__/layouts/app.load.d.cts +5 -0
  218. package/dist/loader/__fixtures__/layouts/app.load.d.ts +5 -0
  219. package/dist/loader/__fixtures__/layouts/app.load.js +7 -0
  220. package/dist/loader/__fixtures__/layouts/app.load.js.map +1 -0
  221. package/dist/loader/__fixtures__/views/test/page.load.cjs +27 -0
  222. package/dist/loader/__fixtures__/views/test/page.load.cjs.map +1 -0
  223. package/dist/loader/__fixtures__/views/test/page.load.d.cts +6 -0
  224. package/dist/loader/__fixtures__/views/test/page.load.d.ts +6 -0
  225. package/dist/loader/__fixtures__/views/test/page.load.js +7 -0
  226. package/dist/loader/__fixtures__/views/test/page.load.js.map +1 -0
  227. package/dist/loader/index.cjs +29 -0
  228. package/dist/loader/index.cjs.map +1 -0
  229. package/dist/loader/index.d.cts +3 -0
  230. package/dist/loader/index.d.ts +3 -0
  231. package/dist/loader/index.js +5 -0
  232. package/dist/loader/index.js.map +1 -0
  233. package/dist/loader/loader_runner.cjs +109 -0
  234. package/dist/loader/loader_runner.cjs.map +1 -0
  235. package/dist/loader/loader_runner.d.cts +27 -0
  236. package/dist/loader/loader_runner.d.ts +27 -0
  237. package/dist/loader/loader_runner.js +75 -0
  238. package/dist/loader/loader_runner.js.map +1 -0
  239. package/dist/main/index.cjs +500 -0
  240. package/dist/main/index.cjs.map +1 -0
  241. package/dist/main/index.d.cts +98 -0
  242. package/dist/main/index.d.ts +98 -0
  243. package/dist/main/index.js +475 -0
  244. package/dist/main/index.js.map +1 -0
  245. package/dist/middleware/__fixtures__/middleware/auth.cjs +44 -0
  246. package/dist/middleware/__fixtures__/middleware/auth.cjs.map +1 -0
  247. package/dist/middleware/__fixtures__/middleware/auth.d.cts +6 -0
  248. package/dist/middleware/__fixtures__/middleware/auth.d.ts +6 -0
  249. package/dist/middleware/__fixtures__/middleware/auth.js +19 -0
  250. package/dist/middleware/__fixtures__/middleware/auth.js.map +1 -0
  251. package/dist/middleware/__fixtures__/middleware/sequence.cjs +47 -0
  252. package/dist/middleware/__fixtures__/middleware/sequence.cjs.map +1 -0
  253. package/dist/middleware/__fixtures__/middleware/sequence.d.cts +7 -0
  254. package/dist/middleware/__fixtures__/middleware/sequence.d.ts +7 -0
  255. package/dist/middleware/__fixtures__/middleware/sequence.js +21 -0
  256. package/dist/middleware/__fixtures__/middleware/sequence.js.map +1 -0
  257. package/dist/middleware/index.cjs +34 -0
  258. package/dist/middleware/index.cjs.map +1 -0
  259. package/dist/middleware/index.d.cts +3 -0
  260. package/dist/middleware/index.d.ts +3 -0
  261. package/dist/middleware/index.js +8 -0
  262. package/dist/middleware/index.js.map +1 -0
  263. package/dist/middleware/middleware_pipeline.cjs +55 -0
  264. package/dist/middleware/middleware_pipeline.cjs.map +1 -0
  265. package/dist/middleware/middleware_pipeline.d.cts +13 -0
  266. package/dist/middleware/middleware_pipeline.d.ts +13 -0
  267. package/dist/middleware/middleware_pipeline.js +30 -0
  268. package/dist/middleware/middleware_pipeline.js.map +1 -0
  269. package/dist/middleware/middleware_resolver.cjs +91 -0
  270. package/dist/middleware/middleware_resolver.cjs.map +1 -0
  271. package/dist/middleware/middleware_resolver.d.cts +19 -0
  272. package/dist/middleware/middleware_resolver.d.ts +19 -0
  273. package/dist/middleware/middleware_resolver.js +57 -0
  274. package/dist/middleware/middleware_resolver.js.map +1 -0
  275. package/dist/navigation/index.cjs +205 -0
  276. package/dist/navigation/index.cjs.map +1 -0
  277. package/dist/navigation/index.d.cts +34 -0
  278. package/dist/navigation/index.d.ts +34 -0
  279. package/dist/navigation/index.js +176 -0
  280. package/dist/navigation/index.js.map +1 -0
  281. package/dist/parser/index.cjs +36 -0
  282. package/dist/parser/index.cjs.map +1 -0
  283. package/dist/parser/index.d.cts +4 -0
  284. package/dist/parser/index.d.ts +4 -0
  285. package/dist/parser/index.js +9 -0
  286. package/dist/parser/index.js.map +1 -0
  287. package/dist/parser/operations_parser.cjs +94 -0
  288. package/dist/parser/operations_parser.cjs.map +1 -0
  289. package/dist/parser/operations_parser.d.cts +7 -0
  290. package/dist/parser/operations_parser.d.ts +7 -0
  291. package/dist/parser/operations_parser.js +59 -0
  292. package/dist/parser/operations_parser.js.map +1 -0
  293. package/dist/parser/views_parser.cjs +153 -0
  294. package/dist/parser/views_parser.cjs.map +1 -0
  295. package/dist/parser/views_parser.d.cts +11 -0
  296. package/dist/parser/views_parser.d.ts +11 -0
  297. package/dist/parser/views_parser.js +118 -0
  298. package/dist/parser/views_parser.js.map +1 -0
  299. package/dist/router/index.cjs +31 -0
  300. package/dist/router/index.cjs.map +1 -0
  301. package/dist/router/index.d.cts +2 -0
  302. package/dist/router/index.d.ts +2 -0
  303. package/dist/router/index.js +6 -0
  304. package/dist/router/index.js.map +1 -0
  305. package/dist/router/wood_router.cjs +246 -0
  306. package/dist/router/wood_router.cjs.map +1 -0
  307. package/dist/router/wood_router.d.cts +70 -0
  308. package/dist/router/wood_router.d.ts +70 -0
  309. package/dist/router/wood_router.js +221 -0
  310. package/dist/router/wood_router.js.map +1 -0
  311. package/dist/runtime/application_root.cjs +98 -0
  312. package/dist/runtime/application_root.cjs.map +1 -0
  313. package/dist/runtime/application_root.d.cts +5 -0
  314. package/dist/runtime/application_root.d.ts +5 -0
  315. package/dist/runtime/application_root.js +61 -0
  316. package/dist/runtime/application_root.js.map +1 -0
  317. package/dist/runtime/get_container.cjs +96 -0
  318. package/dist/runtime/get_container.cjs.map +1 -0
  319. package/dist/runtime/get_container.d.cts +16 -0
  320. package/dist/runtime/get_container.d.ts +16 -0
  321. package/dist/runtime/get_container.js +60 -0
  322. package/dist/runtime/get_container.js.map +1 -0
  323. package/dist/runtime/index.cjs +49 -0
  324. package/dist/runtime/index.cjs.map +1 -0
  325. package/dist/runtime/index.d.cts +8 -0
  326. package/dist/runtime/index.d.ts +8 -0
  327. package/dist/runtime/index.js +24 -0
  328. package/dist/runtime/index.js.map +1 -0
  329. package/dist/runtime/renderer_log_dispatcher.cjs +79 -0
  330. package/dist/runtime/renderer_log_dispatcher.cjs.map +1 -0
  331. package/dist/runtime/renderer_log_dispatcher.d.cts +27 -0
  332. package/dist/runtime/renderer_log_dispatcher.d.ts +27 -0
  333. package/dist/runtime/renderer_log_dispatcher.js +54 -0
  334. package/dist/runtime/renderer_log_dispatcher.js.map +1 -0
  335. package/dist/runtime/runtime.cjs +158 -0
  336. package/dist/runtime/runtime.cjs.map +1 -0
  337. package/dist/runtime/runtime.d.cts +35 -0
  338. package/dist/runtime/runtime.d.ts +35 -0
  339. package/dist/runtime/runtime.js +136 -0
  340. package/dist/runtime/runtime.js.map +1 -0
  341. package/dist/stick/allow_cli.cjs +39 -0
  342. package/dist/stick/allow_cli.cjs.map +1 -0
  343. package/dist/stick/allow_cli.d.cts +6 -0
  344. package/dist/stick/allow_cli.d.ts +6 -0
  345. package/dist/stick/allow_cli.js +15 -0
  346. package/dist/stick/allow_cli.js.map +1 -0
  347. package/dist/stick/index.cjs +276 -0
  348. package/dist/stick/index.cjs.map +1 -0
  349. package/dist/stick/index.d.cts +111 -0
  350. package/dist/stick/index.d.ts +111 -0
  351. package/dist/stick/index.js +237 -0
  352. package/dist/stick/index.js.map +1 -0
  353. package/dist/stick/static_renderer.cjs +144 -0
  354. package/dist/stick/static_renderer.cjs.map +1 -0
  355. package/dist/stick/static_renderer.d.cts +51 -0
  356. package/dist/stick/static_renderer.d.ts +51 -0
  357. package/dist/stick/static_renderer.js +119 -0
  358. package/dist/stick/static_renderer.js.map +1 -0
  359. package/dist/stick/template_resolver.cjs +156 -0
  360. package/dist/stick/template_resolver.cjs.map +1 -0
  361. package/dist/stick/template_resolver.d.cts +7 -0
  362. package/dist/stick/template_resolver.d.ts +7 -0
  363. package/dist/stick/template_resolver.js +122 -0
  364. package/dist/stick/template_resolver.js.map +1 -0
  365. package/dist/testing/create_controller_harness.cjs +175 -0
  366. package/dist/testing/create_controller_harness.cjs.map +1 -0
  367. package/dist/testing/create_controller_harness.d.cts +37 -0
  368. package/dist/testing/create_controller_harness.d.ts +37 -0
  369. package/dist/testing/create_controller_harness.js +162 -0
  370. package/dist/testing/create_controller_harness.js.map +1 -0
  371. package/dist/testing/create_router_bridge.cjs +103 -0
  372. package/dist/testing/create_router_bridge.cjs.map +1 -0
  373. package/dist/testing/create_router_bridge.d.cts +71 -0
  374. package/dist/testing/create_router_bridge.d.ts +71 -0
  375. package/dist/testing/create_router_bridge.js +78 -0
  376. package/dist/testing/create_router_bridge.js.map +1 -0
  377. package/dist/testing/create_test_container.cjs +72 -0
  378. package/dist/testing/create_test_container.cjs.map +1 -0
  379. package/dist/testing/create_test_container.d.cts +14 -0
  380. package/dist/testing/create_test_container.d.ts +14 -0
  381. package/dist/testing/create_test_container.js +48 -0
  382. package/dist/testing/create_test_container.js.map +1 -0
  383. package/dist/testing/create_test_router.cjs +57 -0
  384. package/dist/testing/create_test_router.cjs.map +1 -0
  385. package/dist/testing/create_test_router.d.cts +19 -0
  386. package/dist/testing/create_test_router.d.ts +19 -0
  387. package/dist/testing/create_test_router.js +33 -0
  388. package/dist/testing/create_test_router.js.map +1 -0
  389. package/dist/testing/index.cjs +48 -0
  390. package/dist/testing/index.cjs.map +1 -0
  391. package/dist/testing/index.d.cts +12 -0
  392. package/dist/testing/index.d.ts +12 -0
  393. package/dist/testing/index.js +22 -0
  394. package/dist/testing/index.js.map +1 -0
  395. package/dist/testing/mock_electron.cjs +100 -0
  396. package/dist/testing/mock_electron.cjs.map +1 -0
  397. package/dist/testing/mock_electron.d.cts +12 -0
  398. package/dist/testing/mock_electron.d.ts +12 -0
  399. package/dist/testing/mock_electron.js +75 -0
  400. package/dist/testing/mock_electron.js.map +1 -0
  401. package/dist/tracing/index.cjs +56 -0
  402. package/dist/tracing/index.cjs.map +1 -0
  403. package/dist/tracing/index.d.cts +4 -0
  404. package/dist/tracing/index.d.ts +4 -0
  405. package/dist/tracing/index.js +35 -0
  406. package/dist/tracing/index.js.map +1 -0
  407. package/dist/tracing/trace_hub.cjs +213 -0
  408. package/dist/tracing/trace_hub.cjs.map +1 -0
  409. package/dist/tracing/trace_hub.d.cts +47 -0
  410. package/dist/tracing/trace_hub.d.ts +47 -0
  411. package/dist/tracing/trace_hub.js +172 -0
  412. package/dist/tracing/trace_hub.js.map +1 -0
  413. package/dist/tracing/trace_provider.cjs +200 -0
  414. package/dist/tracing/trace_provider.cjs.map +1 -0
  415. package/dist/tracing/trace_provider.d.cts +69 -0
  416. package/dist/tracing/trace_provider.d.ts +69 -0
  417. package/dist/tracing/trace_provider.js +179 -0
  418. package/dist/tracing/trace_provider.js.map +1 -0
  419. package/dist/types/bridge.cjs +51 -0
  420. package/dist/types/bridge.cjs.map +1 -0
  421. package/dist/types/bridge.d.cts +56 -0
  422. package/dist/types/bridge.d.ts +56 -0
  423. package/dist/types/bridge.js +25 -0
  424. package/dist/types/bridge.js.map +1 -0
  425. package/dist/types/config.cjs +17 -0
  426. package/dist/types/config.cjs.map +1 -0
  427. package/dist/types/config.d.cts +74 -0
  428. package/dist/types/config.d.ts +74 -0
  429. package/dist/types/config.js +1 -0
  430. package/dist/types/config.js.map +1 -0
  431. package/dist/types/context.cjs +17 -0
  432. package/dist/types/context.cjs.map +1 -0
  433. package/dist/types/context.d.cts +61 -0
  434. package/dist/types/context.d.ts +61 -0
  435. package/dist/types/context.js +1 -0
  436. package/dist/types/context.js.map +1 -0
  437. package/dist/types/context_menu.cjs +17 -0
  438. package/dist/types/context_menu.cjs.map +1 -0
  439. package/dist/types/context_menu.d.cts +30 -0
  440. package/dist/types/context_menu.d.ts +30 -0
  441. package/dist/types/context_menu.js +1 -0
  442. package/dist/types/context_menu.js.map +1 -0
  443. package/dist/types/index.cjs +33 -0
  444. package/dist/types/index.cjs.map +1 -0
  445. package/dist/types/index.d.cts +6 -0
  446. package/dist/types/index.d.ts +6 -0
  447. package/dist/types/index.js +7 -0
  448. package/dist/types/index.js.map +1 -0
  449. package/dist/types/operations.cjs +17 -0
  450. package/dist/types/operations.cjs.map +1 -0
  451. package/dist/types/operations.d.cts +39 -0
  452. package/dist/types/operations.d.ts +39 -0
  453. package/dist/types/operations.js +1 -0
  454. package/dist/types/operations.js.map +1 -0
  455. package/dist/types/views.cjs +17 -0
  456. package/dist/types/views.cjs.map +1 -0
  457. package/dist/types/views.d.cts +44 -0
  458. package/dist/types/views.d.ts +44 -0
  459. package/dist/types/views.js +1 -0
  460. package/dist/types/views.js.map +1 -0
  461. package/dist/validation/index.cjs +29 -0
  462. package/dist/validation/index.cjs.map +1 -0
  463. package/dist/validation/index.d.cts +1 -0
  464. package/dist/validation/index.d.ts +1 -0
  465. package/dist/validation/index.js +5 -0
  466. package/dist/validation/index.js.map +1 -0
  467. package/dist/validation/schema_validator.cjs +86 -0
  468. package/dist/validation/schema_validator.cjs.map +1 -0
  469. package/dist/validation/schema_validator.d.cts +24 -0
  470. package/dist/validation/schema_validator.d.ts +24 -0
  471. package/dist/validation/schema_validator.js +52 -0
  472. package/dist/validation/schema_validator.js.map +1 -0
  473. package/dist/window/index.cjs +32 -0
  474. package/dist/window/index.cjs.map +1 -0
  475. package/dist/window/index.d.cts +4 -0
  476. package/dist/window/index.d.ts +4 -0
  477. package/dist/window/index.js +7 -0
  478. package/dist/window/index.js.map +1 -0
  479. package/dist/window/window_manager.cjs +354 -0
  480. package/dist/window/window_manager.cjs.map +1 -0
  481. package/dist/window/window_manager.d.cts +172 -0
  482. package/dist/window/window_manager.d.ts +172 -0
  483. package/dist/window/window_manager.js +330 -0
  484. package/dist/window/window_manager.js.map +1 -0
  485. package/dist/window/window_state_store.cjs +129 -0
  486. package/dist/window/window_state_store.cjs.map +1 -0
  487. package/dist/window/window_state_store.d.cts +39 -0
  488. package/dist/window/window_state_store.d.ts +39 -0
  489. package/dist/window/window_state_store.js +105 -0
  490. package/dist/window/window_state_store.js.map +1 -0
  491. package/loaders/loader.mjs +46 -0
  492. package/package.json +119 -0
  493. package/src/components/ContextMenuProvider.svelte +145 -0
  494. package/src/components/NavigationShell.svelte +204 -0
  495. package/src/components/WoodRecursiveRender.svelte +91 -0
  496. package/src/components/contextMenu.ts +228 -0
  497. package/src/components/index.d.ts +14 -0
  498. package/src/components/index.js +2 -0
  499. package/src/stick/WoodRecursiveRender.svelte +74 -0
@@ -0,0 +1,186 @@
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 backend_bridge_exports = {};
30
+ __export(backend_bridge_exports, {
31
+ BackendBridge: () => BackendBridge
32
+ });
33
+ module.exports = __toCommonJS(backend_bridge_exports);
34
+ var import_child_process = require("child_process");
35
+ var import_crypto = __toESM(require("crypto"), 1);
36
+ var import_logger = require("@noego/logger");
37
+ const logger = (0, import_logger.getLogger)("wood:bridge");
38
+ class BackendBridge {
39
+ constructor(options) {
40
+ this.child = null;
41
+ this.pending = /* @__PURE__ */ new Map();
42
+ this._state = "stopped";
43
+ this.options = options;
44
+ this.timeoutMs = options.timeout ?? 3e4;
45
+ }
46
+ get state() {
47
+ return this._state;
48
+ }
49
+ /** Start the backend process and wait for the ready signal. */
50
+ async start() {
51
+ this._state = "starting";
52
+ this.child = (0, import_child_process.fork)(this.options.backendEntry, [], {
53
+ stdio: ["pipe", "pipe", "pipe", "ipc"]
54
+ });
55
+ this.child.on("message", (msg) => this.onMessage(msg));
56
+ this.child.on("exit", (code, signal) => {
57
+ this._state = "stopped";
58
+ this.rejectAllPending(new Error("Backend process exited"));
59
+ logger.debug(`backend exited code=${code} signal=${signal}`);
60
+ this.options.onExit?.(code, signal);
61
+ });
62
+ this.child.stdout?.pipe(process.stdout);
63
+ this.child.stderr?.pipe(process.stderr);
64
+ await this.waitForReady();
65
+ this.options.onReady?.();
66
+ }
67
+ /** Stop the backend process gracefully (SIGTERM then SIGKILL). */
68
+ async stop() {
69
+ if (!this.child || this.child.killed) return;
70
+ this._state = "stopped";
71
+ this.rejectAllPending(new Error("Backend is stopping"));
72
+ return new Promise((resolve) => {
73
+ const killTimer = setTimeout(() => {
74
+ if (this.child && !this.child.killed) {
75
+ this.child.kill("SIGKILL");
76
+ logger.warn("backend did not exit in time, sent SIGKILL");
77
+ }
78
+ resolve();
79
+ }, 2e3);
80
+ this.child.once("exit", () => {
81
+ clearTimeout(killTimer);
82
+ resolve();
83
+ });
84
+ this.child.kill("SIGTERM");
85
+ });
86
+ }
87
+ /** Restart the backend process. */
88
+ async restart() {
89
+ this._state = "restarting";
90
+ logger.info("restarting backend");
91
+ await this.stop();
92
+ await this.start();
93
+ }
94
+ /** Send a request to the backend and return the result. */
95
+ call(channel, data) {
96
+ if (this._state !== "ready") {
97
+ return Promise.reject(new Error(`Backend not ready (state: ${this._state})`));
98
+ }
99
+ const id = import_crypto.default.randomUUID();
100
+ return new Promise((resolve, reject) => {
101
+ const timer = setTimeout(() => {
102
+ this.pending.delete(id);
103
+ reject(new Error(`Backend timeout: ${channel}`));
104
+ }, this.timeoutMs);
105
+ this.pending.set(id, { resolve, reject, timer });
106
+ this.child.send({
107
+ type: "request",
108
+ id,
109
+ channel,
110
+ data
111
+ });
112
+ logger.debug(`call ${id}: ${channel}`);
113
+ });
114
+ }
115
+ // -- Private --
116
+ waitForReady() {
117
+ return new Promise((resolve, reject) => {
118
+ const timer = setTimeout(() => {
119
+ reject(new Error("Backend failed to send ready signal within timeout"));
120
+ }, this.timeoutMs);
121
+ const readyHandler = (msg) => {
122
+ if (msg?.type === "ready") {
123
+ clearTimeout(timer);
124
+ this.child?.removeListener("message", readyHandler);
125
+ this._state = "ready";
126
+ logger.info("backend ready");
127
+ resolve();
128
+ }
129
+ };
130
+ this.child.on("message", readyHandler);
131
+ });
132
+ }
133
+ onMessage(msg) {
134
+ const message = msg;
135
+ if (message.type === "response") {
136
+ const resp = message;
137
+ const entry = this.pending.get(resp.id);
138
+ if (entry) {
139
+ clearTimeout(entry.timer);
140
+ this.pending.delete(resp.id);
141
+ if (resp.error) {
142
+ entry.reject(new Error(resp.error.message ?? "Backend error"));
143
+ } else {
144
+ entry.resolve(resp.result);
145
+ }
146
+ }
147
+ }
148
+ if (message.type === "push") {
149
+ const push = message;
150
+ this.options.onPush?.(push.channel, push.data);
151
+ }
152
+ if (message.type === "electron-api") {
153
+ this.handleElectronProxy(message);
154
+ }
155
+ }
156
+ async handleElectronProxy(msg) {
157
+ if (!this.options.onElectronApi) return;
158
+ try {
159
+ const result = await this.options.onElectronApi(msg.id, msg.api, msg.args);
160
+ this.child?.send({
161
+ type: "electron-api-response",
162
+ id: msg.id,
163
+ result
164
+ });
165
+ } catch (err) {
166
+ const error = err instanceof Error ? err : new Error(String(err));
167
+ this.child?.send({
168
+ type: "electron-api-response",
169
+ id: msg.id,
170
+ error: { message: error.message, name: error.name }
171
+ });
172
+ }
173
+ }
174
+ rejectAllPending(error) {
175
+ for (const [, entry] of this.pending) {
176
+ clearTimeout(entry.timer);
177
+ entry.reject(error);
178
+ }
179
+ this.pending.clear();
180
+ }
181
+ }
182
+ // Annotate the CommonJS export names for ESM import in node:
183
+ 0 && (module.exports = {
184
+ BackendBridge
185
+ });
186
+ //# sourceMappingURL=backend_bridge.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/bridge/backend_bridge.ts"],"sourcesContent":["import { fork, type ChildProcess } from 'child_process';\nimport crypto from 'crypto';\nimport { getLogger } from '@noego/logger';\nimport type {\n BridgeRequest,\n BridgeResponse,\n BridgeReady,\n BridgePush,\n BridgeElectronApi,\n} from '../types/bridge';\n\nconst logger = getLogger('wood:bridge');\n\ninterface PendingCall {\n resolve: (value: unknown) => void;\n reject: (error: Error) => void;\n timer: NodeJS.Timeout;\n}\n\nexport interface BridgeOptions {\n backendEntry: string;\n timeout?: number;\n onReady?: () => void;\n onPush?: (channel: string, data: unknown) => void;\n onElectronApi?: (id: string, api: string, args: unknown[]) => Promise<unknown>;\n onExit?: (code: number | null, signal: string | null) => void;\n}\n\ntype BridgeState = 'stopped' | 'starting' | 'ready' | 'restarting';\n\nexport class BackendBridge {\n private child: ChildProcess | null = null;\n private pending = new Map<string, PendingCall>();\n private readonly options: BridgeOptions;\n private readonly timeoutMs: number;\n private _state: BridgeState = 'stopped';\n\n constructor(options: BridgeOptions) {\n this.options = options;\n this.timeoutMs = options.timeout ?? 30_000;\n }\n\n get state(): BridgeState {\n return this._state;\n }\n\n /** Start the backend process and wait for the ready signal. */\n async start(): Promise<void> {\n this._state = 'starting';\n\n this.child = fork(this.options.backendEntry, [], {\n stdio: ['pipe', 'pipe', 'pipe', 'ipc'],\n });\n\n this.child.on('message', (msg: unknown) => this.onMessage(msg));\n this.child.on('exit', (code, signal) => {\n this._state = 'stopped';\n this.rejectAllPending(new Error('Backend process exited'));\n logger.debug(`backend exited code=${code} signal=${signal}`);\n this.options.onExit?.(code, signal);\n });\n\n this.child.stdout?.pipe(process.stdout);\n this.child.stderr?.pipe(process.stderr);\n\n await this.waitForReady();\n this.options.onReady?.();\n }\n\n /** Stop the backend process gracefully (SIGTERM then SIGKILL). */\n async stop(): Promise<void> {\n if (!this.child || this.child.killed) return;\n\n this._state = 'stopped';\n this.rejectAllPending(new Error('Backend is stopping'));\n\n return new Promise<void>((resolve) => {\n const killTimer = setTimeout(() => {\n if (this.child && !this.child.killed) {\n this.child.kill('SIGKILL');\n logger.warn('backend did not exit in time, sent SIGKILL');\n }\n resolve();\n }, 2000);\n\n this.child!.once('exit', () => {\n clearTimeout(killTimer);\n resolve();\n });\n\n this.child!.kill('SIGTERM');\n });\n }\n\n /** Restart the backend process. */\n async restart(): Promise<void> {\n this._state = 'restarting';\n logger.info('restarting backend');\n await this.stop();\n await this.start();\n }\n\n /** Send a request to the backend and return the result. */\n call(channel: string, data: unknown): Promise<unknown> {\n if (this._state !== 'ready') {\n return Promise.reject(new Error(`Backend not ready (state: ${this._state})`));\n }\n\n const id = crypto.randomUUID();\n\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n this.pending.delete(id);\n reject(new Error(`Backend timeout: ${channel}`));\n }, this.timeoutMs);\n\n this.pending.set(id, { resolve, reject, timer });\n\n this.child!.send({\n type: 'request',\n id,\n channel,\n data,\n } satisfies BridgeRequest);\n\n logger.debug(`call ${id}: ${channel}`);\n });\n }\n\n // -- Private --\n\n private waitForReady(): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n reject(new Error('Backend failed to send ready signal within timeout'));\n }, this.timeoutMs);\n\n const readyHandler = (msg: unknown) => {\n if ((msg as BridgeReady)?.type === 'ready') {\n clearTimeout(timer);\n this.child?.removeListener('message', readyHandler);\n this._state = 'ready';\n logger.info('backend ready');\n resolve();\n }\n };\n\n this.child!.on('message', readyHandler);\n });\n }\n\n private onMessage(msg: unknown): void {\n const message = msg as BridgeResponse | BridgePush | BridgeElectronApi;\n\n if (message.type === 'response') {\n const resp = message as BridgeResponse;\n const entry = this.pending.get(resp.id);\n if (entry) {\n clearTimeout(entry.timer);\n this.pending.delete(resp.id);\n if (resp.error) {\n entry.reject(new Error(resp.error.message ?? 'Backend error'));\n } else {\n entry.resolve(resp.result);\n }\n }\n }\n\n if (message.type === 'push') {\n const push = message as BridgePush;\n this.options.onPush?.(push.channel, push.data);\n }\n\n if (message.type === 'electron-api') {\n this.handleElectronProxy(message as BridgeElectronApi);\n }\n }\n\n private async handleElectronProxy(msg: BridgeElectronApi): Promise<void> {\n if (!this.options.onElectronApi) return;\n\n try {\n const result = await this.options.onElectronApi(msg.id, msg.api, msg.args);\n this.child?.send({\n type: 'electron-api-response',\n id: msg.id,\n result,\n });\n } catch (err: unknown) {\n const error = err instanceof Error ? err : new Error(String(err));\n this.child?.send({\n type: 'electron-api-response',\n id: msg.id,\n error: { message: error.message, name: error.name },\n });\n }\n }\n\n private rejectAllPending(error: Error): void {\n for (const [, entry] of this.pending) {\n clearTimeout(entry.timer);\n entry.reject(error);\n }\n this.pending.clear();\n }\n}\n"],"mappings":"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","names":["crypto"]}
@@ -0,0 +1,32 @@
1
+ interface BridgeOptions {
2
+ backendEntry: string;
3
+ timeout?: number;
4
+ onReady?: () => void;
5
+ onPush?: (channel: string, data: unknown) => void;
6
+ onElectronApi?: (id: string, api: string, args: unknown[]) => Promise<unknown>;
7
+ onExit?: (code: number | null, signal: string | null) => void;
8
+ }
9
+ type BridgeState = 'stopped' | 'starting' | 'ready' | 'restarting';
10
+ declare class BackendBridge {
11
+ private child;
12
+ private pending;
13
+ private readonly options;
14
+ private readonly timeoutMs;
15
+ private _state;
16
+ constructor(options: BridgeOptions);
17
+ get state(): BridgeState;
18
+ /** Start the backend process and wait for the ready signal. */
19
+ start(): Promise<void>;
20
+ /** Stop the backend process gracefully (SIGTERM then SIGKILL). */
21
+ stop(): Promise<void>;
22
+ /** Restart the backend process. */
23
+ restart(): Promise<void>;
24
+ /** Send a request to the backend and return the result. */
25
+ call(channel: string, data: unknown): Promise<unknown>;
26
+ private waitForReady;
27
+ private onMessage;
28
+ private handleElectronProxy;
29
+ private rejectAllPending;
30
+ }
31
+
32
+ export { BackendBridge, type BridgeOptions };
@@ -0,0 +1,32 @@
1
+ interface BridgeOptions {
2
+ backendEntry: string;
3
+ timeout?: number;
4
+ onReady?: () => void;
5
+ onPush?: (channel: string, data: unknown) => void;
6
+ onElectronApi?: (id: string, api: string, args: unknown[]) => Promise<unknown>;
7
+ onExit?: (code: number | null, signal: string | null) => void;
8
+ }
9
+ type BridgeState = 'stopped' | 'starting' | 'ready' | 'restarting';
10
+ declare class BackendBridge {
11
+ private child;
12
+ private pending;
13
+ private readonly options;
14
+ private readonly timeoutMs;
15
+ private _state;
16
+ constructor(options: BridgeOptions);
17
+ get state(): BridgeState;
18
+ /** Start the backend process and wait for the ready signal. */
19
+ start(): Promise<void>;
20
+ /** Stop the backend process gracefully (SIGTERM then SIGKILL). */
21
+ stop(): Promise<void>;
22
+ /** Restart the backend process. */
23
+ restart(): Promise<void>;
24
+ /** Send a request to the backend and return the result. */
25
+ call(channel: string, data: unknown): Promise<unknown>;
26
+ private waitForReady;
27
+ private onMessage;
28
+ private handleElectronProxy;
29
+ private rejectAllPending;
30
+ }
31
+
32
+ export { BackendBridge, type BridgeOptions };
@@ -0,0 +1,152 @@
1
+ import { fork } from "child_process";
2
+ import crypto from "crypto";
3
+ import { getLogger } from "@noego/logger";
4
+ const logger = getLogger("wood:bridge");
5
+ class BackendBridge {
6
+ constructor(options) {
7
+ this.child = null;
8
+ this.pending = /* @__PURE__ */ new Map();
9
+ this._state = "stopped";
10
+ this.options = options;
11
+ this.timeoutMs = options.timeout ?? 3e4;
12
+ }
13
+ get state() {
14
+ return this._state;
15
+ }
16
+ /** Start the backend process and wait for the ready signal. */
17
+ async start() {
18
+ this._state = "starting";
19
+ this.child = fork(this.options.backendEntry, [], {
20
+ stdio: ["pipe", "pipe", "pipe", "ipc"]
21
+ });
22
+ this.child.on("message", (msg) => this.onMessage(msg));
23
+ this.child.on("exit", (code, signal) => {
24
+ this._state = "stopped";
25
+ this.rejectAllPending(new Error("Backend process exited"));
26
+ logger.debug(`backend exited code=${code} signal=${signal}`);
27
+ this.options.onExit?.(code, signal);
28
+ });
29
+ this.child.stdout?.pipe(process.stdout);
30
+ this.child.stderr?.pipe(process.stderr);
31
+ await this.waitForReady();
32
+ this.options.onReady?.();
33
+ }
34
+ /** Stop the backend process gracefully (SIGTERM then SIGKILL). */
35
+ async stop() {
36
+ if (!this.child || this.child.killed) return;
37
+ this._state = "stopped";
38
+ this.rejectAllPending(new Error("Backend is stopping"));
39
+ return new Promise((resolve) => {
40
+ const killTimer = setTimeout(() => {
41
+ if (this.child && !this.child.killed) {
42
+ this.child.kill("SIGKILL");
43
+ logger.warn("backend did not exit in time, sent SIGKILL");
44
+ }
45
+ resolve();
46
+ }, 2e3);
47
+ this.child.once("exit", () => {
48
+ clearTimeout(killTimer);
49
+ resolve();
50
+ });
51
+ this.child.kill("SIGTERM");
52
+ });
53
+ }
54
+ /** Restart the backend process. */
55
+ async restart() {
56
+ this._state = "restarting";
57
+ logger.info("restarting backend");
58
+ await this.stop();
59
+ await this.start();
60
+ }
61
+ /** Send a request to the backend and return the result. */
62
+ call(channel, data) {
63
+ if (this._state !== "ready") {
64
+ return Promise.reject(new Error(`Backend not ready (state: ${this._state})`));
65
+ }
66
+ const id = crypto.randomUUID();
67
+ return new Promise((resolve, reject) => {
68
+ const timer = setTimeout(() => {
69
+ this.pending.delete(id);
70
+ reject(new Error(`Backend timeout: ${channel}`));
71
+ }, this.timeoutMs);
72
+ this.pending.set(id, { resolve, reject, timer });
73
+ this.child.send({
74
+ type: "request",
75
+ id,
76
+ channel,
77
+ data
78
+ });
79
+ logger.debug(`call ${id}: ${channel}`);
80
+ });
81
+ }
82
+ // -- Private --
83
+ waitForReady() {
84
+ return new Promise((resolve, reject) => {
85
+ const timer = setTimeout(() => {
86
+ reject(new Error("Backend failed to send ready signal within timeout"));
87
+ }, this.timeoutMs);
88
+ const readyHandler = (msg) => {
89
+ if (msg?.type === "ready") {
90
+ clearTimeout(timer);
91
+ this.child?.removeListener("message", readyHandler);
92
+ this._state = "ready";
93
+ logger.info("backend ready");
94
+ resolve();
95
+ }
96
+ };
97
+ this.child.on("message", readyHandler);
98
+ });
99
+ }
100
+ onMessage(msg) {
101
+ const message = msg;
102
+ if (message.type === "response") {
103
+ const resp = message;
104
+ const entry = this.pending.get(resp.id);
105
+ if (entry) {
106
+ clearTimeout(entry.timer);
107
+ this.pending.delete(resp.id);
108
+ if (resp.error) {
109
+ entry.reject(new Error(resp.error.message ?? "Backend error"));
110
+ } else {
111
+ entry.resolve(resp.result);
112
+ }
113
+ }
114
+ }
115
+ if (message.type === "push") {
116
+ const push = message;
117
+ this.options.onPush?.(push.channel, push.data);
118
+ }
119
+ if (message.type === "electron-api") {
120
+ this.handleElectronProxy(message);
121
+ }
122
+ }
123
+ async handleElectronProxy(msg) {
124
+ if (!this.options.onElectronApi) return;
125
+ try {
126
+ const result = await this.options.onElectronApi(msg.id, msg.api, msg.args);
127
+ this.child?.send({
128
+ type: "electron-api-response",
129
+ id: msg.id,
130
+ result
131
+ });
132
+ } catch (err) {
133
+ const error = err instanceof Error ? err : new Error(String(err));
134
+ this.child?.send({
135
+ type: "electron-api-response",
136
+ id: msg.id,
137
+ error: { message: error.message, name: error.name }
138
+ });
139
+ }
140
+ }
141
+ rejectAllPending(error) {
142
+ for (const [, entry] of this.pending) {
143
+ clearTimeout(entry.timer);
144
+ entry.reject(error);
145
+ }
146
+ this.pending.clear();
147
+ }
148
+ }
149
+ export {
150
+ BackendBridge
151
+ };
152
+ //# sourceMappingURL=backend_bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/bridge/backend_bridge.ts"],"sourcesContent":["import { fork, type ChildProcess } from 'child_process';\nimport crypto from 'crypto';\nimport { getLogger } from '@noego/logger';\nimport type {\n BridgeRequest,\n BridgeResponse,\n BridgeReady,\n BridgePush,\n BridgeElectronApi,\n} from '../types/bridge';\n\nconst logger = getLogger('wood:bridge');\n\ninterface PendingCall {\n resolve: (value: unknown) => void;\n reject: (error: Error) => void;\n timer: NodeJS.Timeout;\n}\n\nexport interface BridgeOptions {\n backendEntry: string;\n timeout?: number;\n onReady?: () => void;\n onPush?: (channel: string, data: unknown) => void;\n onElectronApi?: (id: string, api: string, args: unknown[]) => Promise<unknown>;\n onExit?: (code: number | null, signal: string | null) => void;\n}\n\ntype BridgeState = 'stopped' | 'starting' | 'ready' | 'restarting';\n\nexport class BackendBridge {\n private child: ChildProcess | null = null;\n private pending = new Map<string, PendingCall>();\n private readonly options: BridgeOptions;\n private readonly timeoutMs: number;\n private _state: BridgeState = 'stopped';\n\n constructor(options: BridgeOptions) {\n this.options = options;\n this.timeoutMs = options.timeout ?? 30_000;\n }\n\n get state(): BridgeState {\n return this._state;\n }\n\n /** Start the backend process and wait for the ready signal. */\n async start(): Promise<void> {\n this._state = 'starting';\n\n this.child = fork(this.options.backendEntry, [], {\n stdio: ['pipe', 'pipe', 'pipe', 'ipc'],\n });\n\n this.child.on('message', (msg: unknown) => this.onMessage(msg));\n this.child.on('exit', (code, signal) => {\n this._state = 'stopped';\n this.rejectAllPending(new Error('Backend process exited'));\n logger.debug(`backend exited code=${code} signal=${signal}`);\n this.options.onExit?.(code, signal);\n });\n\n this.child.stdout?.pipe(process.stdout);\n this.child.stderr?.pipe(process.stderr);\n\n await this.waitForReady();\n this.options.onReady?.();\n }\n\n /** Stop the backend process gracefully (SIGTERM then SIGKILL). */\n async stop(): Promise<void> {\n if (!this.child || this.child.killed) return;\n\n this._state = 'stopped';\n this.rejectAllPending(new Error('Backend is stopping'));\n\n return new Promise<void>((resolve) => {\n const killTimer = setTimeout(() => {\n if (this.child && !this.child.killed) {\n this.child.kill('SIGKILL');\n logger.warn('backend did not exit in time, sent SIGKILL');\n }\n resolve();\n }, 2000);\n\n this.child!.once('exit', () => {\n clearTimeout(killTimer);\n resolve();\n });\n\n this.child!.kill('SIGTERM');\n });\n }\n\n /** Restart the backend process. */\n async restart(): Promise<void> {\n this._state = 'restarting';\n logger.info('restarting backend');\n await this.stop();\n await this.start();\n }\n\n /** Send a request to the backend and return the result. */\n call(channel: string, data: unknown): Promise<unknown> {\n if (this._state !== 'ready') {\n return Promise.reject(new Error(`Backend not ready (state: ${this._state})`));\n }\n\n const id = crypto.randomUUID();\n\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n this.pending.delete(id);\n reject(new Error(`Backend timeout: ${channel}`));\n }, this.timeoutMs);\n\n this.pending.set(id, { resolve, reject, timer });\n\n this.child!.send({\n type: 'request',\n id,\n channel,\n data,\n } satisfies BridgeRequest);\n\n logger.debug(`call ${id}: ${channel}`);\n });\n }\n\n // -- Private --\n\n private waitForReady(): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n reject(new Error('Backend failed to send ready signal within timeout'));\n }, this.timeoutMs);\n\n const readyHandler = (msg: unknown) => {\n if ((msg as BridgeReady)?.type === 'ready') {\n clearTimeout(timer);\n this.child?.removeListener('message', readyHandler);\n this._state = 'ready';\n logger.info('backend ready');\n resolve();\n }\n };\n\n this.child!.on('message', readyHandler);\n });\n }\n\n private onMessage(msg: unknown): void {\n const message = msg as BridgeResponse | BridgePush | BridgeElectronApi;\n\n if (message.type === 'response') {\n const resp = message as BridgeResponse;\n const entry = this.pending.get(resp.id);\n if (entry) {\n clearTimeout(entry.timer);\n this.pending.delete(resp.id);\n if (resp.error) {\n entry.reject(new Error(resp.error.message ?? 'Backend error'));\n } else {\n entry.resolve(resp.result);\n }\n }\n }\n\n if (message.type === 'push') {\n const push = message as BridgePush;\n this.options.onPush?.(push.channel, push.data);\n }\n\n if (message.type === 'electron-api') {\n this.handleElectronProxy(message as BridgeElectronApi);\n }\n }\n\n private async handleElectronProxy(msg: BridgeElectronApi): Promise<void> {\n if (!this.options.onElectronApi) return;\n\n try {\n const result = await this.options.onElectronApi(msg.id, msg.api, msg.args);\n this.child?.send({\n type: 'electron-api-response',\n id: msg.id,\n result,\n });\n } catch (err: unknown) {\n const error = err instanceof Error ? err : new Error(String(err));\n this.child?.send({\n type: 'electron-api-response',\n id: msg.id,\n error: { message: error.message, name: error.name },\n });\n }\n }\n\n private rejectAllPending(error: Error): void {\n for (const [, entry] of this.pending) {\n clearTimeout(entry.timer);\n entry.reject(error);\n }\n this.pending.clear();\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var backend_entry_exports = {};
20
+ __export(backend_entry_exports, {
21
+ pushEvent: () => pushEvent,
22
+ startBackendLoop: () => startBackendLoop
23
+ });
24
+ module.exports = __toCommonJS(backend_entry_exports);
25
+ function startBackendLoop(handler) {
26
+ process.on("message", async (msg) => {
27
+ const message = msg;
28
+ if (message.type === "request") {
29
+ try {
30
+ const result = await handler.dispatch(message.channel, message.data);
31
+ process.send({
32
+ type: "response",
33
+ id: message.id,
34
+ result
35
+ });
36
+ } catch (err) {
37
+ const error = err instanceof Error ? err : new Error(String(err));
38
+ process.send({
39
+ type: "response",
40
+ id: message.id,
41
+ error: {
42
+ message: error.message,
43
+ name: error.name,
44
+ stack: error.stack
45
+ }
46
+ });
47
+ }
48
+ }
49
+ });
50
+ process.send({ type: "ready" });
51
+ }
52
+ function pushEvent(channel, data) {
53
+ process.send({
54
+ type: "push",
55
+ channel,
56
+ data
57
+ });
58
+ }
59
+ // Annotate the CommonJS export names for ESM import in node:
60
+ 0 && (module.exports = {
61
+ pushEvent,
62
+ startBackendLoop
63
+ });
64
+ //# sourceMappingURL=backend_entry.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/bridge/backend_entry.ts"],"sourcesContent":["import type { BridgeRequest, BridgePush, BridgeResponse, BridgeReady } from '../types/bridge.cjs';\n\nexport interface BackendHandler {\n dispatch(channel: string, data: unknown): Promise<unknown>;\n}\n\n/**\n * Start the backend message loop.\n * Called from the backend entry point after initialization.\n */\nexport function startBackendLoop(handler: BackendHandler): void {\n process.on('message', async (msg: unknown) => {\n const message = msg as BridgeRequest;\n\n if (message.type === 'request') {\n try {\n const result = await handler.dispatch(message.channel, message.data);\n process.send!({\n type: 'response',\n id: message.id,\n result,\n } satisfies BridgeResponse);\n } catch (err: unknown) {\n const error = err instanceof Error ? err : new Error(String(err));\n process.send!({\n type: 'response',\n id: message.id,\n error: {\n message: error.message,\n name: error.name,\n stack: error.stack,\n },\n } satisfies BridgeResponse);\n }\n }\n });\n\n // Signal ready to the shell process\n process.send!({ type: 'ready' } satisfies BridgeReady);\n}\n\n/**\n * Push an event to the shell (forwarded to all renderers).\n */\nexport function pushEvent(channel: string, data: unknown): void {\n process.send!({\n type: 'push',\n channel,\n data,\n } satisfies BridgePush);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUO,SAAS,iBAAiB,SAA+B;AAC9D,UAAQ,GAAG,WAAW,OAAO,QAAiB;AAC5C,UAAM,UAAU;AAEhB,QAAI,QAAQ,SAAS,WAAW;AAC9B,UAAI;AACF,cAAM,SAAS,MAAM,QAAQ,SAAS,QAAQ,SAAS,QAAQ,IAAI;AACnE,gBAAQ,KAAM;AAAA,UACZ,MAAM;AAAA,UACN,IAAI,QAAQ;AAAA,UACZ;AAAA,QACF,CAA0B;AAAA,MAC5B,SAAS,KAAc;AACrB,cAAM,QAAQ,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC;AAChE,gBAAQ,KAAM;AAAA,UACZ,MAAM;AAAA,UACN,IAAI,QAAQ;AAAA,UACZ,OAAO;AAAA,YACL,SAAS,MAAM;AAAA,YACf,MAAM,MAAM;AAAA,YACZ,OAAO,MAAM;AAAA,UACf;AAAA,QACF,CAA0B;AAAA,MAC5B;AAAA,IACF;AAAA,EACF,CAAC;AAGD,UAAQ,KAAM,EAAE,MAAM,QAAQ,CAAuB;AACvD;AAKO,SAAS,UAAU,SAAiB,MAAqB;AAC9D,UAAQ,KAAM;AAAA,IACZ,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF,CAAsB;AACxB;","names":[]}
@@ -0,0 +1,14 @@
1
+ interface BackendHandler {
2
+ dispatch(channel: string, data: unknown): Promise<unknown>;
3
+ }
4
+ /**
5
+ * Start the backend message loop.
6
+ * Called from the backend entry point after initialization.
7
+ */
8
+ declare function startBackendLoop(handler: BackendHandler): void;
9
+ /**
10
+ * Push an event to the shell (forwarded to all renderers).
11
+ */
12
+ declare function pushEvent(channel: string, data: unknown): void;
13
+
14
+ export { type BackendHandler, pushEvent, startBackendLoop };
@@ -0,0 +1,14 @@
1
+ interface BackendHandler {
2
+ dispatch(channel: string, data: unknown): Promise<unknown>;
3
+ }
4
+ /**
5
+ * Start the backend message loop.
6
+ * Called from the backend entry point after initialization.
7
+ */
8
+ declare function startBackendLoop(handler: BackendHandler): void;
9
+ /**
10
+ * Push an event to the shell (forwarded to all renderers).
11
+ */
12
+ declare function pushEvent(channel: string, data: unknown): void;
13
+
14
+ export { type BackendHandler, pushEvent, startBackendLoop };
@@ -0,0 +1,39 @@
1
+ function startBackendLoop(handler) {
2
+ process.on("message", async (msg) => {
3
+ const message = msg;
4
+ if (message.type === "request") {
5
+ try {
6
+ const result = await handler.dispatch(message.channel, message.data);
7
+ process.send({
8
+ type: "response",
9
+ id: message.id,
10
+ result
11
+ });
12
+ } catch (err) {
13
+ const error = err instanceof Error ? err : new Error(String(err));
14
+ process.send({
15
+ type: "response",
16
+ id: message.id,
17
+ error: {
18
+ message: error.message,
19
+ name: error.name,
20
+ stack: error.stack
21
+ }
22
+ });
23
+ }
24
+ }
25
+ });
26
+ process.send({ type: "ready" });
27
+ }
28
+ function pushEvent(channel, data) {
29
+ process.send({
30
+ type: "push",
31
+ channel,
32
+ data
33
+ });
34
+ }
35
+ export {
36
+ pushEvent,
37
+ startBackendLoop
38
+ };
39
+ //# sourceMappingURL=backend_entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/bridge/backend_entry.ts"],"sourcesContent":["import type { BridgeRequest, BridgePush, BridgeResponse, BridgeReady } from '../types/bridge.js';\n\nexport interface BackendHandler {\n dispatch(channel: string, data: unknown): Promise<unknown>;\n}\n\n/**\n * Start the backend message loop.\n * Called from the backend entry point after initialization.\n */\nexport function startBackendLoop(handler: BackendHandler): void {\n process.on('message', async (msg: unknown) => {\n const message = msg as BridgeRequest;\n\n if (message.type === 'request') {\n try {\n const result = await handler.dispatch(message.channel, message.data);\n process.send!({\n type: 'response',\n id: message.id,\n result,\n } satisfies BridgeResponse);\n } catch (err: unknown) {\n const error = err instanceof Error ? err : new Error(String(err));\n process.send!({\n type: 'response',\n id: message.id,\n error: {\n message: error.message,\n name: error.name,\n stack: error.stack,\n },\n } satisfies BridgeResponse);\n }\n }\n });\n\n // Signal ready to the shell process\n process.send!({ type: 'ready' } satisfies BridgeReady);\n}\n\n/**\n * Push an event to the shell (forwarded to all renderers).\n */\nexport function pushEvent(channel: string, data: unknown): void {\n process.send!({\n type: 'push',\n channel,\n data,\n } satisfies BridgePush);\n}\n"],"mappings":"AAUO,SAAS,iBAAiB,SAA+B;AAC9D,UAAQ,GAAG,WAAW,OAAO,QAAiB;AAC5C,UAAM,UAAU;AAEhB,QAAI,QAAQ,SAAS,WAAW;AAC9B,UAAI;AACF,cAAM,SAAS,MAAM,QAAQ,SAAS,QAAQ,SAAS,QAAQ,IAAI;AACnE,gBAAQ,KAAM;AAAA,UACZ,MAAM;AAAA,UACN,IAAI,QAAQ;AAAA,UACZ;AAAA,QACF,CAA0B;AAAA,MAC5B,SAAS,KAAc;AACrB,cAAM,QAAQ,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC;AAChE,gBAAQ,KAAM;AAAA,UACZ,MAAM;AAAA,UACN,IAAI,QAAQ;AAAA,UACZ,OAAO;AAAA,YACL,SAAS,MAAM;AAAA,YACf,MAAM,MAAM;AAAA,YACZ,OAAO,MAAM;AAAA,UACf;AAAA,QACF,CAA0B;AAAA,MAC5B;AAAA,IACF;AAAA,EACF,CAAC;AAGD,UAAQ,KAAM,EAAE,MAAM,QAAQ,CAAuB;AACvD;AAKO,SAAS,UAAU,SAAiB,MAAqB;AAC9D,UAAQ,KAAM;AAAA,IACZ,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF,CAAsB;AACxB;","names":[]}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var bridge_exports = {};
20
+ __export(bridge_exports, {
21
+ BackendBridge: () => import_backend_bridge.BackendBridge,
22
+ pushEvent: () => import_backend_entry.pushEvent,
23
+ startBackendLoop: () => import_backend_entry.startBackendLoop
24
+ });
25
+ module.exports = __toCommonJS(bridge_exports);
26
+ var import_backend_bridge = require("./backend_bridge.cjs");
27
+ var import_backend_entry = require("./backend_entry.cjs");
28
+ // Annotate the CommonJS export names for ESM import in node:
29
+ 0 && (module.exports = {
30
+ BackendBridge,
31
+ pushEvent,
32
+ startBackendLoop
33
+ });
34
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/bridge/index.ts"],"sourcesContent":["export { BackendBridge, type BridgeOptions } from './backend_bridge.cjs';\nexport { startBackendLoop, pushEvent, type BackendHandler } from './backend_entry.cjs';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAkD;AAClD,2BAAiE;","names":[]}
@@ -0,0 +1,2 @@
1
+ export { BackendBridge, BridgeOptions } from './backend_bridge.cjs';
2
+ export { BackendHandler, pushEvent, startBackendLoop } from './backend_entry.cjs';
@@ -0,0 +1,2 @@
1
+ export { BackendBridge, BridgeOptions } from './backend_bridge.js';
2
+ export { BackendHandler, pushEvent, startBackendLoop } from './backend_entry.js';
@@ -0,0 +1,8 @@
1
+ import { BackendBridge } from "./backend_bridge.js";
2
+ import { startBackendLoop, pushEvent } from "./backend_entry.js";
3
+ export {
4
+ BackendBridge,
5
+ pushEvent,
6
+ startBackendLoop
7
+ };
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/bridge/index.ts"],"sourcesContent":["export { BackendBridge, type BridgeOptions } from './backend_bridge.js';\nexport { startBackendLoop, pushEvent, type BackendHandler } from './backend_entry.js';\n"],"mappings":"AAAA,SAAS,qBAAyC;AAClD,SAAS,kBAAkB,iBAAsC;","names":[]}