@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,57 @@
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 dev_exports = {};
20
+ __export(dev_exports, {
21
+ BackendWatcher: () => import_backend_watcher.BackendWatcher,
22
+ DEFAULT_WOOD_REMOTE_DEBUGGING_PORT: () => import_dev_metadata.DEFAULT_WOOD_REMOTE_DEBUGGING_PORT,
23
+ EsbuildBackend: () => import_esbuild_backend.EsbuildBackend,
24
+ WOOD_DEV_DIRECTORY: () => import_dev_metadata.WOOD_DEV_DIRECTORY,
25
+ WOOD_DEV_METADATA_BASENAME: () => import_dev_metadata.WOOD_DEV_METADATA_BASENAME,
26
+ WoodDevServer: () => import_wood_dev_server.WoodDevServer,
27
+ YamlWatcher: () => import_yaml_watcher.YamlWatcher,
28
+ readWoodDevMetadata: () => import_dev_metadata.readWoodDevMetadata,
29
+ removeWoodDevMetadata: () => import_dev_metadata.removeWoodDevMetadata,
30
+ resolveWoodDevDirectory: () => import_dev_metadata.resolveWoodDevDirectory,
31
+ resolveWoodDevMetadataPath: () => import_dev_metadata.resolveWoodDevMetadataPath,
32
+ resolveWoodRemoteDebuggingPort: () => import_dev_metadata.resolveWoodRemoteDebuggingPort,
33
+ writeWoodDevMetadata: () => import_dev_metadata.writeWoodDevMetadata
34
+ });
35
+ module.exports = __toCommonJS(dev_exports);
36
+ var import_wood_dev_server = require("./wood_dev_server.cjs");
37
+ var import_backend_watcher = require("./backend_watcher.js");
38
+ var import_dev_metadata = require("./dev_metadata.js");
39
+ var import_yaml_watcher = require("./yaml_watcher.js");
40
+ var import_esbuild_backend = require("./esbuild_backend.cjs");
41
+ // Annotate the CommonJS export names for ESM import in node:
42
+ 0 && (module.exports = {
43
+ BackendWatcher,
44
+ DEFAULT_WOOD_REMOTE_DEBUGGING_PORT,
45
+ EsbuildBackend,
46
+ WOOD_DEV_DIRECTORY,
47
+ WOOD_DEV_METADATA_BASENAME,
48
+ WoodDevServer,
49
+ YamlWatcher,
50
+ readWoodDevMetadata,
51
+ removeWoodDevMetadata,
52
+ resolveWoodDevDirectory,
53
+ resolveWoodDevMetadataPath,
54
+ resolveWoodRemoteDebuggingPort,
55
+ writeWoodDevMetadata
56
+ });
57
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dev/index.ts"],"sourcesContent":["export { WoodDevServer } from './wood_dev_server.cjs';\nexport type { DevServerOptions } from './wood_dev_server.cjs';\nexport { BackendWatcher } from './backend_watcher.js';\nexport type { BackendWatcherOptions } from './backend_watcher.js';\nexport {\n DEFAULT_WOOD_REMOTE_DEBUGGING_PORT,\n WOOD_DEV_DIRECTORY,\n WOOD_DEV_METADATA_BASENAME,\n resolveWoodRemoteDebuggingPort,\n resolveWoodDevDirectory,\n resolveWoodDevMetadataPath,\n writeWoodDevMetadata,\n readWoodDevMetadata,\n removeWoodDevMetadata,\n} from './dev_metadata.js';\nexport type { WoodDevMetadata } from './dev_metadata.js';\nexport { YamlWatcher } from './yaml_watcher.js';\nexport type { YamlWatcherOptions } from './yaml_watcher.js';\nexport { EsbuildBackend } from './esbuild_backend.cjs';\nexport type { EsbuildBackendOptions } from './esbuild_backend.cjs';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BAA8B;AAE9B,6BAA+B;AAE/B,0BAUO;AAEP,0BAA4B;AAE5B,6BAA+B;","names":[]}
@@ -0,0 +1,8 @@
1
+ export { DevServerOptions, WoodDevServer } from './wood_dev_server.cjs';
2
+ export { BackendWatcher, BackendWatcherOptions } from './backend_watcher.cjs';
3
+ export { DEFAULT_WOOD_REMOTE_DEBUGGING_PORT, WOOD_DEV_DIRECTORY, WOOD_DEV_METADATA_BASENAME, WoodDevMetadata, readWoodDevMetadata, removeWoodDevMetadata, resolveWoodDevDirectory, resolveWoodDevMetadataPath, resolveWoodRemoteDebuggingPort, writeWoodDevMetadata } from './dev_metadata.cjs';
4
+ export { YamlWatcher, YamlWatcherOptions } from './yaml_watcher.cjs';
5
+ export { EsbuildBackend, EsbuildBackendOptions } from './esbuild_backend.cjs';
6
+ import '../types/config.cjs';
7
+ import '../bridge/backend_bridge.cjs';
8
+ import 'esbuild';
@@ -0,0 +1,8 @@
1
+ export { DevServerOptions, WoodDevServer } from './wood_dev_server.js';
2
+ export { BackendWatcher, BackendWatcherOptions } from './backend_watcher.js';
3
+ export { DEFAULT_WOOD_REMOTE_DEBUGGING_PORT, WOOD_DEV_DIRECTORY, WOOD_DEV_METADATA_BASENAME, WoodDevMetadata, readWoodDevMetadata, removeWoodDevMetadata, resolveWoodDevDirectory, resolveWoodDevMetadataPath, resolveWoodRemoteDebuggingPort, writeWoodDevMetadata } from './dev_metadata.js';
4
+ export { YamlWatcher, YamlWatcherOptions } from './yaml_watcher.js';
5
+ export { EsbuildBackend, EsbuildBackendOptions } from './esbuild_backend.js';
6
+ import '../types/config.js';
7
+ import '../bridge/backend_bridge.js';
8
+ import 'esbuild';
@@ -0,0 +1,31 @@
1
+ import { WoodDevServer } from "./wood_dev_server.js";
2
+ import { BackendWatcher } from "./backend_watcher.js";
3
+ import {
4
+ DEFAULT_WOOD_REMOTE_DEBUGGING_PORT,
5
+ WOOD_DEV_DIRECTORY,
6
+ WOOD_DEV_METADATA_BASENAME,
7
+ resolveWoodRemoteDebuggingPort,
8
+ resolveWoodDevDirectory,
9
+ resolveWoodDevMetadataPath,
10
+ writeWoodDevMetadata,
11
+ readWoodDevMetadata,
12
+ removeWoodDevMetadata
13
+ } from "./dev_metadata.js";
14
+ import { YamlWatcher } from "./yaml_watcher.js";
15
+ import { EsbuildBackend } from "./esbuild_backend.js";
16
+ export {
17
+ BackendWatcher,
18
+ DEFAULT_WOOD_REMOTE_DEBUGGING_PORT,
19
+ EsbuildBackend,
20
+ WOOD_DEV_DIRECTORY,
21
+ WOOD_DEV_METADATA_BASENAME,
22
+ WoodDevServer,
23
+ YamlWatcher,
24
+ readWoodDevMetadata,
25
+ removeWoodDevMetadata,
26
+ resolveWoodDevDirectory,
27
+ resolveWoodDevMetadataPath,
28
+ resolveWoodRemoteDebuggingPort,
29
+ writeWoodDevMetadata
30
+ };
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/dev/index.ts"],"sourcesContent":["export { WoodDevServer } from './wood_dev_server.js';\nexport type { DevServerOptions } from './wood_dev_server.js';\nexport { BackendWatcher } from './backend_watcher.js';\nexport type { BackendWatcherOptions } from './backend_watcher.js';\nexport {\n DEFAULT_WOOD_REMOTE_DEBUGGING_PORT,\n WOOD_DEV_DIRECTORY,\n WOOD_DEV_METADATA_BASENAME,\n resolveWoodRemoteDebuggingPort,\n resolveWoodDevDirectory,\n resolveWoodDevMetadataPath,\n writeWoodDevMetadata,\n readWoodDevMetadata,\n removeWoodDevMetadata,\n} from './dev_metadata.js';\nexport type { WoodDevMetadata } from './dev_metadata.js';\nexport { YamlWatcher } from './yaml_watcher.js';\nexport type { YamlWatcherOptions } from './yaml_watcher.js';\nexport { EsbuildBackend } from './esbuild_backend.js';\nexport type { EsbuildBackendOptions } from './esbuild_backend.js';\n"],"mappings":"AAAA,SAAS,qBAAqB;AAE9B,SAAS,sBAAsB;AAE/B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,mBAAmB;AAE5B,SAAS,sBAAsB;","names":[]}
@@ -0,0 +1,220 @@
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 wood_dev_server_exports = {};
30
+ __export(wood_dev_server_exports, {
31
+ WoodDevServer: () => WoodDevServer
32
+ });
33
+ module.exports = __toCommonJS(wood_dev_server_exports);
34
+ var import_fs = require("fs");
35
+ var import_path = __toESM(require("path"), 1);
36
+ var import_logger = require("@noego/logger");
37
+ var import_config_parser = require("../config/config_parser.cjs");
38
+ var import_operations_parser = require("../parser/operations_parser.cjs");
39
+ var import_views_parser = require("../parser/views_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
+ var import_renderer_app_generator = require("../codegen/renderer_app_generator.cjs");
46
+ var import_backend_bridge = require("../bridge/backend_bridge.cjs");
47
+ var import_backend_watcher = require("./backend_watcher.cjs");
48
+ var import_yaml_watcher = require("./yaml_watcher.cjs");
49
+ var import_esbuild_backend = require("./esbuild_backend.cjs");
50
+ const logger = (0, import_logger.getLogger)("wood:dev");
51
+ class WoodDevServer {
52
+ constructor(options = {}) {
53
+ this.config = null;
54
+ this.bridge = null;
55
+ this.backendWatcher = null;
56
+ this.yamlWatcher = null;
57
+ this.esbuild = null;
58
+ this.cwd = options.cwd ?? process.cwd();
59
+ }
60
+ /**
61
+ * Start the Wood development server.
62
+ *
63
+ * Automatically sets process.env.WOOD_MODE = 'development' so the app
64
+ * can conditionally use dynamic controller imports (dev) vs pre-registered
65
+ * controllers from the generated file (production).
66
+ *
67
+ * Steps:
68
+ * 1. Parse config
69
+ * 2. Parse + stitch YAML
70
+ * 3. Generate preload, types, mock
71
+ * 4. Build backend with esbuild
72
+ * 5. (electron-vite would be started here -- omitted for MVP)
73
+ * 6. Spawn backend via bridge
74
+ * 7. Start watchers
75
+ */
76
+ async start() {
77
+ process.env.WOOD_MODE = "development";
78
+ const configPath = import_path.default.resolve(this.cwd, "wood.config.yml");
79
+ this.config = (0, import_config_parser.parseConfig)(configPath);
80
+ logger.info("config loaded", { outDir: this.config.outDir });
81
+ const opsYamlPath = import_path.default.resolve(this.cwd, this.config.main.openapi);
82
+ const opsContent = (0, import_fs.readFileSync)(opsYamlPath, "utf-8");
83
+ const operations = (0, import_operations_parser.parseOperations)(opsContent);
84
+ logger.info("operations parsed", { count: operations.size });
85
+ const viewsYamlPath = import_path.default.resolve(this.cwd, this.config.renderer.openapi);
86
+ const viewsContent = (0, import_fs.readFileSync)(viewsYamlPath, "utf-8");
87
+ const views = (0, import_views_parser.parseViews)(viewsContent);
88
+ logger.info("views parsed", { count: views.length });
89
+ const outDir = import_path.default.resolve(this.cwd, this.config.outDir);
90
+ (0, import_fs.mkdirSync)(outDir, { recursive: true });
91
+ const preloadCode = (0, import_preload_generator.generatePreload)(operations);
92
+ (0, import_fs.writeFileSync)(import_path.default.join(outDir, "preload.generated.ts"), preloadCode);
93
+ const typesCode = (0, import_type_generator.generateTypes)(operations);
94
+ (0, import_fs.writeFileSync)(import_path.default.join(outDir, "wood.d.ts"), typesCode);
95
+ const mockCode = (0, import_test_mock_generator.generateTestMock)(operations);
96
+ (0, import_fs.writeFileSync)(import_path.default.join(outDir, "wood.mock.ts"), mockCode);
97
+ const controllersDir = import_path.default.resolve(this.cwd, this.config.main.controllers);
98
+ const controllerRegCode = (0, import_controller_registration_generator.generateControllerRegistration)(operations, {
99
+ controllersDir,
100
+ outDir
101
+ });
102
+ (0, import_fs.writeFileSync)(import_path.default.join(outDir, "controllers.generated.ts"), controllerRegCode);
103
+ const runtimeCode = (0, import_runtime_generator.generateRuntime)(operations, {
104
+ controllersDir,
105
+ outDir
106
+ });
107
+ (0, import_fs.writeFileSync)(import_path.default.join(outDir, "runtime.generated.ts"), runtimeCode);
108
+ const rendererComponentDir = import_path.default.resolve(this.cwd, this.config.renderer.componentDir);
109
+ const rendererOutDir = import_path.default.resolve(this.cwd, this.config.renderer.componentDir, "generated");
110
+ (0, import_fs.mkdirSync)(rendererOutDir, { recursive: true });
111
+ (0, import_fs.writeFileSync)(
112
+ import_path.default.join(rendererOutDir, "app.ts"),
113
+ (0, import_renderer_app_generator.generateRendererApp)(views, {
114
+ componentDir: rendererComponentDir,
115
+ outDir: rendererOutDir,
116
+ entryViewKey: this.config.renderer.entry
117
+ })
118
+ );
119
+ logger.info("codegen complete", { outDir });
120
+ const backendEntry = this.config.main.entry;
121
+ const backendOutfile = import_path.default.join(this.config.outDir, "backend", "index.js");
122
+ this.esbuild = new import_esbuild_backend.EsbuildBackend({
123
+ entryPoint: backendEntry,
124
+ outfile: backendOutfile,
125
+ cwd: this.cwd,
126
+ external: this.config.build ? [] : void 0
127
+ });
128
+ await this.esbuild.build();
129
+ await this.esbuild.createContext();
130
+ if (this.config.dev?.splitServe !== false) {
131
+ const resolvedBackendEntry = import_path.default.resolve(this.cwd, backendOutfile);
132
+ this.bridge = new import_backend_bridge.BackendBridge({
133
+ backendEntry: resolvedBackendEntry,
134
+ onReady: () => {
135
+ logger.info("backend ready (split-serve)");
136
+ },
137
+ onPush: (channel, data) => {
138
+ logger.debug("backend push", { channel, data });
139
+ },
140
+ onExit: (code, signal) => {
141
+ logger.debug("backend exited", { code, signal });
142
+ }
143
+ });
144
+ await this.bridge.start();
145
+ }
146
+ if (this.config.dev?.watch !== false) {
147
+ this.startWatchers(outDir);
148
+ }
149
+ }
150
+ /** Stop the dev server and clean up all resources. */
151
+ async stop() {
152
+ this.backendWatcher?.stop();
153
+ this.yamlWatcher?.stop();
154
+ if (this.bridge) {
155
+ await this.bridge.stop();
156
+ logger.info("backend bridge stopped");
157
+ }
158
+ if (this.esbuild) {
159
+ await this.esbuild.dispose();
160
+ }
161
+ }
162
+ /** Get the parsed config. */
163
+ getConfig() {
164
+ return this.config;
165
+ }
166
+ startWatchers(outDir) {
167
+ if (!this.config) return;
168
+ if (this.bridge && this.esbuild) {
169
+ const backendPatterns = [
170
+ `${this.config.main.controllers}/**/*.ts`,
171
+ `${this.config.main.middleware}/**/*.ts`,
172
+ `${this.config.main.entry}`,
173
+ ...this.config.main.watch ?? []
174
+ ];
175
+ const esbuild = this.esbuild;
176
+ this.backendWatcher = new import_backend_watcher.BackendWatcher({
177
+ patterns: backendPatterns,
178
+ bridge: this.bridge,
179
+ buildFn: () => esbuild.rebuild().then(() => {
180
+ }),
181
+ cwd: this.cwd
182
+ });
183
+ this.backendWatcher.start();
184
+ logger.info("backend watcher started", { patterns: backendPatterns });
185
+ }
186
+ this.yamlWatcher = new import_yaml_watcher.YamlWatcher({
187
+ operationsYamlPath: this.config.main.openapi,
188
+ viewsYamlPath: this.config.renderer.openapi,
189
+ controllersDir: this.config.main.controllers,
190
+ outDir,
191
+ cwd: this.cwd,
192
+ onViewsChange: async () => {
193
+ const viewsContent = (0, import_fs.readFileSync)(
194
+ import_path.default.resolve(this.cwd, this.config.renderer.openapi),
195
+ "utf-8"
196
+ );
197
+ const views = (0, import_views_parser.parseViews)(viewsContent);
198
+ const rendererComponentDir = import_path.default.resolve(this.cwd, this.config.renderer.componentDir);
199
+ const rendererOutDir = import_path.default.resolve(this.cwd, this.config.renderer.componentDir, "generated");
200
+ (0, import_fs.mkdirSync)(rendererOutDir, { recursive: true });
201
+ (0, import_fs.writeFileSync)(
202
+ import_path.default.join(rendererOutDir, "app.ts"),
203
+ (0, import_renderer_app_generator.generateRendererApp)(views, {
204
+ componentDir: rendererComponentDir,
205
+ outDir: rendererOutDir,
206
+ entryViewKey: this.config.renderer.entry
207
+ })
208
+ );
209
+ logger.info("views renderer codegen regenerated", { rendererOutDir });
210
+ }
211
+ });
212
+ this.yamlWatcher.start();
213
+ logger.info("yaml watcher started");
214
+ }
215
+ }
216
+ // Annotate the CommonJS export names for ESM import in node:
217
+ 0 && (module.exports = {
218
+ WoodDevServer
219
+ });
220
+ //# sourceMappingURL=wood_dev_server.cjs.map
@@ -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.cjs';\nimport { parseOperations } from '../parser/operations_parser.cjs';\nimport { parseViews } from '../parser/views_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';\nimport { generateRendererApp } from '../codegen/renderer_app_generator.cjs';\nimport { BackendBridge } from '../bridge/backend_bridge.cjs';\nimport { BackendWatcher } from './backend_watcher.cjs';\nimport { YamlWatcher } from './yaml_watcher.cjs';\nimport { EsbuildBackend } from './esbuild_backend.cjs';\nimport type { WoodConfig } from '../types/index.cjs';\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":["path"]}
@@ -0,0 +1,39 @@
1
+ import { WoodConfig } from '../types/config.cjs';
2
+
3
+ interface DevServerOptions {
4
+ configPath?: string;
5
+ cwd?: string;
6
+ }
7
+ declare class WoodDevServer {
8
+ private config;
9
+ private bridge;
10
+ private backendWatcher;
11
+ private yamlWatcher;
12
+ private esbuild;
13
+ private cwd;
14
+ constructor(options?: DevServerOptions);
15
+ /**
16
+ * Start the Wood development server.
17
+ *
18
+ * Automatically sets process.env.WOOD_MODE = 'development' so the app
19
+ * can conditionally use dynamic controller imports (dev) vs pre-registered
20
+ * controllers from the generated file (production).
21
+ *
22
+ * Steps:
23
+ * 1. Parse config
24
+ * 2. Parse + stitch YAML
25
+ * 3. Generate preload, types, mock
26
+ * 4. Build backend with esbuild
27
+ * 5. (electron-vite would be started here -- omitted for MVP)
28
+ * 6. Spawn backend via bridge
29
+ * 7. Start watchers
30
+ */
31
+ start(): Promise<void>;
32
+ /** Stop the dev server and clean up all resources. */
33
+ stop(): Promise<void>;
34
+ /** Get the parsed config. */
35
+ getConfig(): WoodConfig | null;
36
+ private startWatchers;
37
+ }
38
+
39
+ export { type DevServerOptions, WoodDevServer };
@@ -0,0 +1,39 @@
1
+ import { WoodConfig } from '../types/config.js';
2
+
3
+ interface DevServerOptions {
4
+ configPath?: string;
5
+ cwd?: string;
6
+ }
7
+ declare class WoodDevServer {
8
+ private config;
9
+ private bridge;
10
+ private backendWatcher;
11
+ private yamlWatcher;
12
+ private esbuild;
13
+ private cwd;
14
+ constructor(options?: DevServerOptions);
15
+ /**
16
+ * Start the Wood development server.
17
+ *
18
+ * Automatically sets process.env.WOOD_MODE = 'development' so the app
19
+ * can conditionally use dynamic controller imports (dev) vs pre-registered
20
+ * controllers from the generated file (production).
21
+ *
22
+ * Steps:
23
+ * 1. Parse config
24
+ * 2. Parse + stitch YAML
25
+ * 3. Generate preload, types, mock
26
+ * 4. Build backend with esbuild
27
+ * 5. (electron-vite would be started here -- omitted for MVP)
28
+ * 6. Spawn backend via bridge
29
+ * 7. Start watchers
30
+ */
31
+ start(): Promise<void>;
32
+ /** Stop the dev server and clean up all resources. */
33
+ stop(): Promise<void>;
34
+ /** Get the parsed config. */
35
+ getConfig(): WoodConfig | null;
36
+ private startWatchers;
37
+ }
38
+
39
+ export { type DevServerOptions, WoodDevServer };
@@ -0,0 +1,186 @@
1
+ import { readFileSync, writeFileSync, mkdirSync } from "fs";
2
+ import path from "path";
3
+ import { getLogger } from "@noego/logger";
4
+ import { parseConfig } from "../config/config_parser.js";
5
+ import { parseOperations } from "../parser/operations_parser.js";
6
+ import { parseViews } from "../parser/views_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
+ import { generateRendererApp } from "../codegen/renderer_app_generator.js";
13
+ import { BackendBridge } from "../bridge/backend_bridge.js";
14
+ import { BackendWatcher } from "./backend_watcher.js";
15
+ import { YamlWatcher } from "./yaml_watcher.js";
16
+ import { EsbuildBackend } from "./esbuild_backend.js";
17
+ const logger = getLogger("wood:dev");
18
+ class WoodDevServer {
19
+ constructor(options = {}) {
20
+ this.config = null;
21
+ this.bridge = null;
22
+ this.backendWatcher = null;
23
+ this.yamlWatcher = null;
24
+ this.esbuild = null;
25
+ this.cwd = options.cwd ?? process.cwd();
26
+ }
27
+ /**
28
+ * Start the Wood development server.
29
+ *
30
+ * Automatically sets process.env.WOOD_MODE = 'development' so the app
31
+ * can conditionally use dynamic controller imports (dev) vs pre-registered
32
+ * controllers from the generated file (production).
33
+ *
34
+ * Steps:
35
+ * 1. Parse config
36
+ * 2. Parse + stitch YAML
37
+ * 3. Generate preload, types, mock
38
+ * 4. Build backend with esbuild
39
+ * 5. (electron-vite would be started here -- omitted for MVP)
40
+ * 6. Spawn backend via bridge
41
+ * 7. Start watchers
42
+ */
43
+ async start() {
44
+ process.env.WOOD_MODE = "development";
45
+ const configPath = path.resolve(this.cwd, "wood.config.yml");
46
+ this.config = parseConfig(configPath);
47
+ logger.info("config loaded", { outDir: this.config.outDir });
48
+ const opsYamlPath = path.resolve(this.cwd, this.config.main.openapi);
49
+ const opsContent = readFileSync(opsYamlPath, "utf-8");
50
+ const operations = parseOperations(opsContent);
51
+ logger.info("operations parsed", { count: operations.size });
52
+ const viewsYamlPath = path.resolve(this.cwd, this.config.renderer.openapi);
53
+ const viewsContent = readFileSync(viewsYamlPath, "utf-8");
54
+ const views = parseViews(viewsContent);
55
+ logger.info("views parsed", { count: views.length });
56
+ const outDir = path.resolve(this.cwd, this.config.outDir);
57
+ mkdirSync(outDir, { recursive: true });
58
+ const preloadCode = generatePreload(operations);
59
+ writeFileSync(path.join(outDir, "preload.generated.ts"), preloadCode);
60
+ const typesCode = generateTypes(operations);
61
+ writeFileSync(path.join(outDir, "wood.d.ts"), typesCode);
62
+ const mockCode = generateTestMock(operations);
63
+ writeFileSync(path.join(outDir, "wood.mock.ts"), mockCode);
64
+ const controllersDir = path.resolve(this.cwd, this.config.main.controllers);
65
+ const controllerRegCode = generateControllerRegistration(operations, {
66
+ controllersDir,
67
+ outDir
68
+ });
69
+ writeFileSync(path.join(outDir, "controllers.generated.ts"), controllerRegCode);
70
+ const runtimeCode = generateRuntime(operations, {
71
+ controllersDir,
72
+ outDir
73
+ });
74
+ writeFileSync(path.join(outDir, "runtime.generated.ts"), runtimeCode);
75
+ const rendererComponentDir = path.resolve(this.cwd, this.config.renderer.componentDir);
76
+ const rendererOutDir = path.resolve(this.cwd, this.config.renderer.componentDir, "generated");
77
+ mkdirSync(rendererOutDir, { recursive: true });
78
+ writeFileSync(
79
+ path.join(rendererOutDir, "app.ts"),
80
+ generateRendererApp(views, {
81
+ componentDir: rendererComponentDir,
82
+ outDir: rendererOutDir,
83
+ entryViewKey: this.config.renderer.entry
84
+ })
85
+ );
86
+ logger.info("codegen complete", { outDir });
87
+ const backendEntry = this.config.main.entry;
88
+ const backendOutfile = path.join(this.config.outDir, "backend", "index.js");
89
+ this.esbuild = new EsbuildBackend({
90
+ entryPoint: backendEntry,
91
+ outfile: backendOutfile,
92
+ cwd: this.cwd,
93
+ external: this.config.build ? [] : void 0
94
+ });
95
+ await this.esbuild.build();
96
+ await this.esbuild.createContext();
97
+ if (this.config.dev?.splitServe !== false) {
98
+ const resolvedBackendEntry = path.resolve(this.cwd, backendOutfile);
99
+ this.bridge = new BackendBridge({
100
+ backendEntry: resolvedBackendEntry,
101
+ onReady: () => {
102
+ logger.info("backend ready (split-serve)");
103
+ },
104
+ onPush: (channel, data) => {
105
+ logger.debug("backend push", { channel, data });
106
+ },
107
+ onExit: (code, signal) => {
108
+ logger.debug("backend exited", { code, signal });
109
+ }
110
+ });
111
+ await this.bridge.start();
112
+ }
113
+ if (this.config.dev?.watch !== false) {
114
+ this.startWatchers(outDir);
115
+ }
116
+ }
117
+ /** Stop the dev server and clean up all resources. */
118
+ async stop() {
119
+ this.backendWatcher?.stop();
120
+ this.yamlWatcher?.stop();
121
+ if (this.bridge) {
122
+ await this.bridge.stop();
123
+ logger.info("backend bridge stopped");
124
+ }
125
+ if (this.esbuild) {
126
+ await this.esbuild.dispose();
127
+ }
128
+ }
129
+ /** Get the parsed config. */
130
+ getConfig() {
131
+ return this.config;
132
+ }
133
+ startWatchers(outDir) {
134
+ if (!this.config) return;
135
+ if (this.bridge && this.esbuild) {
136
+ const backendPatterns = [
137
+ `${this.config.main.controllers}/**/*.ts`,
138
+ `${this.config.main.middleware}/**/*.ts`,
139
+ `${this.config.main.entry}`,
140
+ ...this.config.main.watch ?? []
141
+ ];
142
+ const esbuild = this.esbuild;
143
+ this.backendWatcher = new BackendWatcher({
144
+ patterns: backendPatterns,
145
+ bridge: this.bridge,
146
+ buildFn: () => esbuild.rebuild().then(() => {
147
+ }),
148
+ cwd: this.cwd
149
+ });
150
+ this.backendWatcher.start();
151
+ logger.info("backend watcher started", { patterns: backendPatterns });
152
+ }
153
+ this.yamlWatcher = new YamlWatcher({
154
+ operationsYamlPath: this.config.main.openapi,
155
+ viewsYamlPath: this.config.renderer.openapi,
156
+ controllersDir: this.config.main.controllers,
157
+ outDir,
158
+ cwd: this.cwd,
159
+ onViewsChange: async () => {
160
+ const viewsContent = readFileSync(
161
+ path.resolve(this.cwd, this.config.renderer.openapi),
162
+ "utf-8"
163
+ );
164
+ const views = parseViews(viewsContent);
165
+ const rendererComponentDir = path.resolve(this.cwd, this.config.renderer.componentDir);
166
+ const rendererOutDir = path.resolve(this.cwd, this.config.renderer.componentDir, "generated");
167
+ mkdirSync(rendererOutDir, { recursive: true });
168
+ writeFileSync(
169
+ path.join(rendererOutDir, "app.ts"),
170
+ generateRendererApp(views, {
171
+ componentDir: rendererComponentDir,
172
+ outDir: rendererOutDir,
173
+ entryViewKey: this.config.renderer.entry
174
+ })
175
+ );
176
+ logger.info("views renderer codegen regenerated", { rendererOutDir });
177
+ }
178
+ });
179
+ this.yamlWatcher.start();
180
+ logger.info("yaml watcher started");
181
+ }
182
+ }
183
+ export {
184
+ WoodDevServer
185
+ };
186
+ //# sourceMappingURL=wood_dev_server.js.map