@buenojs/bueno 0.8.10 → 0.8.11

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 (699) hide show
  1. package/dist/cache/index.d.ts +187 -0
  2. package/dist/cache/index.d.ts.map +1 -0
  3. package/dist/cache/index.js +595 -0
  4. package/dist/cache/index.js.map +1 -0
  5. package/dist/cli/bin.d.ts +8 -0
  6. package/dist/cli/bin.d.ts.map +1 -0
  7. package/dist/cli/bin.js +9 -9
  8. package/dist/cli/bin.js.map +1 -0
  9. package/dist/cli/commands/add-frontend.d.ts +7 -0
  10. package/dist/cli/commands/add-frontend.d.ts.map +1 -0
  11. package/dist/cli/commands/add-frontend.js +376 -0
  12. package/dist/cli/commands/add-frontend.js.map +1 -0
  13. package/dist/cli/commands/build.d.ts +7 -0
  14. package/dist/cli/commands/build.d.ts.map +1 -0
  15. package/dist/cli/commands/build.js +347 -0
  16. package/dist/cli/commands/build.js.map +1 -0
  17. package/dist/cli/commands/dev.d.ts +7 -0
  18. package/dist/cli/commands/dev.d.ts.map +1 -0
  19. package/dist/cli/commands/dev.js +205 -0
  20. package/dist/cli/commands/dev.js.map +1 -0
  21. package/dist/cli/commands/generate.d.ts +7 -0
  22. package/dist/cli/commands/generate.d.ts.map +1 -0
  23. package/dist/cli/commands/generate.js +491 -0
  24. package/dist/cli/commands/generate.js.map +1 -0
  25. package/dist/cli/commands/help.d.ts +7 -0
  26. package/dist/cli/commands/help.d.ts.map +1 -0
  27. package/dist/cli/commands/help.js +51 -0
  28. package/dist/cli/commands/help.js.map +1 -0
  29. package/dist/cli/commands/index.d.ts +59 -0
  30. package/dist/cli/commands/index.d.ts.map +1 -0
  31. package/dist/cli/commands/index.js +77 -0
  32. package/dist/cli/commands/index.js.map +1 -0
  33. package/dist/cli/commands/migration.d.ts +7 -0
  34. package/dist/cli/commands/migration.d.ts.map +1 -0
  35. package/dist/cli/commands/migration.js +295 -0
  36. package/dist/cli/commands/migration.js.map +1 -0
  37. package/dist/cli/commands/new.d.ts +7 -0
  38. package/dist/cli/commands/new.d.ts.map +1 -0
  39. package/dist/cli/commands/new.js +641 -0
  40. package/dist/cli/commands/new.js.map +1 -0
  41. package/dist/cli/commands/start.d.ts +7 -0
  42. package/dist/cli/commands/start.d.ts.map +1 -0
  43. package/dist/cli/commands/start.js +171 -0
  44. package/dist/cli/commands/start.js.map +1 -0
  45. package/dist/cli/core/args.d.ts +61 -0
  46. package/dist/cli/core/args.d.ts.map +1 -0
  47. package/dist/cli/core/args.js +224 -0
  48. package/dist/cli/core/args.js.map +1 -0
  49. package/dist/cli/core/console.d.ts +135 -0
  50. package/dist/cli/core/console.d.ts.map +1 -0
  51. package/dist/cli/core/console.js +268 -0
  52. package/dist/cli/core/console.js.map +1 -0
  53. package/dist/cli/core/index.d.ts +10 -0
  54. package/dist/cli/core/index.d.ts.map +1 -0
  55. package/dist/cli/core/index.js +10 -0
  56. package/dist/cli/core/index.js.map +1 -0
  57. package/dist/cli/core/prompt.d.ts +63 -0
  58. package/dist/cli/core/prompt.d.ts.map +1 -0
  59. package/dist/cli/core/prompt.js +338 -0
  60. package/dist/cli/core/prompt.js.map +1 -0
  61. package/dist/cli/core/spinner.d.ts +111 -0
  62. package/dist/cli/core/spinner.d.ts.map +1 -0
  63. package/dist/cli/core/spinner.js +208 -0
  64. package/dist/cli/core/spinner.js.map +1 -0
  65. package/dist/cli/index.d.ts +47 -0
  66. package/dist/cli/index.d.ts.map +1 -0
  67. package/dist/cli/index.js +127 -0
  68. package/dist/cli/index.js.map +1 -0
  69. package/dist/cli/templates/database/index.d.ts +24 -0
  70. package/dist/cli/templates/database/index.d.ts.map +1 -0
  71. package/dist/cli/templates/database/index.js +49 -0
  72. package/dist/cli/templates/database/index.js.map +1 -0
  73. package/dist/cli/templates/database/mysql.d.ts +6 -0
  74. package/dist/cli/templates/database/mysql.d.ts.map +1 -0
  75. package/dist/cli/templates/database/mysql.js +12 -0
  76. package/dist/cli/templates/database/mysql.js.map +1 -0
  77. package/dist/cli/templates/database/none.d.ts +8 -0
  78. package/dist/cli/templates/database/none.d.ts.map +1 -0
  79. package/dist/cli/templates/database/none.js +14 -0
  80. package/dist/cli/templates/database/none.js.map +1 -0
  81. package/dist/cli/templates/database/postgresql.d.ts +6 -0
  82. package/dist/cli/templates/database/postgresql.d.ts.map +1 -0
  83. package/dist/cli/templates/database/postgresql.js +12 -0
  84. package/dist/cli/templates/database/postgresql.js.map +1 -0
  85. package/dist/cli/templates/database/sqlite.d.ts +6 -0
  86. package/dist/cli/templates/database/sqlite.d.ts.map +1 -0
  87. package/dist/cli/templates/database/sqlite.js +12 -0
  88. package/dist/cli/templates/database/sqlite.js.map +1 -0
  89. package/dist/cli/templates/deploy.d.ts +41 -0
  90. package/dist/cli/templates/deploy.d.ts.map +1 -0
  91. package/dist/cli/templates/deploy.js +278 -0
  92. package/dist/cli/templates/deploy.js.map +1 -0
  93. package/dist/cli/templates/docker.d.ts +30 -0
  94. package/dist/cli/templates/docker.d.ts.map +1 -0
  95. package/dist/cli/templates/docker.js +298 -0
  96. package/dist/cli/templates/docker.js.map +1 -0
  97. package/dist/cli/templates/frontend/index.d.ts +25 -0
  98. package/dist/cli/templates/frontend/index.d.ts.map +1 -0
  99. package/dist/cli/templates/frontend/index.js +40 -0
  100. package/dist/cli/templates/frontend/index.js.map +1 -0
  101. package/dist/cli/templates/frontend/none.d.ts +8 -0
  102. package/dist/cli/templates/frontend/none.d.ts.map +1 -0
  103. package/dist/cli/templates/frontend/none.js +15 -0
  104. package/dist/cli/templates/frontend/none.js.map +1 -0
  105. package/dist/cli/templates/frontend/react.d.ts +6 -0
  106. package/dist/cli/templates/frontend/react.d.ts.map +1 -0
  107. package/dist/cli/templates/frontend/react.js +139 -0
  108. package/dist/cli/templates/frontend/react.js.map +1 -0
  109. package/dist/cli/templates/frontend/solid.d.ts +6 -0
  110. package/dist/cli/templates/frontend/solid.d.ts.map +1 -0
  111. package/dist/cli/templates/frontend/solid.js +133 -0
  112. package/dist/cli/templates/frontend/solid.js.map +1 -0
  113. package/dist/cli/templates/frontend/svelte.d.ts +6 -0
  114. package/dist/cli/templates/frontend/svelte.d.ts.map +1 -0
  115. package/dist/cli/templates/frontend/svelte.js +130 -0
  116. package/dist/cli/templates/frontend/svelte.js.map +1 -0
  117. package/dist/cli/templates/frontend/vue.d.ts +6 -0
  118. package/dist/cli/templates/frontend/vue.d.ts.map +1 -0
  119. package/dist/cli/templates/frontend/vue.js +129 -0
  120. package/dist/cli/templates/frontend/vue.js.map +1 -0
  121. package/dist/cli/templates/generators/index.d.ts +29 -0
  122. package/dist/cli/templates/generators/index.d.ts.map +1 -0
  123. package/dist/cli/templates/generators/index.js +308 -0
  124. package/dist/cli/templates/generators/index.js.map +1 -0
  125. package/dist/cli/templates/generators/types.d.ts +32 -0
  126. package/dist/cli/templates/generators/types.d.ts.map +1 -0
  127. package/dist/cli/templates/generators/types.js +21 -0
  128. package/dist/cli/templates/generators/types.js.map +1 -0
  129. package/dist/cli/templates/index.d.ts +12 -0
  130. package/dist/cli/templates/index.d.ts.map +1 -0
  131. package/dist/cli/templates/index.js +18 -0
  132. package/dist/cli/templates/index.js.map +1 -0
  133. package/dist/cli/templates/project/api.d.ts +6 -0
  134. package/dist/cli/templates/project/api.d.ts.map +1 -0
  135. package/dist/cli/templates/project/api.js +79 -0
  136. package/dist/cli/templates/project/api.js.map +1 -0
  137. package/dist/cli/templates/project/default.d.ts +6 -0
  138. package/dist/cli/templates/project/default.d.ts.map +1 -0
  139. package/dist/cli/templates/project/default.js +136 -0
  140. package/dist/cli/templates/project/default.js.map +1 -0
  141. package/dist/cli/templates/project/fullstack.d.ts +14 -0
  142. package/dist/cli/templates/project/fullstack.d.ts.map +1 -0
  143. package/dist/cli/templates/project/fullstack.js +19 -0
  144. package/dist/cli/templates/project/fullstack.js.map +1 -0
  145. package/dist/cli/templates/project/index.d.ts +26 -0
  146. package/dist/cli/templates/project/index.d.ts.map +1 -0
  147. package/dist/cli/templates/project/index.js +60 -0
  148. package/dist/cli/templates/project/index.js.map +1 -0
  149. package/dist/cli/templates/project/minimal.d.ts +6 -0
  150. package/dist/cli/templates/project/minimal.d.ts.map +1 -0
  151. package/dist/cli/templates/project/minimal.js +43 -0
  152. package/dist/cli/templates/project/minimal.js.map +1 -0
  153. package/dist/cli/templates/project/types.d.ts +80 -0
  154. package/dist/cli/templates/project/types.d.ts.map +1 -0
  155. package/dist/cli/templates/project/types.js +7 -0
  156. package/dist/cli/templates/project/types.js.map +1 -0
  157. package/dist/cli/templates/project/website.d.ts +8 -0
  158. package/dist/cli/templates/project/website.d.ts.map +1 -0
  159. package/dist/cli/templates/project/website.js +312 -0
  160. package/dist/cli/templates/project/website.js.map +1 -0
  161. package/dist/cli/utils/fs.d.ts +137 -0
  162. package/dist/cli/utils/fs.d.ts.map +1 -0
  163. package/dist/cli/utils/fs.js +350 -0
  164. package/dist/cli/utils/fs.js.map +1 -0
  165. package/dist/cli/utils/index.d.ts +9 -0
  166. package/dist/cli/utils/index.d.ts.map +1 -0
  167. package/dist/cli/utils/index.js +9 -0
  168. package/dist/cli/utils/index.js.map +1 -0
  169. package/dist/cli/utils/strings.d.ts +86 -0
  170. package/dist/cli/utils/strings.d.ts.map +1 -0
  171. package/dist/cli/utils/strings.js +190 -0
  172. package/dist/cli/utils/strings.js.map +1 -0
  173. package/dist/cli/utils/version.d.ts +15 -0
  174. package/dist/cli/utils/version.d.ts.map +1 -0
  175. package/dist/cli/utils/version.js +38 -0
  176. package/dist/cli/utils/version.js.map +1 -0
  177. package/dist/config/env-validation.d.ts +49 -0
  178. package/dist/config/env-validation.d.ts.map +1 -0
  179. package/dist/config/env-validation.js +77 -0
  180. package/dist/config/env-validation.js.map +1 -0
  181. package/dist/config/env.d.ts +167 -0
  182. package/dist/config/env.d.ts.map +1 -0
  183. package/dist/config/env.js +392 -0
  184. package/dist/config/env.js.map +1 -0
  185. package/dist/config/index.d.ts +168 -0
  186. package/dist/config/index.d.ts.map +1 -0
  187. package/dist/config/index.js +329 -0
  188. package/dist/config/index.js.map +1 -0
  189. package/dist/config/loader.d.ts +81 -0
  190. package/dist/config/loader.d.ts.map +1 -0
  191. package/dist/config/loader.js +242 -0
  192. package/dist/config/loader.js.map +1 -0
  193. package/dist/config/merge.d.ts +66 -0
  194. package/dist/config/merge.d.ts.map +1 -0
  195. package/dist/config/merge.js +226 -0
  196. package/dist/config/merge.js.map +1 -0
  197. package/dist/config/types.d.ts +322 -0
  198. package/dist/config/types.d.ts.map +1 -0
  199. package/dist/config/types.js +443 -0
  200. package/dist/config/types.js.map +1 -0
  201. package/dist/config/validation.d.ts +100 -0
  202. package/dist/config/validation.d.ts.map +1 -0
  203. package/dist/config/validation.js +548 -0
  204. package/dist/config/validation.js.map +1 -0
  205. package/dist/container/forward-ref.d.ts +116 -0
  206. package/dist/container/forward-ref.d.ts.map +1 -0
  207. package/dist/container/forward-ref.js +105 -0
  208. package/dist/container/forward-ref.js.map +1 -0
  209. package/dist/container/index.d.ts +95 -0
  210. package/dist/container/index.d.ts.map +1 -0
  211. package/dist/container/index.js.map +1 -0
  212. package/dist/context/index.d.ts +143 -0
  213. package/dist/context/index.d.ts.map +1 -0
  214. package/dist/context/index.js.map +1 -0
  215. package/dist/database/index.d.ts +219 -0
  216. package/dist/database/index.d.ts.map +1 -0
  217. package/dist/database/index.js.map +1 -0
  218. package/dist/database/migrations/index.d.ts +151 -0
  219. package/dist/database/migrations/index.d.ts.map +1 -0
  220. package/dist/database/migrations/index.js +258 -0
  221. package/dist/database/migrations/index.js.map +1 -0
  222. package/dist/database/orm/builder.d.ts +122 -0
  223. package/dist/database/orm/builder.d.ts.map +1 -0
  224. package/dist/database/orm/builder.js +355 -0
  225. package/dist/database/orm/builder.js.map +1 -0
  226. package/dist/database/orm/casts/index.d.ts +16 -0
  227. package/dist/database/orm/casts/index.d.ts.map +1 -0
  228. package/dist/database/orm/casts/index.js +131 -0
  229. package/dist/database/orm/casts/index.js.map +1 -0
  230. package/dist/database/orm/casts/types.d.ts +16 -0
  231. package/dist/database/orm/casts/types.d.ts.map +1 -0
  232. package/dist/database/orm/casts/types.js +5 -0
  233. package/dist/database/orm/casts/types.js.map +1 -0
  234. package/dist/database/orm/compiler.d.ts +90 -0
  235. package/dist/database/orm/compiler.d.ts.map +1 -0
  236. package/dist/database/orm/compiler.js +218 -0
  237. package/dist/database/orm/compiler.js.map +1 -0
  238. package/dist/database/orm/hooks/index.d.ts +53 -0
  239. package/dist/database/orm/hooks/index.d.ts.map +1 -0
  240. package/dist/database/orm/hooks/index.js +81 -0
  241. package/dist/database/orm/hooks/index.js.map +1 -0
  242. package/dist/database/orm/index.d.ts +21 -0
  243. package/dist/database/orm/index.d.ts.map +1 -0
  244. package/dist/database/orm/index.js +23 -0
  245. package/dist/database/orm/index.js.map +1 -0
  246. package/dist/database/orm/model-registry.d.ts +33 -0
  247. package/dist/database/orm/model-registry.d.ts.map +1 -0
  248. package/dist/database/orm/model-registry.js +49 -0
  249. package/dist/database/orm/model-registry.js.map +1 -0
  250. package/dist/database/orm/model.d.ts +245 -0
  251. package/dist/database/orm/model.d.ts.map +1 -0
  252. package/dist/database/orm/model.js +599 -0
  253. package/dist/database/orm/model.js.map +1 -0
  254. package/dist/database/orm/relationships/base.d.ts +69 -0
  255. package/dist/database/orm/relationships/base.d.ts.map +1 -0
  256. package/dist/database/orm/relationships/base.js +84 -0
  257. package/dist/database/orm/relationships/base.js.map +1 -0
  258. package/dist/database/orm/relationships/belongs-to-many.d.ts +47 -0
  259. package/dist/database/orm/relationships/belongs-to-many.d.ts.map +1 -0
  260. package/dist/database/orm/relationships/belongs-to-many.js +136 -0
  261. package/dist/database/orm/relationships/belongs-to-many.js.map +1 -0
  262. package/dist/database/orm/relationships/belongs-to.d.ts +17 -0
  263. package/dist/database/orm/relationships/belongs-to.d.ts.map +1 -0
  264. package/dist/database/orm/relationships/belongs-to.js +38 -0
  265. package/dist/database/orm/relationships/belongs-to.js.map +1 -0
  266. package/dist/database/orm/relationships/has-many.d.ts +14 -0
  267. package/dist/database/orm/relationships/has-many.d.ts.map +1 -0
  268. package/dist/database/orm/relationships/has-many.js +35 -0
  269. package/dist/database/orm/relationships/has-many.js.map +1 -0
  270. package/dist/database/orm/relationships/has-one.d.ts +14 -0
  271. package/dist/database/orm/relationships/has-one.d.ts.map +1 -0
  272. package/dist/database/orm/relationships/has-one.js +32 -0
  273. package/dist/database/orm/relationships/has-one.js.map +1 -0
  274. package/dist/database/orm/relationships/index.d.ts +10 -0
  275. package/dist/database/orm/relationships/index.d.ts.map +1 -0
  276. package/dist/database/orm/relationships/index.js +9 -0
  277. package/dist/database/orm/relationships/index.js.map +1 -0
  278. package/dist/database/orm/scopes/index.d.ts +36 -0
  279. package/dist/database/orm/scopes/index.d.ts.map +1 -0
  280. package/dist/database/orm/scopes/index.js +47 -0
  281. package/dist/database/orm/scopes/index.js.map +1 -0
  282. package/dist/database/schema/index.d.ts +155 -0
  283. package/dist/database/schema/index.d.ts.map +1 -0
  284. package/dist/database/schema/index.js +401 -0
  285. package/dist/database/schema/index.js.map +1 -0
  286. package/dist/frontend/api-routes.d.ts +189 -0
  287. package/dist/frontend/api-routes.d.ts.map +1 -0
  288. package/dist/frontend/api-routes.js +548 -0
  289. package/dist/frontend/api-routes.js.map +1 -0
  290. package/dist/frontend/bundler.d.ts +99 -0
  291. package/dist/frontend/bundler.d.ts.map +1 -0
  292. package/dist/frontend/bundler.js +555 -0
  293. package/dist/frontend/bundler.js.map +1 -0
  294. package/dist/frontend/console-client.d.ts +11 -0
  295. package/dist/frontend/console-client.d.ts.map +1 -0
  296. package/dist/frontend/console-client.js +414 -0
  297. package/dist/frontend/console-client.js.map +1 -0
  298. package/dist/frontend/console-stream.d.ts +138 -0
  299. package/dist/frontend/console-stream.d.ts.map +1 -0
  300. package/dist/frontend/console-stream.js +535 -0
  301. package/dist/frontend/console-stream.js.map +1 -0
  302. package/dist/frontend/dev-server.d.ts +174 -0
  303. package/dist/frontend/dev-server.d.ts.map +1 -0
  304. package/dist/frontend/dev-server.js +735 -0
  305. package/dist/frontend/dev-server.js.map +1 -0
  306. package/dist/frontend/file-router.d.ts +170 -0
  307. package/dist/frontend/file-router.d.ts.map +1 -0
  308. package/dist/frontend/file-router.js +531 -0
  309. package/dist/frontend/file-router.js.map +1 -0
  310. package/dist/frontend/frameworks/index.d.ts +41 -0
  311. package/dist/frontend/frameworks/index.d.ts.map +1 -0
  312. package/dist/frontend/frameworks/index.js +87 -0
  313. package/dist/frontend/frameworks/index.js.map +1 -0
  314. package/dist/frontend/frameworks/react.d.ts +32 -0
  315. package/dist/frontend/frameworks/react.d.ts.map +1 -0
  316. package/dist/frontend/frameworks/react.js +66 -0
  317. package/dist/frontend/frameworks/react.js.map +1 -0
  318. package/dist/frontend/frameworks/solid.d.ts +42 -0
  319. package/dist/frontend/frameworks/solid.d.ts.map +1 -0
  320. package/dist/frontend/frameworks/solid.js +84 -0
  321. package/dist/frontend/frameworks/solid.js.map +1 -0
  322. package/dist/frontend/frameworks/svelte.d.ts +57 -0
  323. package/dist/frontend/frameworks/svelte.d.ts.map +1 -0
  324. package/dist/frontend/frameworks/svelte.js +90 -0
  325. package/dist/frontend/frameworks/svelte.js.map +1 -0
  326. package/dist/frontend/frameworks/vue.d.ts +36 -0
  327. package/dist/frontend/frameworks/vue.d.ts.map +1 -0
  328. package/dist/frontend/frameworks/vue.js +72 -0
  329. package/dist/frontend/frameworks/vue.js.map +1 -0
  330. package/dist/frontend/hmr-client.d.ts +22 -0
  331. package/dist/frontend/hmr-client.d.ts.map +1 -0
  332. package/dist/frontend/hmr-client.js +654 -0
  333. package/dist/frontend/hmr-client.js.map +1 -0
  334. package/dist/frontend/hmr.d.ts +185 -0
  335. package/dist/frontend/hmr.d.ts.map +1 -0
  336. package/dist/frontend/hmr.js +619 -0
  337. package/dist/frontend/hmr.js.map +1 -0
  338. package/dist/frontend/index.d.ts +34 -0
  339. package/dist/frontend/index.d.ts.map +1 -0
  340. package/dist/frontend/index.js.map +1 -0
  341. package/dist/frontend/islands.d.ts +135 -0
  342. package/dist/frontend/islands.d.ts.map +1 -0
  343. package/dist/frontend/islands.js +455 -0
  344. package/dist/frontend/islands.js.map +1 -0
  345. package/dist/frontend/isr.d.ts +143 -0
  346. package/dist/frontend/isr.d.ts.map +1 -0
  347. package/dist/frontend/isr.js +440 -0
  348. package/dist/frontend/isr.js.map +1 -0
  349. package/dist/frontend/layout.d.ts +140 -0
  350. package/dist/frontend/layout.d.ts.map +1 -0
  351. package/dist/frontend/layout.js +392 -0
  352. package/dist/frontend/layout.js.map +1 -0
  353. package/dist/frontend/ssr/react.d.ts +118 -0
  354. package/dist/frontend/ssr/react.d.ts.map +1 -0
  355. package/dist/frontend/ssr/react.js +373 -0
  356. package/dist/frontend/ssr/react.js.map +1 -0
  357. package/dist/frontend/ssr/solid.d.ts +141 -0
  358. package/dist/frontend/ssr/solid.d.ts.map +1 -0
  359. package/dist/frontend/ssr/solid.js +440 -0
  360. package/dist/frontend/ssr/solid.js.map +1 -0
  361. package/dist/frontend/ssr/svelte.d.ts +158 -0
  362. package/dist/frontend/ssr/svelte.d.ts.map +1 -0
  363. package/dist/frontend/ssr/svelte.js +439 -0
  364. package/dist/frontend/ssr/svelte.js.map +1 -0
  365. package/dist/frontend/ssr/vue.d.ts +161 -0
  366. package/dist/frontend/ssr/vue.d.ts.map +1 -0
  367. package/dist/frontend/ssr/vue.js +385 -0
  368. package/dist/frontend/ssr/vue.js.map +1 -0
  369. package/dist/frontend/ssr.d.ts +147 -0
  370. package/dist/frontend/ssr.d.ts.map +1 -0
  371. package/dist/frontend/ssr.js +609 -0
  372. package/dist/frontend/ssr.js.map +1 -0
  373. package/dist/frontend/types.d.ts +1902 -0
  374. package/dist/frontend/types.d.ts.map +1 -0
  375. package/dist/frontend/types.js +8 -0
  376. package/dist/frontend/types.js.map +1 -0
  377. package/dist/graphql/built-in-engine.d.ts +36 -0
  378. package/dist/graphql/built-in-engine.d.ts.map +1 -0
  379. package/dist/graphql/built-in-engine.js +443 -0
  380. package/dist/graphql/built-in-engine.js.map +1 -0
  381. package/dist/graphql/context-builder.d.ts +44 -0
  382. package/dist/graphql/context-builder.d.ts.map +1 -0
  383. package/dist/graphql/context-builder.js +91 -0
  384. package/dist/graphql/context-builder.js.map +1 -0
  385. package/dist/graphql/decorators.d.ts +162 -0
  386. package/dist/graphql/decorators.d.ts.map +1 -0
  387. package/dist/graphql/decorators.js +291 -0
  388. package/dist/graphql/decorators.js.map +1 -0
  389. package/dist/graphql/execution-pipeline.d.ts +67 -0
  390. package/dist/graphql/execution-pipeline.d.ts.map +1 -0
  391. package/dist/graphql/execution-pipeline.js +127 -0
  392. package/dist/graphql/execution-pipeline.js.map +1 -0
  393. package/dist/graphql/graphql-module.d.ts +70 -0
  394. package/dist/graphql/graphql-module.d.ts.map +1 -0
  395. package/dist/graphql/graphql-module.js +442 -0
  396. package/dist/graphql/graphql-module.js.map +1 -0
  397. package/dist/graphql/index.d.ts +48 -0
  398. package/dist/graphql/index.d.ts.map +1 -0
  399. package/dist/graphql/index.js.map +1 -0
  400. package/dist/graphql/metadata.d.ts +37 -0
  401. package/dist/graphql/metadata.d.ts.map +1 -0
  402. package/dist/graphql/metadata.js +130 -0
  403. package/dist/graphql/metadata.js.map +1 -0
  404. package/dist/graphql/schema-builder.d.ts +34 -0
  405. package/dist/graphql/schema-builder.d.ts.map +1 -0
  406. package/dist/graphql/schema-builder.js +251 -0
  407. package/dist/graphql/schema-builder.js.map +1 -0
  408. package/dist/graphql/subscription-handler.d.ts +47 -0
  409. package/dist/graphql/subscription-handler.d.ts.map +1 -0
  410. package/dist/graphql/subscription-handler.js +201 -0
  411. package/dist/graphql/subscription-handler.js.map +1 -0
  412. package/dist/graphql/types.d.ts +252 -0
  413. package/dist/graphql/types.d.ts.map +1 -0
  414. package/dist/graphql/types.js +28 -0
  415. package/dist/graphql/types.js.map +1 -0
  416. package/dist/health/index.d.ts +176 -0
  417. package/dist/health/index.d.ts.map +1 -0
  418. package/dist/health/index.js.map +1 -0
  419. package/dist/i18n/engine.d.ts +105 -0
  420. package/dist/i18n/engine.d.ts.map +1 -0
  421. package/dist/i18n/engine.js +248 -0
  422. package/dist/i18n/engine.js.map +1 -0
  423. package/dist/i18n/index.d.ts +13 -0
  424. package/dist/i18n/index.d.ts.map +1 -0
  425. package/dist/i18n/index.js.map +1 -0
  426. package/dist/i18n/loader.d.ts +79 -0
  427. package/dist/i18n/loader.d.ts.map +1 -0
  428. package/dist/i18n/loader.js +192 -0
  429. package/dist/i18n/loader.js.map +1 -0
  430. package/dist/i18n/middleware.d.ts +96 -0
  431. package/dist/i18n/middleware.d.ts.map +1 -0
  432. package/dist/i18n/middleware.js +126 -0
  433. package/dist/i18n/middleware.js.map +1 -0
  434. package/dist/i18n/negotiator.d.ts +84 -0
  435. package/dist/i18n/negotiator.d.ts.map +1 -0
  436. package/dist/i18n/negotiator.js +139 -0
  437. package/dist/i18n/negotiator.js.map +1 -0
  438. package/dist/i18n/types.d.ts +129 -0
  439. package/dist/i18n/types.d.ts.map +1 -0
  440. package/dist/i18n/types.js +8 -0
  441. package/dist/i18n/types.js.map +1 -0
  442. package/dist/index.d.ts +48 -0
  443. package/dist/index.d.ts.map +1 -0
  444. package/dist/index.js.map +1 -0
  445. package/dist/jobs/drivers/memory.d.ts +38 -0
  446. package/dist/jobs/drivers/memory.d.ts.map +1 -0
  447. package/dist/jobs/drivers/memory.js +246 -0
  448. package/dist/jobs/drivers/memory.js.map +1 -0
  449. package/dist/jobs/drivers/redis.d.ts +34 -0
  450. package/dist/jobs/drivers/redis.d.ts.map +1 -0
  451. package/dist/jobs/drivers/redis.js +355 -0
  452. package/dist/jobs/drivers/redis.js.map +1 -0
  453. package/dist/jobs/index.d.ts +12 -0
  454. package/dist/jobs/index.d.ts.map +1 -0
  455. package/dist/jobs/index.js.map +1 -0
  456. package/dist/jobs/queue.d.ts +93 -0
  457. package/dist/jobs/queue.d.ts.map +1 -0
  458. package/dist/jobs/queue.js +233 -0
  459. package/dist/jobs/queue.js.map +1 -0
  460. package/dist/jobs/types.d.ts +193 -0
  461. package/dist/jobs/types.d.ts.map +1 -0
  462. package/dist/jobs/types.js +8 -0
  463. package/dist/jobs/types.js.map +1 -0
  464. package/dist/jobs/worker.d.ts +91 -0
  465. package/dist/jobs/worker.d.ts.map +1 -0
  466. package/dist/jobs/worker.js +300 -0
  467. package/dist/jobs/worker.js.map +1 -0
  468. package/dist/lock/index.d.ts +141 -0
  469. package/dist/lock/index.d.ts.map +1 -0
  470. package/dist/lock/index.js.map +1 -0
  471. package/dist/logger/index.d.ts +156 -0
  472. package/dist/logger/index.d.ts.map +1 -0
  473. package/dist/logger/index.js.map +1 -0
  474. package/dist/logger/transports/index.d.ts +371 -0
  475. package/dist/logger/transports/index.d.ts.map +1 -0
  476. package/dist/logger/transports/index.js +740 -0
  477. package/dist/logger/transports/index.js.map +1 -0
  478. package/dist/metrics/index.d.ts +163 -0
  479. package/dist/metrics/index.d.ts.map +1 -0
  480. package/dist/metrics/index.js.map +1 -0
  481. package/dist/middleware/built-in.d.ts +50 -0
  482. package/dist/middleware/built-in.d.ts.map +1 -0
  483. package/dist/middleware/built-in.js +220 -0
  484. package/dist/middleware/built-in.js.map +1 -0
  485. package/dist/middleware/index.d.ts +40 -0
  486. package/dist/middleware/index.d.ts.map +1 -0
  487. package/dist/middleware/index.js.map +1 -0
  488. package/dist/migrations/index.d.ts +48 -0
  489. package/dist/migrations/index.d.ts.map +1 -0
  490. package/dist/migrations/index.js +3 -0
  491. package/dist/migrations/index.js.map +1 -0
  492. package/dist/modules/filters.d.ts +150 -0
  493. package/dist/modules/filters.d.ts.map +1 -0
  494. package/dist/modules/filters.js +338 -0
  495. package/dist/modules/filters.js.map +1 -0
  496. package/dist/modules/guards.d.ts +188 -0
  497. package/dist/modules/guards.d.ts.map +1 -0
  498. package/dist/modules/guards.js +278 -0
  499. package/dist/modules/guards.js.map +1 -0
  500. package/dist/modules/index.d.ts +266 -0
  501. package/dist/modules/index.d.ts.map +1 -0
  502. package/dist/modules/index.js.map +1 -0
  503. package/dist/modules/interceptors.d.ts +242 -0
  504. package/dist/modules/interceptors.d.ts.map +1 -0
  505. package/dist/modules/interceptors.js +407 -0
  506. package/dist/modules/interceptors.js.map +1 -0
  507. package/dist/modules/lazy.d.ts +187 -0
  508. package/dist/modules/lazy.d.ts.map +1 -0
  509. package/dist/modules/lazy.js +305 -0
  510. package/dist/modules/lazy.js.map +1 -0
  511. package/dist/modules/lifecycle.d.ts +221 -0
  512. package/dist/modules/lifecycle.d.ts.map +1 -0
  513. package/dist/modules/lifecycle.js +314 -0
  514. package/dist/modules/lifecycle.js.map +1 -0
  515. package/dist/modules/metadata.d.ts +32 -0
  516. package/dist/modules/metadata.d.ts.map +1 -0
  517. package/dist/modules/metadata.js +59 -0
  518. package/dist/modules/metadata.js.map +1 -0
  519. package/dist/modules/pipes.d.ts +287 -0
  520. package/dist/modules/pipes.d.ts.map +1 -0
  521. package/dist/modules/pipes.js +443 -0
  522. package/dist/modules/pipes.js.map +1 -0
  523. package/dist/notification/channels/base.d.ts +32 -0
  524. package/dist/notification/channels/base.d.ts.map +1 -0
  525. package/dist/notification/channels/base.js +37 -0
  526. package/dist/notification/channels/base.js.map +1 -0
  527. package/dist/notification/channels/email.d.ts +37 -0
  528. package/dist/notification/channels/email.d.ts.map +1 -0
  529. package/dist/notification/channels/email.js +85 -0
  530. package/dist/notification/channels/email.js.map +1 -0
  531. package/dist/notification/channels/push.d.ts +37 -0
  532. package/dist/notification/channels/push.d.ts.map +1 -0
  533. package/dist/notification/channels/push.js +84 -0
  534. package/dist/notification/channels/push.js.map +1 -0
  535. package/dist/notification/channels/sms.d.ts +37 -0
  536. package/dist/notification/channels/sms.d.ts.map +1 -0
  537. package/dist/notification/channels/sms.js +83 -0
  538. package/dist/notification/channels/sms.js.map +1 -0
  539. package/dist/notification/channels/whatsapp.d.ts +37 -0
  540. package/dist/notification/channels/whatsapp.d.ts.map +1 -0
  541. package/dist/notification/channels/whatsapp.js +81 -0
  542. package/dist/notification/channels/whatsapp.js.map +1 -0
  543. package/dist/notification/index.d.ts +15 -0
  544. package/dist/notification/index.d.ts.map +1 -0
  545. package/dist/notification/index.js.map +1 -0
  546. package/dist/notification/service.d.ts +100 -0
  547. package/dist/notification/service.d.ts.map +1 -0
  548. package/dist/notification/service.js +279 -0
  549. package/dist/notification/service.js.map +1 -0
  550. package/dist/notification/types.d.ts +253 -0
  551. package/dist/notification/types.d.ts.map +1 -0
  552. package/dist/notification/types.js +14 -0
  553. package/dist/notification/types.js.map +1 -0
  554. package/dist/observability/__tests__/observability.test.d.ts +2 -0
  555. package/dist/observability/__tests__/observability.test.d.ts.map +1 -0
  556. package/dist/observability/__tests__/observability.test.js +404 -0
  557. package/dist/observability/__tests__/observability.test.js.map +1 -0
  558. package/dist/observability/breadcrumbs.d.ts +48 -0
  559. package/dist/observability/breadcrumbs.d.ts.map +1 -0
  560. package/dist/observability/breadcrumbs.js +97 -0
  561. package/dist/observability/breadcrumbs.js.map +1 -0
  562. package/dist/observability/index.d.ts +95 -0
  563. package/dist/observability/index.d.ts.map +1 -0
  564. package/dist/observability/index.js.map +1 -0
  565. package/dist/observability/interceptor.d.ts +19 -0
  566. package/dist/observability/interceptor.d.ts.map +1 -0
  567. package/dist/observability/interceptor.js +67 -0
  568. package/dist/observability/interceptor.js.map +1 -0
  569. package/dist/observability/service.d.ts +101 -0
  570. package/dist/observability/service.d.ts.map +1 -0
  571. package/dist/observability/service.js +249 -0
  572. package/dist/observability/service.js.map +1 -0
  573. package/dist/observability/trace.d.ts +21 -0
  574. package/dist/observability/trace.d.ts.map +1 -0
  575. package/dist/observability/trace.js +35 -0
  576. package/dist/observability/trace.js.map +1 -0
  577. package/dist/observability/types.d.ts +172 -0
  578. package/dist/observability/types.d.ts.map +1 -0
  579. package/dist/observability/types.js +8 -0
  580. package/dist/observability/types.js.map +1 -0
  581. package/dist/openapi/decorators.d.ts +173 -0
  582. package/dist/openapi/decorators.d.ts.map +1 -0
  583. package/dist/openapi/decorators.js +276 -0
  584. package/dist/openapi/decorators.js.map +1 -0
  585. package/dist/openapi/document-builder.d.ts +82 -0
  586. package/dist/openapi/document-builder.d.ts.map +1 -0
  587. package/dist/openapi/document-builder.js +228 -0
  588. package/dist/openapi/document-builder.js.map +1 -0
  589. package/dist/openapi/index.d.ts +48 -0
  590. package/dist/openapi/index.d.ts.map +1 -0
  591. package/dist/openapi/index.js.map +1 -0
  592. package/dist/openapi/metadata.d.ts +36 -0
  593. package/dist/openapi/metadata.d.ts.map +1 -0
  594. package/dist/openapi/metadata.js +78 -0
  595. package/dist/openapi/metadata.js.map +1 -0
  596. package/dist/openapi/route-scanner.d.ts +34 -0
  597. package/dist/openapi/route-scanner.d.ts.map +1 -0
  598. package/dist/openapi/route-scanner.js +174 -0
  599. package/dist/openapi/route-scanner.js.map +1 -0
  600. package/dist/openapi/schema-generator.d.ts +53 -0
  601. package/dist/openapi/schema-generator.d.ts.map +1 -0
  602. package/dist/openapi/schema-generator.js +236 -0
  603. package/dist/openapi/schema-generator.js.map +1 -0
  604. package/dist/openapi/swagger-module.d.ts +57 -0
  605. package/dist/openapi/swagger-module.d.ts.map +1 -0
  606. package/dist/openapi/swagger-module.js +143 -0
  607. package/dist/openapi/swagger-module.js.map +1 -0
  608. package/dist/openapi/types.d.ts +344 -0
  609. package/dist/openapi/types.d.ts.map +1 -0
  610. package/dist/openapi/types.js +7 -0
  611. package/dist/openapi/types.js.map +1 -0
  612. package/dist/orm/index.d.ts +10 -0
  613. package/dist/orm/index.d.ts.map +1 -0
  614. package/dist/orm/index.js.map +1 -0
  615. package/dist/router/index.d.ts +73 -0
  616. package/dist/router/index.d.ts.map +1 -0
  617. package/dist/router/index.js.map +1 -0
  618. package/dist/router/linear.d.ts +54 -0
  619. package/dist/router/linear.d.ts.map +1 -0
  620. package/dist/router/linear.js +261 -0
  621. package/dist/router/linear.js.map +1 -0
  622. package/dist/router/regex.d.ts +49 -0
  623. package/dist/router/regex.d.ts.map +1 -0
  624. package/dist/router/regex.js +201 -0
  625. package/dist/router/regex.js.map +1 -0
  626. package/dist/router/tree.d.ts +112 -0
  627. package/dist/router/tree.d.ts.map +1 -0
  628. package/dist/router/tree.js +360 -0
  629. package/dist/router/tree.js.map +1 -0
  630. package/dist/rpc/index.d.ts +321 -0
  631. package/dist/rpc/index.d.ts.map +1 -0
  632. package/dist/rpc/index.js.map +1 -0
  633. package/dist/schema/index.d.ts +10 -0
  634. package/dist/schema/index.d.ts.map +1 -0
  635. package/dist/schema/index.js.map +1 -0
  636. package/dist/security/index.d.ts +126 -0
  637. package/dist/security/index.d.ts.map +1 -0
  638. package/dist/security/index.js +309 -0
  639. package/dist/security/index.js.map +1 -0
  640. package/dist/ssg/index.d.ts +73 -0
  641. package/dist/ssg/index.d.ts.map +1 -0
  642. package/dist/ssg/index.js +464 -0
  643. package/dist/ssg/index.js.map +1 -0
  644. package/dist/storage/index.d.ts +99 -0
  645. package/dist/storage/index.d.ts.map +1 -0
  646. package/dist/storage/index.js +338 -0
  647. package/dist/storage/index.js.map +1 -0
  648. package/dist/telemetry/index.d.ts +376 -0
  649. package/dist/telemetry/index.d.ts.map +1 -0
  650. package/dist/telemetry/index.js.map +1 -0
  651. package/dist/template/index.d.ts +7 -0
  652. package/dist/template/index.d.ts.map +1 -0
  653. package/dist/template/index.js.map +1 -0
  654. package/dist/templates/engine.d.ts +60 -0
  655. package/dist/templates/engine.d.ts.map +1 -0
  656. package/dist/templates/engine.js +177 -0
  657. package/dist/templates/engine.js.map +1 -0
  658. package/dist/templates/index.d.ts +9 -0
  659. package/dist/templates/index.d.ts.map +1 -0
  660. package/dist/templates/index.js.map +1 -0
  661. package/dist/templates/loader.d.ts +45 -0
  662. package/dist/templates/loader.d.ts.map +1 -0
  663. package/dist/templates/loader.js +274 -0
  664. package/dist/templates/loader.js.map +1 -0
  665. package/dist/templates/renderers/markdown.d.ts +46 -0
  666. package/dist/templates/renderers/markdown.d.ts.map +1 -0
  667. package/dist/templates/renderers/markdown.js +181 -0
  668. package/dist/templates/renderers/markdown.js.map +1 -0
  669. package/dist/templates/renderers/simple.d.ts +35 -0
  670. package/dist/templates/renderers/simple.d.ts.map +1 -0
  671. package/dist/templates/renderers/simple.js +245 -0
  672. package/dist/templates/renderers/simple.js.map +1 -0
  673. package/dist/templates/types.d.ts +138 -0
  674. package/dist/templates/types.d.ts.map +1 -0
  675. package/dist/templates/types.js +8 -0
  676. package/dist/templates/types.js.map +1 -0
  677. package/dist/testing/index.d.ts +539 -0
  678. package/dist/testing/index.d.ts.map +1 -0
  679. package/dist/testing/index.js.map +1 -0
  680. package/dist/types/index.d.ts +116 -0
  681. package/dist/types/index.d.ts.map +1 -0
  682. package/dist/types/index.js.map +1 -0
  683. package/dist/validation/index.d.ts +89 -0
  684. package/dist/validation/index.d.ts.map +1 -0
  685. package/dist/validation/index.js +276 -0
  686. package/dist/validation/index.js.map +1 -0
  687. package/dist/validation/schemas.d.ts +283 -0
  688. package/dist/validation/schemas.d.ts.map +1 -0
  689. package/dist/validation/schemas.js +407 -0
  690. package/dist/validation/schemas.js.map +1 -0
  691. package/dist/websocket/index.d.ts +252 -0
  692. package/dist/websocket/index.d.ts.map +1 -0
  693. package/dist/websocket/index.js +749 -0
  694. package/dist/websocket/index.js.map +1 -0
  695. package/package.json +3 -3
  696. package/src/database/migrations/index.ts +8 -0
  697. package/src/migrations/index.ts +40 -1
  698. package/src/types/index.ts +1 -1
  699. package/tsconfig.json +2 -6
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Layout Nesting Implementation
3
+ *
4
+ * Provides Next.js-style layout nesting:
5
+ * - _layout.tsx convention for nested layouts
6
+ * - Layout inheritance down directory tree
7
+ * - Layout state preservation on navigation
8
+ * - Per-segment layouts
9
+ */
10
+ import type { LayoutConfig, LayoutDefinition, LayoutNode, LayoutProps, LayoutRenderResult, LayoutSegment, PartialLayoutConfig } from "./types.js";
11
+ import type { SSRContext, SSRElement } from "./types.js";
12
+ /**
13
+ * Layout Manager handles nested layout resolution and rendering
14
+ *
15
+ * Features:
16
+ * - _layout.tsx convention
17
+ * - Layout inheritance down directory tree
18
+ * - Layout state preservation
19
+ * - Per-segment layouts
20
+ */
21
+ export declare class LayoutManager {
22
+ private config;
23
+ private logger;
24
+ private layouts;
25
+ private layoutTree;
26
+ constructor(config?: PartialLayoutConfig);
27
+ /**
28
+ * Normalize partial config to full config with defaults
29
+ */
30
+ private normalizeConfig;
31
+ /**
32
+ * Initialize the layout manager by scanning for layout files
33
+ */
34
+ init(): Promise<void>;
35
+ /**
36
+ * Scan for layout files in the pages directory
37
+ */
38
+ private scanLayoutFiles;
39
+ /**
40
+ * Process a single layout file
41
+ */
42
+ private processLayoutFile;
43
+ /**
44
+ * Get layout segment from file path
45
+ */
46
+ private getLayoutSegment;
47
+ /**
48
+ * Calculate depth of layout segment
49
+ */
50
+ private calculateDepth;
51
+ /**
52
+ * Generate unique layout ID
53
+ */
54
+ private generateLayoutId;
55
+ /**
56
+ * Build the layout tree from collected layouts
57
+ */
58
+ private buildLayoutTree;
59
+ /**
60
+ * Build a layout tree node
61
+ */
62
+ private buildTreeNode;
63
+ /**
64
+ * Check if a segment is a direct child of another
65
+ */
66
+ private isDirectChild;
67
+ /**
68
+ * Get layout chain for a route
69
+ */
70
+ getLayoutChain(routePath: string): LayoutDefinition[];
71
+ /**
72
+ * Get route segments from path
73
+ */
74
+ private getRouteSegments;
75
+ /**
76
+ * Load layout module
77
+ */
78
+ private loadLayoutModule;
79
+ /**
80
+ * Render layouts with nested content
81
+ */
82
+ renderLayouts(routePath: string, content: string, context: SSRContext): Promise<LayoutRenderResult>;
83
+ /**
84
+ * Get layout for a segment
85
+ */
86
+ getLayout(segment: string): LayoutDefinition | undefined;
87
+ /**
88
+ * Get all layouts
89
+ */
90
+ getAllLayouts(): LayoutDefinition[];
91
+ /**
92
+ * Get layout tree
93
+ */
94
+ getLayoutTree(): LayoutNode | null;
95
+ /**
96
+ * Check if a route has a layout
97
+ */
98
+ hasLayout(routePath: string): boolean;
99
+ /**
100
+ * Get layout depth for a route
101
+ */
102
+ getLayoutDepth(routePath: string): number;
103
+ /**
104
+ * Reload layouts (for hot reload)
105
+ */
106
+ reload(): Promise<void>;
107
+ /**
108
+ * Get configuration
109
+ */
110
+ getConfig(): LayoutConfig;
111
+ }
112
+ /**
113
+ * Create a layout manager
114
+ */
115
+ export declare function createLayoutManager(config?: PartialLayoutConfig): LayoutManager;
116
+ /**
117
+ * Check if a file is a layout file
118
+ */
119
+ export declare function isLayoutFile(filename: string): boolean;
120
+ /**
121
+ * Get layout segment from file path
122
+ */
123
+ export declare function getLayoutSegmentFromPath(filePath: string): string;
124
+ /**
125
+ * Build layout props for a page
126
+ */
127
+ export declare function buildLayoutProps(children: string, context: SSRContext): LayoutProps;
128
+ /**
129
+ * Create a layout segment
130
+ */
131
+ export declare function createLayoutSegment(path: string, params?: Record<string, string>): LayoutSegment;
132
+ /**
133
+ * Merge layout head elements
134
+ */
135
+ export declare function mergeLayoutHead(...heads: SSRElement[][]): SSRElement[];
136
+ /**
137
+ * Render layout tree to string (for debugging)
138
+ */
139
+ export declare function layoutTreeToString(node: LayoutNode, indent?: number): string;
140
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/frontend/layout.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EACX,YAAY,EACZ,gBAAgB,EAEhB,UAAU,EACV,WAAW,EACX,kBAAkB,EAElB,aAAa,EAEb,mBAAmB,EACnB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAgB,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AASvE;;;;;;;;GAQG;AACH,qBAAa,aAAa;IACzB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,UAAU,CAA2B;gBAEjC,MAAM,GAAE,mBAAwB;IAS5C;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAS3B;;OAEG;YACW,eAAe;IAe7B;;OAEG;YACW,iBAAiB;IAkB/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;OAEG;IACH,OAAO,CAAC,cAAc;IAKtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAavB;;OAEG;IACH,OAAO,CAAC,aAAa;IA0BrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAcrB;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAkBrD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;YACW,gBAAgB;IAY9B;;OAEG;IACG,aAAa,CAClB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,UAAU,GACjB,OAAO,CAAC,kBAAkB,CAAC;IAqD9B;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAIxD;;OAEG;IACH,aAAa,IAAI,gBAAgB,EAAE;IAInC;;OAEG;IACH,aAAa,IAAI,UAAU,GAAG,IAAI;IAIlC;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAarC;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAIzC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAO7B;;OAEG;IACH,SAAS,IAAI,YAAY;CAGzB;AAID;;GAEG;AACH,wBAAgB,mBAAmB,CAClC,MAAM,GAAE,mBAAwB,GAC9B,aAAa,CAEf;AAID;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGtD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CASjE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,UAAU,GACjB,WAAW,CAOb;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAClC,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACjC,aAAa,CAMf;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,KAAK,EAAE,UAAU,EAAE,EAAE,GAAG,UAAU,EAAE,CAetE;AAsBD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,SAAI,GAAG,MAAM,CASvE"}
@@ -0,0 +1,392 @@
1
+ /**
2
+ * Layout Nesting Implementation
3
+ *
4
+ * Provides Next.js-style layout nesting:
5
+ * - _layout.tsx convention for nested layouts
6
+ * - Layout inheritance down directory tree
7
+ * - Layout state preservation on navigation
8
+ * - Per-segment layouts
9
+ */
10
+ import { createLogger } from "../logger/index.js";
11
+ // ============= Constants =============
12
+ const LAYOUT_FILE = "_layout";
13
+ const SUPPORTED_EXTENSIONS = [".tsx", ".ts", ".jsx", ".js"];
14
+ // ============= Layout Manager Class =============
15
+ /**
16
+ * Layout Manager handles nested layout resolution and rendering
17
+ *
18
+ * Features:
19
+ * - _layout.tsx convention
20
+ * - Layout inheritance down directory tree
21
+ * - Layout state preservation
22
+ * - Per-segment layouts
23
+ */
24
+ export class LayoutManager {
25
+ config;
26
+ logger;
27
+ layouts = new Map();
28
+ layoutTree = null;
29
+ constructor(config = {}) {
30
+ this.config = this.normalizeConfig(config);
31
+ this.logger = createLogger({
32
+ level: "debug",
33
+ pretty: true,
34
+ context: { component: "LayoutManager" },
35
+ });
36
+ }
37
+ /**
38
+ * Normalize partial config to full config with defaults
39
+ */
40
+ normalizeConfig(config) {
41
+ return {
42
+ pagesDir: config.pagesDir ?? "pages",
43
+ rootDir: config.rootDir ?? process.cwd(),
44
+ extensions: config.extensions ?? SUPPORTED_EXTENSIONS,
45
+ preserveState: config.preserveState ?? true,
46
+ };
47
+ }
48
+ /**
49
+ * Initialize the layout manager by scanning for layout files
50
+ */
51
+ async init() {
52
+ this.logger.info(`Initializing layout manager from: ${this.config.pagesDir}`);
53
+ await this.scanLayoutFiles();
54
+ this.buildLayoutTree();
55
+ this.logger.info(`Loaded ${this.layouts.size} layouts`);
56
+ }
57
+ /**
58
+ * Scan for layout files in the pages directory
59
+ */
60
+ async scanLayoutFiles() {
61
+ const pagesPath = this.config.pagesDir;
62
+ const glob = new Bun.Glob(`**/${LAYOUT_FILE}{${this.config.extensions.join(",")}}`);
63
+ try {
64
+ for await (const file of glob.scan(pagesPath)) {
65
+ await this.processLayoutFile(file, pagesPath);
66
+ }
67
+ }
68
+ catch (error) {
69
+ this.logger.error(`Failed to scan layouts: ${pagesPath}`, error);
70
+ }
71
+ }
72
+ /**
73
+ * Process a single layout file
74
+ */
75
+ async processLayoutFile(filePath, basePath) {
76
+ const fullPath = `${basePath}/${filePath}`;
77
+ const segment = this.getLayoutSegment(filePath);
78
+ const layout = {
79
+ id: this.generateLayoutId(filePath),
80
+ filePath: fullPath,
81
+ segment,
82
+ depth: this.calculateDepth(segment),
83
+ };
84
+ this.layouts.set(segment, layout);
85
+ this.logger.debug(`Processed layout: ${segment}`);
86
+ }
87
+ /**
88
+ * Get layout segment from file path
89
+ */
90
+ getLayoutSegment(filePath) {
91
+ // Remove _layout.tsx from path
92
+ const segment = filePath.replace(new RegExp(`/${LAYOUT_FILE}\\.(tsx?|jsx?)$`), "");
93
+ return segment === "" ? "/" : `/${segment}`;
94
+ }
95
+ /**
96
+ * Calculate depth of layout segment
97
+ */
98
+ calculateDepth(segment) {
99
+ if (segment === "/")
100
+ return 0;
101
+ return segment.split("/").length - 1;
102
+ }
103
+ /**
104
+ * Generate unique layout ID
105
+ */
106
+ generateLayoutId(filePath) {
107
+ return filePath.replace(/[\/\\.]/g, "-").replace(/^-/, "");
108
+ }
109
+ /**
110
+ * Build the layout tree from collected layouts
111
+ */
112
+ buildLayoutTree() {
113
+ // Find root layout
114
+ const rootLayout = this.layouts.get("/");
115
+ if (!rootLayout) {
116
+ this.logger.warn("No root layout found");
117
+ this.layoutTree = null;
118
+ return;
119
+ }
120
+ // Build tree recursively
121
+ this.layoutTree = this.buildTreeNode(rootLayout, null);
122
+ }
123
+ /**
124
+ * Build a layout tree node
125
+ */
126
+ buildTreeNode(layout, parent) {
127
+ const node = {
128
+ layout,
129
+ parent,
130
+ children: [],
131
+ };
132
+ // Find child layouts
133
+ for (const [segment, childLayout] of this.layouts) {
134
+ if (segment === layout.segment)
135
+ continue;
136
+ // Check if this is a direct child
137
+ if (this.isDirectChild(layout.segment, segment)) {
138
+ node.children.push(this.buildTreeNode(childLayout, node));
139
+ }
140
+ }
141
+ // Sort children by depth
142
+ node.children.sort((a, b) => a.layout.depth - b.layout.depth);
143
+ return node;
144
+ }
145
+ /**
146
+ * Check if a segment is a direct child of another
147
+ */
148
+ isDirectChild(parentSegment, childSegment) {
149
+ if (parentSegment === "/") {
150
+ // Root layout: direct children have no other parent
151
+ const parts = childSegment.split("/").filter(Boolean);
152
+ return parts.length === 1;
153
+ }
154
+ // Check if child starts with parent and has exactly one more segment
155
+ if (!childSegment.startsWith(parentSegment + "/"))
156
+ return false;
157
+ const remaining = childSegment.slice(parentSegment.length + 1);
158
+ return !remaining.includes("/");
159
+ }
160
+ /**
161
+ * Get layout chain for a route
162
+ */
163
+ getLayoutChain(routePath) {
164
+ const chain = [];
165
+ // Start from root and work down
166
+ const segments = this.getRouteSegments(routePath);
167
+ for (let i = 0; i <= segments.length; i++) {
168
+ const segment = i === 0 ? "/" : "/" + segments.slice(0, i).join("/");
169
+ const layout = this.layouts.get(segment);
170
+ if (layout) {
171
+ chain.push(layout);
172
+ }
173
+ }
174
+ return chain;
175
+ }
176
+ /**
177
+ * Get route segments from path
178
+ */
179
+ getRouteSegments(path) {
180
+ return path.split("/").filter(Boolean);
181
+ }
182
+ /**
183
+ * Load layout module
184
+ */
185
+ async loadLayoutModule(filePath) {
186
+ try {
187
+ const module = await import(filePath);
188
+ return module.default || module;
189
+ }
190
+ catch (error) {
191
+ this.logger.error(`Failed to load layout module: ${filePath}`, error);
192
+ return null;
193
+ }
194
+ }
195
+ /**
196
+ * Render layouts with nested content
197
+ */
198
+ async renderLayouts(routePath, content, context) {
199
+ const chain = this.getLayoutChain(routePath);
200
+ if (chain.length === 0) {
201
+ return {
202
+ html: content,
203
+ head: [],
204
+ body: [],
205
+ layouts: [],
206
+ };
207
+ }
208
+ let html = content;
209
+ const head = [];
210
+ const body = [];
211
+ const renderedLayouts = [];
212
+ // Render layouts from innermost to outermost
213
+ for (let i = chain.length - 1; i >= 0; i--) {
214
+ const layout = chain[i];
215
+ const renderer = await this.loadLayoutModule(layout.filePath);
216
+ if (renderer) {
217
+ const props = {
218
+ children: html,
219
+ params: context.params,
220
+ query: context.query,
221
+ pathname: context.pathname,
222
+ };
223
+ // Render layout
224
+ const result = await renderer(props, context);
225
+ if (typeof result === "string") {
226
+ html = result;
227
+ }
228
+ else {
229
+ html = result.html;
230
+ if (result.head)
231
+ head.push(...result.head);
232
+ if (result.body)
233
+ body.push(...result.body);
234
+ }
235
+ renderedLayouts.push(layout.segment);
236
+ }
237
+ }
238
+ return {
239
+ html,
240
+ head,
241
+ body,
242
+ layouts: renderedLayouts,
243
+ };
244
+ }
245
+ /**
246
+ * Get layout for a segment
247
+ */
248
+ getLayout(segment) {
249
+ return this.layouts.get(segment);
250
+ }
251
+ /**
252
+ * Get all layouts
253
+ */
254
+ getAllLayouts() {
255
+ return Array.from(this.layouts.values());
256
+ }
257
+ /**
258
+ * Get layout tree
259
+ */
260
+ getLayoutTree() {
261
+ return this.layoutTree;
262
+ }
263
+ /**
264
+ * Check if a route has a layout
265
+ */
266
+ hasLayout(routePath) {
267
+ const segments = this.getRouteSegments(routePath);
268
+ for (let i = 0; i <= segments.length; i++) {
269
+ const segment = i === 0 ? "/" : "/" + segments.slice(0, i).join("/");
270
+ if (this.layouts.has(segment)) {
271
+ return true;
272
+ }
273
+ }
274
+ return false;
275
+ }
276
+ /**
277
+ * Get layout depth for a route
278
+ */
279
+ getLayoutDepth(routePath) {
280
+ return this.getLayoutChain(routePath).length;
281
+ }
282
+ /**
283
+ * Reload layouts (for hot reload)
284
+ */
285
+ async reload() {
286
+ this.logger.info("Reloading layouts...");
287
+ this.layouts.clear();
288
+ this.layoutTree = null;
289
+ await this.init();
290
+ }
291
+ /**
292
+ * Get configuration
293
+ */
294
+ getConfig() {
295
+ return { ...this.config };
296
+ }
297
+ }
298
+ // ============= Factory Function =============
299
+ /**
300
+ * Create a layout manager
301
+ */
302
+ export function createLayoutManager(config = {}) {
303
+ return new LayoutManager(config);
304
+ }
305
+ // ============= Utility Functions =============
306
+ /**
307
+ * Check if a file is a layout file
308
+ */
309
+ export function isLayoutFile(filename) {
310
+ const baseName = filename.replace(/\.(tsx?|jsx?)$/, "");
311
+ return baseName === LAYOUT_FILE;
312
+ }
313
+ /**
314
+ * Get layout segment from file path
315
+ */
316
+ export function getLayoutSegmentFromPath(filePath) {
317
+ const parts = filePath.split("/");
318
+ const dirParts = parts.slice(0, -1); // Remove filename
319
+ if (dirParts.length === 0) {
320
+ return "/";
321
+ }
322
+ return "/" + dirParts.join("/");
323
+ }
324
+ /**
325
+ * Build layout props for a page
326
+ */
327
+ export function buildLayoutProps(children, context) {
328
+ return {
329
+ children,
330
+ params: context.params,
331
+ query: context.query,
332
+ pathname: context.pathname,
333
+ };
334
+ }
335
+ /**
336
+ * Create a layout segment
337
+ */
338
+ export function createLayoutSegment(path, params = {}) {
339
+ return {
340
+ path,
341
+ params,
342
+ component: null,
343
+ };
344
+ }
345
+ /**
346
+ * Merge layout head elements
347
+ */
348
+ export function mergeLayoutHead(...heads) {
349
+ const merged = [];
350
+ const seen = new Set();
351
+ for (const head of heads) {
352
+ for (const element of head) {
353
+ const key = getHeadElementKey(element);
354
+ if (!seen.has(key)) {
355
+ seen.add(key);
356
+ merged.push(element);
357
+ }
358
+ }
359
+ }
360
+ return merged;
361
+ }
362
+ /**
363
+ * Get unique key for head element
364
+ */
365
+ function getHeadElementKey(element) {
366
+ switch (element.tag) {
367
+ case "title":
368
+ return "title";
369
+ case "meta":
370
+ return `meta-${element.attrs.name || element.attrs.property || ""}`;
371
+ case "link":
372
+ return `link-${element.attrs.rel}-${element.attrs.href}`;
373
+ case "script":
374
+ return `script-${element.attrs.src || ""}`;
375
+ case "style":
376
+ return `style-${element.attrs.id || ""}`;
377
+ default:
378
+ return `${element.tag}-${JSON.stringify(element.attrs)}`;
379
+ }
380
+ }
381
+ /**
382
+ * Render layout tree to string (for debugging)
383
+ */
384
+ export function layoutTreeToString(node, indent = 0) {
385
+ const prefix = " ".repeat(indent);
386
+ let result = `${prefix}${node.layout.segment}\n`;
387
+ for (const child of node.children) {
388
+ result += layoutTreeToString(child, indent + 1);
389
+ }
390
+ return result;
391
+ }
392
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/frontend/layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * React SSR Renderer
3
+ *
4
+ * Provides server-side rendering for React components using:
5
+ * - renderToPipeableStream / renderToReadableStream for streaming
6
+ * - React Helmet for head management
7
+ * - Suspense boundary support
8
+ */
9
+ import type { FrameworkSSRRenderer, SSRContext, SSRElement, SSRPage } from "../types.js";
10
+ /**
11
+ * Reset head elements for a new render
12
+ */
13
+ export declare function resetHead(): void;
14
+ /**
15
+ * Get collected head elements
16
+ */
17
+ export declare function getHeadElements(): SSRElement[];
18
+ /**
19
+ * Add a head element
20
+ */
21
+ export declare function addHeadElement(element: SSRElement): void;
22
+ /**
23
+ * Create a title element for head
24
+ */
25
+ export declare function title(text: string): SSRElement;
26
+ /**
27
+ * Create a meta element for head
28
+ */
29
+ export declare function meta(attrs: Record<string, string>): SSRElement;
30
+ /**
31
+ * Create a link element for head
32
+ */
33
+ export declare function link(attrs: Record<string, string>): SSRElement;
34
+ /**
35
+ * Create a script element for head
36
+ */
37
+ export declare function script(attrs: Record<string, string>, innerHTML?: string): SSRElement;
38
+ /**
39
+ * Create a style element for head
40
+ */
41
+ export declare function style(innerHTML: string, attrs?: Record<string, string>): SSRElement;
42
+ /**
43
+ * React SSR Renderer implementation
44
+ */
45
+ export declare class ReactSSRRenderer implements FrameworkSSRRenderer {
46
+ private react;
47
+ private reactDomServer;
48
+ private initialized;
49
+ /**
50
+ * Initialize React modules
51
+ */
52
+ init(): Promise<void>;
53
+ /**
54
+ * Render a component to HTML string
55
+ */
56
+ renderToString(component: unknown, context: SSRContext): Promise<string>;
57
+ /**
58
+ * Render a component to a stream
59
+ */
60
+ renderToStream(component: unknown, context: SSRContext): ReadableStream<Uint8Array>;
61
+ /**
62
+ * Get head elements from component
63
+ */
64
+ getHeadElements(context: SSRContext): SSRElement[];
65
+ /**
66
+ * Create the framework-specific component
67
+ */
68
+ createComponent(page: SSRPage, context: SSRContext): unknown;
69
+ /**
70
+ * Render with Suspense support
71
+ */
72
+ renderWithSuspense(component: unknown, context: SSRContext, fallback?: string): Promise<string>;
73
+ /**
74
+ * Render to stream with all callbacks
75
+ */
76
+ renderToStreamWithCallbacks(component: unknown, context: SSRContext, options?: {
77
+ onAllReady?: () => void;
78
+ onShellReady?: () => void;
79
+ onShellError?: (error: Error) => void;
80
+ onError?: (error: Error) => void;
81
+ }): Promise<ReadableStream<Uint8Array>>;
82
+ }
83
+ /**
84
+ * Create a React SSR renderer
85
+ */
86
+ export declare function createReactSSRRenderer(): ReactSSRRenderer;
87
+ /**
88
+ * Convert SSRElement to HTML string
89
+ */
90
+ export declare function ssrElementToString(element: SSRElement): string;
91
+ /**
92
+ * React Helmet-like head management
93
+ */
94
+ export declare class ReactHelmet {
95
+ private static instance;
96
+ private title;
97
+ private metaTags;
98
+ private linkTags;
99
+ private scriptTags;
100
+ private styleTags;
101
+ static getInstance(): ReactHelmet;
102
+ setTitle(title: string): this;
103
+ addMeta(attrs: Record<string, string>): this;
104
+ addLink(attrs: Record<string, string>): this;
105
+ addScript(attrs: Record<string, string>, innerHTML?: string): this;
106
+ addStyle(innerHTML: string, attrs?: Record<string, string>): this;
107
+ reset(): void;
108
+ getTitle(): string;
109
+ getMetaTags(): SSRElement[];
110
+ getLinkTags(): SSRElement[];
111
+ getScriptTags(): SSRElement[];
112
+ getStyleTags(): SSRElement[];
113
+ }
114
+ /**
115
+ * Get React Helmet instance
116
+ */
117
+ export declare function helmet(): ReactHelmet;
118
+ //# sourceMappingURL=react.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../../src/frontend/ssr/react.ts"],"names":[],"mappings":"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"}