@wrikka/solid-framework 0.0.0-stage → 0.15.0

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 (925) hide show
  1. package/README.md +104 -3
  2. package/dist/vite.d.ts +661 -0
  3. package/dist/vite.d.ts.map +1 -0
  4. package/dist/vite.js +10 -0
  5. package/dist/vite.js.map +1 -0
  6. package/package.json +247 -5
  7. package/src/actions/index.ts +5 -0
  8. package/src/actions/modules/action/adapters/http/handler.ts +80 -0
  9. package/src/actions/modules/action/application/index.ts +1 -0
  10. package/src/actions/modules/action/application/usecases/create-action.ts +92 -0
  11. package/src/actions/modules/action/application/usecases/index.ts +2 -0
  12. package/src/actions/modules/action/application/usecases/registry.ts +20 -0
  13. package/src/actions/modules/action/index.ts +2 -0
  14. package/src/actions/presentation/index.ts +1 -0
  15. package/src/actions/presentation/useSubmission.ts +46 -0
  16. package/src/actions/types/index.ts +35 -0
  17. package/src/app/index.ts +126 -0
  18. package/src/app/modules/ai/domain/operations/handler.ts +46 -0
  19. package/src/app/modules/ai/domain/operations/llms.ts +54 -0
  20. package/src/app/modules/ai/domain/operations/mcp.ts +134 -0
  21. package/src/app/modules/ai/index.ts +3 -0
  22. package/src/app/modules/api-docs/domain/operations/openapi.ts +113 -0
  23. package/src/app/modules/api-docs/index.ts +1 -0
  24. package/src/app/modules/app-def/index.ts +225 -0
  25. package/src/app/modules/auth/application/usecases/auth.ts +161 -0
  26. package/src/app/modules/auth/application/usecases/oauth.ts +105 -0
  27. package/src/app/modules/auth/index.ts +2 -0
  28. package/src/app/modules/cache/adapters/edge-kv.ts +55 -0
  29. package/src/app/modules/cache/adapters/fs.ts +58 -0
  30. package/src/app/modules/cache/adapters/memory.ts +13 -0
  31. package/src/app/modules/cache/domain/operations/tags.ts +114 -0
  32. package/src/app/modules/cache/index.ts +7 -0
  33. package/src/app/modules/cache/ports/store.ts +14 -0
  34. package/src/app/modules/config/domain/index.ts +1 -0
  35. package/src/app/modules/config/domain/models/config.ts +72 -0
  36. package/src/app/modules/config/domain/models/index.ts +1 -0
  37. package/src/app/modules/config/index.ts +1 -0
  38. package/src/app/modules/content/domain/operations/collection.ts +109 -0
  39. package/src/app/modules/content/index.ts +8 -0
  40. package/src/app/modules/content/presentation/Markdown.tsx +78 -0
  41. package/src/app/modules/conventions/domain/index.ts +1 -0
  42. package/src/app/modules/conventions/domain/operations/index.ts +1 -0
  43. package/src/app/modules/conventions/domain/operations/scan.ts +73 -0
  44. package/src/app/modules/conventions/index.ts +1 -0
  45. package/src/app/modules/db/application/usecases/db.ts +49 -0
  46. package/src/app/modules/db/index.ts +1 -0
  47. package/src/app/modules/deploy/adapters/aws-lambda.ts +54 -0
  48. package/src/app/modules/deploy/adapters/bun.ts +15 -0
  49. package/src/app/modules/deploy/adapters/cloudflare.ts +15 -0
  50. package/src/app/modules/deploy/adapters/deno.ts +15 -0
  51. package/src/app/modules/deploy/adapters/netlify.ts +18 -0
  52. package/src/app/modules/deploy/adapters/node.ts +63 -0
  53. package/src/app/modules/deploy/adapters/vercel.ts +22 -0
  54. package/src/app/modules/deploy/domain/models/preset.ts +38 -0
  55. package/src/app/modules/deploy/domain/operations/presets.ts +92 -0
  56. package/src/app/modules/deploy/index.ts +9 -0
  57. package/src/app/modules/draft/domain/operations/draft-mode.ts +125 -0
  58. package/src/app/modules/draft/index.ts +1 -0
  59. package/src/app/modules/env/domain/operations/create-env.ts +156 -0
  60. package/src/app/modules/env/index.ts +1 -0
  61. package/src/app/modules/file-routes/application/usecases/api-client.ts +120 -0
  62. package/src/app/modules/file-routes/domain/errors.ts +61 -0
  63. package/src/app/modules/file-routes/domain/index.ts +63 -0
  64. package/src/app/modules/file-routes/domain/models/index.ts +1 -0
  65. package/src/app/modules/file-routes/domain/models/route.ts +38 -0
  66. package/src/app/modules/file-routes/domain/operations/actions.ts +107 -0
  67. package/src/app/modules/file-routes/domain/operations/api.ts +87 -0
  68. package/src/app/modules/file-routes/domain/operations/codegen.ts +76 -0
  69. package/src/app/modules/file-routes/domain/operations/content.ts +61 -0
  70. package/src/app/modules/file-routes/domain/operations/defer.ts +245 -0
  71. package/src/app/modules/file-routes/domain/operations/index.ts +65 -0
  72. package/src/app/modules/file-routes/domain/operations/loader.ts +138 -0
  73. package/src/app/modules/file-routes/domain/operations/manifest.ts +229 -0
  74. package/src/app/modules/file-routes/domain/operations/match.ts +75 -0
  75. package/src/app/modules/file-routes/domain/operations/static-params.ts +58 -0
  76. package/src/app/modules/file-routes/domain/operations/typed.ts +127 -0
  77. package/src/app/modules/file-routes/index.ts +143 -0
  78. package/src/app/modules/file-routes/presentation/DevtoolsOverlay.tsx +234 -0
  79. package/src/app/modules/file-routes/presentation/FileRoutes.ts +254 -0
  80. package/src/app/modules/file-routes/presentation/Form.tsx +122 -0
  81. package/src/app/modules/file-routes/presentation/Link.tsx +132 -0
  82. package/src/app/modules/file-routes/presentation/ServerComponent.tsx +100 -0
  83. package/src/app/modules/file-routes/presentation/content-page.tsx +26 -0
  84. package/src/app/modules/file-routes/presentation/dev-events.ts +112 -0
  85. package/src/app/modules/file-routes/presentation/index.ts +98 -0
  86. package/src/app/modules/file-routes/presentation/loader-cache.ts +96 -0
  87. package/src/app/modules/file-routes/presentation/loader-data.ts +207 -0
  88. package/src/app/modules/file-routes/presentation/location.ts +217 -0
  89. package/src/app/modules/file-routes/presentation/normalize-route.ts +155 -0
  90. package/src/app/modules/file-routes/presentation/page-tree.ts +211 -0
  91. package/src/app/modules/file-routes/presentation/route-contexts.ts +89 -0
  92. package/src/app/modules/file-routes/presentation/route-def.ts +154 -0
  93. package/src/app/modules/file-routes/presentation/route-fallbacks.ts +66 -0
  94. package/src/app/modules/file-routes/presentation/route-modules.ts +138 -0
  95. package/src/app/modules/file-routes/presentation/slot.tsx +43 -0
  96. package/src/app/modules/file-routes/presentation/status.ts +13 -0
  97. package/src/app/modules/file-routes/presentation/use-action.ts +81 -0
  98. package/src/app/modules/file-routes/presentation/use-optimistic.ts +50 -0
  99. package/src/app/modules/file-routes/presentation/use-preload.ts +38 -0
  100. package/src/app/modules/file-routes/presentation/use-route.ts +254 -0
  101. package/src/app/modules/flash/domain/operations/flash.ts +70 -0
  102. package/src/app/modules/flash/index.ts +1 -0
  103. package/src/app/modules/fonts/domain/operations/font.ts +91 -0
  104. package/src/app/modules/fonts/index.ts +1 -0
  105. package/src/app/modules/i18n/domain/operations/i18n-middleware.ts +76 -0
  106. package/src/app/modules/i18n/domain/operations/locale.ts +39 -0
  107. package/src/app/modules/i18n/index.ts +3 -0
  108. package/src/app/modules/i18n/presentation/use-locale.ts +16 -0
  109. package/src/app/modules/middleware/domain/operations/request-id.ts +33 -0
  110. package/src/app/modules/middleware/domain/operations/run.ts +29 -0
  111. package/src/app/modules/middleware/index.ts +7 -0
  112. package/src/app/modules/route-rules/domain/index.ts +1 -0
  113. package/src/app/modules/route-rules/domain/operations/ab-variant.ts +58 -0
  114. package/src/app/modules/route-rules/domain/operations/index.ts +4 -0
  115. package/src/app/modules/route-rules/domain/operations/match.ts +51 -0
  116. package/src/app/modules/route-rules/domain/operations/rate-limit.ts +63 -0
  117. package/src/app/modules/route-rules/domain/operations/security.ts +67 -0
  118. package/src/app/modules/route-rules/index.ts +1 -0
  119. package/src/app/modules/runtime-config/application/index.ts +1 -0
  120. package/src/app/modules/runtime-config/application/usecases/index.ts +1 -0
  121. package/src/app/modules/runtime-config/application/usecases/runtime-config.ts +42 -0
  122. package/src/app/modules/runtime-config/index.ts +1 -0
  123. package/src/app/modules/seo/domain/operations/og.ts +66 -0
  124. package/src/app/modules/seo/domain/operations/site.ts +106 -0
  125. package/src/app/modules/seo/index.ts +2 -0
  126. package/src/app/modules/server-entry/application/index.ts +1 -0
  127. package/src/app/modules/server-entry/application/usecases/create-app-server.ts +205 -0
  128. package/src/app/modules/server-entry/application/usecases/devtools-handler.ts +31 -0
  129. package/src/app/modules/server-entry/application/usecases/image-handler.ts +38 -0
  130. package/src/app/modules/server-entry/application/usecases/index.ts +3 -0
  131. package/src/app/modules/server-entry/application/usecases/ops-handler.ts +55 -0
  132. package/src/app/modules/server-entry/application/usecases/prerender-cache.ts +59 -0
  133. package/src/app/modules/server-entry/application/usecases/route-render.ts +276 -0
  134. package/src/app/modules/server-entry/application/usecases/routed-entry.ts +194 -0
  135. package/src/app/modules/server-entry/application/usecases/static-handler.ts +20 -0
  136. package/src/app/modules/server-entry/application/usecases/zone-handler.ts +37 -0
  137. package/src/app/modules/server-entry/index.ts +1 -0
  138. package/src/app/modules/session/index.ts +77 -0
  139. package/src/app/modules/static/domain/operations/serve.ts +88 -0
  140. package/src/app/modules/static/index.ts +1 -0
  141. package/src/app/presentation/App.tsx +34 -0
  142. package/src/app/presentation/define-config.ts +11 -0
  143. package/src/app/presentation/index.ts +3 -0
  144. package/src/app/presentation/providers.ts +80 -0
  145. package/src/app/types/index.ts +273 -0
  146. package/src/assets/adapters/sharp.ts +83 -0
  147. package/src/assets/index.ts +6 -0
  148. package/src/assets/modules/assets/domain/index.ts +1 -0
  149. package/src/assets/modules/assets/domain/operations/image.ts +67 -0
  150. package/src/assets/modules/assets/domain/operations/index.ts +2 -0
  151. package/src/assets/modules/assets/domain/operations/manifest.ts +29 -0
  152. package/src/assets/modules/assets/index.ts +1 -0
  153. package/src/assets/presentation/Image.tsx +90 -0
  154. package/src/assets/presentation/index.ts +1 -0
  155. package/src/assets/types/index.ts +21 -0
  156. package/src/cli/bin.ts +8 -0
  157. package/src/cli/commands.ts +145 -0
  158. package/src/cli/doctor.ts +111 -0
  159. package/src/cli/index.ts +3 -0
  160. package/src/cli/infra.ts +38 -0
  161. package/src/cli/migrate.ts +119 -0
  162. package/src/cli/nav.ts +164 -0
  163. package/src/cli/ops.ts +135 -0
  164. package/src/cli/routes.ts +240 -0
  165. package/src/cli/scaffold.ts +217 -0
  166. package/src/devtools/App.tsx +14 -0
  167. package/src/devtools/adapters/connector.ts +23 -0
  168. package/src/devtools/adapters/index.ts +4 -0
  169. package/src/devtools/index.ts +26 -0
  170. package/src/devtools/modules/component-inspector/application/index.ts +4 -0
  171. package/src/devtools/modules/component-inspector/application/usecases/component-inspector.ts +67 -0
  172. package/src/devtools/modules/component-inspector/application/usecases/index.ts +5 -0
  173. package/src/devtools/modules/component-inspector/application/usecases/useComponentInspector.ts +52 -0
  174. package/src/devtools/modules/component-inspector/domain/events/component-events.ts +37 -0
  175. package/src/devtools/modules/component-inspector/domain/events/index.ts +4 -0
  176. package/src/devtools/modules/component-inspector/domain/index.ts +7 -0
  177. package/src/devtools/modules/component-inspector/domain/models/component-node.ts +30 -0
  178. package/src/devtools/modules/component-inspector/domain/models/component-tree.ts +20 -0
  179. package/src/devtools/modules/component-inspector/domain/models/index.ts +5 -0
  180. package/src/devtools/modules/component-inspector/domain/operations/component-operations.ts +63 -0
  181. package/src/devtools/modules/component-inspector/domain/operations/index.ts +4 -0
  182. package/src/devtools/modules/component-inspector/index.ts +7 -0
  183. package/src/devtools/modules/devtools/application/index.ts +4 -0
  184. package/src/devtools/modules/devtools/application/usecases/devtools.ts +60 -0
  185. package/src/devtools/modules/devtools/application/usecases/index.ts +5 -0
  186. package/src/devtools/modules/devtools/application/usecases/useDevtools.ts +47 -0
  187. package/src/devtools/modules/devtools/domain/events/devtools-events.ts +56 -0
  188. package/src/devtools/modules/devtools/domain/events/index.ts +4 -0
  189. package/src/devtools/modules/devtools/domain/index.ts +8 -0
  190. package/src/devtools/modules/devtools/domain/models/devtools-state.ts +15 -0
  191. package/src/devtools/modules/devtools/domain/models/index.ts +4 -0
  192. package/src/devtools/modules/devtools/domain/operations/devtools-operations.ts +27 -0
  193. package/src/devtools/modules/devtools/domain/operations/index.ts +4 -0
  194. package/src/devtools/modules/devtools/domain/validators/devtools-validators.ts +36 -0
  195. package/src/devtools/modules/devtools/domain/validators/index.ts +4 -0
  196. package/src/devtools/modules/devtools/index.ts +7 -0
  197. package/src/devtools/modules/devtools/ports/connector.ts +10 -0
  198. package/src/devtools/modules/devtools/ports/index.ts +4 -0
  199. package/src/devtools/modules/timeline/application/index.ts +4 -0
  200. package/src/devtools/modules/timeline/application/usecases/index.ts +5 -0
  201. package/src/devtools/modules/timeline/application/usecases/timeline.ts +61 -0
  202. package/src/devtools/modules/timeline/application/usecases/useTimeline.ts +37 -0
  203. package/src/devtools/modules/timeline/domain/events/index.ts +4 -0
  204. package/src/devtools/modules/timeline/domain/events/timeline-events.ts +34 -0
  205. package/src/devtools/modules/timeline/domain/index.ts +7 -0
  206. package/src/devtools/modules/timeline/domain/models/index.ts +4 -0
  207. package/src/devtools/modules/timeline/domain/models/timeline-event.ts +27 -0
  208. package/src/devtools/modules/timeline/domain/operations/index.ts +4 -0
  209. package/src/devtools/modules/timeline/domain/operations/timeline-operations.ts +28 -0
  210. package/src/devtools/modules/timeline/index.ts +7 -0
  211. package/src/devtools/presentation/DevtoolsPanel.tsx +80 -0
  212. package/src/devtools/presentation/components/ComponentTreeView.tsx +79 -0
  213. package/src/devtools/presentation/components/StateInspector.tsx +70 -0
  214. package/src/devtools/presentation/components/TimelineView.tsx +52 -0
  215. package/src/devtools/presentation/components/index.ts +7 -0
  216. package/src/devtools/presentation/composables/index.ts +7 -0
  217. package/src/devtools/presentation/composables/useComponentInspector.ts +52 -0
  218. package/src/devtools/presentation/index.ts +5 -0
  219. package/src/devtools/shared/errors/index.ts +23 -0
  220. package/src/devtools/shared/index.ts +7 -0
  221. package/src/devtools/shared/types/index.ts +6 -0
  222. package/src/devtools/shared/types/option.ts +58 -0
  223. package/src/devtools/shared/types/result.ts +53 -0
  224. package/src/devtools/shared/utils/index.ts +32 -0
  225. package/src/devtools/style.css +2 -0
  226. package/src/head/index.ts +5 -0
  227. package/src/head/modules/head/application/index.ts +1 -0
  228. package/src/head/modules/head/application/usecases/head-manager.ts +68 -0
  229. package/src/head/modules/head/application/usecases/index.ts +1 -0
  230. package/src/head/modules/head/domain/index.ts +3 -0
  231. package/src/head/modules/head/domain/models/head-tag.ts +73 -0
  232. package/src/head/modules/head/domain/models/index.ts +1 -0
  233. package/src/head/modules/head/domain/operations/dedupe.ts +18 -0
  234. package/src/head/modules/head/domain/operations/index.ts +2 -0
  235. package/src/head/modules/head/domain/operations/render-tags.ts +43 -0
  236. package/src/head/modules/head/domain/validators/index.ts +12 -0
  237. package/src/head/modules/head/index.ts +3 -0
  238. package/src/head/modules/head/ports/index.ts +11 -0
  239. package/src/head/presentation/HeadProvider.tsx +42 -0
  240. package/src/head/presentation/Tags.tsx +90 -0
  241. package/src/head/presentation/head-context.ts +11 -0
  242. package/src/head/presentation/index.ts +3 -0
  243. package/src/head/presentation/useHead.ts +77 -0
  244. package/src/head/shared/index.ts +1 -0
  245. package/src/head/shared/types/index.ts +5 -0
  246. package/src/head/types/index.ts +47 -0
  247. package/src/hooks/adapters/config/constants.ts +12 -0
  248. package/src/hooks/adapters/config/index.ts +48 -0
  249. package/src/hooks/adapters/index.ts +13 -0
  250. package/src/hooks/adapters/monaco/index.ts +96 -0
  251. package/src/hooks/adapters/qr/index.ts +65 -0
  252. package/src/hooks/index.ts +21 -0
  253. package/src/hooks/modules/array/application/index.ts +2 -0
  254. package/src/hooks/modules/array/application/usecases/index.ts +123 -0
  255. package/src/hooks/modules/array/domain/events/index.ts +5 -0
  256. package/src/hooks/modules/array/domain/index.ts +3 -0
  257. package/src/hooks/modules/array/domain/models/index.ts +2 -0
  258. package/src/hooks/modules/array/domain/operations/create.ts +10 -0
  259. package/src/hooks/modules/array/domain/operations/index.ts +31 -0
  260. package/src/hooks/modules/array/domain/operations/modify.ts +61 -0
  261. package/src/hooks/modules/array/domain/operations/query.ts +36 -0
  262. package/src/hooks/modules/array/domain/validators/index.ts +5 -0
  263. package/src/hooks/modules/array/index.ts +5 -0
  264. package/src/hooks/modules/array/types/index.ts +9 -0
  265. package/src/hooks/modules/counter/application/index.ts +12 -0
  266. package/src/hooks/modules/counter/application/usecases/index.ts +156 -0
  267. package/src/hooks/modules/counter/domain/events/index.ts +6 -0
  268. package/src/hooks/modules/counter/domain/index.ts +21 -0
  269. package/src/hooks/modules/counter/domain/models/index.ts +2 -0
  270. package/src/hooks/modules/counter/domain/operations/calculate.ts +22 -0
  271. package/src/hooks/modules/counter/domain/operations/create.ts +22 -0
  272. package/src/hooks/modules/counter/domain/operations/index.ts +25 -0
  273. package/src/hooks/modules/counter/domain/operations/modify.ts +78 -0
  274. package/src/hooks/modules/counter/domain/operations/query.ts +38 -0
  275. package/src/hooks/modules/counter/domain/operations/validate.ts +58 -0
  276. package/src/hooks/modules/counter/domain/validators/counter-validators.ts +19 -0
  277. package/src/hooks/modules/counter/domain/validators/index.ts +2 -0
  278. package/src/hooks/modules/counter/index.ts +6 -0
  279. package/src/hooks/modules/counter/ports/index.ts +7 -0
  280. package/src/hooks/modules/counter/types/index.ts +13 -0
  281. package/src/hooks/modules/editor/application/index.ts +6 -0
  282. package/src/hooks/modules/editor/application/useCodeEditor.ts +81 -0
  283. package/src/hooks/modules/editor/domain/events/editor-events.ts +16 -0
  284. package/src/hooks/modules/editor/domain/events/index.ts +6 -0
  285. package/src/hooks/modules/editor/domain/index.ts +7 -0
  286. package/src/hooks/modules/editor/domain/models/editor.ts +16 -0
  287. package/src/hooks/modules/editor/domain/models/index.ts +6 -0
  288. package/src/hooks/modules/editor/domain/validators/index.ts +34 -0
  289. package/src/hooks/modules/editor/index.ts +8 -0
  290. package/src/hooks/modules/editor/types/index.ts +34 -0
  291. package/src/hooks/modules/sensor/application/index.ts +2 -0
  292. package/src/hooks/modules/sensor/application/usecases/index.ts +25 -0
  293. package/src/hooks/modules/sensor/domain/events/index.ts +12 -0
  294. package/src/hooks/modules/sensor/domain/index.ts +10 -0
  295. package/src/hooks/modules/sensor/domain/models/index.ts +7 -0
  296. package/src/hooks/modules/sensor/domain/operations/gamepad.ts +16 -0
  297. package/src/hooks/modules/sensor/domain/operations/index.ts +12 -0
  298. package/src/hooks/modules/sensor/domain/operations/motion.ts +10 -0
  299. package/src/hooks/modules/sensor/domain/operations/orientation.ts +10 -0
  300. package/src/hooks/modules/sensor/domain/validators/index.ts +2 -0
  301. package/src/hooks/modules/sensor/index.ts +10 -0
  302. package/src/hooks/modules/sensor/ports/index.ts +8 -0
  303. package/src/hooks/modules/sensor/types/index.ts +29 -0
  304. package/src/hooks/modules/storage/application/index.ts +2 -0
  305. package/src/hooks/modules/storage/application/usecases/index.ts +18 -0
  306. package/src/hooks/modules/storage/domain/events/index.ts +5 -0
  307. package/src/hooks/modules/storage/domain/index.ts +6 -0
  308. package/src/hooks/modules/storage/domain/models/index.ts +6 -0
  309. package/src/hooks/modules/storage/domain/models/storage.ts +11 -0
  310. package/src/hooks/modules/storage/domain/operations/index.ts +8 -0
  311. package/src/hooks/modules/storage/domain/operations/serialize.ts +22 -0
  312. package/src/hooks/modules/storage/domain/operations/validate.ts +7 -0
  313. package/src/hooks/modules/storage/domain/validators/index.ts +2 -0
  314. package/src/hooks/modules/storage/index.ts +6 -0
  315. package/src/hooks/modules/storage/ports/index.ts +7 -0
  316. package/src/hooks/modules/storage/types/index.ts +6 -0
  317. package/src/hooks/modules/time/application/index.ts +2 -0
  318. package/src/hooks/modules/time/application/usecases/index.ts +5 -0
  319. package/src/hooks/modules/time/application/usecases/use-debounce.ts +10 -0
  320. package/src/hooks/modules/time/application/usecases/use-interval.ts +10 -0
  321. package/src/hooks/modules/time/application/usecases/use-throttle.ts +10 -0
  322. package/src/hooks/modules/time/application/usecases/use-timeout.ts +10 -0
  323. package/src/hooks/modules/time/domain/events/index.ts +6 -0
  324. package/src/hooks/modules/time/domain/index.ts +12 -0
  325. package/src/hooks/modules/time/domain/models/index.ts +6 -0
  326. package/src/hooks/modules/time/domain/models/time.ts +16 -0
  327. package/src/hooks/modules/time/domain/operations/calculate.ts +8 -0
  328. package/src/hooks/modules/time/domain/operations/index.ts +11 -0
  329. package/src/hooks/modules/time/domain/operations/validate.ts +11 -0
  330. package/src/hooks/modules/time/domain/validators/index.ts +2 -0
  331. package/src/hooks/modules/time/index.ts +5 -0
  332. package/src/hooks/modules/time/ports/index.ts +9 -0
  333. package/src/hooks/modules/time/types/index.ts +18 -0
  334. package/src/hooks/modules/toggle/application/index.ts +2 -0
  335. package/src/hooks/modules/toggle/application/usecases/index.ts +48 -0
  336. package/src/hooks/modules/toggle/domain/events/index.ts +4 -0
  337. package/src/hooks/modules/toggle/domain/index.ts +11 -0
  338. package/src/hooks/modules/toggle/domain/models/index.ts +7 -0
  339. package/src/hooks/modules/toggle/domain/operations/create.ts +11 -0
  340. package/src/hooks/modules/toggle/domain/operations/index.ts +12 -0
  341. package/src/hooks/modules/toggle/domain/operations/modify.ts +18 -0
  342. package/src/hooks/modules/toggle/domain/operations/query.ts +9 -0
  343. package/src/hooks/modules/toggle/domain/validators/index.ts +2 -0
  344. package/src/hooks/modules/toggle/index.ts +6 -0
  345. package/src/hooks/modules/toggle/ports/index.ts +5 -0
  346. package/src/hooks/modules/toggle/types/index.ts +9 -0
  347. package/src/hooks/presentation/index.ts +2 -0
  348. package/src/hooks/presentation/solid/animation/index.ts +11 -0
  349. package/src/hooks/presentation/solid/animation/useElapsedTime.ts +75 -0
  350. package/src/hooks/presentation/solid/animation/useInterval.ts +68 -0
  351. package/src/hooks/presentation/solid/animation/useIntervalFn.ts +54 -0
  352. package/src/hooks/presentation/solid/animation/useNow.ts +57 -0
  353. package/src/hooks/presentation/solid/animation/useRafFn.ts +57 -0
  354. package/src/hooks/presentation/solid/animation/useTimeout.ts +55 -0
  355. package/src/hooks/presentation/solid/animation/useTimeoutFn.ts +55 -0
  356. package/src/hooks/presentation/solid/animation/useTimestamp.ts +61 -0
  357. package/src/hooks/presentation/solid/animation/useTransition.ts +87 -0
  358. package/src/hooks/presentation/solid/array/index.ts +14 -0
  359. package/src/hooks/presentation/solid/array/useArrayConcat.ts +18 -0
  360. package/src/hooks/presentation/solid/array/useArrayEvery.ts +8 -0
  361. package/src/hooks/presentation/solid/array/useArrayFilter.ts +8 -0
  362. package/src/hooks/presentation/solid/array/useArrayFind.ts +8 -0
  363. package/src/hooks/presentation/solid/array/useArrayIncludes.ts +8 -0
  364. package/src/hooks/presentation/solid/array/useArrayMap.ts +8 -0
  365. package/src/hooks/presentation/solid/array/useArrayPop.ts +18 -0
  366. package/src/hooks/presentation/solid/array/useArrayPush.ts +15 -0
  367. package/src/hooks/presentation/solid/array/useArrayReduce.ts +9 -0
  368. package/src/hooks/presentation/solid/array/useArrayShift.ts +18 -0
  369. package/src/hooks/presentation/solid/array/useArraySome.ts +8 -0
  370. package/src/hooks/presentation/solid/array/useArraySort.ts +12 -0
  371. package/src/hooks/presentation/solid/browser/index.ts +35 -0
  372. package/src/hooks/presentation/solid/browser/useBarcode.ts +15 -0
  373. package/src/hooks/presentation/solid/browser/useBattery.ts +37 -0
  374. package/src/hooks/presentation/solid/browser/useBeacon.ts +4 -0
  375. package/src/hooks/presentation/solid/browser/useBluetooth.ts +15 -0
  376. package/src/hooks/presentation/solid/browser/useClipboard.ts +17 -0
  377. package/src/hooks/presentation/solid/browser/useClipboardAdvanced.ts +54 -0
  378. package/src/hooks/presentation/solid/browser/useConnection.ts +22 -0
  379. package/src/hooks/presentation/solid/browser/useCredential.ts +18 -0
  380. package/src/hooks/presentation/solid/browser/useDisplayMedia.ts +24 -0
  381. package/src/hooks/presentation/solid/browser/useFaceDetection.ts +20 -0
  382. package/src/hooks/presentation/solid/browser/useFullscreen.ts +33 -0
  383. package/src/hooks/presentation/solid/browser/useGeolocation.ts +64 -0
  384. package/src/hooks/presentation/solid/browser/useLocalStorage.ts +11 -0
  385. package/src/hooks/presentation/solid/browser/useMediaDevices.ts +24 -0
  386. package/src/hooks/presentation/solid/browser/useMemory.ts +9 -0
  387. package/src/hooks/presentation/solid/browser/useNetwork.ts +43 -0
  388. package/src/hooks/presentation/solid/browser/useNotification.ts +21 -0
  389. package/src/hooks/presentation/solid/browser/usePayment.ts +17 -0
  390. package/src/hooks/presentation/solid/browser/usePerformance.ts +13 -0
  391. package/src/hooks/presentation/solid/browser/usePush.ts +12 -0
  392. package/src/hooks/presentation/solid/browser/useQrCode.ts +11 -0
  393. package/src/hooks/presentation/solid/browser/useScreenOrientation.ts +37 -0
  394. package/src/hooks/presentation/solid/browser/useServiceWorker.ts +29 -0
  395. package/src/hooks/presentation/solid/browser/useSessionStorage.ts +11 -0
  396. package/src/hooks/presentation/solid/browser/useShare.ts +12 -0
  397. package/src/hooks/presentation/solid/browser/useSpeechRecognition.ts +71 -0
  398. package/src/hooks/presentation/solid/browser/useSpeechSynthesis.ts +54 -0
  399. package/src/hooks/presentation/solid/browser/useStorage.ts +22 -0
  400. package/src/hooks/presentation/solid/browser/useTextDetection.ts +20 -0
  401. package/src/hooks/presentation/solid/browser/useUsb.ts +15 -0
  402. package/src/hooks/presentation/solid/browser/useUserMedia.ts +24 -0
  403. package/src/hooks/presentation/solid/browser/useVibration.ts +12 -0
  404. package/src/hooks/presentation/solid/browser/useWakeLock.ts +29 -0
  405. package/src/hooks/presentation/solid/browser/useWebAuthn.ts +35 -0
  406. package/src/hooks/presentation/solid/elements/index.ts +51 -0
  407. package/src/hooks/presentation/solid/elements/useActive.ts +33 -0
  408. package/src/hooks/presentation/solid/elements/useAudio.ts +82 -0
  409. package/src/hooks/presentation/solid/elements/useBreakpoints.ts +56 -0
  410. package/src/hooks/presentation/solid/elements/useCanvas.ts +43 -0
  411. package/src/hooks/presentation/solid/elements/useClick.ts +49 -0
  412. package/src/hooks/presentation/solid/elements/useDrag.ts +56 -0
  413. package/src/hooks/presentation/solid/elements/useDraggable.ts +57 -0
  414. package/src/hooks/presentation/solid/elements/useDraggableHandle.ts +92 -0
  415. package/src/hooks/presentation/solid/elements/useDrop.ts +54 -0
  416. package/src/hooks/presentation/solid/elements/useDropZone.ts +67 -0
  417. package/src/hooks/presentation/solid/elements/useElementBounding.ts +52 -0
  418. package/src/hooks/presentation/solid/elements/useElementSize.ts +30 -0
  419. package/src/hooks/presentation/solid/elements/useElementVisibility.ts +33 -0
  420. package/src/hooks/presentation/solid/elements/useFileDialog.ts +33 -0
  421. package/src/hooks/presentation/solid/elements/useFileInput.ts +20 -0
  422. package/src/hooks/presentation/solid/elements/useFocus.ts +49 -0
  423. package/src/hooks/presentation/solid/elements/useHover.ts +33 -0
  424. package/src/hooks/presentation/solid/elements/useImagePreview.ts +27 -0
  425. package/src/hooks/presentation/solid/elements/useImageUpload.ts +66 -0
  426. package/src/hooks/presentation/solid/elements/useInfiniteScroll.ts +52 -0
  427. package/src/hooks/presentation/solid/elements/useIntersectionAdvanced.ts +43 -0
  428. package/src/hooks/presentation/solid/elements/useIntersectionObserver.ts +40 -0
  429. package/src/hooks/presentation/solid/elements/useLayout.ts +47 -0
  430. package/src/hooks/presentation/solid/elements/useLongPress.ts +54 -0
  431. package/src/hooks/presentation/solid/elements/useMagicKeys.ts +60 -0
  432. package/src/hooks/presentation/solid/elements/useMediaQuery.ts +24 -0
  433. package/src/hooks/presentation/solid/elements/useModal.ts +24 -0
  434. package/src/hooks/presentation/solid/elements/useMouse.ts +51 -0
  435. package/src/hooks/presentation/solid/elements/useMutationObserver.ts +38 -0
  436. package/src/hooks/presentation/solid/elements/useOnClickOutside.ts +25 -0
  437. package/src/hooks/presentation/solid/elements/useOnKeyStroke.ts +33 -0
  438. package/src/hooks/presentation/solid/elements/useParallax.ts +34 -0
  439. package/src/hooks/presentation/solid/elements/usePerformanceObserver.ts +30 -0
  440. package/src/hooks/presentation/solid/elements/usePinch.ts +61 -0
  441. package/src/hooks/presentation/solid/elements/usePopover.ts +54 -0
  442. package/src/hooks/presentation/solid/elements/useResize.ts +34 -0
  443. package/src/hooks/presentation/solid/elements/useResizeObserver.ts +42 -0
  444. package/src/hooks/presentation/solid/elements/useRotate.ts +42 -0
  445. package/src/hooks/presentation/solid/elements/useScroll.ts +97 -0
  446. package/src/hooks/presentation/solid/elements/useScrollTo.ts +30 -0
  447. package/src/hooks/presentation/solid/elements/useSortable.ts +22 -0
  448. package/src/hooks/presentation/solid/elements/useSplitter.ts +61 -0
  449. package/src/hooks/presentation/solid/elements/useSticky.ts +33 -0
  450. package/src/hooks/presentation/solid/elements/useSvg.ts +31 -0
  451. package/src/hooks/presentation/solid/elements/useSwipe.ts +87 -0
  452. package/src/hooks/presentation/solid/elements/useTabs.ts +44 -0
  453. package/src/hooks/presentation/solid/elements/useTooltip.ts +57 -0
  454. package/src/hooks/presentation/solid/elements/useVideo.ts +83 -0
  455. package/src/hooks/presentation/solid/elements/useVirtualList.ts +43 -0
  456. package/src/hooks/presentation/solid/elements/useWebgl.ts +36 -0
  457. package/src/hooks/presentation/solid/index.ts +11 -0
  458. package/src/hooks/presentation/solid/math/index.ts +10 -0
  459. package/src/hooks/presentation/solid/math/useAbs.ts +9 -0
  460. package/src/hooks/presentation/solid/math/useCeil.ts +9 -0
  461. package/src/hooks/presentation/solid/math/useClamp.ts +24 -0
  462. package/src/hooks/presentation/solid/math/useExp.ts +9 -0
  463. package/src/hooks/presentation/solid/math/useFloor.ts +9 -0
  464. package/src/hooks/presentation/solid/math/useLog.ts +21 -0
  465. package/src/hooks/presentation/solid/math/useMath.ts +3 -0
  466. package/src/hooks/presentation/solid/math/useOffset.ts +20 -0
  467. package/src/hooks/presentation/solid/math/usePow.ts +16 -0
  468. package/src/hooks/presentation/solid/math/useRound.ts +24 -0
  469. package/src/hooks/presentation/solid/math/useSign.ts +9 -0
  470. package/src/hooks/presentation/solid/math/useSqrt.ts +9 -0
  471. package/src/hooks/presentation/solid/network/index.ts +5 -0
  472. package/src/hooks/presentation/solid/network/useEventSource.ts +87 -0
  473. package/src/hooks/presentation/solid/network/useFetch.ts +187 -0
  474. package/src/hooks/presentation/solid/network/useWebSocket.ts +120 -0
  475. package/src/hooks/presentation/solid/sensors/index.ts +21 -0
  476. package/src/hooks/presentation/solid/sensors/useAbsoluteOrientation.ts +41 -0
  477. package/src/hooks/presentation/solid/sensors/useAccelerometer.ts +39 -0
  478. package/src/hooks/presentation/solid/sensors/useAmbientLight.ts +35 -0
  479. package/src/hooks/presentation/solid/sensors/useDeviceMotion.ts +50 -0
  480. package/src/hooks/presentation/solid/sensors/useDeviceOrientation.ts +38 -0
  481. package/src/hooks/presentation/solid/sensors/useGamepad.ts +52 -0
  482. package/src/hooks/presentation/solid/sensors/useGamepadRumble.ts +28 -0
  483. package/src/hooks/presentation/solid/sensors/useGravity.ts +39 -0
  484. package/src/hooks/presentation/solid/sensors/useGyroscope.ts +39 -0
  485. package/src/hooks/presentation/solid/sensors/useHID.ts +19 -0
  486. package/src/hooks/presentation/solid/sensors/useLinearAcceleration.ts +41 -0
  487. package/src/hooks/presentation/solid/sensors/useMagnetometer.ts +39 -0
  488. package/src/hooks/presentation/solid/sensors/useMotion.ts +31 -0
  489. package/src/hooks/presentation/solid/sensors/useNFC.ts +19 -0
  490. package/src/hooks/presentation/solid/sensors/usePressure.ts +35 -0
  491. package/src/hooks/presentation/solid/sensors/useProximity.ts +38 -0
  492. package/src/hooks/presentation/solid/sensors/useRelativeOrientation.ts +41 -0
  493. package/src/hooks/presentation/solid/sensors/useSerial.ts +18 -0
  494. package/src/hooks/presentation/solid/sensors/useShake.ts +54 -0
  495. package/src/hooks/presentation/solid/sensors/useTilt.ts +31 -0
  496. package/src/hooks/presentation/solid/state/createSharedComposable.ts +24 -0
  497. package/src/hooks/presentation/solid/state/index.ts +14 -0
  498. package/src/hooks/presentation/solid/state/reactivity.ts +43 -0
  499. package/src/hooks/presentation/solid/state/refDebounced.ts +27 -0
  500. package/src/hooks/presentation/solid/state/refThrottled.ts +39 -0
  501. package/src/hooks/presentation/solid/state/syncRef.ts +24 -0
  502. package/src/hooks/presentation/solid/state/toRef.ts +18 -0
  503. package/src/hooks/presentation/solid/state/useArray.ts +55 -0
  504. package/src/hooks/presentation/solid/state/useCounter.ts +24 -0
  505. package/src/hooks/presentation/solid/state/useToggle.ts +20 -0
  506. package/src/hooks/presentation/solid/time/index.ts +6 -0
  507. package/src/hooks/presentation/solid/time/useDebounceFn.ts +18 -0
  508. package/src/hooks/presentation/solid/time/useInterval.ts +44 -0
  509. package/src/hooks/presentation/solid/time/useThrottleFn.ts +30 -0
  510. package/src/hooks/presentation/solid/time/useTimeout.ts +37 -0
  511. package/src/hooks/presentation/solid/time/watchDebounced.ts +19 -0
  512. package/src/hooks/presentation/solid/time/watchPausable.ts +29 -0
  513. package/src/hooks/presentation/solid/time/whenever.ts +13 -0
  514. package/src/hooks/presentation/solid/utilities/index.ts +8 -0
  515. package/src/hooks/presentation/solid/utilities/useArrayEvery.ts +8 -0
  516. package/src/hooks/presentation/solid/utilities/useArrayFilter.ts +11 -0
  517. package/src/hooks/presentation/solid/utilities/useArrayFind.ts +8 -0
  518. package/src/hooks/presentation/solid/utilities/useArrayIncludes.ts +8 -0
  519. package/src/hooks/presentation/solid/utilities/useArrayMap.ts +8 -0
  520. package/src/hooks/presentation/solid/utilities/useArrayReduce.ts +9 -0
  521. package/src/hooks/presentation/solid/utilities/useArraySome.ts +8 -0
  522. package/src/hooks/presentation/solid/utilities/useArraySort.ts +12 -0
  523. package/src/hooks/presentation/solid/utilities/useClamp.ts +24 -0
  524. package/src/hooks/presentation/solid/utilities/useDebounce.ts +32 -0
  525. package/src/hooks/presentation/solid/utilities/useEventBus.ts +57 -0
  526. package/src/hooks/presentation/solid/utilities/useMemoize.ts +15 -0
  527. package/src/hooks/presentation/solid/utilities/useOffset.ts +20 -0
  528. package/src/hooks/presentation/solid/utilities/useRound.ts +24 -0
  529. package/src/hooks/presentation/solid/utilities/useSorted.ts +12 -0
  530. package/src/hooks/presentation/solid/utilities/useThrottle.ts +44 -0
  531. package/src/hooks/presentation/solid/utilities/useToNumber.ts +11 -0
  532. package/src/hooks/presentation/solid/utilities/useToString.ts +10 -0
  533. package/src/hooks/realtime/use-sse.ts +70 -0
  534. package/src/hooks/shared/constants/index.ts +4 -0
  535. package/src/hooks/shared/errors/index.ts +1 -0
  536. package/src/hooks/shared/errors/validation-error.ts +28 -0
  537. package/src/hooks/shared/index.ts +8 -0
  538. package/src/hooks/shared/types/index.ts +17 -0
  539. package/src/hooks/shared/types/option.ts +17 -0
  540. package/src/hooks/shared/types/result.ts +34 -0
  541. package/src/hooks/shared/types/utilities.ts +102 -0
  542. package/src/hooks/shared/utils/identity.ts +2 -0
  543. package/src/hooks/shared/utils/index.ts +4 -0
  544. package/src/hooks/shared/utils/logger.ts +69 -0
  545. package/src/hooks/shared/utils/pipe.ts +5 -0
  546. package/src/hooks/shared/utils/result.ts +9 -0
  547. package/src/hooks/test/counter.test.ts +25 -0
  548. package/src/index.ts +16 -0
  549. package/src/internal.ts +61 -0
  550. package/src/query/adapters/devtools/index.ts +29 -0
  551. package/src/query/adapters/persistence/index.ts +62 -0
  552. package/src/query/adapters/solid/index.ts +10 -0
  553. package/src/query/adapters/solid/solid-query-context.ts +29 -0
  554. package/src/query/adapters/solid/solid-query-empty-result.ts +34 -0
  555. package/src/query/adapters/solid/solid-query-options.ts +52 -0
  556. package/src/query/adapters/solid/solid-query-use-infinite.ts +228 -0
  557. package/src/query/adapters/solid/solid-query-use-mutation.ts +54 -0
  558. package/src/query/adapters/solid/solid-query-use-query.ts +75 -0
  559. package/src/query/adapters/solid/solid.test.ts +53 -0
  560. package/src/query/adapters/validation/index.ts +20 -0
  561. package/src/query/index.test.ts +203 -0
  562. package/src/query/index.ts +4 -0
  563. package/src/query/modules/query/application/usecases/query-client-data.ts +29 -0
  564. package/src/query/modules/query/application/usecases/query-client-helpers.ts +49 -0
  565. package/src/query/modules/query/application/usecases/query-client-infinite.ts +39 -0
  566. package/src/query/modules/query/application/usecases/query-client.ts +251 -0
  567. package/src/query/modules/query/domain/models/mutation-cache.ts +115 -0
  568. package/src/query/modules/query/domain/models/mutation.ts +207 -0
  569. package/src/query/modules/query/domain/models/query-cache.ts +119 -0
  570. package/src/query/modules/query/domain/models/query-environment.ts +16 -0
  571. package/src/query/modules/query/domain/models/query-observer.ts +162 -0
  572. package/src/query/modules/query/domain/models/query-operations.ts +76 -0
  573. package/src/query/modules/query/domain/models/query.ts +239 -0
  574. package/src/query/modules/query/domain/operations/index.ts +76 -0
  575. package/src/query/modules/query/index.ts +9 -0
  576. package/src/query/modules/query/ports/index.ts +53 -0
  577. package/src/query/modules/query/types/index.ts +239 -0
  578. package/src/query/shared/index.ts +48 -0
  579. package/src/render/adapters/index.ts +1 -0
  580. package/src/render/adapters/solid-web/hydration.ts +35 -0
  581. package/src/render/adapters/solid-web/index.ts +3 -0
  582. package/src/render/adapters/solid-web/renderer.ts +20 -0
  583. package/src/render/index.ts +7 -0
  584. package/src/render/modules/render/application/index.ts +1 -0
  585. package/src/render/modules/render/application/usecases/index.ts +4 -0
  586. package/src/render/modules/render/application/usecases/remote-island.ts +46 -0
  587. package/src/render/modules/render/application/usecases/render-page.ts +86 -0
  588. package/src/render/modules/render/application/usecases/render-shell.ts +56 -0
  589. package/src/render/modules/render/application/usecases/stream-page.ts +159 -0
  590. package/src/render/modules/render/domain/index.ts +3 -0
  591. package/src/render/modules/render/domain/models/context.ts +34 -0
  592. package/src/render/modules/render/domain/models/document.ts +26 -0
  593. package/src/render/modules/render/domain/models/index.ts +2 -0
  594. package/src/render/modules/render/domain/operations/document.ts +58 -0
  595. package/src/render/modules/render/domain/operations/hydration.ts +58 -0
  596. package/src/render/modules/render/domain/operations/index.ts +3 -0
  597. package/src/render/modules/render/domain/operations/rsc.ts +53 -0
  598. package/src/render/modules/render/domain/validators/index.ts +11 -0
  599. package/src/render/modules/render/index.ts +3 -0
  600. package/src/render/modules/render/ports/index.ts +17 -0
  601. package/src/render/presentation/ClientComponent.tsx +42 -0
  602. package/src/render/presentation/Document.tsx +45 -0
  603. package/src/render/presentation/Island.tsx +146 -0
  604. package/src/render/presentation/RemoteIsland.tsx +68 -0
  605. package/src/render/presentation/entries.ts +83 -0
  606. package/src/render/presentation/index.ts +5 -0
  607. package/src/render/shared/index.ts +2 -0
  608. package/src/render/shared/types/index.ts +9 -0
  609. package/src/render/shared/utils/index.ts +1 -0
  610. package/src/render/shared/utils/result.ts +30 -0
  611. package/src/render/types/index.ts +58 -0
  612. package/src/router/adapters/index.ts +1 -0
  613. package/src/router/adapters/solid-start/index.ts +42 -0
  614. package/src/router/cli/bundle-analyzer.ts +142 -0
  615. package/src/router/cli/index.ts +3 -0
  616. package/src/router/cli/migration-cli.ts +217 -0
  617. package/src/router/cli/route-generator-config.ts +109 -0
  618. package/src/router/cli/route-generator-templates.ts +117 -0
  619. package/src/router/cli/route-generator-types.ts +9 -0
  620. package/src/router/cli/route-generator-utils.ts +40 -0
  621. package/src/router/cli/route-generator.ts +64 -0
  622. package/src/router/index.test.ts +7 -0
  623. package/src/router/index.ts +21 -0
  624. package/src/router/modules/navigation/application/index.ts +1 -0
  625. package/src/router/modules/navigation/application/usecases.ts +42 -0
  626. package/src/router/modules/navigation/domain/index.ts +2 -0
  627. package/src/router/modules/navigation/domain/models.ts +44 -0
  628. package/src/router/modules/navigation/domain/operations.ts +28 -0
  629. package/src/router/modules/navigation/index.ts +3 -0
  630. package/src/router/modules/navigation/types/index.ts +15 -0
  631. package/src/router/modules/route-cache/application/usecases/index.ts +74 -0
  632. package/src/router/modules/route-cache/domain/models/index.ts +63 -0
  633. package/src/router/modules/route-cache/domain/operations/cache-evict.ts +104 -0
  634. package/src/router/modules/route-cache/domain/operations/cache-invalidate.ts +101 -0
  635. package/src/router/modules/route-cache/domain/operations/cache-read.ts +74 -0
  636. package/src/router/modules/route-cache/domain/operations/cache-write.ts +62 -0
  637. package/src/router/modules/route-cache/domain/operations/index.ts +4 -0
  638. package/src/router/modules/route-cache/domain/validators/index.ts +25 -0
  639. package/src/router/modules/route-cache/index.ts +8 -0
  640. package/src/router/modules/route-cache/ports/index.ts +20 -0
  641. package/src/router/modules/route-cache/types/index.ts +8 -0
  642. package/src/router/modules/route-error-tracking/application/usecases/index.ts +182 -0
  643. package/src/router/modules/route-error-tracking/domain/index.ts +5 -0
  644. package/src/router/modules/route-error-tracking/domain/models/index.ts +130 -0
  645. package/src/router/modules/route-error-tracking/domain/operations/error-cleanup.ts +50 -0
  646. package/src/router/modules/route-error-tracking/domain/operations/error-queries.ts +103 -0
  647. package/src/router/modules/route-error-tracking/domain/operations/error-recording.ts +112 -0
  648. package/src/router/modules/route-error-tracking/domain/operations/error-reporting.ts +55 -0
  649. package/src/router/modules/route-error-tracking/domain/operations/index.ts +4 -0
  650. package/src/router/modules/route-error-tracking/domain/validators/index.ts +46 -0
  651. package/src/router/modules/route-error-tracking/index.ts +8 -0
  652. package/src/router/modules/route-error-tracking/ports/index.ts +20 -0
  653. package/src/router/modules/route-error-tracking/types/index.ts +6 -0
  654. package/src/router/modules/route-feature-flags/application/usecases/index.ts +159 -0
  655. package/src/router/modules/route-feature-flags/domain/index.ts +5 -0
  656. package/src/router/modules/route-feature-flags/domain/models/index.ts +102 -0
  657. package/src/router/modules/route-feature-flags/domain/operations/feature-flag-audit.ts +37 -0
  658. package/src/router/modules/route-feature-flags/domain/operations/feature-flag-conditions.ts +52 -0
  659. package/src/router/modules/route-feature-flags/domain/operations/feature-flag-flags.ts +205 -0
  660. package/src/router/modules/route-feature-flags/domain/operations/feature-flag-routes.ts +54 -0
  661. package/src/router/modules/route-feature-flags/domain/operations/feature-flag-segments.ts +22 -0
  662. package/src/router/modules/route-feature-flags/domain/operations/feature-flag-statistics.ts +22 -0
  663. package/src/router/modules/route-feature-flags/domain/operations/index.ts +6 -0
  664. package/src/router/modules/route-feature-flags/domain/validators/index.ts +40 -0
  665. package/src/router/modules/route-feature-flags/index.ts +8 -0
  666. package/src/router/modules/route-feature-flags/ports/index.ts +23 -0
  667. package/src/router/modules/route-feature-flags/types/index.ts +7 -0
  668. package/src/router/modules/route-i18n/application/usecases/index.ts +81 -0
  669. package/src/router/modules/route-i18n/domain/models/index.ts +85 -0
  670. package/src/router/modules/route-i18n/domain/operations/index.ts +201 -0
  671. package/src/router/modules/route-i18n/domain/validators/index.ts +43 -0
  672. package/src/router/modules/route-i18n/index.ts +8 -0
  673. package/src/router/modules/route-i18n/ports/index.ts +20 -0
  674. package/src/router/modules/route-i18n/types/index.ts +7 -0
  675. package/src/router/modules/route-navigation-timeline/application/usecases/index.ts +182 -0
  676. package/src/router/modules/route-navigation-timeline/domain/index.ts +5 -0
  677. package/src/router/modules/route-navigation-timeline/domain/models/index.ts +143 -0
  678. package/src/router/modules/route-navigation-timeline/domain/operations/index.ts +177 -0
  679. package/src/router/modules/route-navigation-timeline/domain/validators/index.ts +19 -0
  680. package/src/router/modules/route-navigation-timeline/index.ts +8 -0
  681. package/src/router/modules/route-navigation-timeline/ports/index.ts +30 -0
  682. package/src/router/modules/route-navigation-timeline/types/index.ts +5 -0
  683. package/src/router/modules/route-performance/application/usecases/index.ts +166 -0
  684. package/src/router/modules/route-performance/domain/models/index.ts +96 -0
  685. package/src/router/modules/route-performance/domain/operations/index.ts +5 -0
  686. package/src/router/modules/route-performance/domain/operations/performance-cleanup.ts +29 -0
  687. package/src/router/modules/route-performance/domain/operations/performance-queries.ts +91 -0
  688. package/src/router/modules/route-performance/domain/operations/performance-recording.ts +151 -0
  689. package/src/router/modules/route-performance/domain/operations/performance-reporting.ts +32 -0
  690. package/src/router/modules/route-performance/domain/operations/performance-tracking.ts +75 -0
  691. package/src/router/modules/route-performance/domain/validators/index.ts +55 -0
  692. package/src/router/modules/route-performance/index.ts +8 -0
  693. package/src/router/modules/route-performance/ports/index.ts +25 -0
  694. package/src/router/modules/route-performance/types/index.ts +6 -0
  695. package/src/router/modules/route-security/application/usecases/index.ts +153 -0
  696. package/src/router/modules/route-security/domain/models/index.ts +216 -0
  697. package/src/router/modules/route-security/domain/operations/index.ts +165 -0
  698. package/src/router/modules/route-security/domain/validators/index.ts +32 -0
  699. package/src/router/modules/route-security/index.ts +8 -0
  700. package/src/router/modules/route-security/ports/index.ts +31 -0
  701. package/src/router/modules/route-security/types/index.ts +11 -0
  702. package/src/router/modules/route-testing/application/usecases/index.ts +131 -0
  703. package/src/router/modules/route-testing/domain/models/index.ts +217 -0
  704. package/src/router/modules/route-testing/domain/operations/contract-testing-operations.ts +239 -0
  705. package/src/router/modules/route-testing/domain/operations/e2e-testing-operations.ts +167 -0
  706. package/src/router/modules/route-testing/domain/operations/index.ts +3 -0
  707. package/src/router/modules/route-testing/domain/operations/route-testing-core.ts +48 -0
  708. package/src/router/modules/route-testing/domain/validators/index.ts +34 -0
  709. package/src/router/modules/route-testing/index.ts +8 -0
  710. package/src/router/modules/route-testing/ports/index.ts +21 -0
  711. package/src/router/modules/route-testing/types/index.ts +13 -0
  712. package/src/router/modules/routing/application/index.ts +7 -0
  713. package/src/router/modules/routing/application/usecases.ts +49 -0
  714. package/src/router/modules/routing/domain/ab-testing.ts +86 -0
  715. package/src/router/modules/routing/domain/analytics.ts +88 -0
  716. package/src/router/modules/routing/domain/caching-evict.ts +104 -0
  717. package/src/router/modules/routing/domain/caching-invalidate.ts +101 -0
  718. package/src/router/modules/routing/domain/caching-read.ts +74 -0
  719. package/src/router/modules/routing/domain/caching-state.ts +38 -0
  720. package/src/router/modules/routing/domain/caching-types.ts +38 -0
  721. package/src/router/modules/routing/domain/caching-write.ts +62 -0
  722. package/src/router/modules/routing/domain/caching.ts +6 -0
  723. package/src/router/modules/routing/domain/code-splitting.ts +226 -0
  724. package/src/router/modules/routing/domain/contract-factory.ts +37 -0
  725. package/src/router/modules/routing/domain/contract-testing.ts +13 -0
  726. package/src/router/modules/routing/domain/contract-types.ts +32 -0
  727. package/src/router/modules/routing/domain/contract-validator.ts +246 -0
  728. package/src/router/modules/routing/domain/dynamic-imports.ts +67 -0
  729. package/src/router/modules/routing/domain/e2e-testing.ts +267 -0
  730. package/src/router/modules/routing/domain/error-boundaries.ts +54 -0
  731. package/src/router/modules/routing/domain/error-tracking.ts +277 -0
  732. package/src/router/modules/routing/domain/feature-flags.ts +255 -0
  733. package/src/router/modules/routing/domain/guards.ts +104 -0
  734. package/src/router/modules/routing/domain/i18n.ts +230 -0
  735. package/src/router/modules/routing/domain/index.ts +30 -0
  736. package/src/router/modules/routing/domain/interactive-docs-advanced-sections.ts +164 -0
  737. package/src/router/modules/routing/domain/interactive-docs-core-sections.ts +198 -0
  738. package/src/router/modules/routing/domain/interactive-docs.ts +154 -0
  739. package/src/router/modules/routing/domain/isr.ts +35 -0
  740. package/src/router/modules/routing/domain/middleware.ts +79 -0
  741. package/src/router/modules/routing/domain/models.ts +95 -0
  742. package/src/router/modules/routing/domain/navigation-timeline.ts +243 -0
  743. package/src/router/modules/routing/domain/operations.ts +36 -0
  744. package/src/router/modules/routing/domain/optimized-matcher.ts +75 -0
  745. package/src/router/modules/routing/domain/performance-alert-manager.ts +28 -0
  746. package/src/router/modules/routing/domain/performance-monitoring.ts +287 -0
  747. package/src/router/modules/routing/domain/performance-report.ts +29 -0
  748. package/src/router/modules/routing/domain/performance-types.ts +19 -0
  749. package/src/router/modules/routing/domain/predictive-preloading.ts +296 -0
  750. package/src/router/modules/routing/domain/rbac.ts +219 -0
  751. package/src/router/modules/routing/domain/resource-routes.ts +64 -0
  752. package/src/router/modules/routing/domain/route-autocomplete.ts +176 -0
  753. package/src/router/modules/routing/domain/route-groups.ts +63 -0
  754. package/src/router/modules/routing/domain/security-scanner.ts +225 -0
  755. package/src/router/modules/routing/domain/server-actions.ts +71 -0
  756. package/src/router/modules/routing/domain/testing.ts +80 -0
  757. package/src/router/modules/routing/domain/type-safe-links.ts +72 -0
  758. package/src/router/modules/routing/domain/validators.ts +23 -0
  759. package/src/router/modules/routing/index.ts +4 -0
  760. package/src/router/modules/routing/ports/index.ts +1 -0
  761. package/src/router/modules/routing/ports/router-port.ts +15 -0
  762. package/src/router/modules/routing/types/index.ts +14 -0
  763. package/src/router/modules/routing-core/application/usecases/index.ts +49 -0
  764. package/src/router/modules/routing-core/domain/models/index.ts +95 -0
  765. package/src/router/modules/routing-core/domain/operations/index.ts +36 -0
  766. package/src/router/modules/routing-core/domain/validators/index.ts +28 -0
  767. package/src/router/modules/routing-core/index.ts +8 -0
  768. package/src/router/modules/routing-core/ports/index.ts +16 -0
  769. package/src/router/modules/routing-core/types/index.ts +25 -0
  770. package/src/router/presentation/index.ts +1 -0
  771. package/src/router/presentation/solid/components/index.ts +1 -0
  772. package/src/router/presentation/solid/components/route-visualizer-details.tsx +37 -0
  773. package/src/router/presentation/solid/components/route-visualizer-helpers.ts +56 -0
  774. package/src/router/presentation/solid/components/route-visualizer-tree.tsx +99 -0
  775. package/src/router/presentation/solid/components/route-visualizer-types.ts +41 -0
  776. package/src/router/presentation/solid/components/route-visualizer.tsx +110 -0
  777. package/src/router/presentation/solid/components/router.ts +82 -0
  778. package/src/router/presentation/solid/devtools/index.ts +2 -0
  779. package/src/router/presentation/solid/devtools/router-devtools-panel.tsx +141 -0
  780. package/src/router/presentation/solid/devtools/router-inspector.ts +54 -0
  781. package/src/router/presentation/solid/hmr.ts +77 -0
  782. package/src/router/presentation/solid/index.ts +7 -0
  783. package/src/router/presentation/solid/lazy-loading.ts +111 -0
  784. package/src/router/presentation/solid/preloading.ts +81 -0
  785. package/src/router/presentation/solid/route-state.ts +58 -0
  786. package/src/router/presentation/solid/signals/index.ts +2 -0
  787. package/src/router/presentation/solid/signals/route-state.ts +39 -0
  788. package/src/router/presentation/solid/signals/search-params.ts +31 -0
  789. package/src/router/shared/constants/index.ts +6 -0
  790. package/src/router/shared/errors/enhanced-errors.ts +94 -0
  791. package/src/router/shared/errors/index.ts +30 -0
  792. package/src/router/shared/index.ts +4 -0
  793. package/src/router/shared/types/either.ts +55 -0
  794. package/src/router/shared/types/index.ts +5 -0
  795. package/src/router/shared/types/option.ts +20 -0
  796. package/src/router/shared/types/result.ts +34 -0
  797. package/src/router/shared/types/route-inference.ts +49 -0
  798. package/src/router/shared/types/routing.ts +31 -0
  799. package/src/router/shared/utils/index.ts +3 -0
  800. package/src/router/shared/utils/path.ts +43 -0
  801. package/src/router/shared/utils/result.ts +5 -0
  802. package/src/router/shared/utils/time-condition.ts +53 -0
  803. package/src/router/vite-plugin/index.ts +2 -0
  804. package/src/router/vite-plugin/vite-plugin-core.ts +79 -0
  805. package/src/router/vite-plugin/vite-plugin-options-advanced.ts +127 -0
  806. package/src/router/vite-plugin/vite-plugin-options-features.ts +117 -0
  807. package/src/router/vite-plugin/vite-plugin-options-routing.ts +70 -0
  808. package/src/router/vite-plugin/vite-plugin-options.ts +23 -0
  809. package/src/server/adapters/index.ts +2 -0
  810. package/src/server/adapters/platforms.ts +79 -0
  811. package/src/server/adapters/web-server/index.ts +281 -0
  812. package/src/server/index.ts +13 -0
  813. package/src/server/modules/http/domain/operations/cookies.ts +151 -0
  814. package/src/server/modules/http/domain/operations/metrics.ts +103 -0
  815. package/src/server/modules/http/domain/operations/request-context.ts +36 -0
  816. package/src/server/modules/http/domain/operations/session-store.ts +98 -0
  817. package/src/server/modules/http/index.ts +15 -0
  818. package/src/server/modules/loaders/application/index.ts +1 -0
  819. package/src/server/modules/loaders/application/usecases/create-route-loader.ts +88 -0
  820. package/src/server/modules/loaders/application/usecases/dehydrate.ts +21 -0
  821. package/src/server/modules/loaders/application/usecases/index.ts +2 -0
  822. package/src/server/modules/loaders/index.ts +1 -0
  823. package/src/server/modules/realtime/domain/operations/channels.ts +241 -0
  824. package/src/server/modules/realtime/domain/operations/sse.ts +63 -0
  825. package/src/server/modules/realtime/index.ts +2 -0
  826. package/src/server/modules/server-functions/adapters/http/handler.ts +128 -0
  827. package/src/server/modules/server-functions/application/index.ts +1 -0
  828. package/src/server/modules/server-functions/application/usecases/batch.ts +135 -0
  829. package/src/server/modules/server-functions/application/usecases/create-server-fn.ts +272 -0
  830. package/src/server/modules/server-functions/application/usecases/csrf.ts +67 -0
  831. package/src/server/modules/server-functions/application/usecases/index.ts +6 -0
  832. package/src/server/modules/server-functions/application/usecases/live.ts +172 -0
  833. package/src/server/modules/server-functions/application/usecases/registry.ts +22 -0
  834. package/src/server/modules/server-functions/application/usecases/scheduler.ts +115 -0
  835. package/src/server/modules/server-functions/domain/index.ts +24 -0
  836. package/src/server/modules/server-functions/domain/models/execution-result.ts +18 -0
  837. package/src/server/modules/server-functions/domain/models/index.ts +1 -0
  838. package/src/server/modules/server-functions/domain/operations/result.ts +61 -0
  839. package/src/server/modules/server-functions/domain/operations/serialize.ts +134 -0
  840. package/src/server/modules/server-functions/domain/operations/stream.ts +107 -0
  841. package/src/server/modules/server-functions/index.ts +3 -0
  842. package/src/server/modules/server-only/index.ts +30 -0
  843. package/src/server/node.ts +10 -0
  844. package/src/server/shared/errors/index.ts +1 -0
  845. package/src/server/shared/errors/server-fn-error.ts +27 -0
  846. package/src/server/shared/index.ts +2 -0
  847. package/src/server/shared/types/index.ts +5 -0
  848. package/src/server/types/index.ts +65 -0
  849. package/src/stores/adapters/analytics/index.ts +5 -0
  850. package/src/stores/adapters/analytics/monitoring.ts +164 -0
  851. package/src/stores/adapters/devtools/index.ts +80 -0
  852. package/src/stores/adapters/persistence/index.ts +5 -0
  853. package/src/stores/adapters/persistence/versioning.ts +142 -0
  854. package/src/stores/adapters/router/index.ts +144 -0
  855. package/src/stores/adapters/storage/index.ts +6 -0
  856. package/src/stores/adapters/storage/indexed-db.ts +83 -0
  857. package/src/stores/adapters/storage/local-storage.ts +44 -0
  858. package/src/stores/adapters/storage/session-storage.ts +44 -0
  859. package/src/stores/adapters/sync/index.ts +5 -0
  860. package/src/stores/adapters/sync/tab-sync.ts +148 -0
  861. package/src/stores/adapters/validation/arktype-validator.ts +32 -0
  862. package/src/stores/adapters/validation/error-handling.ts +27 -0
  863. package/src/stores/adapters/validation/index.ts +61 -0
  864. package/src/stores/adapters/validation/schemas/api-schemas.ts +30 -0
  865. package/src/stores/adapters/validation/schemas/common-schemas.ts +32 -0
  866. package/src/stores/adapters/validation/schemas/config-schemas.ts +22 -0
  867. package/src/stores/adapters/validation/schemas/constraint-schemas.ts +34 -0
  868. package/src/stores/adapters/validation/schemas/ecommerce-schemas.ts +43 -0
  869. package/src/stores/adapters/validation/schemas/form-schemas.ts +27 -0
  870. package/src/stores/adapters/validation/schemas/primitive-schemas.ts +9 -0
  871. package/src/stores/adapters/validation/schemas/store-schemas.ts +52 -0
  872. package/src/stores/adapters/validation/schemas.ts +11 -0
  873. package/src/stores/index.ts +13 -0
  874. package/src/stores/modules/query/index.ts +24 -0
  875. package/src/stores/modules/query/mutation-state.ts +33 -0
  876. package/src/stores/modules/query/mutation-store.ts +59 -0
  877. package/src/stores/modules/query/query-builder.ts +25 -0
  878. package/src/stores/modules/query/query-cache.ts +65 -0
  879. package/src/stores/modules/query/query-manager.ts +103 -0
  880. package/src/stores/modules/query/query-state.ts +39 -0
  881. package/src/stores/modules/query/query-store.ts +81 -0
  882. package/src/stores/modules/store/application/usecases/index.ts +217 -0
  883. package/src/stores/modules/store/domain/models/index.ts +38 -0
  884. package/src/stores/modules/store/domain/operations/actions.ts +120 -0
  885. package/src/stores/modules/store/domain/operations/composition.ts +205 -0
  886. package/src/stores/modules/store/domain/operations/derived-operations.ts +21 -0
  887. package/src/stores/modules/store/domain/operations/diffing.ts +272 -0
  888. package/src/stores/modules/store/domain/operations/event-bus.ts +255 -0
  889. package/src/stores/modules/store/domain/operations/history-operations.ts +101 -0
  890. package/src/stores/modules/store/domain/operations/hydration.ts +159 -0
  891. package/src/stores/modules/store/domain/operations/immutable.ts +173 -0
  892. package/src/stores/modules/store/domain/operations/index.ts +21 -0
  893. package/src/stores/modules/store/domain/operations/middleware.ts +193 -0
  894. package/src/stores/modules/store/domain/operations/mutations.ts +14 -0
  895. package/src/stores/modules/store/domain/operations/normalization.ts +195 -0
  896. package/src/stores/modules/store/domain/operations/optimistic.ts +171 -0
  897. package/src/stores/modules/store/domain/operations/persistence-operations.ts +26 -0
  898. package/src/stores/modules/store/domain/operations/queries.ts +296 -0
  899. package/src/stores/modules/store/domain/operations/selectors.ts +112 -0
  900. package/src/stores/modules/store/domain/operations/store-operations.ts +52 -0
  901. package/src/stores/modules/store/domain/operations/time-machine.ts +240 -0
  902. package/src/stores/modules/store/domain/operations/transactions.ts +198 -0
  903. package/src/stores/modules/store/domain/validators/action-validators.ts +20 -0
  904. package/src/stores/modules/store/domain/validators/history-validators.ts +19 -0
  905. package/src/stores/modules/store/domain/validators/index.ts +7 -0
  906. package/src/stores/modules/store/domain/validators/persistence-validators.ts +23 -0
  907. package/src/stores/modules/store/domain/validators/store-validators.ts +41 -0
  908. package/src/stores/modules/store/index.ts +9 -0
  909. package/src/stores/modules/store/ports/index.ts +104 -0
  910. package/src/stores/modules/store/types/index.ts +35 -0
  911. package/src/stores/shared/constants/index.ts +50 -0
  912. package/src/stores/shared/errors/index.ts +122 -0
  913. package/src/stores/shared/index.ts +7 -0
  914. package/src/stores/shared/schema-generator.ts +262 -0
  915. package/src/stores/shared/types/index.ts +147 -0
  916. package/src/testing/index.ts +90 -0
  917. package/src/vite/auto-imports.ts +65 -0
  918. package/src/vite/client.d.ts +25 -0
  919. package/src/vite/dev-middleware.ts +142 -0
  920. package/src/vite/index.ts +9 -0
  921. package/src/vite/plugin.ts +277 -0
  922. package/src/vite/prerender.ts +72 -0
  923. package/src/vite/server-fn-ids.ts +52 -0
  924. package/src/vite/types/index.ts +24 -0
  925. package/src/vite/virtual-modules.ts +68 -0
