@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 @@
1
+ {"version":3,"sources":["../../src/dev/wood_dev_server.ts"],"sourcesContent":["import { readFileSync, writeFileSync, mkdirSync } from 'fs';\nimport path from 'path';\nimport { getLogger } from '@noego/logger';\nimport { parseConfig } from '../config/config_parser.js';\nimport { parseOperations } from '../parser/operations_parser.js';\nimport { parseViews } from '../parser/views_parser.js';\nimport { generatePreload } from '../codegen/preload_generator.js';\nimport { generateTypes } from '../codegen/type_generator.js';\nimport { generateTestMock } from '../codegen/test_mock_generator.js';\nimport { generateControllerRegistration } from '../codegen/controller_registration_generator.js';\nimport { generateRuntime } from '../codegen/runtime_generator.js';\nimport { generateRendererApp } from '../codegen/renderer_app_generator.js';\nimport { BackendBridge } from '../bridge/backend_bridge.js';\nimport { BackendWatcher } from './backend_watcher.js';\nimport { YamlWatcher } from './yaml_watcher.js';\nimport { EsbuildBackend } from './esbuild_backend.js';\nimport type { WoodConfig } from '../types/index.js';\n\nconst logger = getLogger('wood:dev');\n\nexport interface DevServerOptions {\n configPath?: string;\n cwd?: string;\n}\n\nexport class WoodDevServer {\n private config: WoodConfig | null = null;\n private bridge: BackendBridge | null = null;\n private backendWatcher: BackendWatcher | null = null;\n private yamlWatcher: YamlWatcher | null = null;\n private esbuild: EsbuildBackend | null = null;\n private cwd: string;\n\n constructor(options: DevServerOptions = {}) {\n this.cwd = options.cwd ?? process.cwd();\n }\n\n /**\n * Start the Wood development server.\n *\n * Automatically sets process.env.WOOD_MODE = 'development' so the app\n * can conditionally use dynamic controller imports (dev) vs pre-registered\n * controllers from the generated file (production).\n *\n * Steps:\n * 1. Parse config\n * 2. Parse + stitch YAML\n * 3. Generate preload, types, mock\n * 4. Build backend with esbuild\n * 5. (electron-vite would be started here -- omitted for MVP)\n * 6. Spawn backend via bridge\n * 7. Start watchers\n */\n async start(): Promise<void> {\n process.env.WOOD_MODE = 'development';\n\n // 1. Parse config\n const configPath = path.resolve(this.cwd, 'wood.config.yml');\n this.config = parseConfig(configPath);\n logger.info('config loaded', { outDir: this.config.outDir });\n\n // 2. Parse operations YAML\n const opsYamlPath = path.resolve(this.cwd, this.config.main.openapi);\n const opsContent = readFileSync(opsYamlPath, 'utf-8');\n const operations = parseOperations(opsContent);\n logger.info('operations parsed', { count: operations.size });\n\n // 3. Parse views YAML\n const viewsYamlPath = path.resolve(this.cwd, this.config.renderer.openapi);\n const viewsContent = readFileSync(viewsYamlPath, 'utf-8');\n const views = parseViews(viewsContent);\n logger.info('views parsed', { count: views.length });\n\n // 4. Generate files\n const outDir = path.resolve(this.cwd, this.config.outDir);\n mkdirSync(outDir, { recursive: true });\n\n const preloadCode = generatePreload(operations);\n writeFileSync(path.join(outDir, 'preload.generated.ts'), preloadCode);\n\n const typesCode = generateTypes(operations);\n writeFileSync(path.join(outDir, 'wood.d.ts'), typesCode);\n\n const mockCode = generateTestMock(operations);\n writeFileSync(path.join(outDir, 'wood.mock.ts'), mockCode);\n\n const controllersDir = path.resolve(this.cwd, this.config.main.controllers);\n const controllerRegCode = generateControllerRegistration(operations, {\n controllersDir,\n outDir,\n });\n writeFileSync(path.join(outDir, 'controllers.generated.ts'), controllerRegCode);\n\n const runtimeCode = generateRuntime(operations, {\n controllersDir,\n outDir,\n });\n writeFileSync(path.join(outDir, 'runtime.generated.ts'), runtimeCode);\n\n const rendererComponentDir = path.resolve(this.cwd, this.config.renderer.componentDir);\n const rendererOutDir = path.resolve(this.cwd, this.config.renderer.componentDir, 'generated');\n mkdirSync(rendererOutDir, { recursive: true });\n\n writeFileSync(\n path.join(rendererOutDir, 'app.ts'),\n generateRendererApp(views, {\n componentDir: rendererComponentDir,\n outDir: rendererOutDir,\n entryViewKey: this.config.renderer.entry,\n }),\n );\n\n logger.info('codegen complete', { outDir });\n\n // 5. Build backend with esbuild (initial build + create incremental context)\n const backendEntry = this.config.main.entry;\n const backendOutfile = path.join(this.config.outDir, 'backend', 'index.js');\n\n this.esbuild = new EsbuildBackend({\n entryPoint: backendEntry,\n outfile: backendOutfile,\n cwd: this.cwd,\n external: this.config.build ? [] : undefined,\n });\n\n await this.esbuild.build();\n await this.esbuild.createContext();\n\n // 6. Start backend bridge (split-serve)\n if (this.config.dev?.splitServe !== false) {\n const resolvedBackendEntry = path.resolve(this.cwd, backendOutfile);\n this.bridge = new BackendBridge({\n backendEntry: resolvedBackendEntry,\n onReady: () => {\n logger.info('backend ready (split-serve)');\n },\n onPush: (channel, data) => {\n logger.debug('backend push', { channel, data });\n },\n onExit: (code, signal) => {\n logger.debug('backend exited', { code, signal });\n },\n });\n await this.bridge.start();\n }\n\n // 7. Start watchers\n if (this.config.dev?.watch !== false) {\n this.startWatchers(outDir);\n }\n }\n\n /** Stop the dev server and clean up all resources. */\n async stop(): Promise<void> {\n this.backendWatcher?.stop();\n this.yamlWatcher?.stop();\n\n if (this.bridge) {\n await this.bridge.stop();\n logger.info('backend bridge stopped');\n }\n\n if (this.esbuild) {\n await this.esbuild.dispose();\n }\n }\n\n /** Get the parsed config. */\n getConfig(): WoodConfig | null {\n return this.config;\n }\n\n private startWatchers(outDir: string): void {\n if (!this.config) return;\n\n // Backend watcher: server + middleware files -> rebuild + restart\n if (this.bridge && this.esbuild) {\n const backendPatterns = [\n `${this.config.main.controllers}/**/*.ts`,\n `${this.config.main.middleware}/**/*.ts`,\n `${this.config.main.entry}`,\n ...(this.config.main.watch ?? []),\n ];\n\n const esbuild = this.esbuild;\n this.backendWatcher = new BackendWatcher({\n patterns: backendPatterns,\n bridge: this.bridge,\n buildFn: () => esbuild.rebuild().then(() => {}),\n cwd: this.cwd,\n });\n this.backendWatcher.start();\n logger.info('backend watcher started', { patterns: backendPatterns });\n }\n\n // YAML watcher: operations + views YAML -> regenerate codegen\n this.yamlWatcher = new YamlWatcher({\n operationsYamlPath: this.config.main.openapi,\n viewsYamlPath: this.config.renderer.openapi,\n controllersDir: this.config.main.controllers,\n outDir,\n cwd: this.cwd,\n onViewsChange: async () => {\n // Re-parse views and regenerate client router manifest\n const viewsContent = readFileSync(\n path.resolve(this.cwd, this.config!.renderer.openapi),\n 'utf-8',\n );\n const views = parseViews(viewsContent);\n\n const rendererComponentDir = path.resolve(this.cwd, this.config!.renderer.componentDir);\n const rendererOutDir = path.resolve(this.cwd, this.config!.renderer.componentDir, 'generated');\n mkdirSync(rendererOutDir, { recursive: true });\n\n writeFileSync(\n path.join(rendererOutDir, 'app.ts'),\n generateRendererApp(views, {\n componentDir: rendererComponentDir,\n outDir: rendererOutDir,\n entryViewKey: this.config!.renderer.entry,\n }),\n );\n\n logger.info('views renderer codegen regenerated', { rendererOutDir });\n },\n });\n this.yamlWatcher.start();\n logger.info('yaml watcher started');\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,142 @@
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, from2, except, desc) => {
13
+ if (from2 && typeof from2 === "object" || typeof from2 === "function") {
14
+ for (let key of __getOwnPropNames(from2))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from2[key], enumerable: !(desc = __getOwnPropDesc(from2, 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 yaml_watcher_exports = {};
30
+ __export(yaml_watcher_exports, {
31
+ YamlWatcher: () => YamlWatcher
32
+ });
33
+ module.exports = __toCommonJS(yaml_watcher_exports);
34
+ var import_chokidar = require("chokidar");
35
+ var import_rxjs = require("rxjs");
36
+ var import_fs = require("fs");
37
+ var import_path = __toESM(require("path"), 1);
38
+ var import_logger = require("@noego/logger");
39
+ var import_operations_parser = require("../parser/operations_parser.cjs");
40
+ var import_preload_generator = require("../codegen/preload_generator.cjs");
41
+ var import_type_generator = require("../codegen/type_generator.cjs");
42
+ var import_test_mock_generator = require("../codegen/test_mock_generator.cjs");
43
+ var import_controller_registration_generator = require("../codegen/controller_registration_generator.cjs");
44
+ var import_runtime_generator = require("../codegen/runtime_generator.cjs");
45
+ const logger = (0, import_logger.getLogger)("wood:dev:yaml-watcher");
46
+ class YamlWatcher {
47
+ constructor(options) {
48
+ this.options = options;
49
+ this.watcher = null;
50
+ this.change$ = new import_rxjs.Subject();
51
+ }
52
+ start() {
53
+ const patterns = [
54
+ this.options.operationsYamlPath,
55
+ this.options.viewsYamlPath,
56
+ import_path.default.dirname(this.options.operationsYamlPath) + "/**/*.yaml",
57
+ import_path.default.dirname(this.options.operationsYamlPath) + "/**/*.yml",
58
+ import_path.default.dirname(this.options.viewsYamlPath) + "/**/*.yaml",
59
+ import_path.default.dirname(this.options.viewsYamlPath) + "/**/*.yml"
60
+ ];
61
+ this.watcher = (0, import_chokidar.watch)(patterns, {
62
+ cwd: this.options.cwd,
63
+ ignoreInitial: true
64
+ });
65
+ this.watcher.on("change", (filePath) => {
66
+ logger.debug("yaml file changed", { filePath });
67
+ this.change$.next(filePath);
68
+ });
69
+ this.change$.pipe(
70
+ (0, import_rxjs.debounceTime)(100),
71
+ (0, import_rxjs.switchMap)((filePath) => (0, import_rxjs.from)(this.regenerate(filePath)))
72
+ ).subscribe({
73
+ error: (err) => {
74
+ logger.error("yaml watcher pipeline error", { error: String(err) });
75
+ }
76
+ });
77
+ }
78
+ stop() {
79
+ this.watcher?.close();
80
+ this.change$.complete();
81
+ }
82
+ isOperationsYaml(filePath) {
83
+ const opsDir = import_path.default.dirname(this.options.operationsYamlPath);
84
+ return filePath.startsWith(opsDir) || filePath === this.options.operationsYamlPath;
85
+ }
86
+ isViewsYaml(filePath) {
87
+ const viewsDir = import_path.default.dirname(this.options.viewsYamlPath);
88
+ return filePath.startsWith(viewsDir) || filePath === this.options.viewsYamlPath;
89
+ }
90
+ async regenerate(filePath) {
91
+ try {
92
+ if (this.isOperationsYaml(filePath)) {
93
+ const opsContent = (0, import_fs.readFileSync)(
94
+ import_path.default.resolve(this.options.cwd, this.options.operationsYamlPath),
95
+ "utf-8"
96
+ );
97
+ const operations = (0, import_operations_parser.parseOperations)(opsContent);
98
+ (0, import_fs.writeFileSync)(
99
+ import_path.default.join(this.options.outDir, "preload.generated.ts"),
100
+ (0, import_preload_generator.generatePreload)(operations)
101
+ );
102
+ (0, import_fs.writeFileSync)(
103
+ import_path.default.join(this.options.outDir, "wood.d.ts"),
104
+ (0, import_type_generator.generateTypes)(operations)
105
+ );
106
+ (0, import_fs.writeFileSync)(
107
+ import_path.default.join(this.options.outDir, "wood.mock.ts"),
108
+ (0, import_test_mock_generator.generateTestMock)(operations)
109
+ );
110
+ const controllersDir = import_path.default.resolve(this.options.cwd, this.options.controllersDir);
111
+ (0, import_fs.writeFileSync)(
112
+ import_path.default.join(this.options.outDir, "controllers.generated.ts"),
113
+ (0, import_controller_registration_generator.generateControllerRegistration)(operations, {
114
+ controllersDir,
115
+ outDir: this.options.outDir
116
+ })
117
+ );
118
+ (0, import_fs.writeFileSync)(
119
+ import_path.default.join(this.options.outDir, "runtime.generated.ts"),
120
+ (0, import_runtime_generator.generateRuntime)(operations, {
121
+ controllersDir,
122
+ outDir: this.options.outDir
123
+ })
124
+ );
125
+ logger.info("operations codegen regenerated");
126
+ }
127
+ if (this.isViewsYaml(filePath)) {
128
+ if (this.options.onViewsChange) {
129
+ await this.options.onViewsChange();
130
+ }
131
+ logger.info("views manifest regenerated");
132
+ }
133
+ } catch (err) {
134
+ logger.error("yaml regeneration failed", { error: String(err) });
135
+ }
136
+ }
137
+ }
138
+ // Annotate the CommonJS export names for ESM import in node:
139
+ 0 && (module.exports = {
140
+ YamlWatcher
141
+ });
142
+ //# sourceMappingURL=yaml_watcher.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dev/yaml_watcher.ts"],"sourcesContent":["import { watch, type FSWatcher } from 'chokidar';\nimport { Subject, debounceTime, switchMap, from } from 'rxjs';\nimport { readFileSync, writeFileSync } from 'fs';\nimport path from 'path';\nimport { getLogger } from '@noego/logger';\nimport { parseOperations } from '../parser/operations_parser.cjs';\nimport { generatePreload } from '../codegen/preload_generator.cjs';\nimport { generateTypes } from '../codegen/type_generator.cjs';\nimport { generateTestMock } from '../codegen/test_mock_generator.cjs';\nimport { generateControllerRegistration } from '../codegen/controller_registration_generator.cjs';\nimport { generateRuntime } from '../codegen/runtime_generator.cjs';\n\nconst logger = getLogger('wood:dev:yaml-watcher');\n\nexport interface YamlWatcherOptions {\n operationsYamlPath: string;\n viewsYamlPath: string;\n controllersDir: string;\n outDir: string;\n cwd: string;\n /** Called after views YAML changes to regenerate the client router manifest. */\n onViewsChange?: () => Promise<void>;\n}\n\nexport class YamlWatcher {\n private watcher: FSWatcher | null = null;\n private change$ = new Subject<string>();\n\n constructor(private options: YamlWatcherOptions) {}\n\n start(): void {\n const patterns = [\n this.options.operationsYamlPath,\n this.options.viewsYamlPath,\n path.dirname(this.options.operationsYamlPath) + '/**/*.yaml',\n path.dirname(this.options.operationsYamlPath) + '/**/*.yml',\n path.dirname(this.options.viewsYamlPath) + '/**/*.yaml',\n path.dirname(this.options.viewsYamlPath) + '/**/*.yml',\n ];\n\n this.watcher = watch(patterns, {\n cwd: this.options.cwd,\n ignoreInitial: true,\n });\n\n this.watcher.on('change', (filePath: string) => {\n logger.debug('yaml file changed', { filePath });\n this.change$.next(filePath);\n });\n\n this.change$.pipe(\n debounceTime(100),\n switchMap((filePath) => from(this.regenerate(filePath))),\n ).subscribe({\n error: (err) => {\n logger.error('yaml 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 isOperationsYaml(filePath: string): boolean {\n const opsDir = path.dirname(this.options.operationsYamlPath);\n return filePath.startsWith(opsDir) || filePath === this.options.operationsYamlPath;\n }\n\n private isViewsYaml(filePath: string): boolean {\n const viewsDir = path.dirname(this.options.viewsYamlPath);\n return filePath.startsWith(viewsDir) || filePath === this.options.viewsYamlPath;\n }\n\n private async regenerate(filePath: string): Promise<void> {\n try {\n if (this.isOperationsYaml(filePath)) {\n // Operations change -> regenerate preload + types + mock\n const opsContent = readFileSync(\n path.resolve(this.options.cwd, this.options.operationsYamlPath),\n 'utf-8',\n );\n const operations = parseOperations(opsContent);\n\n writeFileSync(\n path.join(this.options.outDir, 'preload.generated.ts'),\n generatePreload(operations),\n );\n writeFileSync(\n path.join(this.options.outDir, 'wood.d.ts'),\n generateTypes(operations),\n );\n writeFileSync(\n path.join(this.options.outDir, 'wood.mock.ts'),\n generateTestMock(operations),\n );\n\n const controllersDir = path.resolve(this.options.cwd, this.options.controllersDir);\n writeFileSync(\n path.join(this.options.outDir, 'controllers.generated.ts'),\n generateControllerRegistration(operations, {\n controllersDir,\n outDir: this.options.outDir,\n }),\n );\n\n writeFileSync(\n path.join(this.options.outDir, 'runtime.generated.ts'),\n generateRuntime(operations, {\n controllersDir,\n outDir: this.options.outDir,\n }),\n );\n\n logger.info('operations codegen regenerated');\n }\n\n if (this.isViewsYaml(filePath)) {\n // Views change -> regenerate client router manifest\n if (this.options.onViewsChange) {\n await this.options.onViewsChange();\n }\n\n logger.info('views manifest regenerated');\n }\n } catch (err) {\n logger.error('yaml regeneration failed', { error: String(err) });\n }\n }\n}\n"],"mappings":"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","names":["path"]}
@@ -0,0 +1,22 @@
1
+ interface YamlWatcherOptions {
2
+ operationsYamlPath: string;
3
+ viewsYamlPath: string;
4
+ controllersDir: string;
5
+ outDir: string;
6
+ cwd: string;
7
+ /** Called after views YAML changes to regenerate the client router manifest. */
8
+ onViewsChange?: () => Promise<void>;
9
+ }
10
+ declare class YamlWatcher {
11
+ private options;
12
+ private watcher;
13
+ private change$;
14
+ constructor(options: YamlWatcherOptions);
15
+ start(): void;
16
+ stop(): void;
17
+ private isOperationsYaml;
18
+ private isViewsYaml;
19
+ private regenerate;
20
+ }
21
+
22
+ export { YamlWatcher, type YamlWatcherOptions };
@@ -0,0 +1,22 @@
1
+ interface YamlWatcherOptions {
2
+ operationsYamlPath: string;
3
+ viewsYamlPath: string;
4
+ controllersDir: string;
5
+ outDir: string;
6
+ cwd: string;
7
+ /** Called after views YAML changes to regenerate the client router manifest. */
8
+ onViewsChange?: () => Promise<void>;
9
+ }
10
+ declare class YamlWatcher {
11
+ private options;
12
+ private watcher;
13
+ private change$;
14
+ constructor(options: YamlWatcherOptions);
15
+ start(): void;
16
+ stop(): void;
17
+ private isOperationsYaml;
18
+ private isViewsYaml;
19
+ private regenerate;
20
+ }
21
+
22
+ export { YamlWatcher, type YamlWatcherOptions };
@@ -0,0 +1,108 @@
1
+ import { watch } from "chokidar";
2
+ import { Subject, debounceTime, switchMap, from } from "rxjs";
3
+ import { readFileSync, writeFileSync } from "fs";
4
+ import path from "path";
5
+ import { getLogger } from "@noego/logger";
6
+ import { parseOperations } from "../parser/operations_parser.js";
7
+ import { generatePreload } from "../codegen/preload_generator.js";
8
+ import { generateTypes } from "../codegen/type_generator.js";
9
+ import { generateTestMock } from "../codegen/test_mock_generator.js";
10
+ import { generateControllerRegistration } from "../codegen/controller_registration_generator.js";
11
+ import { generateRuntime } from "../codegen/runtime_generator.js";
12
+ const logger = getLogger("wood:dev:yaml-watcher");
13
+ class YamlWatcher {
14
+ constructor(options) {
15
+ this.options = options;
16
+ this.watcher = null;
17
+ this.change$ = new Subject();
18
+ }
19
+ start() {
20
+ const patterns = [
21
+ this.options.operationsYamlPath,
22
+ this.options.viewsYamlPath,
23
+ path.dirname(this.options.operationsYamlPath) + "/**/*.yaml",
24
+ path.dirname(this.options.operationsYamlPath) + "/**/*.yml",
25
+ path.dirname(this.options.viewsYamlPath) + "/**/*.yaml",
26
+ path.dirname(this.options.viewsYamlPath) + "/**/*.yml"
27
+ ];
28
+ this.watcher = watch(patterns, {
29
+ cwd: this.options.cwd,
30
+ ignoreInitial: true
31
+ });
32
+ this.watcher.on("change", (filePath) => {
33
+ logger.debug("yaml file changed", { filePath });
34
+ this.change$.next(filePath);
35
+ });
36
+ this.change$.pipe(
37
+ debounceTime(100),
38
+ switchMap((filePath) => from(this.regenerate(filePath)))
39
+ ).subscribe({
40
+ error: (err) => {
41
+ logger.error("yaml watcher pipeline error", { error: String(err) });
42
+ }
43
+ });
44
+ }
45
+ stop() {
46
+ this.watcher?.close();
47
+ this.change$.complete();
48
+ }
49
+ isOperationsYaml(filePath) {
50
+ const opsDir = path.dirname(this.options.operationsYamlPath);
51
+ return filePath.startsWith(opsDir) || filePath === this.options.operationsYamlPath;
52
+ }
53
+ isViewsYaml(filePath) {
54
+ const viewsDir = path.dirname(this.options.viewsYamlPath);
55
+ return filePath.startsWith(viewsDir) || filePath === this.options.viewsYamlPath;
56
+ }
57
+ async regenerate(filePath) {
58
+ try {
59
+ if (this.isOperationsYaml(filePath)) {
60
+ const opsContent = readFileSync(
61
+ path.resolve(this.options.cwd, this.options.operationsYamlPath),
62
+ "utf-8"
63
+ );
64
+ const operations = parseOperations(opsContent);
65
+ writeFileSync(
66
+ path.join(this.options.outDir, "preload.generated.ts"),
67
+ generatePreload(operations)
68
+ );
69
+ writeFileSync(
70
+ path.join(this.options.outDir, "wood.d.ts"),
71
+ generateTypes(operations)
72
+ );
73
+ writeFileSync(
74
+ path.join(this.options.outDir, "wood.mock.ts"),
75
+ generateTestMock(operations)
76
+ );
77
+ const controllersDir = path.resolve(this.options.cwd, this.options.controllersDir);
78
+ writeFileSync(
79
+ path.join(this.options.outDir, "controllers.generated.ts"),
80
+ generateControllerRegistration(operations, {
81
+ controllersDir,
82
+ outDir: this.options.outDir
83
+ })
84
+ );
85
+ writeFileSync(
86
+ path.join(this.options.outDir, "runtime.generated.ts"),
87
+ generateRuntime(operations, {
88
+ controllersDir,
89
+ outDir: this.options.outDir
90
+ })
91
+ );
92
+ logger.info("operations codegen regenerated");
93
+ }
94
+ if (this.isViewsYaml(filePath)) {
95
+ if (this.options.onViewsChange) {
96
+ await this.options.onViewsChange();
97
+ }
98
+ logger.info("views manifest regenerated");
99
+ }
100
+ } catch (err) {
101
+ logger.error("yaml regeneration failed", { error: String(err) });
102
+ }
103
+ }
104
+ }
105
+ export {
106
+ YamlWatcher
107
+ };
108
+ //# sourceMappingURL=yaml_watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dev/yaml_watcher.ts"],"sourcesContent":["import { watch, type FSWatcher } from 'chokidar';\nimport { Subject, debounceTime, switchMap, from } from 'rxjs';\nimport { readFileSync, writeFileSync } from 'fs';\nimport path from 'path';\nimport { getLogger } from '@noego/logger';\nimport { parseOperations } from '../parser/operations_parser.js';\nimport { generatePreload } from '../codegen/preload_generator.js';\nimport { generateTypes } from '../codegen/type_generator.js';\nimport { generateTestMock } from '../codegen/test_mock_generator.js';\nimport { generateControllerRegistration } from '../codegen/controller_registration_generator.js';\nimport { generateRuntime } from '../codegen/runtime_generator.js';\n\nconst logger = getLogger('wood:dev:yaml-watcher');\n\nexport interface YamlWatcherOptions {\n operationsYamlPath: string;\n viewsYamlPath: string;\n controllersDir: string;\n outDir: string;\n cwd: string;\n /** Called after views YAML changes to regenerate the client router manifest. */\n onViewsChange?: () => Promise<void>;\n}\n\nexport class YamlWatcher {\n private watcher: FSWatcher | null = null;\n private change$ = new Subject<string>();\n\n constructor(private options: YamlWatcherOptions) {}\n\n start(): void {\n const patterns = [\n this.options.operationsYamlPath,\n this.options.viewsYamlPath,\n path.dirname(this.options.operationsYamlPath) + '/**/*.yaml',\n path.dirname(this.options.operationsYamlPath) + '/**/*.yml',\n path.dirname(this.options.viewsYamlPath) + '/**/*.yaml',\n path.dirname(this.options.viewsYamlPath) + '/**/*.yml',\n ];\n\n this.watcher = watch(patterns, {\n cwd: this.options.cwd,\n ignoreInitial: true,\n });\n\n this.watcher.on('change', (filePath: string) => {\n logger.debug('yaml file changed', { filePath });\n this.change$.next(filePath);\n });\n\n this.change$.pipe(\n debounceTime(100),\n switchMap((filePath) => from(this.regenerate(filePath))),\n ).subscribe({\n error: (err) => {\n logger.error('yaml 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 isOperationsYaml(filePath: string): boolean {\n const opsDir = path.dirname(this.options.operationsYamlPath);\n return filePath.startsWith(opsDir) || filePath === this.options.operationsYamlPath;\n }\n\n private isViewsYaml(filePath: string): boolean {\n const viewsDir = path.dirname(this.options.viewsYamlPath);\n return filePath.startsWith(viewsDir) || filePath === this.options.viewsYamlPath;\n }\n\n private async regenerate(filePath: string): Promise<void> {\n try {\n if (this.isOperationsYaml(filePath)) {\n // Operations change -> regenerate preload + types + mock\n const opsContent = readFileSync(\n path.resolve(this.options.cwd, this.options.operationsYamlPath),\n 'utf-8',\n );\n const operations = parseOperations(opsContent);\n\n writeFileSync(\n path.join(this.options.outDir, 'preload.generated.ts'),\n generatePreload(operations),\n );\n writeFileSync(\n path.join(this.options.outDir, 'wood.d.ts'),\n generateTypes(operations),\n );\n writeFileSync(\n path.join(this.options.outDir, 'wood.mock.ts'),\n generateTestMock(operations),\n );\n\n const controllersDir = path.resolve(this.options.cwd, this.options.controllersDir);\n writeFileSync(\n path.join(this.options.outDir, 'controllers.generated.ts'),\n generateControllerRegistration(operations, {\n controllersDir,\n outDir: this.options.outDir,\n }),\n );\n\n writeFileSync(\n path.join(this.options.outDir, 'runtime.generated.ts'),\n generateRuntime(operations, {\n controllersDir,\n outDir: this.options.outDir,\n }),\n );\n\n logger.info('operations codegen regenerated');\n }\n\n if (this.isViewsYaml(filePath)) {\n // Views change -> regenerate client router manifest\n if (this.options.onViewsChange) {\n await this.options.onViewsChange();\n }\n\n logger.info('views manifest regenerated');\n }\n } catch (err) {\n logger.error('yaml regeneration failed', { error: String(err) });\n }\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,176 @@
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 electron_exports = {};
20
+ __export(electron_exports, {
21
+ BrowserWindow: () => BrowserWindow,
22
+ Menu: () => Menu,
23
+ MenuItem: () => MenuItem,
24
+ Tray: () => Tray,
25
+ app: () => app,
26
+ bridgeCall: () => bridgeCall,
27
+ dialog: () => dialog,
28
+ globalShortcut: () => globalShortcut,
29
+ isForkProcess: () => isForkProcess,
30
+ isMainProcess: () => isMainProcess,
31
+ nativeTheme: () => nativeTheme,
32
+ safeStorage: () => safeStorage,
33
+ shell: () => shell
34
+ });
35
+ module.exports = __toCommonJS(electron_exports);
36
+ var import_logger = require("@noego/logger");
37
+ const logger = (0, import_logger.getLogger)("wood:electron");
38
+ const isElectronMain = !!(typeof process !== "undefined" && process.versions && process.versions.electron && typeof process.send === "undefined");
39
+ const pendingCalls = /* @__PURE__ */ new Map();
40
+ let callId = 0;
41
+ function bridgeCall(api, args) {
42
+ if (isElectronMain) {
43
+ throw new Error("bridgeCall should not be used in Electron main process");
44
+ }
45
+ const id = `electron-api-${++callId}`;
46
+ return new Promise((resolve, reject) => {
47
+ pendingCalls.set(id, { resolve, reject });
48
+ const message = {
49
+ type: "electron-api",
50
+ id,
51
+ api,
52
+ args: args !== void 0 ? [args] : []
53
+ };
54
+ process.send(message);
55
+ logger.debug(`bridge call ${id}: ${api}`);
56
+ });
57
+ }
58
+ if (!isElectronMain && typeof process.on === "function") {
59
+ process.on("message", (msg) => {
60
+ const m = msg;
61
+ if (m?.type === "electron-api-response" && typeof m.id === "string") {
62
+ const pending = pendingCalls.get(m.id);
63
+ if (pending) {
64
+ pendingCalls.delete(m.id);
65
+ if (m.error) {
66
+ const err = m.error;
67
+ pending.reject(new Error(err.message ?? "Electron API error"));
68
+ } else {
69
+ pending.resolve(m.result);
70
+ }
71
+ }
72
+ }
73
+ });
74
+ }
75
+ const pathCache = /* @__PURE__ */ new Map();
76
+ let _dialog;
77
+ let _shell;
78
+ let _safeStorage;
79
+ let _nativeTheme;
80
+ let _app;
81
+ let _globalShortcut;
82
+ let _Tray;
83
+ let _Menu;
84
+ let _MenuItem;
85
+ let _BrowserWindow;
86
+ if (isElectronMain) {
87
+ const electron = require("electron");
88
+ _dialog = electron.dialog;
89
+ _shell = electron.shell;
90
+ _safeStorage = electron.safeStorage;
91
+ _nativeTheme = electron.nativeTheme;
92
+ _app = electron.app;
93
+ _globalShortcut = electron.globalShortcut;
94
+ _Tray = electron.Tray;
95
+ _Menu = electron.Menu;
96
+ _MenuItem = electron.MenuItem;
97
+ _BrowserWindow = electron.BrowserWindow;
98
+ logger.info("using real Electron APIs (main process)");
99
+ } else {
100
+ _dialog = {
101
+ showOpenDialog: (options) => bridgeCall("dialog.showOpenDialog", options),
102
+ showSaveDialog: (options) => bridgeCall("dialog.showSaveDialog", options),
103
+ showMessageBox: (options) => bridgeCall("dialog.showMessageBox", options)
104
+ };
105
+ _shell = {
106
+ openExternal: (url) => bridgeCall("shell.openExternal", url),
107
+ openPath: (p) => bridgeCall("shell.openPath", p)
108
+ };
109
+ _safeStorage = {
110
+ encryptString: (str) => bridgeCall("safeStorage.encryptString", str),
111
+ decryptString: (buf) => bridgeCall("safeStorage.decryptString", buf),
112
+ isEncryptionAvailable: () => bridgeCall("safeStorage.isEncryptionAvailable")
113
+ };
114
+ _nativeTheme = {
115
+ get shouldUseDarkColors() {
116
+ return bridgeCall("nativeTheme.shouldUseDarkColors");
117
+ }
118
+ };
119
+ _app = {
120
+ getPath: (name) => {
121
+ if (pathCache.has(name)) {
122
+ return Promise.resolve(pathCache.get(name));
123
+ }
124
+ return bridgeCall("app.getPath", name);
125
+ },
126
+ /** Allow shell to populate path cache at startup */
127
+ __setPathCache: (paths) => {
128
+ for (const [name, value] of Object.entries(paths)) {
129
+ pathCache.set(name, value);
130
+ }
131
+ }
132
+ };
133
+ _globalShortcut = {
134
+ register: (accelerator, _callback) => bridgeCall("globalShortcut.register", accelerator),
135
+ unregister: (accelerator) => bridgeCall("globalShortcut.unregister", accelerator),
136
+ unregisterAll: () => bridgeCall("globalShortcut.unregisterAll")
137
+ };
138
+ _Tray = null;
139
+ _Menu = null;
140
+ _MenuItem = null;
141
+ _BrowserWindow = null;
142
+ logger.info("using bridge proxies (fork process)");
143
+ }
144
+ const dialog = _dialog;
145
+ const shell = _shell;
146
+ const safeStorage = _safeStorage;
147
+ const nativeTheme = _nativeTheme;
148
+ const app = _app;
149
+ const globalShortcut = _globalShortcut;
150
+ const Tray = _Tray;
151
+ const Menu = _Menu;
152
+ const MenuItem = _MenuItem;
153
+ const BrowserWindow = _BrowserWindow;
154
+ function isMainProcess() {
155
+ return isElectronMain;
156
+ }
157
+ function isForkProcess() {
158
+ return !isElectronMain && typeof process.send === "function";
159
+ }
160
+ // Annotate the CommonJS export names for ESM import in node:
161
+ 0 && (module.exports = {
162
+ BrowserWindow,
163
+ Menu,
164
+ MenuItem,
165
+ Tray,
166
+ app,
167
+ bridgeCall,
168
+ dialog,
169
+ globalShortcut,
170
+ isForkProcess,
171
+ isMainProcess,
172
+ nativeTheme,
173
+ safeStorage,
174
+ shell
175
+ });
176
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/electron/index.ts"],"sourcesContent":["/**\n * @noego/wood/electron — Runtime-adaptive Electron API exports\n *\n * In production (single Electron process): re-exports real Electron APIs\n * In dev split-serve (Node.js fork): exports proxies that call through the bridge\n *\n * Controllers import from '@noego/wood/electron' and get the right implementation.\n */\n\nimport { getLogger } from '@noego/logger';\nimport type { BridgeElectronApi } from '../types/bridge.js';\n\nconst logger = getLogger('wood:electron');\n\n// Detection: real Electron main = has electron version AND no parent IPC (process.send)\nconst isElectronMain = !!(\n typeof process !== 'undefined' &&\n process.versions &&\n (process.versions as Record<string, string | undefined>).electron &&\n typeof process.send === 'undefined'\n);\n\n// ---- Bridge call helper for Node.js fork mode ----\n\nconst pendingCalls = new Map<string, { resolve: (v: unknown) => void; reject: (e: Error) => void }>();\nlet callId = 0;\n\n/**\n * Send an Electron API call through the bridge to the shell process.\n * Only valid in Node.js fork mode (dev split-serve).\n */\nexport function bridgeCall(api: string, args?: unknown): Promise<unknown> {\n if (isElectronMain) {\n throw new Error('bridgeCall should not be used in Electron main process');\n }\n\n const id = `electron-api-${++callId}`;\n return new Promise((resolve, reject) => {\n pendingCalls.set(id, { resolve, reject });\n\n const message: BridgeElectronApi = {\n type: 'electron-api',\n id,\n api,\n args: args !== undefined ? [args] : [],\n };\n\n process.send!(message);\n logger.debug(`bridge call ${id}: ${api}`);\n });\n}\n\n// Handle bridge responses in fork mode\nif (!isElectronMain && typeof process.on === 'function') {\n process.on('message', (msg: unknown) => {\n const m = msg as Record<string, unknown> | null;\n if (m?.type === 'electron-api-response' && typeof m.id === 'string') {\n const pending = pendingCalls.get(m.id);\n if (pending) {\n pendingCalls.delete(m.id);\n if (m.error) {\n const err = m.error as { message?: string };\n pending.reject(new Error(err.message ?? 'Electron API error'));\n } else {\n pending.resolve(m.result);\n }\n }\n }\n });\n}\n\n// ---- Path cache for app.getPath optimization ----\n\nconst pathCache = new Map<string, string>();\n\n// ---- Exports ----\n\nlet _dialog: any;\nlet _shell: any;\nlet _safeStorage: any;\nlet _nativeTheme: any;\nlet _app: any;\nlet _globalShortcut: any;\nlet _Tray: any;\nlet _Menu: any;\nlet _MenuItem: any;\nlet _BrowserWindow: any;\n\nif (isElectronMain) {\n // Production: re-export real Electron\n const electron = require('electron');\n _dialog = electron.dialog;\n _shell = electron.shell;\n _safeStorage = electron.safeStorage;\n _nativeTheme = electron.nativeTheme;\n _app = electron.app;\n _globalShortcut = electron.globalShortcut;\n _Tray = electron.Tray;\n _Menu = electron.Menu;\n _MenuItem = electron.MenuItem;\n _BrowserWindow = electron.BrowserWindow;\n\n logger.info('using real Electron APIs (main process)');\n} else {\n // Dev fork: export proxies\n _dialog = {\n showOpenDialog: (options: unknown) => bridgeCall('dialog.showOpenDialog', options),\n showSaveDialog: (options: unknown) => bridgeCall('dialog.showSaveDialog', options),\n showMessageBox: (options: unknown) => bridgeCall('dialog.showMessageBox', options),\n };\n\n _shell = {\n openExternal: (url: string) => bridgeCall('shell.openExternal', url),\n openPath: (p: string) => bridgeCall('shell.openPath', p),\n };\n\n _safeStorage = {\n encryptString: (str: string) => bridgeCall('safeStorage.encryptString', str),\n decryptString: (buf: unknown) => bridgeCall('safeStorage.decryptString', buf),\n isEncryptionAvailable: () => bridgeCall('safeStorage.isEncryptionAvailable'),\n };\n\n _nativeTheme = {\n get shouldUseDarkColors() {\n // Note: async in proxy mode, unlike the sync Electron API\n return bridgeCall('nativeTheme.shouldUseDarkColors');\n },\n };\n\n _app = {\n getPath: (name: string) => {\n // Check cache first (pre-resolved by shell at startup)\n if (pathCache.has(name)) {\n return Promise.resolve(pathCache.get(name));\n }\n return bridgeCall('app.getPath', name);\n },\n /** Allow shell to populate path cache at startup */\n __setPathCache: (paths: Record<string, string>) => {\n for (const [name, value] of Object.entries(paths)) {\n pathCache.set(name, value);\n }\n },\n };\n\n _globalShortcut = {\n register: (accelerator: string, _callback: () => void) =>\n bridgeCall('globalShortcut.register', accelerator),\n unregister: (accelerator: string) =>\n bridgeCall('globalShortcut.unregister', accelerator),\n unregisterAll: () => bridgeCall('globalShortcut.unregisterAll'),\n };\n\n // These classes require direct Electron main process access and are not\n // proxiable in fork mode.\n _Tray = null;\n _Menu = null;\n _MenuItem = null;\n _BrowserWindow = null;\n\n logger.info('using bridge proxies (fork process)');\n}\n\nexport const dialog = _dialog;\nexport const shell = _shell;\nexport const safeStorage = _safeStorage;\nexport const nativeTheme = _nativeTheme;\nexport const app = _app;\nexport const globalShortcut = _globalShortcut;\nexport const Tray = _Tray;\nexport const Menu = _Menu;\nexport const MenuItem = _MenuItem;\nexport const BrowserWindow = _BrowserWindow;\n\n/** Check if running in real Electron main process */\nexport function isMainProcess(): boolean {\n return isElectronMain;\n}\n\n/** Check if running in Node.js fork (dev split-serve) */\nexport function isForkProcess(): boolean {\n return !isElectronMain && typeof process.send === 'function';\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @noego/wood/electron — Runtime-adaptive Electron API exports
3
+ *
4
+ * In production (single Electron process): re-exports real Electron APIs
5
+ * In dev split-serve (Node.js fork): exports proxies that call through the bridge
6
+ *
7
+ * Controllers import from '@noego/wood/electron' and get the right implementation.
8
+ */
9
+ /**
10
+ * Send an Electron API call through the bridge to the shell process.
11
+ * Only valid in Node.js fork mode (dev split-serve).
12
+ */
13
+ declare function bridgeCall(api: string, args?: unknown): Promise<unknown>;
14
+ declare const dialog: any;
15
+ declare const shell: any;
16
+ declare const safeStorage: any;
17
+ declare const nativeTheme: any;
18
+ declare const app: any;
19
+ declare const globalShortcut: any;
20
+ declare const Tray: any;
21
+ declare const Menu: any;
22
+ declare const MenuItem: any;
23
+ declare const BrowserWindow: any;
24
+ /** Check if running in real Electron main process */
25
+ declare function isMainProcess(): boolean;
26
+ /** Check if running in Node.js fork (dev split-serve) */
27
+ declare function isForkProcess(): boolean;
28
+
29
+ export { BrowserWindow, Menu, MenuItem, Tray, app, bridgeCall, dialog, globalShortcut, isForkProcess, isMainProcess, nativeTheme, safeStorage, shell };
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @noego/wood/electron — Runtime-adaptive Electron API exports
3
+ *
4
+ * In production (single Electron process): re-exports real Electron APIs
5
+ * In dev split-serve (Node.js fork): exports proxies that call through the bridge
6
+ *
7
+ * Controllers import from '@noego/wood/electron' and get the right implementation.
8
+ */
9
+ /**
10
+ * Send an Electron API call through the bridge to the shell process.
11
+ * Only valid in Node.js fork mode (dev split-serve).
12
+ */
13
+ declare function bridgeCall(api: string, args?: unknown): Promise<unknown>;
14
+ declare const dialog: any;
15
+ declare const shell: any;
16
+ declare const safeStorage: any;
17
+ declare const nativeTheme: any;
18
+ declare const app: any;
19
+ declare const globalShortcut: any;
20
+ declare const Tray: any;
21
+ declare const Menu: any;
22
+ declare const MenuItem: any;
23
+ declare const BrowserWindow: any;
24
+ /** Check if running in real Electron main process */
25
+ declare function isMainProcess(): boolean;
26
+ /** Check if running in Node.js fork (dev split-serve) */
27
+ declare function isForkProcess(): boolean;
28
+
29
+ export { BrowserWindow, Menu, MenuItem, Tray, app, bridgeCall, dialog, globalShortcut, isForkProcess, isMainProcess, nativeTheme, safeStorage, shell };