package/dist/vite.js ADDED
@@ -0,0 +1,10 @@
1
+ import{existsSync as e,mkdirSync as t,readdirSync as n,writeFileSync as r}from"node:fs";import{basename as i,dirname as a,join as o,sep as s}from"node:path";import{pathToFileURL as c}from"node:url";import{createHash as l}from"node:crypto";const u={Title:`@wrikka/solid-framework/head`,Meta:`@wrikka/solid-framework/head`,Link:`@wrikka/solid-framework/head`,useHead:`@wrikka/solid-framework/head`,useSeoMeta:`@wrikka/solid-framework/head`,createServerFn:`@wrikka/solid-framework/server`,createRouteLoader:`@wrikka/solid-framework/server`,serverOnly:`@wrikka/solid-framework/server`,createAction:`@wrikka/solid-framework/actions`,useSubmission:`@wrikka/solid-framework/actions`,Island:`@wrikka/solid-framework/render`},d=e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),f=(e,t)=>{let n=/* @__PURE__ */ new Map;for(let[r,i]of Object.entries(t))if(RegExp(`(\\b${d(r)}\\s*[(<]|<${d(r)}[\\s>/])`).test(e)&&!RegExp(`(?:import[\\s\\S]*\\b${d(r)}\\b[\\s\\S]*from|(?:const|let|var|function|class)\\s+${d(r)}\\b)`).test(e))for(let e of Array.isArray(i)?i:[i]){let t=n.get(e)??/* @__PURE__ */ new Set;t.add(r),n.set(e,t)}return n.size===0?null:`${[...n.entries()].map(([e,t])=>`import { ${[...t].sort().join(`, `)} } from "${e}";`).join(`
2
+ `)}\n${e}`},p=async e=>{let t=`http://${e.headers.host??`localhost`}${e.url??`/`}`,n=e.method??`GET`,r=new Headers;for(let[t,n]of Object.entries(e.headers))n!==void 0&&r.set(t,Array.isArray(n)?n.join(`, `):n);if(n===`GET`||n===`HEAD`)return new Request(t,{method:n,headers:r});let i=[];for await(let t of e)i.push(t);return new Request(t,{method:n,headers:r,body:Buffer.concat(i)})},m=e=>e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`),h=e=>`<!doctype html><html><head><meta charset="utf-8"><title>SSR Error</title><style>body{margin:0;font:14px/1.5 ui-monospace,monospace;background:#1a0505;color:#fca5a5}.wrap{padding:2rem;max-width:960px;margin:auto}h1{color:#ef4444;font-size:1.25rem}pre{background:#2a0a0a;border:1px solid #7f1d1d;border-radius:8px;padding:1rem;overflow:auto;white-space:pre-wrap}</style></head><body><div class="wrap"><h1>[solid-framework] SSR render error</h1><pre>${m(e.stack??e.message)}</pre></div></body></html>`,g=async(e,t)=>{if(e.statusCode=t.status,t.headers.forEach((t,n)=>{e.setHeader(n,t)}),!t.body){e.end();return}let n=t.body.getReader();try{for(;;){let{done:t,value:r}=await n.read();if(t)break;e.write(Buffer.from(r))}}finally{e.end()}},_=(e,t)=>(n,r,i)=>{let a=n.url?.split(`?`)[0]??`/`;if(!(a===`/sitemap.xml`||a===`/robots.txt`||a===`/favicon.ico`||a.startsWith(`/_server/`)||a.startsWith(`/_docs/`)||a===`/_og`||a===`/_image`)&&(a.startsWith(`/@`)||a.startsWith(`/node_modules/`)||a.startsWith(`/src/`)||a.includes(`.`)&&!a.endsWith(`/`))){i();return}(async()=>{try{let i=await e.ssrLoadModule(`/${t.entries.server}`),a=i.default??i.fetch??i.handler;if(!a)throw Error(`[solid-framework] ${t.entries.server} must export a fetch handler (default, fetch, or handler)`);let o=await a(await p(n));await g(r,o)}catch(t){e.ssrFixStacktrace(t),r.statusCode=500,r.setHeader(`Content-Type`,`text/html; charset=utf-8`),r.end(h(t))}})()},v={routesDir:`src/routes`,renderMode:`stream`,rules:{},apiPrefixes:[`/api`],head:{},autoImports:!0,entries:{server:`src/entry-server.tsx`,client:`src/entry-client.tsx`},publicEnvPrefixes:[`PUBLIC_`]},y=(e,t)=>({...e,...t,head:{...e.head,...t.head},entries:{...e.entries,...t.entries},rules:{...e.rules,...t.routeRules,...t.rules},routeRules:{...e.routeRules,...t.routeRules},middleware:[...e.middleware??[],...t.middleware??[]],plugins:[...e.plugins??[],...t.plugins??[]],extends:[...e.extends??[],...t.extends??[]]}),b=(e={})=>{let t={},n=e=>{for(let t of e.extends??[])n(t);t=y(t,e)};n(e);let r=t.extends,i={...v,...t,head:{...v.head,...t.head},entries:{...v.entries,...t.entries},publicEnvPrefixes:t.publicEnvPrefixes??v.publicEnvPrefixes,apiPrefixes:t.apiPrefixes??v.apiPrefixes,rules:{...t.routeRules,...t.rules},extends:r};for(let e of i.plugins??[]){let t=e.config?.(i);t&&(i={...i,...t,plugins:i.plugins})}return i},x=/\.(tsx|ts|jsx|js|md|mdx)$/,S=/\.(md|mdx)$/,ee=/^\[\.\.\.(.+)\]$/,C=/^\[(.+)\]$/,w=/^\(.+\)$/,T=/^\(\.+\)(.+)$/,E=/^@(.+)$/,D=/^_/,O=/* @__PURE__ */ new Set([`layout`,`error`,`loading`,`not-found`,`middleware`]),k=e=>e.replace(/\\/g,`/`),A=e=>e.replace(x,``),j=e=>A(k(e)).split(`/`),M=e=>{let t=e.match(T);if(t)return{text:t[1]??e,kind:`static`,group:!1};if(E.test(e))return{text:e,kind:`static`,group:!0};if(w.test(e))return{text:``,kind:`static`,group:!0};let n=e.match(ee);if(n)return{text:n[1]??`all`,kind:`splat`,group:!1};let r=e.match(C);return r?{text:r[1]??``,kind:`param`,group:!1}:{text:e,kind:`static`,group:!1}},N=(e,t)=>!O.has(t)&&!e.some(e=>D.test(e.text))&&!D.test(t),te=e=>e.reduce((e,t)=>e*4+(t.kind===`static`?3:t.kind===`param`?2:1),0),ne=e=>{let t=k(e).split(`/`);return t.pop(),t},re=(e,t)=>{let n=ne(e),r=[];for(let e=n.length;e>=0;e--){let i=n.slice(0,e).join(`/`);r.push(i?`${t}/${i}`:t)}return r},P=e=>{let t=/* @__PURE__ */ new Map;for(let n of e){let e=k(n),r=A(e.split(`/`).pop()??``);if(!O.has(r))continue;let i=e.replace(/\/[^/]*$/,``),a=t.get(i)??/* @__PURE__ */ new Map;a.set(r,n),t.set(i,a)}return t},F=(e,t,n)=>{for(let r of t){let t=e.get(r)?.get(n);if(t)return t}},I=(e,t)=>{let n=[];for(let r of[...t].reverse()){let t=e.get(r)?.get(`middleware`);t&&n.push(t)}return n},L=(e,t)=>{let n=[];for(let r of[...t].reverse()){let t=e.get(r)?.get(`layout`);t&&n.push(t)}return n},R=(e,t=`src/routes`)=>{let n=k(t).replace(/\/$/,``),r=P(e),i=[];for(let t of e){let e=k(t);if(!e.startsWith(`${n}/`))continue;let a=e.slice(n.length+1),o=j(a).map(M),s=A(a.split(`/`).pop()??``);if(!N(o,s))continue;let c=s.endsWith(`.api`),l=S.test(e),u=c?s.slice(0,-4):s,d=u===`index`||u===`page`?o.slice(0,-1):[...o.slice(0,-1),M(u)],f=[],p=[];for(let e of d)e.group||(e.kind===`param`?(f.push(e.text),p.push(`:${e.text}`)):e.kind===`splat`?(f.push(e.text),p.push(`*${e.text}`)):p.push(e.text));let m=re(a,n),h=j(a),g=h.some(e=>T.test(e)),_=h.map(e=>e.match(E)).find(Boolean)?.[1],v={path:`/${p.join(`/`)}`.replace(/\/$/,``)||`/`,file:t,...g?{intercepted:!0}:{},..._?{slot:_}:{},...c?{kind:`api`}:{},...l?{kind:`content`}:{},layouts:c?[]:L(r,m),middleware:I(r,m),params:f,score:te(d.filter(e=>!e.group))};if(!c){let e=F(r,m,`error`),t=F(r,m,`loading`),n=F(r,m,`not-found`);e&&(v.error=e),t&&(v.loading=t),n&&(v.notFound=n)}i.push(v)}return i.sort((e,t)=>t.score-e.score)};function z(e={}){let{routesDir:t=`src/routes`,routeExtensions:n=[`.tsx`,`.ts`,`.jsx`,`.js`],autoImport:r=!0,devTools:i=!0,performanceMonitoring:a=!1,codeSplitting:o=!0,i18n:s=!1,featureFlags:c=!1,securityScanning:l=!1,caching:u=!0,predictivePreloading:d=!1,errorTracking:f=!1,generateTypes:p=!0,typesOutputDir:m=`src/types`,hmr:h=!0,logger:g}=e;return{name:`solid-framework:app-router`,config(e,{command:t}){let n=t===`serve`;return{resolve:{alias:{"@wrikka/solid-framework/router":new URL(`../src/index.ts`,import.meta.url).href}},define:{__SOLID_ROUTER_DEVTOOLS__:JSON.stringify(n&&(i??!0)),__SOLID_ROUTER_PERFORMANCE__:JSON.stringify(a),__SOLID_ROUTER_CODE_SPLITTING__:JSON.stringify(o),__SOLID_ROUTER_I18N__:JSON.stringify(s),__SOLID_ROUTER_FEATURE_FLAGS__:JSON.stringify(c),__SOLID_ROUTER_SECURITY__:JSON.stringify(l),__SOLID_ROUTER_CACHING__:JSON.stringify(u),__SOLID_ROUTER_PRELOADING__:JSON.stringify(d),__SOLID_ROUTER_ERROR_TRACKING__:JSON.stringify(f),__SOLID_ROUTER_HMR__:JSON.stringify(n&&h)}}},async buildStart(){p&&g?.log(`Route types generation enabled for ${t} -> ${m}`)},configureServer(e){h&&e.watcher.on(`change`,async n=>{n.startsWith(t)&&e.ws.send({type:`full-reload`,path:`*`})})}}}const B=e=>{let t=/* @__PURE__ */ new Set;for(let n of e.matchAll(/href="(\/[^"#]*)"/g)){let e=(n[1]??``).split(`?`)[0];e&&!e.startsWith(`//`)&&t.add(e)}return[...t]},V=(e,t)=>o(e,t===`/`?`index.html`:`${t.replace(/^\/+|\/+$/g,``)}/index.html`),H=async(e,n)=>{let i=n.base??`http://localhost`,o=[...n.routes??[`/`]],s=/* @__PURE__ */ new Set,c=[];for(;o.length>0;){let l=o.shift();if(s.has(l))continue;s.add(l);let u=await e(new Request(`${i}${l}`));if(!u.ok)continue;let d=await u.text(),f=V(n.outDir,l);if(t(a(f),{recursive:!0}),r(f,d),c.push({path:l,file:f,status:u.status}),n.crawlLinks)for(let e of B(d))s.has(e)||o.push(e)}return c},U=(e,t)=>`sf_${l(`sha256`).update(`${e}#${t}`).digest(`hex`).slice(0,12)}`,W=(e,t)=>{let n=0;for(let r=t;r<e.length;r++){let t=e[r];if(t===`{`)n++;else if(t===`}`&&(n--,n===0))return r}return-1},G=(e,t)=>{if(!e.includes(`createServerFn(`))return e;let n=/createServerFn\s*\(\s*\{/g,r=``,i=0,a=0,o;for(;(o=n.exec(e))!==null;){let n=o.index+o[0].length-1,s=W(e,n);if(s===-1)break;let c=e.slice(n+1,s);a++,!/(^|[\s,}])id\s*:/.test(c)&&(r+=e.slice(i,n+1),r+=`id: "${U(t,a)}",`,i=n+1)}return i>0?r+e.slice(i):e},K=`virtual:solid-framework/config`,q=`virtual:solid-framework/routes`,J=`virtual:solid-framework/server-fns`,Y=(e,t)=>t?[`import * as _instr from ${JSON.stringify(t)};`,`export default Object.assign(${JSON.stringify(e)}, {`,` instrumentation: {`,` register: _instr.register,`,` onRequest: _instr.onRequest,`,` onError: _instr.onError,`,` },`,`});`].join(`
3
+ `):`export default ${JSON.stringify(e)};`,X=e=>[`import { buildRouteManifest, preloadFileRoute } from "@wrikka/solid-framework/internal";`,`const modules = import.meta.glob("/${e}/**/*.{tsx,ts,jsx,js}");`,`export const routeFiles = Object.keys(modules).map((file) => file.slice(1));`,`export const routeModules = Object.fromEntries(Object.entries(modules).map(([k, v]) => [k.slice(1), v]));`,`export const manifest = buildRouteManifest(routeFiles, ${JSON.stringify(e)});`,`export const preloadRoute = (path) => preloadFileRoute(path, manifest, routeModules);`,`export default manifest;`].join(`
4
+ `),Z=()=>[`const modules = import.meta.glob("/src/**/*.{server,fn}.{ts,tsx}", { eager: true });`,`export const serverModules = modules;`,`export default modules;`].join(`
5
+ `),Q=e=>[`throw new Error(`,` "[solid-framework] \\"${e}\\" is a .server module and cannot be imported from the client. Move the import into a loader, createServerFn handler, or .server.ts file."`,`);`].join(`
6
+ `),$=e=>/\.server\.(ts|tsx|js|jsx|mts|cts)$/.test(e.split(`?`)[0]??e),ie=e=>`${e}`,ae=(t={})=>{let r=b(t.config),a=t.autoImports===!1?null:{...u,...typeof t.autoImports==`object`?t.autoImports:{}},l=``,d=`dist/server`,p,m=[{name:`solid-framework`,enforce:`pre`,configResolved(t){l=t.root,process.env.SOLID_SSR_BUILD===`1`&&(d=t.build.outDir);for(let n of[t.root,o(t.root,`src`)])for(let t of[`ts`,`tsx`]){let r=o(n,`instrumentation.${t}`);e(r)&&(p=r.split(s).join(`/`))}},config(e,t){return{ssr:{noExternal:[`@wrikka/solid-framework`]},...t.isSsrBuild===!0?{build:{rollupOptions:{external:[`@wrikka/web-server-toolkit`,/^bun(:|$)/]}}}:{},server:{watch:{ignored:[`**/dist/**`]}}}},resolveId(e,t,n){return e===`virtual:solid-framework/config`||e===`virtual:solid-framework/routes`||e===`virtual:solid-framework/server-fns`?ie(e):e===`@wrikka/web-server-toolkit`&&n?.ssr!==!0?`\0web-server`:null},load(e,t){if(e.startsWith(`\0`)){let n=e.slice(1);return n===`virtual:solid-framework/config`?Y(r,t?.ssr===!0?p:void 0):n===`virtual:solid-framework/routes`?X(r.routesDir):n===`virtual:solid-framework/server-fns`?Z():n===`web-server`?`const fail = () => { throw new Error("[solid-framework] @wrikka/web-server-toolkit is server-only and cannot run on the client"); };
7
+ export const createRequestHandler = fail;
8
+ export default fail;
9
+ `:null}return $(e)&&t?.ssr!==!0?Q(e):null},transform(e,t){if(!/\.[jt]sx?$/.test(t)||t.includes(`node_modules`)||$(t))return null;let n=a?f(e,a):null,i=n??e,o=G(i,t);o!==i&&(i=o,n=i);for(let e of r.plugins??[]){let r=e.transform?.(i,t);r!=null&&(i=r,n=r)}return n===null?null:{code:i,map:null}},buildStart(){if(!e(r.routesDir))return;let t=[],i=e=>{for(let r of n(e,{withFileTypes:!0})){let n=o(e,r.name);r.isDirectory()?i(n):t.push(n.split(s).join(`/`))}};i(r.routesDir);let a=R(t,r.routesDir);for(let e of r.plugins??[])e.routesResolved?.(a)},handleHotUpdate({file:e,server:t}){let n=`${r.routesDir.split(`/`).join(s)}${s}`;e.split(`/`).join(s).startsWith(n)&&t.ws.send({type:`full-reload`})},configureServer(e){t.ssrMiddleware!==!1&&e.middlewares.use(_(e,r))},generateBundle(e,t){if(process.env.SOLID_SSR_BUILD===`1`)return;let n=Object.values(t).filter(e=>e.type===`chunk`&&e.isEntry||e.fileName.endsWith(`.css`)).map(e=>`/${e.fileName}`);if(n.length&&this.emitFile({type:`asset`,fileName:`preload-manifest.json`,source:JSON.stringify({preloads:n})}),!r.pwa)return;let i=r.pwa,a=[`/`,...i.precache??[],...i.manifest?[`/manifest.webmanifest`]:[]];this.emitFile({type:`asset`,fileName:`sw.js`,source:`const CACHE="sf-v1";const PRECACHE=${JSON.stringify(a)};self.addEventListener("install",e=>{e.waitUntil(caches.open(CACHE).then(c=>c.addAll(PRECACHE)).then(()=>self.skipWaiting()))});self.addEventListener("activate",e=>{e.waitUntil(self.clients.claim())});self.addEventListener("fetch",e=>{if(e.request.method!=="GET")return;const nav=e.request.mode==="navigate"||(e.request.headers.get("accept")||"").includes("text/html");if(nav){e.respondWith(fetch(e.request).then(res=>{const copy=res.clone();caches.open(CACHE).then(c=>c.put(e.request,copy));return res}).catch(()=>caches.match(e.request).then(r=>r||caches.match("/"))));return}e.respondWith(caches.match(e.request).then(r=>r||fetch(e.request).then(res=>{const copy=res.clone();caches.open(CACHE).then(c=>c.put(e.request,copy));return res})))});`}),i.manifest&&this.emitFile({type:`asset`,fileName:`manifest.webmanifest`,source:JSON.stringify({name:i.manifest.name??`app`,short_name:i.manifest.shortName??i.manifest.name??`app`,start_url:i.manifest.startUrl??`/`,display:i.manifest.display??`standalone`,background_color:i.manifest.background??`#ffffff`,theme_color:i.manifest.theme??`#000000`,icons:i.manifest.icons??[]})})},async closeBundle(){if(process.env.SOLID_SSR_BUILD!==`1`||!r.prerender)return;let e=r.prerender;if(!e.routes?.length&&!e.crawlLinks)return;let t=o(l||`.`,d,i(r.entries.server).replace(/\.[jt]sx?$/,`.js`)),n=(await import(c(t).href)).default;if(typeof n!=`function`){console.warn(`[solid-framework] prerender skipped — server entry has no default fetch handler`);return}let a=await H(n,{routes:e.routes,crawlLinks:e.crawlLinks,outDir:e.outDir??o(l||`.`,`dist`)});console.log(`[solid-framework] prerendered ${a.length} route(s): ${a.map(e=>e.path).join(`, `)}`)}}];return t.router!==!1&&m.push(z(t.router??{})),m};export{u as FRAMEWORK_AUTO_IMPORTS,K as VIRTUAL_CONFIG,q as VIRTUAL_ROUTES,J as VIRTUAL_SERVER_FNS,Y as configModuleCode,_ as createSsrMiddleware,B as extractLinks,f as injectAutoImports,G as injectServerFnIds,$ as isServerModuleId,H as prerenderToDisk,X as routesModuleCode,Z as serverFnsModuleCode,Q as serverStubCode,ae as solidFramework};
10
+ //# sourceMappingURL=vite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite.js","names":["FRAMEWORK_AUTO_IMPORTS","escapeRegExp","value","injectAutoImports","additions","name","specifier","map","code","source","names","toWebRequest","url","req","method","headers","key","chunks","chunk","escapeHtml","text","errorOverlayHtml","error","writeResponse","response","res","reader","done","createSsrMiddleware","pathname","next","mod","server","config","handler","defaultConfig","mergeLayer","base","layer","resolveConfig","merged","visit","cfg","user","layers","plugin","patch","MODULE_EXT","CONTENT_EXT","CATCH_ALL","PARAM","GROUP","INTERCEPT","SLOT","PRIVATE","CONVENTION_NAMES","normalize","file","stripExt","splitSegments","relative","parseSegment","intercepted","raw","splat","param","isRouteFile","fileName","segments","s","scoreRoute","score","seg","dirSegments","segs","ancestorDirs","dirs","chain","i","dir","root","conventionIndex","index","files","rel","entry","findConvention","ancestors","found","middlewareChain","mw","layoutChain","layout","buildRouteManifest","routesDir","conventions","routes","relPath","isApi","isContent","routeName","urlSegments","params","parts","rawSegs","slotSeg","route","loading","notFound","b","a","solidRouterPlugin","_routeExtensions","_autoImport","options","isDev","command","devTools","performanceMonitoring","codeSplitting","i18n","featureFlags","securityScanning","caching","predictivePreloading","errorTracking","hmr","generateTypes","logger","typesOutputDir","extractLinks","links","match","html","path","outFile","join","outDir","prerenderToDisk","queue","seen","written","mkdirSync","dirname","writeFileSync","link","stableId","createHash","fileId","matchingBrace","depth","open","ch","injectServerFnIds","pattern","out","cursor","close","body","VIRTUAL_CONFIG","VIRTUAL_ROUTES","VIRTUAL_SERVER_FNS","configModuleCode","instrumentationPath","routesModuleCode","serverFnsModuleCode","serverStubCode","id","isServerModuleId","resolveVirtualId","solidFramework","autoImportMap","rootDir","ssrOutDir","plugins","resolved","ext","candidate","existsSync","sep","env","resolveOptions","virtual","loadOptions","current","withIds","walk","readdirSync","full","manifest","routesRoot","entries","bundle","o","pwa","precache","pre","entryFile","basename","pathToFileURL","w"],"sources":["../src/vite/auto-imports.ts","../src/vite/dev-middleware.ts","../src/app/modules/config/domain/models/config.ts","../src/app/modules/file-routes/domain/operations/manifest.ts","../src/router/vite-plugin/vite-plugin-core.ts","../src/vite/prerender.ts","../src/vite/server-fn-ids.ts","../src/vite/types/index.ts","../src/vite/virtual-modules.ts","../src/vite/plugin.ts"],"sourcesContent":["/**\n * Auto Imports\n * Conservative transform: inject framework imports for configured identifiers\n * that are used but not declared — the Nuxt auto-import equivalent\n */\n\nexport const FRAMEWORK_AUTO_IMPORTS: Record<string, string> = {\n\t// head\n\tTitle: \"@wrikka/solid-framework/head\",\n\tMeta: \"@wrikka/solid-framework/head\",\n\tLink: \"@wrikka/solid-framework/head\",\n\tuseHead: \"@wrikka/solid-framework/head\",\n\tuseSeoMeta: \"@wrikka/solid-framework/head\",\n\t// server\n\tcreateServerFn: \"@wrikka/solid-framework/server\",\n\tcreateRouteLoader: \"@wrikka/solid-framework/server\",\n\tserverOnly: \"@wrikka/solid-framework/server\",\n\t// actions\n\tcreateAction: \"@wrikka/solid-framework/actions\",\n\tuseSubmission: \"@wrikka/solid-framework/actions\",\n\t// render\n\tIsland: \"@wrikka/solid-framework/render\",\n};\n\nconst escapeRegExp = (value: string): string =>\n\tvalue.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n/**\n * Returns the import statements to prepend, or null when nothing is needed.\n * Only injects names that are (a) called/used, (b) not already imported,\n * (c) not locally declared (const/let/function/class/import).\n */\nexport const injectAutoImports = (\n\tcode: string,\n\tmap: Record<string, string | string[]>,\n): string | null => {\n\tconst additions = new Map<string, Set<string>>();\n\n\tfor (const [name, specifier] of Object.entries(map)) {\n\t\t// used = called/generically-typed (`name(`, `name<`) or JSX (`<Name`)\n\t\tconst used = new RegExp(\n\t\t\t`(\\\\b${escapeRegExp(name)}\\\\s*[(<]|<${escapeRegExp(name)}[\\\\s>/])`,\n\t\t).test(code);\n\t\tif (!used) continue;\n\n\t\tconst declared = new RegExp(\n\t\t\t`(?:import[\\\\s\\\\S]*\\\\b${escapeRegExp(name)}\\\\b[\\\\s\\\\S]*from|(?:const|let|var|function|class)\\\\s+${escapeRegExp(name)}\\\\b)`,\n\t\t).test(code);\n\t\tif (declared) continue;\n\n\t\tfor (const source of Array.isArray(specifier) ? specifier : [specifier]) {\n\t\t\tconst names = additions.get(source) ?? new Set<string>();\n\t\t\tnames.add(name);\n\t\t\tadditions.set(source, names);\n\t\t}\n\t}\n\n\tif (additions.size === 0) return null;\n\n\tconst lines = [...additions.entries()].map(\n\t\t([source, names]) =>\n\t\t\t`import { ${[...names].sort().join(\", \")} } from \"${source}\";`,\n\t);\n\treturn `${lines.join(\"\\n\")}\\n${code}`;\n};\n","/**\n * Dev SSR Middleware\n * Runs the app server entry inside the Vite dev server\n */\n\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport type { ViteDevServer } from \"vite\";\nimport type { SolidFrameworkConfig } from \"#app/types\";\n\ninterface ServerEntryModule {\n\tdefault?: (request: Request) => Promise<Response>;\n\tfetch?: (request: Request) => Promise<Response>;\n\thandler?: (request: Request) => Promise<Response>;\n}\n\nconst toWebRequest = async (req: IncomingMessage): Promise<Request> => {\n\tconst host = req.headers.host ?? \"localhost\";\n\tconst url = `http://${host}${req.url ?? \"/\"}`;\n\tconst method = req.method ?? \"GET\";\n\n\tconst headers = new Headers();\n\tfor (const [key, value] of Object.entries(req.headers)) {\n\t\tif (value === undefined) continue;\n\t\theaders.set(key, Array.isArray(value) ? value.join(\", \") : value);\n\t}\n\n\tif (method === \"GET\" || method === \"HEAD\") {\n\t\treturn new Request(url, { method, headers });\n\t}\n\n\tconst chunks: Buffer[] = [];\n\tfor await (const chunk of req) chunks.push(chunk as Buffer);\n\treturn new Request(url, {\n\t\tmethod,\n\t\theaders,\n\t\tbody: Buffer.concat(chunks),\n\t});\n};\n\nconst escapeHtml = (text: string): string =>\n\ttext.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n\n/**\n * Dev error overlay — styled page with the SSR stack, mirroring the\n * vite error overlay experience for render-time failures\n */\nconst errorOverlayHtml = (error: Error): string =>\n\t`<!doctype html><html><head><meta charset=\"utf-8\"><title>SSR Error</title>` +\n\t`<style>body{margin:0;font:14px/1.5 ui-monospace,monospace;background:#1a0505;color:#fca5a5}` +\n\t`.wrap{padding:2rem;max-width:960px;margin:auto}h1{color:#ef4444;font-size:1.25rem}` +\n\t`pre{background:#2a0a0a;border:1px solid #7f1d1d;border-radius:8px;padding:1rem;overflow:auto;white-space:pre-wrap}</style>` +\n\t`</head><body><div class=\"wrap\"><h1>[solid-framework] SSR render error</h1>` +\n\t`<pre>${escapeHtml(error.stack ?? error.message)}</pre></div></body></html>`;\n\nconst writeResponse = async (\n\tres: ServerResponse,\n\tresponse: Response,\n): Promise<void> => {\n\tres.statusCode = response.status;\n\tresponse.headers.forEach((value, key) => {\n\t\tres.setHeader(key, value);\n\t});\n\n\tif (!response.body) {\n\t\tres.end();\n\t\treturn;\n\t}\n\n\tconst reader = response.body.getReader();\n\ttry {\n\t\tfor (;;) {\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done) break;\n\t\t\tres.write(Buffer.from(value));\n\t\t}\n\t} finally {\n\t\tres.end();\n\t}\n};\n\n/**\n * Vite middleware factory — SSRs page requests through the app server entry\n */\nexport const createSsrMiddleware = (\n\tserver: ViteDevServer,\n\tconfig: SolidFrameworkConfig,\n): ((\n\treq: IncomingMessage,\n\tres: ServerResponse,\n\tnext: (err?: unknown) => void,\n) => void) => {\n\treturn (req, res, next) => {\n\t\tconst pathname = req.url?.split(\"?\")[0] ?? \"/\";\n\n\t\t// Framework endpoints carry dots too (sitemap.xml, openapi.json)\n\t\t// — they must reach the server entry, not Vite's static fallback\n\t\tconst frameworkPath =\n\t\t\tpathname === \"/sitemap.xml\" ||\n\t\t\tpathname === \"/robots.txt\" ||\n\t\t\tpathname === \"/favicon.ico\" ||\n\t\t\tpathname.startsWith(\"/_server/\") ||\n\t\t\tpathname.startsWith(\"/_docs/\") ||\n\t\t\tpathname === \"/_og\" ||\n\t\t\tpathname === \"/_image\";\n\n\t\t// Let Vite internals and static assets pass through — everything\n\t\t// else (pages, api prefixes, server fns, actions) goes to the entry\n\t\tif (\n\t\t\t!frameworkPath &&\n\t\t\t(pathname.startsWith(\"/@\") ||\n\t\t\t\tpathname.startsWith(\"/node_modules/\") ||\n\t\t\t\tpathname.startsWith(\"/src/\") ||\n\t\t\t\t(pathname.includes(\".\") && !pathname.endsWith(\"/\")))\n\t\t) {\n\t\t\tnext();\n\t\t\treturn;\n\t\t}\n\n\t\tvoid (async () => {\n\t\t\ttry {\n\t\t\t\tconst mod = (await server.ssrLoadModule(\n\t\t\t\t\t`/${config.entries.server}`,\n\t\t\t\t)) as ServerEntryModule;\n\t\t\t\tconst handler = mod.default ?? mod.fetch ?? mod.handler;\n\t\t\t\tif (!handler) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`[solid-framework] ${config.entries.server} must export a fetch handler (default, fetch, or handler)`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst request = await toWebRequest(req);\n\t\t\t\tconst response = await handler(request);\n\t\t\t\tawait writeResponse(res, response);\n\t\t\t} catch (error) {\n\t\t\t\tserver.ssrFixStacktrace(error as Error);\n\t\t\t\tres.statusCode = 500;\n\t\t\t\tres.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n\t\t\t\tres.end(errorOverlayHtml(error as Error));\n\t\t\t}\n\t\t})();\n\t};\n};\n","/**\n * Config Model\n * Framework configuration with defaults — the nuxt.config/next.config equivalent\n */\n\nimport type { SolidFrameworkConfig } from \"#app/types\";\n\nexport const defaultConfig: SolidFrameworkConfig = {\n\troutesDir: \"src/routes\",\n\trenderMode: \"stream\",\n\trules: {},\n\tapiPrefixes: [\"/api\"],\n\thead: {},\n\tautoImports: true,\n\tentries: {\n\t\tserver: \"src/entry-server.tsx\",\n\t\tclient: \"src/entry-client.tsx\",\n\t},\n\tpublicEnvPrefixes: [\"PUBLIC_\"],\n};\n\nexport type UserConfig = Partial<SolidFrameworkConfig>;\n\n/** Shallow-merge layer configs — later entries win over earlier */\nconst mergeLayer = (base: UserConfig, layer: UserConfig): UserConfig => ({\n\t...base,\n\t...layer,\n\thead: { ...base.head, ...layer.head },\n\tentries: {\n\t\t...base.entries,\n\t\t...layer.entries,\n\t} as SolidFrameworkConfig[\"entries\"],\n\trules: { ...base.rules, ...layer.routeRules, ...layer.rules },\n\trouteRules: { ...base.routeRules, ...layer.routeRules },\n\tmiddleware: [...(base.middleware ?? []), ...(layer.middleware ?? [])],\n\tplugins: [...(base.plugins ?? []), ...(layer.plugins ?? [])],\n\textends: [...(base.extends ?? []), ...(layer.extends ?? [])],\n});\n\nexport const resolveConfig = (user: UserConfig = {}): SolidFrameworkConfig => {\n\t// Layers — `extends` configs merge base→derived; user config wins last\n\tlet merged: UserConfig = {};\n\tconst visit = (cfg: UserConfig): void => {\n\t\tfor (const layer of cfg.extends ?? []) visit(layer);\n\t\tmerged = mergeLayer(merged, cfg);\n\t};\n\tvisit(user);\n\tconst layers = merged.extends;\n\n\tlet config: SolidFrameworkConfig = {\n\t\t...defaultConfig,\n\t\t...merged,\n\t\thead: { ...defaultConfig.head, ...merged.head },\n\t\tentries: { ...defaultConfig.entries, ...merged.entries },\n\t\tpublicEnvPrefixes:\n\t\t\tmerged.publicEnvPrefixes ?? defaultConfig.publicEnvPrefixes,\n\t\tapiPrefixes: merged.apiPrefixes ?? defaultConfig.apiPrefixes,\n\t\t// `rules` wins; `routeRules` kept for back-compat\n\t\trules: { ...merged.routeRules, ...merged.rules },\n\t\textends: layers,\n\t};\n\n\t// Plugin config hooks — each plugin may patch the resolved config\n\tfor (const plugin of config.plugins ?? []) {\n\t\tconst patch = plugin.config?.(config);\n\t\tif (patch) {\n\t\t\tconfig = { ...config, ...patch, plugins: config.plugins };\n\t\t}\n\t}\n\n\treturn config;\n};\n","/**\n * Route Manifest Builder\n * Maps files inside routesDir to route entries using filesystem\n * conventions — SolidStart/Nuxt style:\n *\n * src/routes/index.tsx → /\n * src/routes/about.tsx → /about\n * src/routes/users/[id].tsx → /users/:id\n * src/routes/blog/[...slug].tsx → /blog/*slug (catch-all)\n * src/routes/(mkt)/home.tsx → /home (pathless group)\n * src/routes/users/[id]/edit.tsx → /users/:id/edit\n *\n * Non-route files: layout.tsx, error.tsx, loading.tsx, not-found.tsx,\n * and anything starting with \"_\" or inside \"_\" directories.\n */\n\nimport type { FileRoute, RouteManifest } from \"../models\";\n\nconst MODULE_EXT = /\\.(tsx|ts|jsx|js|md|mdx)$/;\nconst CONTENT_EXT = /\\.(md|mdx)$/;\nconst CATCH_ALL = /^\\[\\.\\.\\.(.+)\\]$/;\nconst PARAM = /^\\[(.+)\\]$/;\nconst GROUP = /^\\(.+\\)$/;\nconst INTERCEPT = /^\\(\\.+\\)(.+)$/;\nconst SLOT = /^@(.+)$/;\nconst PRIVATE = /^_/;\n\nconst CONVENTION_NAMES = new Set([\n\t\"layout\",\n\t\"error\",\n\t\"loading\",\n\t\"not-found\",\n\t\"middleware\",\n]);\n\nconst normalize = (file: string): string => file.replace(/\\\\/g, \"/\");\n\nconst stripExt = (file: string): string => file.replace(MODULE_EXT, \"\");\n\nconst splitSegments = (relative: string): string[] =>\n\tstripExt(normalize(relative)).split(\"/\");\n\ninterface Segment {\n\t/** url segment text, or param name when dynamic */\n\ttext: string;\n\tkind: \"static\" | \"param\" | \"splat\";\n\t/** group segments contribute no url text but can hold conventions */\n\tgroup: boolean;\n}\n\nconst parseSegment = (raw: string): Segment => {\n\t// `(.)name` — intercepted route: contributes url text like a plain\n\t// segment; the route is flagged intercepted for modal rendering\n\tconst intercepted = raw.match(INTERCEPT);\n\tif (intercepted) {\n\t\treturn { text: intercepted[1] ?? raw, kind: \"static\", group: false };\n\t}\n\t// `@slot` — parallel-route dir: no url text (like a group) but the\n\t// route records its slot name\n\tif (SLOT.test(raw)) return { text: raw, kind: \"static\", group: true };\n\tif (GROUP.test(raw)) return { text: \"\", kind: \"static\", group: true };\n\tconst splat = raw.match(CATCH_ALL);\n\tif (splat) return { text: splat[1] ?? \"all\", kind: \"splat\", group: false };\n\tconst param = raw.match(PARAM);\n\tif (param) return { text: param[1] ?? \"\", kind: \"param\", group: false };\n\treturn { text: raw, kind: \"static\", group: false };\n};\n\nconst API_SUFFIX = \".api\";\n\nconst isRouteFile = (segments: Segment[], fileName: string): boolean => {\n\tif (CONVENTION_NAMES.has(fileName)) return false;\n\treturn !segments.some((s) => PRIVATE.test(s.text)) && !PRIVATE.test(fileName);\n};\n\n/** Specificity — static beats param beats splat; longer paths tie-break later */\nconst scoreRoute = (segments: Segment[]): number =>\n\tsegments.reduce(\n\t\t(score, seg) =>\n\t\t\tscore * 4 + (seg.kind === \"static\" ? 3 : seg.kind === \"param\" ? 2 : 1),\n\t\t0,\n\t);\n\nconst dirSegments = (relative: string): string[] => {\n\tconst segs = normalize(relative).split(\"/\");\n\tsegs.pop();\n\treturn segs;\n};\n\nconst ancestorDirs = (relative: string, root: string): string[] => {\n\t// \"users/[id]/edit.tsx\" → [\"root/users/[id]\", \"root/users\", \"root\"]\n\tconst dirs = dirSegments(relative);\n\tconst chain: string[] = [];\n\tfor (let i = dirs.length; i >= 0; i--) {\n\t\tconst dir = dirs.slice(0, i).join(\"/\");\n\t\tchain.push(dir ? `${root}/${dir}` : root);\n\t}\n\treturn chain;\n};\n\nconst conventionIndex = (files: string[]): Map<string, Map<string, string>> => {\n\t// dir → convention name → file\n\tconst index = new Map<string, Map<string, string>>();\n\tfor (const file of files) {\n\t\tconst rel = normalize(file);\n\t\tconst name = stripExt(rel.split(\"/\").pop() ?? \"\");\n\t\tif (!CONVENTION_NAMES.has(name)) continue;\n\t\tconst dir = rel.replace(/\\/[^/]*$/, \"\");\n\t\tconst entry = index.get(dir) ?? new Map<string, string>();\n\t\tentry.set(name, file);\n\t\tindex.set(dir, entry);\n\t}\n\treturn index;\n};\n\nconst findConvention = (\n\tindex: Map<string, Map<string, string>>,\n\tancestors: string[],\n\tname: string,\n): string | undefined => {\n\tfor (const dir of ancestors) {\n\t\tconst found = index.get(dir)?.get(name);\n\t\tif (found) return found;\n\t}\n\treturn undefined;\n};\n\nconst middlewareChain = (\n\tindex: Map<string, Map<string, string>>,\n\tancestors: string[],\n): string[] => {\n\t// every ancestor's _middleware applies — outermost → innermost\n\tconst chain: string[] = [];\n\tfor (const dir of [...ancestors].reverse()) {\n\t\tconst mw = index.get(dir)?.get(\"middleware\");\n\t\tif (mw) chain.push(mw);\n\t}\n\treturn chain;\n};\n\nconst layoutChain = (\n\tindex: Map<string, Map<string, string>>,\n\tancestors: string[],\n): string[] => {\n\t// ancestors are innermost → outermost; layouts render outermost first\n\tconst chain: string[] = [];\n\tfor (const dir of [...ancestors].reverse()) {\n\t\tconst layout = index.get(dir)?.get(\"layout\");\n\t\tif (layout) chain.push(layout);\n\t}\n\treturn chain;\n};\n\nexport const buildRouteManifest = (\n\tfiles: string[],\n\troutesDir = \"src/routes\",\n): RouteManifest => {\n\tconst root = normalize(routesDir).replace(/\\/$/, \"\");\n\tconst conventions = conventionIndex(files);\n\tconst routes: RouteManifest = [];\n\n\tfor (const file of files) {\n\t\tconst rel = normalize(file);\n\t\tif (!rel.startsWith(`${root}/`)) continue;\n\t\tconst relPath = rel.slice(root.length + 1);\n\t\tconst segments = splitSegments(relPath).map(parseSegment);\n\t\tconst fileName = stripExt(relPath.split(\"/\").pop() ?? \"\");\n\n\t\tif (!isRouteFile(segments, fileName)) continue;\n\n\t\t// \"*.api.ts\" files are API endpoints — path drops the .api suffix\n\t\tconst isApi = fileName.endsWith(API_SUFFIX);\n\t\t// \"*.md\" pages render markdown content — `kind: \"content\"`\n\t\tconst isContent = CONTENT_EXT.test(rel);\n\t\tconst routeName = isApi ? fileName.slice(0, -API_SUFFIX.length) : fileName;\n\n\t\t// \"index\" or \"page\" collapses to the directory path\n\t\tconst urlSegments =\n\t\t\trouteName === \"index\" || routeName === \"page\"\n\t\t\t\t? segments.slice(0, -1)\n\t\t\t\t: [...segments.slice(0, -1), parseSegment(routeName)];\n\n\t\tconst params: string[] = [];\n\t\tconst parts: string[] = [];\n\t\tfor (const seg of urlSegments) {\n\t\t\tif (seg.group) continue;\n\t\t\tif (seg.kind === \"param\") {\n\t\t\t\tparams.push(seg.text);\n\t\t\t\tparts.push(`:${seg.text}`);\n\t\t\t} else if (seg.kind === \"splat\") {\n\t\t\t\tparams.push(seg.text);\n\t\t\t\tparts.push(`*${seg.text}`);\n\t\t\t} else {\n\t\t\t\tparts.push(seg.text);\n\t\t\t}\n\t\t}\n\n\t\tconst ancestors = ancestorDirs(relPath, root); // innermost → root\n\t\tconst rawSegs = splitSegments(relPath);\n\t\tconst intercepted = rawSegs.some((s) => INTERCEPT.test(s));\n\t\tconst slotSeg = rawSegs.map((s) => s.match(SLOT)).find(Boolean)?.[1];\n\t\tconst route: FileRoute = {\n\t\t\tpath: `/${parts.join(\"/\")}`.replace(/\\/$/, \"\") || \"/\",\n\t\t\tfile,\n\t\t\t...(intercepted ? { intercepted: true as const } : {}),\n\t\t\t...(slotSeg ? { slot: slotSeg } : {}),\n\t\t\t...(isApi ? { kind: \"api\" as const } : {}),\n\t\t\t...(isContent ? { kind: \"content\" as const } : {}),\n\t\t\t// API endpoints serve raw responses — page conventions don't apply\n\t\t\tlayouts: isApi ? [] : layoutChain(conventions, ancestors),\n\t\t\tmiddleware: middlewareChain(conventions, ancestors),\n\t\t\tparams,\n\t\t\tscore: scoreRoute(urlSegments.filter((s) => !s.group)),\n\t\t};\n\n\t\tif (!isApi) {\n\t\t\tconst error = findConvention(conventions, ancestors, \"error\");\n\t\t\tconst loading = findConvention(conventions, ancestors, \"loading\");\n\t\t\tconst notFound = findConvention(conventions, ancestors, \"not-found\");\n\t\t\tif (error) route.error = error;\n\t\t\tif (loading) route.loading = loading;\n\t\t\tif (notFound) route.notFound = notFound;\n\t\t}\n\n\t\troutes.push(route);\n\t}\n\n\treturn routes.sort((a, b) => b.score - a.score);\n};\n","import type { Plugin } from \"vite\";\nimport type { SolidRouterPluginOptions } from \"./vite-plugin-options\";\n\nexport function solidRouterPlugin(\n\toptions: SolidRouterPluginOptions = {},\n): Plugin {\n\tconst {\n\t\troutesDir = \"src/routes\",\n\t\trouteExtensions: _routeExtensions = [\".tsx\", \".ts\", \".jsx\", \".js\"],\n\t\tautoImport: _autoImport = true,\n\t\tdevTools = true,\n\t\tperformanceMonitoring = false,\n\t\tcodeSplitting = true,\n\t\ti18n = false,\n\t\tfeatureFlags = false,\n\t\tsecurityScanning = false,\n\t\tcaching = true,\n\t\tpredictivePreloading = false,\n\t\terrorTracking = false,\n\t\tgenerateTypes = true,\n\t\ttypesOutputDir = \"src/types\",\n\t\thmr = true,\n\t\tlogger,\n\t} = options;\n\n\treturn {\n\t\tname: \"solid-framework:app-router\",\n\n\t\tconfig(_config, { command }) {\n\t\t\tconst isDev = command === \"serve\";\n\n\t\t\treturn {\n\t\t\t\tresolve: {\n\t\t\t\t\talias: {\n\t\t\t\t\t\t\"@wrikka/solid-framework/router\": new URL(\n\t\t\t\t\t\t\t\"../src/index.ts\",\n\t\t\t\t\t\t\timport.meta.url,\n\t\t\t\t\t\t).href,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tdefine: {\n\t\t\t\t\t__SOLID_ROUTER_DEVTOOLS__: JSON.stringify(\n\t\t\t\t\t\tisDev && (devTools ?? true),\n\t\t\t\t\t),\n\t\t\t\t\t__SOLID_ROUTER_PERFORMANCE__: JSON.stringify(performanceMonitoring),\n\t\t\t\t\t__SOLID_ROUTER_CODE_SPLITTING__: JSON.stringify(codeSplitting),\n\t\t\t\t\t__SOLID_ROUTER_I18N__: JSON.stringify(i18n),\n\t\t\t\t\t__SOLID_ROUTER_FEATURE_FLAGS__: JSON.stringify(featureFlags),\n\t\t\t\t\t__SOLID_ROUTER_SECURITY__: JSON.stringify(securityScanning),\n\t\t\t\t\t__SOLID_ROUTER_CACHING__: JSON.stringify(caching),\n\t\t\t\t\t__SOLID_ROUTER_PRELOADING__: JSON.stringify(predictivePreloading),\n\t\t\t\t\t__SOLID_ROUTER_ERROR_TRACKING__: JSON.stringify(errorTracking),\n\t\t\t\t\t__SOLID_ROUTER_HMR__: JSON.stringify(isDev && hmr),\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\n\t\tasync buildStart() {\n\t\t\tif (generateTypes) {\n\t\t\t\tlogger?.log(\n\t\t\t\t\t`Route types generation enabled for ${routesDir} -> ${typesOutputDir}`,\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\n\t\tconfigureServer(server) {\n\t\t\tif (hmr) {\n\t\t\t\tserver.watcher.on(\"change\", async (file) => {\n\t\t\t\t\tif (file.startsWith(routesDir)) {\n\t\t\t\t\t\tserver.ws.send({\n\t\t\t\t\t\t\ttype: \"full-reload\",\n\t\t\t\t\t\t\tpath: \"*\",\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t};\n}\n","/**\n * Build-time Prerender\n * Renders routes through the built server entry and writes static\n * HTML to outDir — the SSG equivalent of Nitro's prerender, with\n * crawlLinks discovering pages from rendered anchors\n */\n\nimport { mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\n/** Same-origin links found in rendered HTML — `href=\"/path\"` */\nexport const extractLinks = (html: string): string[] => {\n\tconst links = new Set<string>();\n\tfor (const match of html.matchAll(/href=\"(\\/[^\"#]*)\"/g)) {\n\t\tconst path = (match[1] ?? \"\").split(\"?\")[0];\n\t\tif (path && !path.startsWith(\"//\")) links.add(path);\n\t}\n\treturn [...links];\n};\n\nexport interface PrerenderResult {\n\tpath: string;\n\tfile: string;\n\tstatus: number;\n}\n\nconst outFile = (outDir: string, path: string): string =>\n\tjoin(\n\t\toutDir,\n\t\tpath === \"/\"\n\t\t\t? \"index.html\"\n\t\t\t: `${path.replace(/^\\/+|\\/+$/g, \"\")}/index.html`,\n\t);\n\nexport const prerenderToDisk = async (\n\thandler: (request: Request) => Promise<Response>,\n\toptions: {\n\t\troutes?: string[];\n\t\tcrawlLinks?: boolean;\n\t\toutDir: string;\n\t\t/** Base origin for constructed requests — default http://localhost */\n\t\tbase?: string;\n\t},\n): Promise<PrerenderResult[]> => {\n\tconst base = options.base ?? \"http://localhost\";\n\tconst queue = [...(options.routes ?? [\"/\"])];\n\tconst seen = new Set<string>();\n\tconst written: PrerenderResult[] = [];\n\n\twhile (queue.length > 0) {\n\t\tconst path = queue.shift() as string;\n\t\tif (seen.has(path)) continue;\n\t\tseen.add(path);\n\n\t\tconst response = await handler(new Request(`${base}${path}`));\n\t\tif (!response.ok) continue;\n\n\t\tconst html = await response.text();\n\t\tconst file = outFile(options.outDir, path);\n\t\tmkdirSync(dirname(file), { recursive: true });\n\t\twriteFileSync(file, html);\n\t\twritten.push({ path, file, status: response.status });\n\n\t\tif (options.crawlLinks) {\n\t\t\tfor (const link of extractLinks(html)) {\n\t\t\t\tif (!seen.has(link)) queue.push(link);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn written;\n};\n","/**\n * Server Fn Id Transform\n * Injects stable ids into `createServerFn({ ... })` calls that omit\n * `id` — the hash derives from file path + call index so the client\n * and server bundles agree without a runtime handshake\n */\n\nimport { createHash } from \"node:crypto\";\n\nconst stableId = (fileId: string, index: number): string =>\n\t`sf_${createHash(\"sha256\").update(`${fileId}#${index}`).digest(\"hex\").slice(0, 12)}`;\n\n/** Find the closing brace for an object literal starting at `open` */\nconst matchingBrace = (code: string, open: number): number => {\n\tlet depth = 0;\n\tfor (let i = open; i < code.length; i++) {\n\t\tconst ch = code[i];\n\t\tif (ch === \"{\") depth++;\n\t\telse if (ch === \"}\") {\n\t\t\tdepth--;\n\t\t\tif (depth === 0) return i;\n\t\t}\n\t}\n\treturn -1;\n};\n\nexport const injectServerFnIds = (code: string, fileId: string): string => {\n\tif (!code.includes(\"createServerFn(\")) return code;\n\n\tconst pattern = /createServerFn\\s*\\(\\s*\\{/g;\n\tlet out = \"\";\n\tlet cursor = 0;\n\tlet index = 0;\n\tlet match: RegExpExecArray | null;\n\n\t// biome-ignore lint/suspicious/noAssignInExpressions: classic exec loop\n\twhile ((match = pattern.exec(code)) !== null) {\n\t\tconst open = match.index + match[0].length - 1; // position of \"{\"\n\t\tconst close = matchingBrace(code, open);\n\t\tif (close === -1) break;\n\t\tconst body = code.slice(open + 1, close);\n\t\tindex++;\n\n\t\tif (/(^|[\\s,}])id\\s*:/.test(body)) continue; // explicit id kept\n\n\t\tout += code.slice(cursor, open + 1);\n\t\tout += `id: \"${stableId(fileId, index)}\",`;\n\t\tcursor = open + 1;\n\t}\n\n\treturn cursor > 0 ? out + code.slice(cursor) : code;\n};\n","/**\n * Vite Plugin Types\n */\n\nimport type { SolidFrameworkConfig } from \"#app/types\";\nimport type { SolidRouterPluginOptions } from \"#router/vite-plugin\";\n\nexport interface SolidFrameworkPluginOptions {\n\t/** Framework config (also emitted to virtual:solid-framework/config) */\n\tconfig?: Partial<SolidFrameworkConfig>;\n\t/** Router plugin options — pass false to disable route codegen plugin */\n\trouter?: SolidRouterPluginOptions | false;\n\t/**\n\t * Auto-import map: export name → module specifier.\n\t * true = framework defaults; false = disabled; object = merged with defaults\n\t */\n\tautoImports?: Record<string, string | string[]> | boolean;\n\t/** Serve SSR through the dev middleware — default true */\n\tssrMiddleware?: boolean;\n}\n\nexport const VIRTUAL_CONFIG = \"virtual:solid-framework/config\";\nexport const VIRTUAL_ROUTES = \"virtual:solid-framework/routes\";\nexport const VIRTUAL_SERVER_FNS = \"virtual:solid-framework/server-fns\";\n","/**\n * Virtual Modules\n * Code emitted for framework virtual imports\n */\n\nimport type { SolidFrameworkConfig } from \"#app/types\";\n\nexport const configModuleCode = (\n\tconfig: SolidFrameworkConfig,\n\tinstrumentationPath?: string,\n): string =>\n\tinstrumentationPath\n\t\t? [\n\t\t\t\t`import * as _instr from ${JSON.stringify(instrumentationPath)};`,\n\t\t\t\t`export default Object.assign(${JSON.stringify(config)}, {`,\n\t\t\t\t\"\tinstrumentation: {\",\n\t\t\t\t\"\t\tregister: _instr.register,\",\n\t\t\t\t\"\t\tonRequest: _instr.onRequest,\",\n\t\t\t\t\"\t\tonError: _instr.onError,\",\n\t\t\t\t\"\t},\",\n\t\t\t\t\"});\",\n\t\t\t].join(\"\\n\")\n\t\t: `export default ${JSON.stringify(config)};`;\n\n/**\n * Route manifest — Vite glob import over the routes directory, plus a\n * prebuilt RouteManifest for <FileRoutes>. Convention files\n * (error/loading/not-found/layout) are included in the modules map.\n */\nexport const routesModuleCode = (routesDir: string): string =>\n\t[\n\t\t'import { buildRouteManifest, preloadFileRoute } from \"@wrikka/solid-framework/internal\";',\n\t\t`const modules = import.meta.glob(\"/${routesDir}/**/*.{tsx,ts,jsx,js}\");`,\n\t\t`export const routeFiles = Object.keys(modules).map((file) => file.slice(1));`,\n\t\t`export const routeModules = Object.fromEntries(Object.entries(modules).map(([k, v]) => [k.slice(1), v]));`,\n\t\t`export const manifest = buildRouteManifest(routeFiles, ${JSON.stringify(routesDir)});`,\n\t\t\"export const preloadRoute = (path) => preloadFileRoute(path, manifest, routeModules);\",\n\t\t\"export default manifest;\",\n\t].join(\"\\n\");\n\n/**\n * Server function registry — eager glob of server modules so every\n * createServerFn descriptor registers itself on the server bundle.\n * Conventions:\n * *.server.ts — server-only code (stubbed out of client bundles)\n * *.fn.ts — isomorphic createServerFn definitions (client ships the\n * remote caller only; handler executes server-side)\n */\nexport const serverFnsModuleCode = (): string =>\n\t[\n\t\t'const modules = import.meta.glob(\"/src/**/*.{server,fn}.{ts,tsx}\", { eager: true });',\n\t\t\"export const serverModules = modules;\",\n\t\t\"export default modules;\",\n\t].join(\"\\n\");\n\n/**\n * Stub emitted when a .server module leaks into the client bundle\n */\nexport const serverStubCode = (id: string): string =>\n\t[\n\t\t`throw new Error(`,\n\t\t` \"[solid-framework] \\\\\"${id}\\\\\" is a .server module and cannot be imported from the client. ` +\n\t\t\t`Move the import into a loader, createServerFn handler, or .server.ts file.\"`,\n\t\t`);`,\n\t].join(\"\\n\");\n\nexport const isServerModuleId = (id: string): boolean =>\n\t/\\.server\\.(ts|tsx|js|jsx|mts|cts)$/.test(id.split(\"?\")[0] ?? id);\n","/**\n * solidFramework Vite Plugin\n * Single orchestrating plugin — router codegen, virtual modules,\n * server-module boundary, auto-imports and the dev SSR middleware\n */\n\nimport { existsSync, readdirSync } from \"node:fs\";\nimport { basename, join, sep } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport type { Plugin } from \"vite\";\nimport { resolveConfig } from \"#app/modules/config\";\nimport { buildRouteManifest } from \"#app/modules/file-routes\";\nimport { solidRouterPlugin } from \"#router/vite-plugin\";\nimport { FRAMEWORK_AUTO_IMPORTS, injectAutoImports } from \"./auto-imports\";\nimport { createSsrMiddleware } from \"./dev-middleware\";\nimport { prerenderToDisk } from \"./prerender\";\nimport { injectServerFnIds } from \"./server-fn-ids\";\nimport type { SolidFrameworkPluginOptions } from \"./types\";\nimport { VIRTUAL_CONFIG, VIRTUAL_ROUTES, VIRTUAL_SERVER_FNS } from \"./types\";\nimport {\n\tconfigModuleCode,\n\tisServerModuleId,\n\troutesModuleCode,\n\tserverFnsModuleCode,\n\tserverStubCode,\n} from \"./virtual-modules\";\n\nconst RESOLVED_PREFIX = \"\\0\";\n\nconst resolveVirtualId = (id: string): string => `${RESOLVED_PREFIX}${id}`;\n\nexport const solidFramework = (\n\toptions: SolidFrameworkPluginOptions = {},\n): Plugin[] => {\n\tconst config = resolveConfig(options.config);\n\n\tconst autoImportMap =\n\t\toptions.autoImports === false\n\t\t\t? null\n\t\t\t: {\n\t\t\t\t\t...FRAMEWORK_AUTO_IMPORTS,\n\t\t\t\t\t...(typeof options.autoImports === \"object\"\n\t\t\t\t\t\t? options.autoImports\n\t\t\t\t\t\t: {}),\n\t\t\t\t};\n\n\tlet rootDir = \"\";\n\tlet ssrOutDir = \"dist/server\";\n\t// `instrumentation.ts` convention — discovered at project/src root\n\tlet instrumentationPath: string | undefined;\n\n\tconst core: Plugin = {\n\t\tname: \"solid-framework\",\n\t\tenforce: \"pre\",\n\n\t\tconfigResolved(resolved) {\n\t\t\trootDir = resolved.root;\n\t\t\tif (process.env.SOLID_SSR_BUILD === \"1\") {\n\t\t\t\tssrOutDir = resolved.build.outDir;\n\t\t\t}\n\t\t\t// instrumentation.ts convention — first match wins\n\t\t\tfor (const dir of [resolved.root, join(resolved.root, \"src\")]) {\n\t\t\t\tfor (const ext of [\"ts\", \"tsx\"]) {\n\t\t\t\t\tconst candidate = join(dir, `instrumentation.${ext}`);\n\t\t\t\t\tif (existsSync(candidate)) {\n\t\t\t\t\t\tinstrumentationPath = candidate.split(sep).join(\"/\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tconfig(_userConfig, env) {\n\t\t\treturn {\n\t\t\t\tssr: {\n\t\t\t\t\tnoExternal: [\"@wrikka/solid-framework\"],\n\t\t\t\t},\n\t\t\t\t// @wrikka/web-server-toolkit is a runtime (bun) dependency — keep it\n\t\t\t\t// external in SSR builds so rolldown never opens its dist bundle\n\t\t\t\t...(env.isSsrBuild === true\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tbuild: {\n\t\t\t\t\t\t\t\trollupOptions: {\n\t\t\t\t\t\t\t\t\texternal: [\"@wrikka/web-server-toolkit\", /^bun(:|$)/],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t\tserver: {\n\t\t\t\t\twatch: { ignored: [\"**/dist/**\"] },\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\n\t\tresolveId(id, _importer, resolveOptions) {\n\t\t\tif (\n\t\t\t\tid === VIRTUAL_CONFIG ||\n\t\t\t\tid === VIRTUAL_ROUTES ||\n\t\t\t\tid === VIRTUAL_SERVER_FNS\n\t\t\t) {\n\t\t\t\treturn resolveVirtualId(id);\n\t\t\t}\n\t\t\t// @wrikka/web-server-toolkit is server-only — stub it out of client bundles\n\t\t\tif (id === \"@wrikka/web-server-toolkit\" && resolveOptions?.ssr !== true) {\n\t\t\t\treturn `${RESOLVED_PREFIX}web-server`;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\n\t\tload(id, loadOptions) {\n\t\t\tif (id.startsWith(RESOLVED_PREFIX)) {\n\t\t\t\tconst virtual = id.slice(RESOLVED_PREFIX.length);\n\t\t\t\tif (virtual === VIRTUAL_CONFIG)\n\t\t\t\t\t// instrumentation hooks are server-only — merge only in SSR builds\n\t\t\t\t\treturn configModuleCode(\n\t\t\t\t\t\tconfig,\n\t\t\t\t\t\tloadOptions?.ssr === true ? instrumentationPath : undefined,\n\t\t\t\t\t);\n\t\t\t\tif (virtual === VIRTUAL_ROUTES)\n\t\t\t\t\treturn routesModuleCode(config.routesDir);\n\t\t\t\tif (virtual === VIRTUAL_SERVER_FNS) return serverFnsModuleCode();\n\t\t\t\tif (virtual === \"web-server\") {\n\t\t\t\t\treturn `const fail = () => { throw new Error(\"[solid-framework] @wrikka/web-server-toolkit is server-only and cannot run on the client\"); };\\nexport const createRequestHandler = fail;\\nexport default fail;\\n`;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// .server.ts boundary — stub server-only modules outside SSR builds\n\t\t\tif (isServerModuleId(id) && loadOptions?.ssr !== true) {\n\t\t\t\treturn serverStubCode(id);\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\n\t\ttransform(code, id) {\n\t\t\tif (!/\\.[jt]sx?$/.test(id) || id.includes(\"node_modules\")) return null;\n\t\t\tif (isServerModuleId(id)) return null;\n\n\t\t\tlet next = autoImportMap ? injectAutoImports(code, autoImportMap) : null;\n\t\t\tlet current = next ?? code;\n\t\t\tconst withIds = injectServerFnIds(current, id);\n\t\t\tif (withIds !== current) {\n\t\t\t\tcurrent = withIds;\n\t\t\t\tnext = current;\n\t\t\t}\n\t\t\tfor (const plugin of config.plugins ?? []) {\n\t\t\t\tconst out = plugin.transform?.(current, id);\n\t\t\t\tif (out != null) {\n\t\t\t\t\tcurrent = out;\n\t\t\t\t\tnext = out;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn next === null ? null : { code: current, map: null };\n\t\t},\n\n\t\tbuildStart() {\n\t\t\t// Notify plugins of the resolved route manifest — scan runs on\n\t\t\t// the node side so build/dev share one source of truth\n\t\t\tif (!existsSync(config.routesDir)) return;\n\t\t\tconst files: string[] = [];\n\t\t\tconst walk = (dir: string) => {\n\t\t\t\tfor (const entry of readdirSync(dir, { withFileTypes: true })) {\n\t\t\t\t\tconst full = join(dir, entry.name);\n\t\t\t\t\tif (entry.isDirectory()) walk(full);\n\t\t\t\t\telse files.push(full.split(sep).join(\"/\"));\n\t\t\t\t}\n\t\t\t};\n\t\t\twalk(config.routesDir);\n\t\t\tconst manifest = buildRouteManifest(files, config.routesDir);\n\t\t\tfor (const plugin of config.plugins ?? []) {\n\t\t\t\tplugin.routesResolved?.(manifest);\n\t\t\t}\n\t\t},\n\n\t\thandleHotUpdate({ file, server }) {\n\t\t\t// Route file edits trigger a full reload — the manifest and\n\t\t\t// convention wiring (layouts/boundaries) can change shape\n\t\t\tconst routesRoot = `${config.routesDir.split(\"/\").join(sep)}${sep}`;\n\t\t\tif (file.split(\"/\").join(sep).startsWith(routesRoot)) {\n\t\t\t\tserver.ws.send({ type: \"full-reload\" });\n\t\t\t}\n\t\t},\n\n\t\tconfigureServer(server) {\n\t\t\tif (options.ssrMiddleware === false) return;\n\t\t\tserver.middlewares.use(createSsrMiddleware(server, config));\n\t\t},\n\n\t\tgenerateBundle(_options, bundle) {\n\t\t\tif (process.env.SOLID_SSR_BUILD === \"1\") return;\n\t\t\t// Preload manifest — entry chunks + css for head hints\n\t\t\tconst entries = Object.values(bundle)\n\t\t\t\t.filter(\n\t\t\t\t\t(o) =>\n\t\t\t\t\t\t(o.type === \"chunk\" && o.isEntry) || o.fileName.endsWith(\".css\"),\n\t\t\t\t)\n\t\t\t\t.map((o) => `/${o.fileName}`);\n\t\t\tif (entries.length) {\n\t\t\t\tthis.emitFile({\n\t\t\t\t\ttype: \"asset\",\n\t\t\t\t\tfileName: \"preload-manifest.json\",\n\t\t\t\t\tsource: JSON.stringify({ preloads: entries }),\n\t\t\t\t});\n\t\t\t}\n\t\t\t// PWA — emit sw.js + manifest.webmanifest into the client build\n\t\t\tif (!config.pwa) return;\n\t\t\tconst pwa = config.pwa;\n\t\t\tconst precache = [\n\t\t\t\t\"/\",\n\t\t\t\t...(pwa.precache ?? []),\n\t\t\t\t...(pwa.manifest ? [\"/manifest.webmanifest\"] : []),\n\t\t\t];\n\t\t\tthis.emitFile({\n\t\t\t\ttype: \"asset\",\n\t\t\t\tfileName: \"sw.js\",\n\t\t\t\tsource: `const CACHE=\"sf-v1\";const PRECACHE=${JSON.stringify(precache)};self.addEventListener(\"install\",e=>{e.waitUntil(caches.open(CACHE).then(c=>c.addAll(PRECACHE)).then(()=>self.skipWaiting()))});self.addEventListener(\"activate\",e=>{e.waitUntil(self.clients.claim())});self.addEventListener(\"fetch\",e=>{if(e.request.method!==\"GET\")return;const nav=e.request.mode===\"navigate\"||(e.request.headers.get(\"accept\")||\"\").includes(\"text/html\");if(nav){e.respondWith(fetch(e.request).then(res=>{const copy=res.clone();caches.open(CACHE).then(c=>c.put(e.request,copy));return res}).catch(()=>caches.match(e.request).then(r=>r||caches.match(\"/\"))));return}e.respondWith(caches.match(e.request).then(r=>r||fetch(e.request).then(res=>{const copy=res.clone();caches.open(CACHE).then(c=>c.put(e.request,copy));return res})))});`,\n\t\t\t});\n\t\t\tif (pwa.manifest) {\n\t\t\t\tthis.emitFile({\n\t\t\t\t\ttype: \"asset\",\n\t\t\t\t\tfileName: \"manifest.webmanifest\",\n\t\t\t\t\tsource: JSON.stringify({\n\t\t\t\t\t\tname: pwa.manifest.name ?? \"app\",\n\t\t\t\t\t\tshort_name: pwa.manifest.shortName ?? pwa.manifest.name ?? \"app\",\n\t\t\t\t\t\tstart_url: pwa.manifest.startUrl ?? \"/\",\n\t\t\t\t\t\tdisplay: pwa.manifest.display ?? \"standalone\",\n\t\t\t\t\t\tbackground_color: pwa.manifest.background ?? \"#ffffff\",\n\t\t\t\t\t\ttheme_color: pwa.manifest.theme ?? \"#000000\",\n\t\t\t\t\t\ticons: pwa.manifest.icons ?? [],\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\tasync closeBundle() {\n\t\t\t// Build-time prerender — after the SSR bundle is written, load\n\t\t\t// the built server entry and render configured routes to disk\n\t\t\tif (process.env.SOLID_SSR_BUILD !== \"1\" || !config.prerender) return;\n\t\t\tconst pre = config.prerender;\n\t\t\tif (!pre.routes?.length && !pre.crawlLinks) return;\n\n\t\t\tconst entryFile = join(\n\t\t\t\trootDir || \".\",\n\t\t\t\tssrOutDir,\n\t\t\t\tbasename(config.entries.server).replace(/\\.[jt]sx?$/, \".js\"),\n\t\t\t);\n\t\t\tconst mod = (await import(pathToFileURL(entryFile).href)) as {\n\t\t\t\tdefault?: (request: Request) => Promise<Response>;\n\t\t\t};\n\t\t\tconst handler = mod.default;\n\t\t\tif (typeof handler !== \"function\") {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[solid-framework] prerender skipped — server entry has no default fetch handler\",\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst written = await prerenderToDisk(handler, {\n\t\t\t\troutes: pre.routes,\n\t\t\t\tcrawlLinks: pre.crawlLinks,\n\t\t\t\toutDir: pre.outDir ?? join(rootDir || \".\", \"dist\"),\n\t\t\t});\n\t\t\tconsole.log(\n\t\t\t\t`[solid-framework] prerendered ${written.length} route(s): ${written\n\t\t\t\t\t.map((w) => w.path)\n\t\t\t\t\t.join(\", \")}`,\n\t\t\t);\n\t\t},\n\t};\n\n\tconst plugins: Plugin[] = [core];\n\n\tif (options.router !== false) {\n\t\tplugins.push(solidRouterPlugin(options.router ?? {}));\n\t}\n\n\treturn plugins;\n};\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,248 @@
1
1
  {
2
- "name": "@wrikka/solid-framework",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
2
+ "name": "@wrikka/solid-framework",
3
+ "version": "0.15.0",
4
+ "description": "SolidJS fullstack meta-framework — file routes, loaders, actions, SSR/stream/islands, server functions, auth, realtime, ops probes, AI surface (llms.txt+MCP), stores, query, hooks, devtools",
5
+ "type": "module",
6
+ "main": "./src/index.ts",
7
+ "types": "./src/index.ts",
8
+ "imports": {
9
+ "#router": "./src/router/index.ts",
10
+ "#router/*": "./src/router/*",
11
+ "#stores": "./src/stores/index.ts",
12
+ "#stores/*": "./src/stores/*",
13
+ "#query": "./src/query/index.ts",
14
+ "#query/*": "./src/query/*",
15
+ "#hooks": "./src/hooks/index.ts",
16
+ "#hooks/*": "./src/hooks/*",
17
+ "#devtools": "./src/devtools/index.ts",
18
+ "#devtools/*": "./src/devtools/*",
19
+ "#render": "./src/render/index.ts",
20
+ "#render/*": "./src/render/*",
21
+ "#head": "./src/head/index.ts",
22
+ "#head/*": "./src/head/*",
23
+ "#server": "./src/server/index.ts",
24
+ "#server/*": "./src/server/*",
25
+ "#app": "./src/app/index.ts",
26
+ "#app/*": "./src/app/*",
27
+ "#actions": "./src/actions/index.ts",
28
+ "#actions/*": "./src/actions/*",
29
+ "#assets": "./src/assets/index.ts",
30
+ "#assets/*": "./src/assets/*",
31
+ "#vite": "./src/vite/index.ts",
32
+ "#vite/*": "./src/vite/*",
33
+ "#cli": "./src/cli/index.ts",
34
+ "#cli/*": "./src/cli/*"
35
+ },
36
+ "exports": {
37
+ ".": {
38
+ "types": "./src/index.ts",
39
+ "default": "./src/index.ts"
40
+ },
41
+ "./router": {
42
+ "types": "./src/router/index.ts",
43
+ "default": "./src/router/index.ts"
44
+ },
45
+ "./stores": {
46
+ "types": "./src/stores/index.ts",
47
+ "default": "./src/stores/index.ts"
48
+ },
49
+ "./stores/storage": {
50
+ "types": "./src/stores/adapters/storage/index.ts",
51
+ "default": "./src/stores/adapters/storage/index.ts"
52
+ },
53
+ "./stores/validation": {
54
+ "types": "./src/stores/adapters/validation/index.ts",
55
+ "default": "./src/stores/adapters/validation/index.ts"
56
+ },
57
+ "./stores/persistence": {
58
+ "types": "./src/stores/adapters/persistence/index.ts",
59
+ "default": "./src/stores/adapters/persistence/index.ts"
60
+ },
61
+ "./stores/devtools": {
62
+ "types": "./src/stores/adapters/devtools/index.ts",
63
+ "default": "./src/stores/adapters/devtools/index.ts"
64
+ },
65
+ "./stores/router": {
66
+ "types": "./src/stores/adapters/router/index.ts",
67
+ "default": "./src/stores/adapters/router/index.ts"
68
+ },
69
+ "./stores/sync": {
70
+ "types": "./src/stores/adapters/sync/index.ts",
71
+ "default": "./src/stores/adapters/sync/index.ts"
72
+ },
73
+ "./stores/analytics": {
74
+ "types": "./src/stores/adapters/analytics/index.ts",
75
+ "default": "./src/stores/adapters/analytics/index.ts"
76
+ },
77
+ "./query": {
78
+ "types": "./src/query/index.ts",
79
+ "default": "./src/query/index.ts"
80
+ },
81
+ "./query/solid": {
82
+ "types": "./src/query/adapters/solid/index.ts",
83
+ "default": "./src/query/adapters/solid/index.ts"
84
+ },
85
+ "./query/persistence": {
86
+ "types": "./src/query/adapters/persistence/index.ts",
87
+ "default": "./src/query/adapters/persistence/index.ts"
88
+ },
89
+ "./query/validation": {
90
+ "types": "./src/query/adapters/validation/index.ts",
91
+ "default": "./src/query/adapters/validation/index.ts"
92
+ },
93
+ "./query/devtools": {
94
+ "types": "./src/query/adapters/devtools/index.ts",
95
+ "default": "./src/query/adapters/devtools/index.ts"
96
+ },
97
+ "./hooks": {
98
+ "types": "./src/hooks/index.ts",
99
+ "default": "./src/hooks/index.ts"
100
+ },
101
+ "./devtools": {
102
+ "types": "./src/devtools/index.ts",
103
+ "default": "./src/devtools/index.ts"
104
+ },
105
+ "./devtools/components": {
106
+ "types": "./src/devtools/presentation/DevtoolsPanel.tsx",
107
+ "default": "./src/devtools/presentation/DevtoolsPanel.tsx"
108
+ },
109
+ "./render": {
110
+ "types": "./src/render/index.ts",
111
+ "default": "./src/render/index.ts"
112
+ },
113
+ "./head": {
114
+ "types": "./src/head/index.ts",
115
+ "default": "./src/head/index.ts"
116
+ },
117
+ "./server": {
118
+ "types": "./src/server/index.ts",
119
+ "default": "./src/server/index.ts"
120
+ },
121
+ "./server/node": {
122
+ "types": "./src/server/node.ts",
123
+ "default": "./src/server/node.ts"
124
+ },
125
+ "./app": {
126
+ "types": "./src/app/index.ts",
127
+ "default": "./src/app/index.ts"
128
+ },
129
+ "./actions": {
130
+ "types": "./src/actions/index.ts",
131
+ "default": "./src/actions/index.ts"
132
+ },
133
+ "./assets": {
134
+ "types": "./src/assets/index.ts",
135
+ "default": "./src/assets/index.ts"
136
+ },
137
+ "./vite": {
138
+ "types": "./dist/vite.d.ts",
139
+ "default": "./dist/vite.js"
140
+ },
141
+ "./vite/client": {
142
+ "types": "./src/vite/client.d.ts"
143
+ },
144
+ "./cli": {
145
+ "types": "./src/cli/index.ts",
146
+ "default": "./src/cli/index.ts"
147
+ },
148
+ "./testing": {
149
+ "types": "./src/testing/index.ts",
150
+ "default": "./src/testing/index.ts"
151
+ },
152
+ "./internal": {
153
+ "types": "./src/internal.ts",
154
+ "default": "./src/internal.ts"
155
+ },
156
+ "./package.json": "./package.json"
157
+ },
158
+ "bin": {
159
+ "solid": "./src/cli/bin.ts"
160
+ },
161
+ "files": [
162
+ "src",
163
+ "dist",
164
+ "README.md"
165
+ ],
166
+ "scripts": {
167
+ "dev": "tsdown --watch",
168
+ "build": "tsdown",
169
+ "typecheck": "tsrs --noEmit",
170
+ "lint": "biome check",
171
+ "lint:fix": "biome check --write",
172
+ "format": "biome check --write",
173
+ "test": "vitest run --passWithNoTests",
174
+ "test:watch": "vitest",
175
+ "test:coverage": "vitest run --coverage",
176
+ "scan": "echo 'No ast-grep rules configured; skipping scan.'",
177
+ "check": "bun run lint && bun run typecheck && bun run scan",
178
+ "verify": "bun run check && bun run test",
179
+ "ci": "bun run verify && bun run build",
180
+ "clean": "bunx rimraf node_modules dist",
181
+ "deps:analyze": "bunx depcheck",
182
+ "deps:update": "taze -r -w"
183
+ },
184
+ "dependencies": {
185
+ "@wrikka/fx": "0.4.0",
186
+ "@wrikka/ui": "0.1.0",
187
+ "@wrikka/web-server-toolkit": "0.2.0",
188
+ "arktype": "^2.2.3"
189
+ },
190
+ "peerDependencies": {
191
+ "jsqr": ">=1.4.0",
192
+ "monaco-editor": ">=0.52.0",
193
+ "qrcode": ">=1.5.0",
194
+ "solid-js": "^1.9.0"
195
+ },
196
+ "peerDependenciesMeta": {
197
+ "jsqr": {
198
+ "optional": true
199
+ },
200
+ "monaco-editor": {
201
+ "optional": true
202
+ },
203
+ "qrcode": {
204
+ "optional": true
205
+ }
206
+ },
207
+ "devDependencies": {
208
+ "@biomejs/biome": "^2.5.13",
209
+ "@types/bun": "^1.4.2",
210
+ "@types/qrcode": "^1.5.6",
211
+ "bun-types": "latest",
212
+ "depcheck": "^1.4.7",
213
+ "jsqr": "^1.4.0",
214
+ "monaco-editor": "^0.56.0",
215
+ "qrcode": "^1.5.4",
216
+ "rimraf": "^6.1.3",
217
+ "solid-js": "^1.9.15",
218
+ "taze": "^21.1.0",
219
+ "tsdown": "^0.23.0",
220
+ "typescript": "^7.0.2",
221
+ "unocss": "^66.10.4",
222
+ "unplugin-solid": "^2.0.0",
223
+ "vite": "^8.3.0",
224
+ "vite-plugin-solid": "^2.11.14",
225
+ "vitest": "^5.0.1"
226
+ },
227
+ "sideEffects": false,
228
+ "keywords": [
229
+ "solidjs",
230
+ "framework",
231
+ "router",
232
+ "stores",
233
+ "query",
234
+ "hooks",
235
+ "devtools",
236
+ "clean-architecture"
237
+ ],
238
+ "engines": {
239
+ "bun": ">=1.3.10",
240
+ "node": ">=20"
241
+ },
242
+ "license": "MIT",
243
+ "repository": {
244
+ "type": "git",
245
+ "url": "https://github.com/wrikka/bun-packages",
246
+ "directory": "packages/solid-framework"
247
+ }
248
+ }
@@ -0,0 +1,5 @@
1
+ // Public API - @wrikka/solid-framework/actions
2
+
3
+ export * from "./modules/action";
4
+ export * from "./presentation";
5
+ export * from "./types";
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Action HTTP Handler
3
+ * Dispatches `/_server/action/<id>` — fetch calls get JSON, native form
4
+ * posts get a 303 redirect back to the referer (progressive enhancement)
5
+ */
6
+
7
+ import { ACTION_BASE } from "../../application/usecases/create-action";
8
+ import { getAction } from "../../application/usecases/registry";
9
+
10
+ export const isActionRequest = (request: Request): boolean =>
11
+ new URL(request.url).pathname.startsWith(`${ACTION_BASE}/`);
12
+
13
+ const jsonError = (status: number, message: string): Response =>
14
+ new Response(JSON.stringify({ error: { code: "ERROR", message } }), {
15
+ status,
16
+ headers: { "Content-Type": "application/json" },
17
+ });
18
+
19
+ const readActionInput = async (request: Request): Promise<unknown> => {
20
+ const contentType = request.headers.get("Content-Type") ?? "";
21
+ if (contentType.includes("application/json")) {
22
+ const body = (await request.json()) as { input?: unknown };
23
+ return body.input ?? null;
24
+ }
25
+ return request.formData();
26
+ };
27
+
28
+ const wantsRedirect = (request: Request): boolean =>
29
+ (request.headers.get("Accept") ?? "").includes("text/html") &&
30
+ !request.headers.has("X-Requested-With");
31
+
32
+ export const createActionHandler = (): ((
33
+ request: Request,
34
+ ) => Promise<Response>) => {
35
+ return async (request: Request): Promise<Response> => {
36
+ const url = new URL(request.url);
37
+ const id = decodeURIComponent(url.pathname.slice(ACTION_BASE.length + 1));
38
+
39
+ const descriptor = getAction(id);
40
+ if (!descriptor) {
41
+ return jsonError(404, `Unknown action: ${id}`);
42
+ }
43
+ if (request.method !== "POST") {
44
+ return jsonError(405, `Action ${id} expects POST`);
45
+ }
46
+
47
+ try {
48
+ const input = await readActionInput(request);
49
+ const formData = input instanceof FormData ? input : undefined;
50
+ const result = await descriptor.handler(input, {
51
+ request,
52
+ formData,
53
+ });
54
+
55
+ if (wantsRedirect(request)) {
56
+ const back = request.headers.get("Referer") ?? "/";
57
+ return new Response(null, {
58
+ status: 303,
59
+ headers: { Location: back },
60
+ });
61
+ }
62
+
63
+ return new Response(JSON.stringify({ result }), {
64
+ headers: { "Content-Type": "application/json" },
65
+ });
66
+ } catch (error) {
67
+ if (wantsRedirect(request)) {
68
+ const back = request.headers.get("Referer") ?? "/";
69
+ return new Response(null, {
70
+ status: 303,
71
+ headers: { Location: back },
72
+ });
73
+ }
74
+ return jsonError(
75
+ 500,
76
+ error instanceof Error ? error.message : "Action failed",
77
+ );
78
+ }
79
+ };
80
+ };
@@ -0,0 +1 @@
1
+ export * from "./usecases";
@@ -0,0 +1,92 @@
1
+ /**
2
+ * createAction
3
+ * Mutation that works both as a typed call and as a native form action
4
+ *
5
+ * - As a function: `await action(input)` — dispatched to `/_server/action/<id>`
6
+ * - As form props: `<form {...action.form}>` — posts FormData, redirects back
7
+ */
8
+
9
+ import { isServer } from "solid-js/web";
10
+ import type {
11
+ ActionDescriptor,
12
+ ActionHandler,
13
+ FormActionProps,
14
+ } from "#actions/types";
15
+ import { ServerFnError } from "#server/shared/errors";
16
+ import { registerAction } from "./registry";
17
+
18
+ export const ACTION_BASE = "/_server/action";
19
+
20
+ export interface CreateActionOptions {
21
+ id: string;
22
+ baseUrl?: string;
23
+ fetch?: typeof fetch;
24
+ }
25
+
26
+ export interface Action<TInput, TOutput> {
27
+ (input: TInput): Promise<TOutput>;
28
+ /** Spread onto <form> for progressive enhancement */
29
+ form: FormActionProps;
30
+ /** The form action URL */
31
+ url: string;
32
+ id: string;
33
+ }
34
+
35
+ const callRemote = async <TInput, TOutput>(
36
+ options: CreateActionOptions,
37
+ input: TInput,
38
+ ): Promise<TOutput> => {
39
+ const fetchFn = options.fetch ?? fetch;
40
+ const url = `${options.baseUrl ?? ""}${ACTION_BASE}/${encodeURIComponent(options.id)}`;
41
+
42
+ const isFormData =
43
+ typeof FormData !== "undefined" && input instanceof FormData;
44
+
45
+ const response = await fetchFn(url, {
46
+ method: "POST",
47
+ headers: isFormData ? undefined : { "Content-Type": "application/json" },
48
+ body: isFormData ? (input as FormData) : JSON.stringify({ input }),
49
+ });
50
+
51
+ const body = (await response.json()) as {
52
+ result?: TOutput;
53
+ error?: { code?: string; message?: string; data?: unknown };
54
+ };
55
+
56
+ if (!response.ok || body.error) {
57
+ throw ServerFnError.fromJson(
58
+ body.error ?? { message: response.statusText },
59
+ );
60
+ }
61
+ return body.result as TOutput;
62
+ };
63
+
64
+ export const createAction = <TInput, TOutput>(
65
+ options: CreateActionOptions,
66
+ handler: ActionHandler<TInput, TOutput>,
67
+ ): Action<TInput, TOutput> => {
68
+ const descriptor: ActionDescriptor<TInput, TOutput> = {
69
+ id: options.id,
70
+ handler,
71
+ };
72
+ if (isServer) registerAction(descriptor);
73
+
74
+ const url = `${ACTION_BASE}/${encodeURIComponent(options.id)}`;
75
+
76
+ const action = (async (input: TInput) => {
77
+ if (isServer) {
78
+ return handler(input, { request: new Request("http://localhost") });
79
+ }
80
+ return callRemote<TInput, TOutput>(options, input);
81
+ }) as Action<TInput, TOutput>;
82
+
83
+ action.id = options.id;
84
+ action.url = url;
85
+ action.form = {
86
+ action: url,
87
+ method: "post",
88
+ enctype: "application/x-www-form-urlencoded",
89
+ };
90
+
91
+ return action;
92
+ };
@@ -0,0 +1,2 @@
1
+ export * from "./create-action";
2
+ export * from "./registry";
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Action Registry
3
+ * Server-side registry for form actions
4
+ */
5
+
6
+ import type { ActionDescriptor } from "#actions/types";
7
+
8
+ const registry = new Map<string, ActionDescriptor<unknown, unknown>>();
9
+
10
+ export const registerAction = <TInput, TOutput>(
11
+ descriptor: ActionDescriptor<TInput, TOutput>,
12
+ ): void => {
13
+ registry.set(descriptor.id, descriptor as ActionDescriptor<unknown, unknown>);
14
+ };
15
+
16
+ export const getAction = (
17
+ id: string,
18
+ ): ActionDescriptor<unknown, unknown> | undefined => registry.get(id);
19
+
20
+ export const clearActionRegistry = (): void => registry.clear();