create-jen-app 1.2.2 → 1.2.4

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 (861) hide show
  1. package/README.md +3 -1
  2. package/dist/colors.js +0 -17
  3. package/dist/create.js +5 -17
  4. package/dist/generator.js +14 -31
  5. package/package.json +2 -2
  6. package/templates/ssr-isr/README.md +77 -0
  7. package/templates/ssr-isr/build.js +118 -0
  8. package/templates/ssr-isr/jen.config.ts +109 -0
  9. package/templates/ssr-isr/jenjs.d.ts +22 -0
  10. package/templates/ssr-isr/lib/api/(hello).d.ts +7 -0
  11. package/templates/ssr-isr/lib/api/(hello).js +9 -0
  12. package/templates/ssr-isr/lib/auth/cookie-utils.d.ts +33 -0
  13. package/templates/ssr-isr/lib/auth/cookie-utils.js +79 -0
  14. package/templates/ssr-isr/lib/auth/index.js +2 -0
  15. package/templates/ssr-isr/lib/auth/jwt.d.ts +30 -0
  16. package/templates/ssr-isr/lib/auth/jwt.js +57 -0
  17. package/templates/ssr-isr/lib/auth/session.d.ts +44 -0
  18. package/templates/ssr-isr/lib/auth/session.js +92 -0
  19. package/templates/ssr-isr/lib/build/asset-hashing.d.ts +10 -0
  20. package/templates/ssr-isr/lib/build/asset-hashing.js +25 -0
  21. package/templates/ssr-isr/lib/build/asset-manifest.d.ts +11 -0
  22. package/templates/ssr-isr/lib/build/asset-manifest.js +21 -0
  23. package/templates/ssr-isr/lib/build/build.d.ts +24 -0
  24. package/templates/ssr-isr/lib/build/build.js +141 -0
  25. package/templates/{static → ssr-isr}/lib/build/island-hydration.d.ts +8 -5
  26. package/templates/ssr-isr/lib/build/island-hydration.js +44 -0
  27. package/templates/ssr-isr/lib/build/minifier.d.ts +20 -0
  28. package/templates/ssr-isr/lib/build/minifier.js +46 -0
  29. package/templates/ssr-isr/lib/build/page-renderer.d.ts +17 -0
  30. package/templates/ssr-isr/lib/build/page-renderer.js +28 -0
  31. package/templates/ssr-isr/lib/build/production-build.d.ts +10 -0
  32. package/templates/ssr-isr/lib/build/production-build.js +13 -0
  33. package/templates/ssr-isr/lib/build/ssg-pipeline.d.ts +15 -0
  34. package/templates/ssr-isr/lib/build/ssg-pipeline.js +113 -0
  35. package/templates/{static → ssr-isr}/lib/build-tools/build-site.d.ts +3 -3
  36. package/templates/ssr-isr/lib/build-tools/build-site.js +36 -0
  37. package/templates/ssr-isr/lib/cache/index.d.ts +10 -0
  38. package/templates/ssr-isr/lib/cache/index.js +10 -0
  39. package/templates/ssr-isr/lib/cache/memory.d.ts +33 -0
  40. package/templates/ssr-isr/lib/cache/memory.js +40 -0
  41. package/templates/ssr-isr/lib/cache/redis.d.ts +45 -0
  42. package/templates/ssr-isr/lib/cache/redis.js +61 -0
  43. package/templates/ssr-isr/lib/cli/banner.d.ts +5 -0
  44. package/templates/ssr-isr/lib/cli/banner.js +28 -0
  45. package/templates/ssr-isr/lib/cli/templates/ssg/jen.config.js +32 -0
  46. package/templates/ssr-isr/lib/cli/templates/ssg/site/index.js +9 -0
  47. package/templates/ssr-isr/lib/cli/templates/ssr/jen.config.js +32 -0
  48. package/templates/ssr-isr/lib/cli/templates/ssr/site/index.js +9 -0
  49. package/templates/ssr-isr/lib/compilers/esbuild-plugins.js +111 -0
  50. package/templates/ssr-isr/lib/compilers/svelte.d.ts +18 -0
  51. package/templates/ssr-isr/lib/compilers/svelte.js +44 -0
  52. package/templates/ssr-isr/lib/compilers/vue.d.ts +15 -0
  53. package/templates/ssr-isr/lib/compilers/vue.js +90 -0
  54. package/templates/ssr-isr/lib/core/config.d.ts +220 -0
  55. package/templates/ssr-isr/lib/core/http.d.ts +56 -0
  56. package/templates/ssr-isr/lib/core/http.js +71 -0
  57. package/templates/ssr-isr/lib/core/middleware-hooks.d.ts +219 -0
  58. package/templates/ssr-isr/lib/core/middleware-hooks.js +97 -0
  59. package/templates/ssr-isr/lib/core/paths.d.ts +44 -0
  60. package/templates/ssr-isr/lib/core/paths.js +39 -0
  61. package/templates/ssr-isr/lib/core/routes/match.d.ts +54 -0
  62. package/templates/ssr-isr/lib/core/routes/match.js +47 -0
  63. package/templates/ssr-isr/lib/core/routes/scan.d.ts +53 -0
  64. package/templates/ssr-isr/lib/core/routes/scan.js +190 -0
  65. package/templates/ssr-isr/lib/core/types.d.ts +153 -0
  66. package/templates/ssr-isr/lib/core/types.js +1 -0
  67. package/templates/ssr-isr/lib/css/compiler.d.ts +23 -0
  68. package/templates/ssr-isr/lib/css/compiler.js +74 -0
  69. package/templates/ssr-isr/lib/db/connector.d.ts +30 -0
  70. package/templates/ssr-isr/lib/db/connector.js +42 -0
  71. package/templates/ssr-isr/lib/db/drivers/jdb.d.ts +17 -0
  72. package/templates/ssr-isr/lib/db/drivers/jdb.js +44 -0
  73. package/templates/ssr-isr/lib/db/drivers/sql.d.ts +22 -0
  74. package/templates/ssr-isr/lib/db/drivers/sql.js +182 -0
  75. package/templates/ssr-isr/lib/db/index.d.ts +27 -0
  76. package/templates/ssr-isr/lib/db/index.js +48 -0
  77. package/templates/ssr-isr/lib/db/types.d.ts +33 -0
  78. package/templates/ssr-isr/lib/db/types.js +1 -0
  79. package/templates/ssr-isr/lib/graphql/index.d.ts +48 -0
  80. package/templates/ssr-isr/lib/graphql/index.js +52 -0
  81. package/templates/ssr-isr/lib/graphql/resolvers.d.ts +57 -0
  82. package/templates/ssr-isr/lib/graphql/resolvers.js +25 -0
  83. package/templates/ssr-isr/lib/graphql/schema.d.ts +35 -0
  84. package/templates/ssr-isr/lib/graphql/schema.js +35 -0
  85. package/templates/ssr-isr/lib/i18n/en.json +4 -0
  86. package/templates/ssr-isr/lib/i18n/es.json +4 -0
  87. package/templates/ssr-isr/lib/i18n/index.d.ts +8 -0
  88. package/templates/ssr-isr/lib/i18n/index.js +15 -0
  89. package/templates/ssr-isr/lib/import/jen-import.d.ts +56 -0
  90. package/templates/ssr-isr/lib/import/jen-import.js +161 -0
  91. package/templates/{static → ssr-isr}/lib/index.d.ts +42 -11
  92. package/templates/ssr-isr/lib/index.js +116 -0
  93. package/templates/ssr-isr/lib/jdb/engine.d.ts +38 -0
  94. package/templates/ssr-isr/lib/jdb/engine.js +275 -0
  95. package/templates/ssr-isr/lib/jdb/index.d.ts +34 -0
  96. package/templates/ssr-isr/lib/jdb/index.js +34 -0
  97. package/templates/ssr-isr/lib/jdb/types.d.ts +228 -0
  98. package/templates/ssr-isr/lib/jdb/types.js +1 -0
  99. package/templates/ssr-isr/lib/jdb/utils.d.ts +66 -0
  100. package/templates/ssr-isr/lib/jdb/utils.js +176 -0
  101. package/templates/ssr-isr/lib/middleware/builtins/body-parser.d.ts +16 -0
  102. package/templates/ssr-isr/lib/middleware/builtins/body-parser.js +56 -0
  103. package/templates/ssr-isr/lib/middleware/builtins/cors.d.ts +15 -0
  104. package/templates/ssr-isr/lib/middleware/builtins/cors.js +54 -0
  105. package/templates/ssr-isr/lib/middleware/builtins/logger.d.ts +19 -0
  106. package/templates/ssr-isr/lib/middleware/builtins/logger.js +34 -0
  107. package/templates/ssr-isr/lib/middleware/builtins/rate-limit.d.ts +22 -0
  108. package/templates/ssr-isr/lib/middleware/builtins/rate-limit.js +79 -0
  109. package/templates/ssr-isr/lib/middleware/builtins/request-id.d.ts +19 -0
  110. package/templates/ssr-isr/lib/middleware/builtins/request-id.js +29 -0
  111. package/templates/ssr-isr/lib/middleware/builtins/security-headers.d.ts +19 -0
  112. package/templates/ssr-isr/lib/middleware/builtins/security-headers.js +53 -0
  113. package/templates/ssr-isr/lib/middleware/context.d.ts +105 -0
  114. package/templates/ssr-isr/lib/middleware/context.js +124 -0
  115. package/templates/ssr-isr/lib/middleware/decorators.d.ts +19 -0
  116. package/templates/ssr-isr/lib/middleware/decorators.js +93 -0
  117. package/templates/ssr-isr/lib/middleware/errors/handler.js +46 -0
  118. package/templates/ssr-isr/lib/middleware/errors/http-error.d.ts +5 -0
  119. package/templates/ssr-isr/lib/middleware/errors/http-error.js +10 -0
  120. package/templates/ssr-isr/lib/middleware/kernel.d.ts +69 -0
  121. package/templates/ssr-isr/lib/middleware/kernel.js +85 -0
  122. package/templates/ssr-isr/lib/middleware/pipeline.d.ts +53 -0
  123. package/templates/ssr-isr/lib/middleware/pipeline.js +148 -0
  124. package/templates/ssr-isr/lib/middleware/registry.d.ts +69 -0
  125. package/templates/ssr-isr/lib/middleware/registry.js +85 -0
  126. package/templates/ssr-isr/lib/middleware/response.d.ts +75 -0
  127. package/templates/ssr-isr/lib/middleware/response.js +107 -0
  128. package/templates/ssr-isr/lib/middleware/types.d.ts +1 -0
  129. package/templates/ssr-isr/lib/middleware/types.js +1 -0
  130. package/templates/ssr-isr/lib/middleware/utils/matcher.js +13 -0
  131. package/templates/ssr-isr/lib/native/bundle.d.ts +24 -0
  132. package/templates/ssr-isr/lib/native/bundle.js +22 -0
  133. package/templates/ssr-isr/lib/native/dev-server.d.ts +13 -0
  134. package/templates/ssr-isr/lib/native/dev-server.js +23 -0
  135. package/templates/{static → ssr-isr}/lib/native/index.d.ts +20 -20
  136. package/templates/ssr-isr/lib/native/index.js +33 -0
  137. package/templates/ssr-isr/lib/native/optimizer.d.ts +21 -0
  138. package/templates/ssr-isr/lib/native/optimizer.js +20 -0
  139. package/templates/ssr-isr/lib/native/style-compiler.d.ts +19 -0
  140. package/templates/ssr-isr/lib/native/style-compiler.js +19 -0
  141. package/templates/ssr-isr/lib/plugin/loader.d.ts +10 -0
  142. package/templates/ssr-isr/lib/plugin/loader.js +36 -0
  143. package/templates/ssr-isr/lib/runtime/client-runtime.d.ts +16 -0
  144. package/templates/ssr-isr/lib/runtime/client-runtime.js +25 -0
  145. package/templates/ssr-isr/lib/runtime/hmr.d.ts +23 -0
  146. package/templates/ssr-isr/lib/runtime/hmr.js +59 -0
  147. package/templates/ssr-isr/lib/runtime/hydrate.d.ts +18 -0
  148. package/templates/ssr-isr/lib/runtime/hydrate.js +55 -0
  149. package/templates/ssr-isr/lib/runtime/island-hydration-client.d.ts +8 -0
  150. package/templates/ssr-isr/lib/runtime/island-hydration-client.js +146 -0
  151. package/templates/ssr-isr/lib/runtime/islands.d.ts +101 -0
  152. package/templates/ssr-isr/lib/runtime/islands.js +110 -0
  153. package/templates/ssr-isr/lib/runtime/render.d.ts +40 -0
  154. package/templates/ssr-isr/lib/runtime/render.js +244 -0
  155. package/templates/ssr-isr/lib/server/api-routes.d.ts +112 -0
  156. package/templates/ssr-isr/lib/server/api-routes.js +237 -0
  157. package/templates/{static → ssr-isr}/lib/server/api.d.ts +3 -3
  158. package/templates/ssr-isr/lib/server/api.js +108 -0
  159. package/templates/ssr-isr/lib/server/app.d.ts +44 -0
  160. package/templates/ssr-isr/lib/server/app.js +438 -0
  161. package/templates/ssr-isr/lib/server/runtimeServe.d.ts +60 -0
  162. package/templates/ssr-isr/lib/server/runtimeServe.js +169 -0
  163. package/templates/ssr-isr/lib/server/ssr.d.ts +161 -0
  164. package/templates/ssr-isr/lib/server/ssr.js +202 -0
  165. package/templates/ssr-isr/lib/shared/log.d.ts +49 -0
  166. package/templates/ssr-isr/lib/shared/log.js +64 -0
  167. package/templates/ssr-isr/package.json +23 -0
  168. package/templates/ssr-isr/server.js +128 -0
  169. package/templates/ssr-isr/site/pages/(index).tsx +11 -0
  170. package/templates/ssr-isr/site/styles/global.scss +37 -0
  171. package/templates/ssr-isr/tsconfig.json +39 -0
  172. package/templates/static/README.md +63 -67
  173. package/templates/static/build.js +31 -21
  174. package/templates/static/jen.config.ts +0 -20
  175. package/templates/static/jenjs.d.ts +0 -18
  176. package/templates/static/lib/api/(hello).js +7 -24
  177. package/templates/static/lib/api/examples/files/[...slug].js +22 -0
  178. package/templates/static/lib/api/examples/hello.js +11 -0
  179. package/templates/static/lib/api/examples/posts/[id].js +37 -0
  180. package/templates/static/lib/api/examples/posts.js +37 -0
  181. package/templates/static/lib/api/examples/search.js +23 -0
  182. package/templates/static/lib/api/index.js +41 -0
  183. package/templates/static/lib/api/loader.js +234 -0
  184. package/templates/static/lib/api/router.js +259 -0
  185. package/templates/static/lib/assets/types.js +1 -0
  186. package/templates/static/lib/auth/cookie-utils.js +69 -85
  187. package/templates/static/lib/auth/index.js +0 -17
  188. package/templates/static/lib/auth/jwt.js +48 -21
  189. package/templates/static/lib/auth/session.js +79 -98
  190. package/templates/static/lib/build/asset-hashing.js +47 -39
  191. package/templates/static/lib/build/asset-manifest.js +18 -35
  192. package/templates/static/lib/build/build.js +277 -95
  193. package/templates/static/lib/build/bundle-analyzer-ui.js +417 -0
  194. package/templates/static/lib/build/bundle-analyzer.js +945 -0
  195. package/templates/static/lib/build/code-splitter.js +194 -0
  196. package/templates/static/lib/build/feature-analyzer.js +190 -0
  197. package/templates/static/lib/build/feature-gate.js +257 -0
  198. package/templates/static/lib/build/island-hydration.js +17 -35
  199. package/templates/static/lib/build/lazy-loader.js +322 -0
  200. package/templates/static/lib/build/minifier.js +42 -61
  201. package/templates/static/lib/build/page-renderer.js +25 -42
  202. package/templates/static/lib/build/production-build.js +11 -28
  203. package/templates/static/lib/build/rust-hashing.js +71 -0
  204. package/templates/static/lib/build/script-optimizer.js +285 -0
  205. package/templates/static/lib/build/ssg-pipeline.js +107 -113
  206. package/templates/static/lib/build/vercel-output.js +298 -0
  207. package/templates/static/lib/build-tools/build-site.js +27 -47
  208. package/templates/static/lib/cache/index.js +6 -15
  209. package/templates/static/lib/cache/memory.js +37 -28
  210. package/templates/static/lib/cache/redis.js +56 -28
  211. package/templates/static/lib/cli/banner.js +18 -31
  212. package/templates/static/lib/cli/templates/ssg/jen.config.js +29 -46
  213. package/templates/static/lib/cli/templates/ssg/site/index.js +6 -1
  214. package/templates/static/lib/cli/templates/ssr/jen.config.js +29 -46
  215. package/templates/static/lib/cli/templates/ssr/site/index.js +6 -1
  216. package/templates/static/lib/client/Image.js +42 -0
  217. package/templates/static/lib/client/Link.js +190 -0
  218. package/templates/static/lib/client/PWA.js +46 -0
  219. package/templates/static/lib/client/Seo.js +97 -0
  220. package/templates/static/lib/client/index.js +9 -0
  221. package/templates/static/lib/client/useNavigation.js +25 -0
  222. package/templates/static/lib/client/useRouter.js +64 -0
  223. package/templates/static/lib/client-routing/Link.js +17 -0
  224. package/templates/static/lib/client-routing/index.js +19 -0
  225. package/templates/static/lib/client-routing/router.js +151 -0
  226. package/templates/static/lib/client-routing/signal.js +147 -0
  227. package/templates/static/lib/compilers/esbuild-plugins.js +96 -115
  228. package/templates/static/lib/compilers/svelte.js +31 -48
  229. package/templates/static/lib/compilers/vue.js +76 -85
  230. package/templates/static/lib/core/config.js +0 -17
  231. package/templates/static/lib/core/feature-guard.js +136 -0
  232. package/templates/static/lib/core/features.js +99 -0
  233. package/templates/static/lib/core/http.js +65 -36
  234. package/templates/static/lib/core/layouts/index.js +10 -0
  235. package/templates/static/lib/core/layouts/render.js +158 -0
  236. package/templates/static/lib/core/layouts/scan.js +112 -0
  237. package/templates/static/lib/core/layouts/types.js +1 -0
  238. package/templates/static/lib/core/lifecycle.js +129 -0
  239. package/templates/static/lib/core/loader-schema.js +81 -0
  240. package/templates/static/lib/core/middleware-hooks.js +86 -58
  241. package/templates/static/lib/core/paths.js +31 -16
  242. package/templates/static/lib/core/routes/advanced.js +114 -0
  243. package/templates/static/lib/core/routes/handlers.js +181 -0
  244. package/templates/static/lib/core/routes/match.js +129 -24
  245. package/templates/static/lib/core/routes/orchestrator.js +171 -0
  246. package/templates/static/lib/core/routes/rendering-config.js +131 -0
  247. package/templates/static/lib/core/routes/scan.js +174 -132
  248. package/templates/static/lib/core/types.js +0 -17
  249. package/templates/static/lib/css/compiler.js +63 -76
  250. package/templates/static/lib/data-fetching/cache.js +223 -0
  251. package/templates/static/lib/data-fetching/client.js +202 -0
  252. package/templates/static/lib/data-fetching/feature-guard.js +29 -0
  253. package/templates/static/lib/data-fetching/graphql.js +265 -0
  254. package/templates/static/lib/data-fetching/index.js +57 -0
  255. package/templates/static/lib/data-fetching/rest.js +256 -0
  256. package/templates/static/lib/data-fetching/server.js +182 -0
  257. package/templates/static/lib/data-fetching/types.js +5 -0
  258. package/templates/static/lib/db/connector.js +37 -28
  259. package/templates/static/lib/db/drivers/jdb.js +41 -56
  260. package/templates/static/lib/db/drivers/sql.js +152 -152
  261. package/templates/static/lib/db/index.js +42 -59
  262. package/templates/static/lib/db/types.js +0 -17
  263. package/templates/static/lib/devtools/component-tree.js +106 -0
  264. package/templates/static/lib/devtools/devtools.js +638 -0
  265. package/templates/static/lib/devtools/event-bus.js +29 -0
  266. package/templates/static/lib/devtools/event-logger.js +67 -0
  267. package/templates/static/lib/devtools/index.js +9 -0
  268. package/templates/static/lib/devtools/integration.js +149 -0
  269. package/templates/static/lib/devtools/performance.js +84 -0
  270. package/templates/static/lib/devtools/persistence.js +57 -0
  271. package/templates/static/lib/devtools/plugins.js +97 -0
  272. package/templates/static/lib/devtools/search.js +89 -0
  273. package/templates/static/lib/devtools/ui.js +769 -0
  274. package/templates/static/lib/features/api/handler.js +10 -0
  275. package/templates/static/lib/features/api/index.js +5 -0
  276. package/templates/static/lib/features/api/types.js +4 -0
  277. package/templates/static/lib/features/middleware/compiled.js +7 -0
  278. package/templates/static/lib/features/middleware/index.js +5 -0
  279. package/templates/static/lib/features/middleware/types.js +4 -0
  280. package/templates/static/lib/fonts/index.js +46 -0
  281. package/templates/static/lib/fonts/inject.js +125 -0
  282. package/templates/static/lib/fonts/loader.js +196 -0
  283. package/templates/static/lib/fonts/types.js +1 -0
  284. package/templates/static/lib/graphql/index.js +46 -16
  285. package/templates/static/lib/graphql/resolvers.js +42 -19
  286. package/templates/static/lib/graphql/schema.js +30 -15
  287. package/templates/static/lib/i18n/en.json +2 -2
  288. package/templates/static/lib/i18n/es.json +2 -2
  289. package/templates/static/lib/i18n/index.js +17 -29
  290. package/templates/static/lib/import/jen-import.js +130 -97
  291. package/templates/static/lib/index.js +82 -115
  292. package/templates/static/lib/jdb/engine.js +259 -160
  293. package/templates/static/lib/jdb/index.js +28 -13
  294. package/templates/static/lib/jdb/types.js +0 -17
  295. package/templates/static/lib/jdb/utils.js +159 -124
  296. package/templates/static/lib/middleware/builtins/cors.js +55 -64
  297. package/templates/static/lib/middleware/context.js +120 -46
  298. package/templates/static/lib/middleware/kernel.js +186 -31
  299. package/templates/static/lib/middleware/pipeline.js +140 -59
  300. package/templates/static/lib/middleware/registry.js +80 -36
  301. package/templates/static/lib/middleware/response.js +101 -54
  302. package/templates/static/lib/plugin/examples/analytics-plugin.js +183 -0
  303. package/templates/static/lib/plugin/examples/cdn-upload-plugin.js +94 -0
  304. package/templates/static/lib/plugin/loader.js +25 -48
  305. package/templates/static/lib/plugin/plugin-manager.js +177 -0
  306. package/templates/static/lib/plugin/types.js +28 -0
  307. package/templates/static/lib/runtime/client-runtime.js +19 -22
  308. package/templates/static/lib/runtime/hmr.js +23 -18
  309. package/templates/static/lib/runtime/hydrate.js +47 -37
  310. package/templates/static/lib/runtime/island-hydration-client.js +122 -108
  311. package/templates/static/lib/runtime/islands.js +92 -71
  312. package/templates/static/lib/runtime/render.js +385 -149
  313. package/templates/static/lib/security/security-config.js +60 -0
  314. package/templates/static/lib/security/security-middleware.js +229 -0
  315. package/templates/static/lib/server/api-routes.js +339 -171
  316. package/templates/static/lib/server/api.js +93 -109
  317. package/templates/static/lib/server/app.js +660 -270
  318. package/templates/static/lib/server/isr.js +365 -0
  319. package/templates/static/lib/server/runtimeServe.js +157 -89
  320. package/templates/static/lib/server/ssr.js +295 -0
  321. package/templates/static/lib/server-actions/handler.js +180 -0
  322. package/templates/static/lib/server-actions/index.js +19 -0
  323. package/templates/static/lib/server-actions/middleware.js +146 -0
  324. package/templates/static/lib/server-actions/scan.js +152 -0
  325. package/templates/static/lib/server-actions/types.js +1 -0
  326. package/templates/static/lib/server-actions/validators.js +156 -0
  327. package/templates/static/lib/shared/log.js +74 -25
  328. package/templates/static/lib/telemetry/api/rate-limiter.js +32 -0
  329. package/templates/static/lib/telemetry/api/validator.js +67 -0
  330. package/templates/static/lib/telemetry/client.js +121 -0
  331. package/templates/static/lib/telemetry/tests/rate-limiter.test.js +46 -0
  332. package/templates/static/lib/telemetry/tests/validator.test.js +62 -0
  333. package/templates/static/lib/vendor/glob/glob.js +4766 -0
  334. package/templates/static/lib/vendor/preact/preact.module.js +797 -0
  335. package/templates/static/lib/vendor/sass/sass.node.mjs +212 -0
  336. package/templates/static/package.json +4 -0
  337. package/templates/static/server.js +23 -25
  338. package/templates/static/site/(home).tsx +12 -12
  339. package/templates/static/site/styles/global.scss +89 -78
  340. package/templates/static/tsconfig.json +43 -39
  341. package/templates/static/.esbuild/jen.config.js +0 -1
  342. package/templates/static/lib/api/(hello).d.ts +0 -7
  343. package/templates/static/lib/auth/cookie-utils.d.ts +0 -24
  344. package/templates/static/lib/auth/jwt.d.ts +0 -2
  345. package/templates/static/lib/auth/session.d.ts +0 -44
  346. package/templates/static/lib/build/asset-hashing.d.ts +0 -10
  347. package/templates/static/lib/build/asset-manifest.d.ts +0 -11
  348. package/templates/static/lib/build/build.d.ts +0 -4
  349. package/templates/static/lib/build/minifier.d.ts +0 -20
  350. package/templates/static/lib/build/page-renderer.d.ts +0 -17
  351. package/templates/static/lib/build/production-build.d.ts +0 -10
  352. package/templates/static/lib/build/ssg-pipeline.d.ts +0 -15
  353. package/templates/static/lib/cache/index.d.ts +0 -2
  354. package/templates/static/lib/cache/memory.d.ts +0 -6
  355. package/templates/static/lib/cache/redis.d.ts +0 -6
  356. package/templates/static/lib/cli/banner.d.ts +0 -1
  357. package/templates/static/lib/compilers/svelte.d.ts +0 -18
  358. package/templates/static/lib/compilers/vue.d.ts +0 -15
  359. package/templates/static/lib/core/config.d.ts +0 -53
  360. package/templates/static/lib/core/http.d.ts +0 -3
  361. package/templates/static/lib/core/middleware-hooks.d.ts +0 -46
  362. package/templates/static/lib/core/paths.d.ts +0 -6
  363. package/templates/static/lib/core/routes/match.d.ts +0 -6
  364. package/templates/static/lib/core/routes/scan.d.ts +0 -9
  365. package/templates/static/lib/core/types.d.ts +0 -18
  366. package/templates/static/lib/css/compiler.d.ts +0 -20
  367. package/templates/static/lib/db/connector.d.ts +0 -4
  368. package/templates/static/lib/db/drivers/jdb.d.ts +0 -13
  369. package/templates/static/lib/db/drivers/sql.d.ts +0 -18
  370. package/templates/static/lib/db/index.d.ts +0 -19
  371. package/templates/static/lib/db/types.d.ts +0 -29
  372. package/templates/static/lib/graphql/index.d.ts +0 -1
  373. package/templates/static/lib/graphql/resolvers.d.ts +0 -17
  374. package/templates/static/lib/graphql/schema.d.ts +0 -1
  375. package/templates/static/lib/i18n/index.d.ts +0 -8
  376. package/templates/static/lib/import/jen-import.d.ts +0 -27
  377. package/templates/static/lib/jdb/engine.d.ts +0 -9
  378. package/templates/static/lib/jdb/index.d.ts +0 -2
  379. package/templates/static/lib/jdb/types.d.ts +0 -46
  380. package/templates/static/lib/jdb/utils.d.ts +0 -6
  381. package/templates/static/lib/middleware/builtins/body-parser.d.ts +0 -1
  382. package/templates/static/lib/middleware/builtins/body-parser.js +0 -55
  383. package/templates/static/lib/middleware/builtins/cors.d.ts +0 -13
  384. package/templates/static/lib/middleware/builtins/logger.d.ts +0 -1
  385. package/templates/static/lib/middleware/builtins/logger.js +0 -33
  386. package/templates/static/lib/middleware/builtins/rate-limit.d.ts +0 -5
  387. package/templates/static/lib/middleware/builtins/rate-limit.js +0 -76
  388. package/templates/static/lib/middleware/builtins/request-id.d.ts +0 -1
  389. package/templates/static/lib/middleware/builtins/request-id.js +0 -25
  390. package/templates/static/lib/middleware/builtins/security-headers.d.ts +0 -1
  391. package/templates/static/lib/middleware/builtins/security-headers.js +0 -39
  392. package/templates/static/lib/middleware/context.d.ts +0 -18
  393. package/templates/static/lib/middleware/decorators.d.ts +0 -2
  394. package/templates/static/lib/middleware/decorators.js +0 -61
  395. package/templates/static/lib/middleware/errors/handler.js +0 -65
  396. package/templates/static/lib/middleware/errors/http-error.d.ts +0 -5
  397. package/templates/static/lib/middleware/errors/http-error.js +0 -27
  398. package/templates/static/lib/middleware/kernel.d.ts +0 -6
  399. package/templates/static/lib/middleware/pipeline.d.ts +0 -4
  400. package/templates/static/lib/middleware/registry.d.ts +0 -10
  401. package/templates/static/lib/middleware/response.d.ts +0 -13
  402. package/templates/static/lib/middleware/types.js +0 -18
  403. package/templates/static/lib/middleware/utils/matcher.js +0 -31
  404. package/templates/static/lib/native/bundle.d.ts +0 -19
  405. package/templates/static/lib/native/bundle.js +0 -39
  406. package/templates/static/lib/native/dev-server.d.ts +0 -6
  407. package/templates/static/lib/native/dev-server.js +0 -38
  408. package/templates/static/lib/native/index.js +0 -48
  409. package/templates/static/lib/native/optimizer.d.ts +0 -17
  410. package/templates/static/lib/native/optimizer.js +0 -37
  411. package/templates/static/lib/native/style-compiler.d.ts +0 -10
  412. package/templates/static/lib/native/style-compiler.js +0 -36
  413. package/templates/static/lib/plugin/loader.d.ts +0 -8
  414. package/templates/static/lib/runtime/client-runtime.d.ts +0 -1
  415. package/templates/static/lib/runtime/hmr.d.ts +0 -1
  416. package/templates/static/lib/runtime/hydrate.d.ts +0 -1
  417. package/templates/static/lib/runtime/island-hydration-client.d.ts +0 -5
  418. package/templates/static/lib/runtime/islands.d.ts +0 -46
  419. package/templates/static/lib/runtime/render.d.ts +0 -13
  420. package/templates/static/lib/server/api-routes.d.ts +0 -44
  421. package/templates/static/lib/server/app.d.ts +0 -10
  422. package/templates/static/lib/server/runtimeServe.d.ts +0 -4
  423. package/templates/static/lib/shared/log.d.ts +0 -5
  424. package/templates/static/node_modules/.bin/esbuild +0 -16
  425. package/templates/static/node_modules/.bin/esbuild.cmd +0 -17
  426. package/templates/static/node_modules/.bin/esbuild.ps1 +0 -28
  427. package/templates/static/node_modules/.bin/tsc +0 -16
  428. package/templates/static/node_modules/.bin/tsc.cmd +0 -17
  429. package/templates/static/node_modules/.bin/tsc.ps1 +0 -28
  430. package/templates/static/node_modules/.bin/tsserver +0 -16
  431. package/templates/static/node_modules/.bin/tsserver.cmd +0 -17
  432. package/templates/static/node_modules/.bin/tsserver.ps1 +0 -28
  433. package/templates/static/node_modules/.jen/cache/B__Jen.js_packages_create-jen-app_templates_static_site_(home).tsx.mjs +0 -14
  434. package/templates/static/node_modules/.jen/cache/B__Jen.js_packages_create-jen-app_yo_site_(home).tsx.mjs +0 -11
  435. package/templates/static/node_modules/.package-lock.json +0 -585
  436. package/templates/static/node_modules/@esbuild/win32-x64/README.md +0 -3
  437. package/templates/static/node_modules/@esbuild/win32-x64/esbuild.exe +0 -0
  438. package/templates/static/node_modules/@esbuild/win32-x64/package.json +0 -20
  439. package/templates/static/node_modules/@jenjs/master/README.md +0 -24
  440. package/templates/static/node_modules/@jenjs/master/index.js +0 -3655
  441. package/templates/static/node_modules/@jenjs/master/package.json +0 -36
  442. package/templates/static/node_modules/@polka/url/build.js +0 -49
  443. package/templates/static/node_modules/@polka/url/build.mjs +0 -47
  444. package/templates/static/node_modules/@polka/url/index.d.ts +0 -11
  445. package/templates/static/node_modules/@polka/url/package.json +0 -30
  446. package/templates/static/node_modules/@polka/url/readme.md +0 -68
  447. package/templates/static/node_modules/@types/node/LICENSE +0 -21
  448. package/templates/static/node_modules/@types/node/README.md +0 -15
  449. package/templates/static/node_modules/@types/node/assert/strict.d.ts +0 -111
  450. package/templates/static/node_modules/@types/node/assert.d.ts +0 -1078
  451. package/templates/static/node_modules/@types/node/async_hooks.d.ts +0 -603
  452. package/templates/static/node_modules/@types/node/buffer.buffer.d.ts +0 -472
  453. package/templates/static/node_modules/@types/node/buffer.d.ts +0 -1934
  454. package/templates/static/node_modules/@types/node/child_process.d.ts +0 -1476
  455. package/templates/static/node_modules/@types/node/cluster.d.ts +0 -578
  456. package/templates/static/node_modules/@types/node/compatibility/disposable.d.ts +0 -14
  457. package/templates/static/node_modules/@types/node/compatibility/index.d.ts +0 -9
  458. package/templates/static/node_modules/@types/node/compatibility/indexable.d.ts +0 -20
  459. package/templates/static/node_modules/@types/node/compatibility/iterators.d.ts +0 -20
  460. package/templates/static/node_modules/@types/node/console.d.ts +0 -452
  461. package/templates/static/node_modules/@types/node/constants.d.ts +0 -21
  462. package/templates/static/node_modules/@types/node/crypto.d.ts +0 -4545
  463. package/templates/static/node_modules/@types/node/dgram.d.ts +0 -600
  464. package/templates/static/node_modules/@types/node/diagnostics_channel.d.ts +0 -578
  465. package/templates/static/node_modules/@types/node/dns/promises.d.ts +0 -503
  466. package/templates/static/node_modules/@types/node/dns.d.ts +0 -923
  467. package/templates/static/node_modules/@types/node/domain.d.ts +0 -170
  468. package/templates/static/node_modules/@types/node/events.d.ts +0 -976
  469. package/templates/static/node_modules/@types/node/fs/promises.d.ts +0 -1295
  470. package/templates/static/node_modules/@types/node/fs.d.ts +0 -4461
  471. package/templates/static/node_modules/@types/node/globals.d.ts +0 -172
  472. package/templates/static/node_modules/@types/node/globals.typedarray.d.ts +0 -38
  473. package/templates/static/node_modules/@types/node/http.d.ts +0 -2089
  474. package/templates/static/node_modules/@types/node/http2.d.ts +0 -2644
  475. package/templates/static/node_modules/@types/node/https.d.ts +0 -579
  476. package/templates/static/node_modules/@types/node/index.d.ts +0 -97
  477. package/templates/static/node_modules/@types/node/inspector.d.ts +0 -253
  478. package/templates/static/node_modules/@types/node/inspector.generated.d.ts +0 -4052
  479. package/templates/static/node_modules/@types/node/module.d.ts +0 -891
  480. package/templates/static/node_modules/@types/node/net.d.ts +0 -1057
  481. package/templates/static/node_modules/@types/node/os.d.ts +0 -506
  482. package/templates/static/node_modules/@types/node/package.json +0 -145
  483. package/templates/static/node_modules/@types/node/path.d.ts +0 -200
  484. package/templates/static/node_modules/@types/node/perf_hooks.d.ts +0 -968
  485. package/templates/static/node_modules/@types/node/process.d.ts +0 -2089
  486. package/templates/static/node_modules/@types/node/punycode.d.ts +0 -117
  487. package/templates/static/node_modules/@types/node/querystring.d.ts +0 -152
  488. package/templates/static/node_modules/@types/node/readline/promises.d.ts +0 -161
  489. package/templates/static/node_modules/@types/node/readline.d.ts +0 -594
  490. package/templates/static/node_modules/@types/node/repl.d.ts +0 -428
  491. package/templates/static/node_modules/@types/node/sea.d.ts +0 -153
  492. package/templates/static/node_modules/@types/node/sqlite.d.ts +0 -721
  493. package/templates/static/node_modules/@types/node/stream/consumers.d.ts +0 -38
  494. package/templates/static/node_modules/@types/node/stream/promises.d.ts +0 -90
  495. package/templates/static/node_modules/@types/node/stream/web.d.ts +0 -622
  496. package/templates/static/node_modules/@types/node/stream.d.ts +0 -1664
  497. package/templates/static/node_modules/@types/node/string_decoder.d.ts +0 -67
  498. package/templates/static/node_modules/@types/node/test.d.ts +0 -2163
  499. package/templates/static/node_modules/@types/node/timers/promises.d.ts +0 -108
  500. package/templates/static/node_modules/@types/node/timers.d.ts +0 -287
  501. package/templates/static/node_modules/@types/node/tls.d.ts +0 -1319
  502. package/templates/static/node_modules/@types/node/trace_events.d.ts +0 -197
  503. package/templates/static/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +0 -468
  504. package/templates/static/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +0 -34
  505. package/templates/static/node_modules/@types/node/ts5.6/index.d.ts +0 -97
  506. package/templates/static/node_modules/@types/node/tty.d.ts +0 -208
  507. package/templates/static/node_modules/@types/node/url.d.ts +0 -984
  508. package/templates/static/node_modules/@types/node/util.d.ts +0 -2606
  509. package/templates/static/node_modules/@types/node/v8.d.ts +0 -920
  510. package/templates/static/node_modules/@types/node/vm.d.ts +0 -1000
  511. package/templates/static/node_modules/@types/node/wasi.d.ts +0 -181
  512. package/templates/static/node_modules/@types/node/web-globals/abortcontroller.d.ts +0 -34
  513. package/templates/static/node_modules/@types/node/web-globals/domexception.d.ts +0 -68
  514. package/templates/static/node_modules/@types/node/web-globals/events.d.ts +0 -97
  515. package/templates/static/node_modules/@types/node/web-globals/fetch.d.ts +0 -55
  516. package/templates/static/node_modules/@types/node/web-globals/navigator.d.ts +0 -22
  517. package/templates/static/node_modules/@types/node/web-globals/storage.d.ts +0 -24
  518. package/templates/static/node_modules/@types/node/worker_threads.d.ts +0 -784
  519. package/templates/static/node_modules/@types/node/zlib.d.ts +0 -683
  520. package/templates/static/node_modules/esbuild/LICENSE.md +0 -21
  521. package/templates/static/node_modules/esbuild/README.md +0 -3
  522. package/templates/static/node_modules/esbuild/bin/esbuild +0 -223
  523. package/templates/static/node_modules/esbuild/install.js +0 -289
  524. package/templates/static/node_modules/esbuild/lib/main.d.ts +0 -716
  525. package/templates/static/node_modules/esbuild/lib/main.js +0 -2242
  526. package/templates/static/node_modules/esbuild/package.json +0 -49
  527. package/templates/static/node_modules/mrmime/index.d.ts +0 -2
  528. package/templates/static/node_modules/mrmime/index.js +0 -449
  529. package/templates/static/node_modules/mrmime/index.mjs +0 -448
  530. package/templates/static/node_modules/mrmime/license +0 -21
  531. package/templates/static/node_modules/mrmime/package.json +0 -44
  532. package/templates/static/node_modules/mrmime/readme.md +0 -130
  533. package/templates/static/node_modules/preact/README.md +0 -185
  534. package/templates/static/node_modules/preact/compat/client.d.ts +0 -13
  535. package/templates/static/node_modules/preact/compat/client.js +0 -21
  536. package/templates/static/node_modules/preact/compat/client.mjs +0 -24
  537. package/templates/static/node_modules/preact/compat/dist/compat.js +0 -2
  538. package/templates/static/node_modules/preact/compat/dist/compat.js.map +0 -1
  539. package/templates/static/node_modules/preact/compat/dist/compat.mjs +0 -2
  540. package/templates/static/node_modules/preact/compat/dist/compat.module.js +0 -2
  541. package/templates/static/node_modules/preact/compat/dist/compat.module.js.map +0 -1
  542. package/templates/static/node_modules/preact/compat/dist/compat.umd.js +0 -2
  543. package/templates/static/node_modules/preact/compat/dist/compat.umd.js.map +0 -1
  544. package/templates/static/node_modules/preact/compat/jsx-dev-runtime.js +0 -3
  545. package/templates/static/node_modules/preact/compat/jsx-dev-runtime.mjs +0 -3
  546. package/templates/static/node_modules/preact/compat/jsx-runtime.js +0 -3
  547. package/templates/static/node_modules/preact/compat/jsx-runtime.mjs +0 -3
  548. package/templates/static/node_modules/preact/compat/package.json +0 -55
  549. package/templates/static/node_modules/preact/compat/scheduler.js +0 -15
  550. package/templates/static/node_modules/preact/compat/scheduler.mjs +0 -23
  551. package/templates/static/node_modules/preact/compat/server.browser.js +0 -11
  552. package/templates/static/node_modules/preact/compat/server.js +0 -36
  553. package/templates/static/node_modules/preact/compat/server.mjs +0 -17
  554. package/templates/static/node_modules/preact/compat/src/Children.js +0 -21
  555. package/templates/static/node_modules/preact/compat/src/PureComponent.js +0 -16
  556. package/templates/static/node_modules/preact/compat/src/forwardRef.js +0 -44
  557. package/templates/static/node_modules/preact/compat/src/hooks.js +0 -70
  558. package/templates/static/node_modules/preact/compat/src/index.d.ts +0 -351
  559. package/templates/static/node_modules/preact/compat/src/index.js +0 -238
  560. package/templates/static/node_modules/preact/compat/src/internal.d.ts +0 -48
  561. package/templates/static/node_modules/preact/compat/src/memo.js +0 -35
  562. package/templates/static/node_modules/preact/compat/src/portals.js +0 -78
  563. package/templates/static/node_modules/preact/compat/src/render.js +0 -313
  564. package/templates/static/node_modules/preact/compat/src/suspense-list.d.ts +0 -16
  565. package/templates/static/node_modules/preact/compat/src/suspense-list.js +0 -127
  566. package/templates/static/node_modules/preact/compat/src/suspense.d.ts +0 -19
  567. package/templates/static/node_modules/preact/compat/src/suspense.js +0 -291
  568. package/templates/static/node_modules/preact/compat/src/util.js +0 -33
  569. package/templates/static/node_modules/preact/compat/test-utils.js +0 -1
  570. package/templates/static/node_modules/preact/compat/test-utils.mjs +0 -1
  571. package/templates/static/node_modules/preact/debug/dist/debug.js +0 -2
  572. package/templates/static/node_modules/preact/debug/dist/debug.js.map +0 -1
  573. package/templates/static/node_modules/preact/debug/dist/debug.mjs +0 -2
  574. package/templates/static/node_modules/preact/debug/dist/debug.module.js +0 -2
  575. package/templates/static/node_modules/preact/debug/dist/debug.module.js.map +0 -1
  576. package/templates/static/node_modules/preact/debug/dist/debug.umd.js +0 -2
  577. package/templates/static/node_modules/preact/debug/dist/debug.umd.js.map +0 -1
  578. package/templates/static/node_modules/preact/debug/package.json +0 -27
  579. package/templates/static/node_modules/preact/debug/src/check-props.js +0 -54
  580. package/templates/static/node_modules/preact/debug/src/component-stack.js +0 -146
  581. package/templates/static/node_modules/preact/debug/src/constants.js +0 -3
  582. package/templates/static/node_modules/preact/debug/src/debug.js +0 -593
  583. package/templates/static/node_modules/preact/debug/src/index.d.ts +0 -23
  584. package/templates/static/node_modules/preact/debug/src/index.js +0 -12
  585. package/templates/static/node_modules/preact/debug/src/internal.d.ts +0 -82
  586. package/templates/static/node_modules/preact/debug/src/util.js +0 -15
  587. package/templates/static/node_modules/preact/devtools/dist/devtools.js +0 -2
  588. package/templates/static/node_modules/preact/devtools/dist/devtools.js.map +0 -1
  589. package/templates/static/node_modules/preact/devtools/dist/devtools.mjs +0 -2
  590. package/templates/static/node_modules/preact/devtools/dist/devtools.module.js +0 -2
  591. package/templates/static/node_modules/preact/devtools/dist/devtools.module.js.map +0 -1
  592. package/templates/static/node_modules/preact/devtools/dist/devtools.umd.js +0 -2
  593. package/templates/static/node_modules/preact/devtools/dist/devtools.umd.js.map +0 -1
  594. package/templates/static/node_modules/preact/devtools/package.json +0 -25
  595. package/templates/static/node_modules/preact/devtools/src/devtools.js +0 -21
  596. package/templates/static/node_modules/preact/devtools/src/index.d.ts +0 -8
  597. package/templates/static/node_modules/preact/devtools/src/index.js +0 -15
  598. package/templates/static/node_modules/preact/dist/preact.js +0 -2
  599. package/templates/static/node_modules/preact/dist/preact.js.map +0 -1
  600. package/templates/static/node_modules/preact/dist/preact.min.js +0 -2
  601. package/templates/static/node_modules/preact/dist/preact.min.js.map +0 -1
  602. package/templates/static/node_modules/preact/dist/preact.min.module.js +0 -2
  603. package/templates/static/node_modules/preact/dist/preact.min.module.js.map +0 -1
  604. package/templates/static/node_modules/preact/dist/preact.min.umd.js +0 -2
  605. package/templates/static/node_modules/preact/dist/preact.min.umd.js.map +0 -1
  606. package/templates/static/node_modules/preact/dist/preact.mjs +0 -2
  607. package/templates/static/node_modules/preact/dist/preact.module.js +0 -2
  608. package/templates/static/node_modules/preact/dist/preact.module.js.map +0 -1
  609. package/templates/static/node_modules/preact/dist/preact.umd.js +0 -2
  610. package/templates/static/node_modules/preact/dist/preact.umd.js.map +0 -1
  611. package/templates/static/node_modules/preact/hooks/dist/hooks.js +0 -2
  612. package/templates/static/node_modules/preact/hooks/dist/hooks.js.map +0 -1
  613. package/templates/static/node_modules/preact/hooks/dist/hooks.mjs +0 -2
  614. package/templates/static/node_modules/preact/hooks/dist/hooks.module.js +0 -2
  615. package/templates/static/node_modules/preact/hooks/dist/hooks.module.js.map +0 -1
  616. package/templates/static/node_modules/preact/hooks/dist/hooks.umd.js +0 -2
  617. package/templates/static/node_modules/preact/hooks/dist/hooks.umd.js.map +0 -1
  618. package/templates/static/node_modules/preact/hooks/package.json +0 -35
  619. package/templates/static/node_modules/preact/hooks/src/index.d.ts +0 -145
  620. package/templates/static/node_modules/preact/hooks/src/index.js +0 -555
  621. package/templates/static/node_modules/preact/hooks/src/internal.d.ts +0 -103
  622. package/templates/static/node_modules/preact/jsx-runtime/dist/jsxRuntime.js +0 -2
  623. package/templates/static/node_modules/preact/jsx-runtime/dist/jsxRuntime.js.map +0 -1
  624. package/templates/static/node_modules/preact/jsx-runtime/dist/jsxRuntime.mjs +0 -2
  625. package/templates/static/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js +0 -2
  626. package/templates/static/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js.map +0 -1
  627. package/templates/static/node_modules/preact/jsx-runtime/dist/jsxRuntime.umd.js +0 -2
  628. package/templates/static/node_modules/preact/jsx-runtime/dist/jsxRuntime.umd.js.map +0 -1
  629. package/templates/static/node_modules/preact/jsx-runtime/package.json +0 -28
  630. package/templates/static/node_modules/preact/jsx-runtime/src/index.d.ts +0 -62
  631. package/templates/static/node_modules/preact/jsx-runtime/src/index.js +0 -206
  632. package/templates/static/node_modules/preact/jsx-runtime/src/utils.js +0 -36
  633. package/templates/static/node_modules/preact/package.json +0 -258
  634. package/templates/static/node_modules/preact/src/cjs.js +0 -3
  635. package/templates/static/node_modules/preact/src/clone-element.js +0 -48
  636. package/templates/static/node_modules/preact/src/component.js +0 -249
  637. package/templates/static/node_modules/preact/src/constants.js +0 -22
  638. package/templates/static/node_modules/preact/src/create-context.js +0 -60
  639. package/templates/static/node_modules/preact/src/create-element.js +0 -97
  640. package/templates/static/node_modules/preact/src/diff/catch-error.js +0 -46
  641. package/templates/static/node_modules/preact/src/diff/children.js +0 -451
  642. package/templates/static/node_modules/preact/src/diff/index.js +0 -684
  643. package/templates/static/node_modules/preact/src/diff/props.js +0 -173
  644. package/templates/static/node_modules/preact/src/dom.d.ts +0 -2476
  645. package/templates/static/node_modules/preact/src/index-5.d.ts +0 -399
  646. package/templates/static/node_modules/preact/src/index.d.ts +0 -402
  647. package/templates/static/node_modules/preact/src/index.js +0 -13
  648. package/templates/static/node_modules/preact/src/internal.d.ts +0 -190
  649. package/templates/static/node_modules/preact/src/jsx.d.ts +0 -2878
  650. package/templates/static/node_modules/preact/src/options.js +0 -16
  651. package/templates/static/node_modules/preact/src/render.js +0 -78
  652. package/templates/static/node_modules/preact/src/util.js +0 -28
  653. package/templates/static/node_modules/preact/test-utils/dist/testUtils.js +0 -2
  654. package/templates/static/node_modules/preact/test-utils/dist/testUtils.js.map +0 -1
  655. package/templates/static/node_modules/preact/test-utils/dist/testUtils.mjs +0 -2
  656. package/templates/static/node_modules/preact/test-utils/dist/testUtils.module.js +0 -2
  657. package/templates/static/node_modules/preact/test-utils/dist/testUtils.module.js.map +0 -1
  658. package/templates/static/node_modules/preact/test-utils/dist/testUtils.umd.js +0 -2
  659. package/templates/static/node_modules/preact/test-utils/dist/testUtils.umd.js.map +0 -1
  660. package/templates/static/node_modules/preact/test-utils/package.json +0 -28
  661. package/templates/static/node_modules/preact/test-utils/src/index.d.ts +0 -3
  662. package/templates/static/node_modules/preact/test-utils/src/index.js +0 -129
  663. package/templates/static/node_modules/preact-render-to-string/LICENSE +0 -21
  664. package/templates/static/node_modules/preact-render-to-string/README.md +0 -149
  665. package/templates/static/node_modules/preact-render-to-string/dist/commonjs.js +0 -2
  666. package/templates/static/node_modules/preact-render-to-string/dist/index.d.ts +0 -17
  667. package/templates/static/node_modules/preact-render-to-string/dist/index.js +0 -6
  668. package/templates/static/node_modules/preact-render-to-string/dist/index.js.map +0 -1
  669. package/templates/static/node_modules/preact-render-to-string/dist/index.mjs +0 -2
  670. package/templates/static/node_modules/preact-render-to-string/dist/index.module.js +0 -2
  671. package/templates/static/node_modules/preact-render-to-string/dist/index.module.js.map +0 -1
  672. package/templates/static/node_modules/preact-render-to-string/dist/index.umd.js +0 -2
  673. package/templates/static/node_modules/preact-render-to-string/dist/index.umd.js.map +0 -1
  674. package/templates/static/node_modules/preact-render-to-string/dist/internal.d.ts +0 -35
  675. package/templates/static/node_modules/preact-render-to-string/dist/jsx/commonjs.js +0 -2
  676. package/templates/static/node_modules/preact-render-to-string/dist/jsx/index.js +0 -4
  677. package/templates/static/node_modules/preact-render-to-string/dist/jsx/index.js.map +0 -1
  678. package/templates/static/node_modules/preact-render-to-string/dist/jsx/index.mjs +0 -2
  679. package/templates/static/node_modules/preact-render-to-string/dist/jsx/index.module.js +0 -2
  680. package/templates/static/node_modules/preact-render-to-string/dist/jsx/index.module.js.map +0 -1
  681. package/templates/static/node_modules/preact-render-to-string/dist/jsx/index.umd.js +0 -2
  682. package/templates/static/node_modules/preact-render-to-string/dist/jsx/index.umd.js.map +0 -1
  683. package/templates/static/node_modules/preact-render-to-string/dist/jsx.d.ts +0 -24
  684. package/templates/static/node_modules/preact-render-to-string/dist/stream/index.js +0 -2
  685. package/templates/static/node_modules/preact-render-to-string/dist/stream/index.js.map +0 -1
  686. package/templates/static/node_modules/preact-render-to-string/dist/stream/index.mjs +0 -2
  687. package/templates/static/node_modules/preact-render-to-string/dist/stream/index.module.js +0 -2
  688. package/templates/static/node_modules/preact-render-to-string/dist/stream/index.module.js.map +0 -1
  689. package/templates/static/node_modules/preact-render-to-string/dist/stream/index.umd.js +0 -2
  690. package/templates/static/node_modules/preact-render-to-string/dist/stream/index.umd.js.map +0 -1
  691. package/templates/static/node_modules/preact-render-to-string/dist/stream/node/index.js +0 -884
  692. package/templates/static/node_modules/preact-render-to-string/dist/stream/node/index.js.map +0 -1
  693. package/templates/static/node_modules/preact-render-to-string/dist/stream/node/index.mjs +0 -884
  694. package/templates/static/node_modules/preact-render-to-string/dist/stream/node/index.module.js +0 -884
  695. package/templates/static/node_modules/preact-render-to-string/dist/stream/node/index.module.js.map +0 -1
  696. package/templates/static/node_modules/preact-render-to-string/dist/stream/node/index.umd.js +0 -888
  697. package/templates/static/node_modules/preact-render-to-string/dist/stream/node/index.umd.js.map +0 -1
  698. package/templates/static/node_modules/preact-render-to-string/dist/stream-node.d.ts +0 -19
  699. package/templates/static/node_modules/preact-render-to-string/dist/stream.d.ts +0 -10
  700. package/templates/static/node_modules/preact-render-to-string/jsx.d.ts +0 -24
  701. package/templates/static/node_modules/preact-render-to-string/jsx.js +0 -1
  702. package/templates/static/node_modules/preact-render-to-string/package.json +0 -152
  703. package/templates/static/node_modules/preact-render-to-string/src/index.d.ts +0 -17
  704. package/templates/static/node_modules/preact-render-to-string/src/index.js +0 -764
  705. package/templates/static/node_modules/preact-render-to-string/src/internal.d.ts +0 -35
  706. package/templates/static/node_modules/preact-render-to-string/src/jsx.d.ts +0 -24
  707. package/templates/static/node_modules/preact-render-to-string/src/jsx.js +0 -102
  708. package/templates/static/node_modules/preact-render-to-string/src/lib/chunked.js +0 -97
  709. package/templates/static/node_modules/preact-render-to-string/src/lib/client.js +0 -62
  710. package/templates/static/node_modules/preact-render-to-string/src/lib/constants.js +0 -20
  711. package/templates/static/node_modules/preact-render-to-string/src/lib/polyfills.js +0 -8
  712. package/templates/static/node_modules/preact-render-to-string/src/lib/util.js +0 -208
  713. package/templates/static/node_modules/preact-render-to-string/src/pretty.js +0 -491
  714. package/templates/static/node_modules/preact-render-to-string/src/stream-node.d.ts +0 -19
  715. package/templates/static/node_modules/preact-render-to-string/src/stream-node.js +0 -84
  716. package/templates/static/node_modules/preact-render-to-string/src/stream.d.ts +0 -10
  717. package/templates/static/node_modules/preact-render-to-string/src/stream.js +0 -43
  718. package/templates/static/node_modules/preact-render-to-string/typings.json +0 -5
  719. package/templates/static/node_modules/sirv/build.js +0 -197
  720. package/templates/static/node_modules/sirv/build.mjs +0 -197
  721. package/templates/static/node_modules/sirv/index.d.mts +0 -29
  722. package/templates/static/node_modules/sirv/index.d.ts +0 -33
  723. package/templates/static/node_modules/sirv/package.json +0 -40
  724. package/templates/static/node_modules/sirv/readme.md +0 -238
  725. package/templates/static/node_modules/totalist/dist/index.js +0 -24
  726. package/templates/static/node_modules/totalist/dist/index.mjs +0 -22
  727. package/templates/static/node_modules/totalist/index.d.ts +0 -3
  728. package/templates/static/node_modules/totalist/license +0 -21
  729. package/templates/static/node_modules/totalist/package.json +0 -55
  730. package/templates/static/node_modules/totalist/readme.md +0 -109
  731. package/templates/static/node_modules/totalist/sync/index.d.ts +0 -3
  732. package/templates/static/node_modules/totalist/sync/index.js +0 -17
  733. package/templates/static/node_modules/totalist/sync/index.mjs +0 -15
  734. package/templates/static/node_modules/typescript/bin/tsc +0 -2
  735. package/templates/static/node_modules/typescript/bin/tsserver +0 -2
  736. package/templates/static/node_modules/typescript/lib/cs/diagnosticMessages.generated.json +0 -2122
  737. package/templates/static/node_modules/typescript/lib/de/diagnosticMessages.generated.json +0 -2122
  738. package/templates/static/node_modules/typescript/lib/es/diagnosticMessages.generated.json +0 -2122
  739. package/templates/static/node_modules/typescript/lib/fr/diagnosticMessages.generated.json +0 -2122
  740. package/templates/static/node_modules/typescript/lib/it/diagnosticMessages.generated.json +0 -2122
  741. package/templates/static/node_modules/typescript/lib/ja/diagnosticMessages.generated.json +0 -2122
  742. package/templates/static/node_modules/typescript/lib/ko/diagnosticMessages.generated.json +0 -2122
  743. package/templates/static/node_modules/typescript/lib/lib.d.ts +0 -22
  744. package/templates/static/node_modules/typescript/lib/lib.decorators.d.ts +0 -384
  745. package/templates/static/node_modules/typescript/lib/lib.decorators.legacy.d.ts +0 -22
  746. package/templates/static/node_modules/typescript/lib/lib.dom.asynciterable.d.ts +0 -41
  747. package/templates/static/node_modules/typescript/lib/lib.dom.d.ts +0 -39429
  748. package/templates/static/node_modules/typescript/lib/lib.dom.iterable.d.ts +0 -571
  749. package/templates/static/node_modules/typescript/lib/lib.es2015.collection.d.ts +0 -147
  750. package/templates/static/node_modules/typescript/lib/lib.es2015.core.d.ts +0 -597
  751. package/templates/static/node_modules/typescript/lib/lib.es2015.d.ts +0 -28
  752. package/templates/static/node_modules/typescript/lib/lib.es2015.generator.d.ts +0 -77
  753. package/templates/static/node_modules/typescript/lib/lib.es2015.iterable.d.ts +0 -605
  754. package/templates/static/node_modules/typescript/lib/lib.es2015.promise.d.ts +0 -81
  755. package/templates/static/node_modules/typescript/lib/lib.es2015.proxy.d.ts +0 -128
  756. package/templates/static/node_modules/typescript/lib/lib.es2015.reflect.d.ts +0 -144
  757. package/templates/static/node_modules/typescript/lib/lib.es2015.symbol.d.ts +0 -46
  758. package/templates/static/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts +0 -326
  759. package/templates/static/node_modules/typescript/lib/lib.es2016.array.include.d.ts +0 -116
  760. package/templates/static/node_modules/typescript/lib/lib.es2016.d.ts +0 -21
  761. package/templates/static/node_modules/typescript/lib/lib.es2016.full.d.ts +0 -23
  762. package/templates/static/node_modules/typescript/lib/lib.es2016.intl.d.ts +0 -31
  763. package/templates/static/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts +0 -21
  764. package/templates/static/node_modules/typescript/lib/lib.es2017.d.ts +0 -26
  765. package/templates/static/node_modules/typescript/lib/lib.es2017.date.d.ts +0 -31
  766. package/templates/static/node_modules/typescript/lib/lib.es2017.full.d.ts +0 -23
  767. package/templates/static/node_modules/typescript/lib/lib.es2017.intl.d.ts +0 -44
  768. package/templates/static/node_modules/typescript/lib/lib.es2017.object.d.ts +0 -49
  769. package/templates/static/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts +0 -135
  770. package/templates/static/node_modules/typescript/lib/lib.es2017.string.d.ts +0 -45
  771. package/templates/static/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts +0 -53
  772. package/templates/static/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts +0 -77
  773. package/templates/static/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts +0 -53
  774. package/templates/static/node_modules/typescript/lib/lib.es2018.d.ts +0 -24
  775. package/templates/static/node_modules/typescript/lib/lib.es2018.full.d.ts +0 -24
  776. package/templates/static/node_modules/typescript/lib/lib.es2018.intl.d.ts +0 -83
  777. package/templates/static/node_modules/typescript/lib/lib.es2018.promise.d.ts +0 -30
  778. package/templates/static/node_modules/typescript/lib/lib.es2018.regexp.d.ts +0 -37
  779. package/templates/static/node_modules/typescript/lib/lib.es2019.array.d.ts +0 -79
  780. package/templates/static/node_modules/typescript/lib/lib.es2019.d.ts +0 -24
  781. package/templates/static/node_modules/typescript/lib/lib.es2019.full.d.ts +0 -24
  782. package/templates/static/node_modules/typescript/lib/lib.es2019.intl.d.ts +0 -23
  783. package/templates/static/node_modules/typescript/lib/lib.es2019.object.d.ts +0 -33
  784. package/templates/static/node_modules/typescript/lib/lib.es2019.string.d.ts +0 -37
  785. package/templates/static/node_modules/typescript/lib/lib.es2019.symbol.d.ts +0 -24
  786. package/templates/static/node_modules/typescript/lib/lib.es2020.bigint.d.ts +0 -765
  787. package/templates/static/node_modules/typescript/lib/lib.es2020.d.ts +0 -27
  788. package/templates/static/node_modules/typescript/lib/lib.es2020.date.d.ts +0 -42
  789. package/templates/static/node_modules/typescript/lib/lib.es2020.full.d.ts +0 -24
  790. package/templates/static/node_modules/typescript/lib/lib.es2020.intl.d.ts +0 -474
  791. package/templates/static/node_modules/typescript/lib/lib.es2020.number.d.ts +0 -28
  792. package/templates/static/node_modules/typescript/lib/lib.es2020.promise.d.ts +0 -47
  793. package/templates/static/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts +0 -99
  794. package/templates/static/node_modules/typescript/lib/lib.es2020.string.d.ts +0 -44
  795. package/templates/static/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts +0 -41
  796. package/templates/static/node_modules/typescript/lib/lib.es2021.d.ts +0 -23
  797. package/templates/static/node_modules/typescript/lib/lib.es2021.full.d.ts +0 -24
  798. package/templates/static/node_modules/typescript/lib/lib.es2021.intl.d.ts +0 -166
  799. package/templates/static/node_modules/typescript/lib/lib.es2021.promise.d.ts +0 -48
  800. package/templates/static/node_modules/typescript/lib/lib.es2021.string.d.ts +0 -33
  801. package/templates/static/node_modules/typescript/lib/lib.es2021.weakref.d.ts +0 -78
  802. package/templates/static/node_modules/typescript/lib/lib.es2022.array.d.ts +0 -121
  803. package/templates/static/node_modules/typescript/lib/lib.es2022.d.ts +0 -25
  804. package/templates/static/node_modules/typescript/lib/lib.es2022.error.d.ts +0 -75
  805. package/templates/static/node_modules/typescript/lib/lib.es2022.full.d.ts +0 -24
  806. package/templates/static/node_modules/typescript/lib/lib.es2022.intl.d.ts +0 -145
  807. package/templates/static/node_modules/typescript/lib/lib.es2022.object.d.ts +0 -26
  808. package/templates/static/node_modules/typescript/lib/lib.es2022.regexp.d.ts +0 -39
  809. package/templates/static/node_modules/typescript/lib/lib.es2022.string.d.ts +0 -25
  810. package/templates/static/node_modules/typescript/lib/lib.es2023.array.d.ts +0 -924
  811. package/templates/static/node_modules/typescript/lib/lib.es2023.collection.d.ts +0 -21
  812. package/templates/static/node_modules/typescript/lib/lib.es2023.d.ts +0 -22
  813. package/templates/static/node_modules/typescript/lib/lib.es2023.full.d.ts +0 -24
  814. package/templates/static/node_modules/typescript/lib/lib.es2023.intl.d.ts +0 -56
  815. package/templates/static/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts +0 -65
  816. package/templates/static/node_modules/typescript/lib/lib.es2024.collection.d.ts +0 -29
  817. package/templates/static/node_modules/typescript/lib/lib.es2024.d.ts +0 -26
  818. package/templates/static/node_modules/typescript/lib/lib.es2024.full.d.ts +0 -24
  819. package/templates/static/node_modules/typescript/lib/lib.es2024.object.d.ts +0 -29
  820. package/templates/static/node_modules/typescript/lib/lib.es2024.promise.d.ts +0 -35
  821. package/templates/static/node_modules/typescript/lib/lib.es2024.regexp.d.ts +0 -25
  822. package/templates/static/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts +0 -68
  823. package/templates/static/node_modules/typescript/lib/lib.es2024.string.d.ts +0 -29
  824. package/templates/static/node_modules/typescript/lib/lib.es5.d.ts +0 -4601
  825. package/templates/static/node_modules/typescript/lib/lib.es6.d.ts +0 -23
  826. package/templates/static/node_modules/typescript/lib/lib.esnext.array.d.ts +0 -35
  827. package/templates/static/node_modules/typescript/lib/lib.esnext.collection.d.ts +0 -96
  828. package/templates/static/node_modules/typescript/lib/lib.esnext.d.ts +0 -29
  829. package/templates/static/node_modules/typescript/lib/lib.esnext.decorators.d.ts +0 -28
  830. package/templates/static/node_modules/typescript/lib/lib.esnext.disposable.d.ts +0 -193
  831. package/templates/static/node_modules/typescript/lib/lib.esnext.error.d.ts +0 -24
  832. package/templates/static/node_modules/typescript/lib/lib.esnext.float16.d.ts +0 -445
  833. package/templates/static/node_modules/typescript/lib/lib.esnext.full.d.ts +0 -24
  834. package/templates/static/node_modules/typescript/lib/lib.esnext.intl.d.ts +0 -21
  835. package/templates/static/node_modules/typescript/lib/lib.esnext.iterator.d.ts +0 -148
  836. package/templates/static/node_modules/typescript/lib/lib.esnext.promise.d.ts +0 -34
  837. package/templates/static/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts +0 -25
  838. package/templates/static/node_modules/typescript/lib/lib.scripthost.d.ts +0 -322
  839. package/templates/static/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts +0 -41
  840. package/templates/static/node_modules/typescript/lib/lib.webworker.d.ts +0 -13150
  841. package/templates/static/node_modules/typescript/lib/lib.webworker.importscripts.d.ts +0 -23
  842. package/templates/static/node_modules/typescript/lib/lib.webworker.iterable.d.ts +0 -340
  843. package/templates/static/node_modules/typescript/lib/pl/diagnosticMessages.generated.json +0 -2122
  844. package/templates/static/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json +0 -2122
  845. package/templates/static/node_modules/typescript/lib/ru/diagnosticMessages.generated.json +0 -2122
  846. package/templates/static/node_modules/typescript/lib/tr/diagnosticMessages.generated.json +0 -2122
  847. package/templates/static/node_modules/typescript/lib/tsc.js +0 -8
  848. package/templates/static/node_modules/typescript/lib/tsserver.js +0 -8
  849. package/templates/static/node_modules/typescript/lib/tsserverlibrary.d.ts +0 -17
  850. package/templates/static/node_modules/typescript/lib/tsserverlibrary.js +0 -21
  851. package/templates/static/node_modules/typescript/lib/typescript.d.ts +0 -11437
  852. /package/templates/{static → ssr-isr}/lib/auth/index.d.ts +0 -0
  853. /package/templates/{static → ssr-isr}/lib/cli/templates/ssg/jen.config.d.ts +0 -0
  854. /package/templates/{static → ssr-isr}/lib/cli/templates/ssg/site/index.d.ts +0 -0
  855. /package/templates/{static → ssr-isr}/lib/cli/templates/ssr/jen.config.d.ts +0 -0
  856. /package/templates/{static → ssr-isr}/lib/cli/templates/ssr/site/index.d.ts +0 -0
  857. /package/templates/{static → ssr-isr}/lib/compilers/esbuild-plugins.d.ts +0 -0
  858. /package/templates/{static/lib/middleware/types.d.ts → ssr-isr/lib/core/config.js} +0 -0
  859. /package/templates/{static → ssr-isr}/lib/middleware/errors/handler.d.ts +0 -0
  860. /package/templates/{static → ssr-isr}/lib/middleware/utils/matcher.d.ts +0 -0
  861. /package/templates/static/{node_modules → lib/vendor}/preact/LICENSE +0 -0
@@ -1,196 +1,364 @@
1
- /*
2
- * This file is part of Jen.js.
3
- * Copyright (C) 2026 oopsio
4
- *
5
- * This program is free software: you can redistribute it and/or modify
6
- * it under the terms of the GNU General Public License as published by
7
- * the Free Software Foundation, either version 3 of the License, or
8
- * (at your option) any later version.
9
- *
10
- * This program is distributed in the hope that it will be useful,
11
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- * GNU General Public License for more details.
14
- *
15
- * You should have received a copy of the GNU General Public License
16
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
17
- */
18
1
  import { existsSync } from "node:fs";
19
2
  import { join, basename } from "node:path";
20
3
  import esbuild from "esbuild";
21
4
  import { pathToFileURL } from "node:url";
5
+ /** Default max request body size: 10MB. */
6
+ export const DEFAULT_MAX_BODY_SIZE = 10 * 1024 * 1024;
7
+ /** Cache directory for transpiled API routes. */
22
8
  const apiCacheDir = join(process.cwd(), "node_modules", ".jen", "api-cache");
23
9
  /**
24
- * Transpile API route file (TS JS).
10
+ * Coerce query parameter value to appropriate type.
11
+ * - "true" / "false" → boolean
12
+ * - numeric strings → number
13
+ * - empty string → null
14
+ * - otherwise → string
15
+ *
16
+ * @param value - Raw query string value
17
+ * @returns Coerced value
18
+ */
19
+ function coerceQueryValue(value) {
20
+ if (value === "true") return true;
21
+ if (value === "false") return false;
22
+ if (value === "") return null;
23
+ const num = Number(value);
24
+ if (!isNaN(num) && value.trim() !== "") return num;
25
+ return value;
26
+ }
27
+ /**
28
+ * Validate and parse query parameters with type coercion.
29
+ * Prevents type confusion bugs like `query.limit + 10` returning "10010" string.
30
+ *
31
+ * @param url - URL object with search parameters
32
+ * @returns Parsed query parameters with coerced types
33
+ */
34
+ export function validateQuery(url) {
35
+ const query = {};
36
+ for (const [key, value] of url.searchParams.entries()) {
37
+ query[key] = coerceQueryValue(value);
38
+ }
39
+ return query;
40
+ }
41
+ /**
42
+ * Validate request body with size limit.
43
+ * Default max size is 10MB. Throws ValidationError if exceeded or invalid JSON.
44
+ *
45
+ * @param body - Parsed body object
46
+ * @param bodySize - Size of body in bytes
47
+ * @param maxSize - Maximum allowed body size in bytes (default 10MB)
48
+ * @returns true if body is valid
49
+ * @throws ValidationError if body exceeds maxSize
50
+ */
51
+ export function validateBody(body, bodySize, maxSize = DEFAULT_MAX_BODY_SIZE) {
52
+ if (bodySize > maxSize) {
53
+ throw {
54
+ error: "Payload too large",
55
+ field: "body",
56
+ details: `Max size is ${maxSize} bytes, got ${bodySize} bytes`,
57
+ };
58
+ }
59
+ return true;
60
+ }
61
+ /**
62
+ * Transpile a TypeScript API route file to JavaScript.
63
+ * Uses esbuild to convert TS + JS, bundle dependencies, and output as ESM.
64
+ * The transpiled file is cached in node_modules/.jen/api-cache with a timestamp
65
+ * in the filename to allow side-by-side versions if the file changes.
66
+ *
67
+ * Bundles the route with external dependencies excluded (preact, jenjs).
68
+ * This enables tree-shaking of server-only exports like loader().
69
+ *
70
+ * @param filePath - Absolute path to .ts file
71
+ * @returns Path to transpiled .mjs file in cache directory
72
+ * @throws If esbuild fails to transpile
25
73
  */
26
74
  async function transpileApiRoute(filePath) {
27
- const outfile = join(apiCacheDir, basename(filePath).replace(/\.ts$/, `.${Date.now()}.mjs`));
28
- await esbuild.build({
29
- entryPoints: [filePath],
30
- outfile,
31
- format: "esm",
32
- platform: "node",
33
- target: "es2022",
34
- bundle: true,
35
- external: ["preact", "preact-render-to-string", "jenjs"],
36
- write: true,
37
- });
38
- return outfile;
75
+ const outfile = join(
76
+ apiCacheDir,
77
+ basename(filePath).replace(/\.ts$/, `.${Date.now()}.mjs`),
78
+ );
79
+ await esbuild.build({
80
+ entryPoints: [filePath],
81
+ outfile,
82
+ format: "esm",
83
+ platform: "node",
84
+ target: "es2022",
85
+ bundle: true,
86
+ external: ["preact", "preact-render-to-string", "jenjs"],
87
+ write: true,
88
+ });
89
+ return outfile;
39
90
  }
40
91
  /**
41
- * Try to handle an API route.
42
- * Returns true if handled (success or error), false if no route found.
92
+ * Attempt to route and handle an API request.
93
+ * Returns true if the request was handled (success or error response sent),
94
+ * false if no matching API route exists (caller should try next handler).
95
+ *
96
+ * Routing:
97
+ * - /api/endpoint → site/api/endpoint.ts
98
+ * - /api/users/123 → site/api/users/[id].ts (dynamic params supported)
99
+ * - /api/ (no segments) → 404
100
+ *
101
+ * Resolution order:
102
+ * 1. Try exact file match (e.g., /api/hello → api/hello.ts)
103
+ * 2. Try dynamic route match (e.g., /api/123 → api/[id].ts)
43
104
  *
44
- * Routes:
45
- * /api/hello site/api/hello.ts (GET, POST, etc.)
46
- * /api/users/123 site/api/users/[id].ts
105
+ * Process:
106
+ * 1. Validate request starts with /api/
107
+ * 2. Resolve route file (exact or dynamic match)
108
+ * 3. Transpile if TypeScript
109
+ * 4. Load module and find handler for HTTP method
110
+ * 5. Parse request body with size limit
111
+ * 6. Validate query and body
112
+ * 7. Call handler with context
113
+ * 8. Serialize response (Response, string, or object)
114
+ *
115
+ * All errors send JSON response with error message.
116
+ * HTTP 413 (Payload Too Large) if body exceeds 10MB.
117
+ * HTTP 405 (Method Not Allowed) if method handler not exported.
118
+ * HTTP 404 if no matching route file.
119
+ * HTTP 500 if handler throws or transpilation fails.
120
+ *
121
+ * @param opts - Options containing request, response, and site directory
122
+ * @returns true if handled, false if no API route found
47
123
  */
48
124
  export async function tryHandleApiRoute(opts) {
49
- const { req, res, siteDir } = opts;
50
- const url = new URL(req.url ?? "/", `http://${req.headers.host ?? "localhost"}`);
51
- const method = (req.method ?? "GET").toUpperCase();
52
- // Must start with /api/
53
- if (!url.pathname.startsWith("/api/"))
54
- return false;
55
- const pathParts = url.pathname
56
- .slice("/api/".length)
57
- .split("/")
58
- .filter(Boolean);
59
- if (pathParts.length === 0) {
60
- res.statusCode = 404;
61
- res.setHeader("content-type", "application/json; charset=utf-8");
62
- res.end(JSON.stringify({ error: "API route not found" }));
63
- return true;
64
- }
65
- // Try exact match first: /api/hello → api/hello.ts
66
- let apiFile = null;
67
- let routeParams = {};
68
- const exactPath = join(process.cwd(), siteDir, "api", `${pathParts.join("/")}.ts`);
69
- if (existsSync(exactPath)) {
70
- apiFile = exactPath;
71
- }
72
- else {
73
- // Try dynamic route: /api/users/123 → api/users/[id].ts
74
- const basePath = join(process.cwd(), siteDir, "api");
75
- for (let i = pathParts.length; i >= 1; i--) {
76
- const staticSegments = pathParts.slice(0, i);
77
- const dynamicSegments = pathParts.slice(i);
78
- const tryDynamic = join(basePath, ...staticSegments.map((s) => `[${s}]`), `[${staticSegments[staticSegments.length - 1]}].ts`);
79
- // Actually, try: api/[id].ts for /api/123
80
- // and api/users/[id].ts for /api/users/123
81
- // Simple approach: check api/[param].ts
82
- if (staticSegments.length === 0 && dynamicSegments.length === 1) {
83
- const paramFile = join(basePath, `[${dynamicSegments[0]}].ts`);
84
- if (existsSync(paramFile)) {
85
- apiFile = paramFile;
86
- routeParams[dynamicSegments[0]] = dynamicSegments[0];
87
- break;
88
- }
89
- }
125
+ const { req, res, siteDir, maxBodySize = DEFAULT_MAX_BODY_SIZE } = opts;
126
+ const url = new URL(
127
+ req.url ?? "/",
128
+ `http://${req.headers.host ?? "localhost"}`,
129
+ );
130
+ const methodStr = (req.method ?? "GET").toUpperCase();
131
+ // Validate method is one of the allowed HTTP methods
132
+ const allowedMethods = [
133
+ "GET",
134
+ "POST",
135
+ "PUT",
136
+ "DELETE",
137
+ "PATCH",
138
+ "HEAD",
139
+ "OPTIONS",
140
+ ];
141
+ const method = methodStr;
142
+ if (!allowedMethods.includes(method)) {
143
+ res.statusCode = 405;
144
+ res.setHeader("content-type", "application/json; charset=utf-8");
145
+ res.setHeader("allow", allowedMethods.join(", "));
146
+ res.end(JSON.stringify({ error: `${methodStr} not allowed` }));
147
+ return true;
148
+ }
149
+ // Only handle /api/* requests
150
+ if (!url.pathname.startsWith("/api/")) return false;
151
+ // Extract path segments after /api/ prefix
152
+ const pathParts = url.pathname
153
+ .slice("/api/".length)
154
+ .split("/")
155
+ .filter(Boolean);
156
+ // /api/ with no segments is 404
157
+ if (pathParts.length === 0) {
158
+ res.statusCode = 404;
159
+ res.setHeader("content-type", "application/json; charset=utf-8");
160
+ res.end(JSON.stringify({ error: "API route not found" }));
161
+ return true;
162
+ }
163
+ // Resolve route file (exact match or dynamic)
164
+ let apiFile = null;
165
+ let routeParams = {};
166
+ // Try exact file match: /api/hello/world → api/hello/world.ts
167
+ const exactPath = join(
168
+ process.cwd(),
169
+ siteDir,
170
+ "api",
171
+ `${pathParts.join("/")}.ts`,
172
+ );
173
+ if (existsSync(exactPath)) {
174
+ apiFile = exactPath;
175
+ } else {
176
+ // Try dynamic route match: /api/users/123 → api/users/[id].ts
177
+ const basePath = join(process.cwd(), siteDir, "api");
178
+ for (let i = pathParts.length; i >= 1; i--) {
179
+ const staticSegments = pathParts.slice(0, i);
180
+ const dynamicSegments = pathParts.slice(i);
181
+ // Simple approach: check api/[param].ts for /api/123
182
+ // TODO: Support nested dynamic routes like api/users/[id]/posts/[postId].ts
183
+ if (staticSegments.length === 0 && dynamicSegments.length === 1) {
184
+ const paramFile = join(basePath, `[${dynamicSegments[0]}].ts`);
185
+ if (existsSync(paramFile)) {
186
+ apiFile = paramFile;
187
+ routeParams[dynamicSegments[0]] = dynamicSegments[0];
188
+ break;
90
189
  }
190
+ }
91
191
  }
92
- if (!apiFile) {
93
- res.statusCode = 404;
94
- res.setHeader("content-type", "application/json; charset=utf-8");
95
- res.end(JSON.stringify({ error: "API route not found" }));
96
- return true;
97
- }
98
- // Transpile if TS
99
- let moduleUrl = apiFile;
100
- if (apiFile.endsWith(".ts")) {
101
- moduleUrl = await transpileApiRoute(apiFile);
192
+ }
193
+ if (!apiFile) {
194
+ res.statusCode = 404;
195
+ res.setHeader("content-type", "application/json; charset=utf-8");
196
+ res.end(JSON.stringify({ error: "API route not found" }));
197
+ return true;
198
+ }
199
+ // Transpile TypeScript to JavaScript
200
+ let moduleUrl = apiFile;
201
+ if (apiFile.endsWith(".ts")) {
202
+ moduleUrl = await transpileApiRoute(apiFile);
203
+ }
204
+ // Load module and get method handlers
205
+ let mod;
206
+ try {
207
+ // Cache-busting query param ensures fresh module (important in dev mode)
208
+ mod = await import(pathToFileURL(moduleUrl).href + `?t=${Date.now()}`);
209
+ } catch (err) {
210
+ res.statusCode = 500;
211
+ res.setHeader("content-type", "application/json; charset=utf-8");
212
+ res.end(
213
+ JSON.stringify({
214
+ error: "Failed to load API route",
215
+ details: err.message,
216
+ }),
217
+ );
218
+ return true;
219
+ }
220
+ // Get handler for the HTTP method
221
+ const handler = mod[method];
222
+ if (!handler) {
223
+ res.statusCode = 405;
224
+ res.setHeader("content-type", "application/json; charset=utf-8");
225
+ res.setHeader("allow", Object.keys(mod).join(", "));
226
+ res.end(JSON.stringify({ error: `${method} not allowed` }));
227
+ return true;
228
+ }
229
+ // Parse request body with size limit
230
+ let body;
231
+ let bodySize = 0;
232
+ try {
233
+ const result = await readRequestBody(req, maxBodySize);
234
+ body = result.body;
235
+ bodySize = result.size;
236
+ // Validate body size
237
+ validateBody(body, bodySize, maxBodySize);
238
+ } catch (err) {
239
+ if (err.error === "Payload too large") {
240
+ res.statusCode = 413;
241
+ res.setHeader("content-type", "application/json; charset=utf-8");
242
+ res.end(JSON.stringify({ error: err.error, details: err.details }));
243
+ return true;
102
244
  }
103
- // Load module
104
- let mod;
105
- try {
106
- mod = await import(pathToFileURL(moduleUrl).href + `?t=${Date.now()}`);
107
- }
108
- catch (err) {
109
- res.statusCode = 500;
110
- res.setHeader("content-type", "application/json; charset=utf-8");
111
- res.end(JSON.stringify({
112
- error: "Failed to load API route",
113
- details: err.message,
114
- }));
115
- return true;
116
- }
117
- // Find handler for method
118
- const handler = mod[method];
119
- if (!handler) {
120
- res.statusCode = 405;
121
- res.setHeader("content-type", "application/json; charset=utf-8");
122
- res.setHeader("allow", Object.keys(mod).join(", "));
123
- res.end(JSON.stringify({ error: `${method} not allowed` }));
124
- return true;
125
- }
126
- // Read body
127
- const body = await readRequestBody(req);
128
- // Build context
129
- const ctx = {
130
- req,
131
- res,
132
- url,
133
- method,
134
- query: Object.fromEntries(url.searchParams.entries()),
135
- body,
136
- params: routeParams,
137
- };
138
- // Execute handler
139
- try {
140
- const result = await handler(ctx);
141
- // Handler already sent response
142
- if (res.writableEnded)
143
- return true;
144
- // Handle Response
145
- if (result instanceof Response) {
146
- res.statusCode = result.status;
147
- result.headers.forEach((v, k) => res.setHeader(k, v));
148
- const buf = Buffer.from(await result.arrayBuffer());
149
- res.end(buf);
150
- return true;
151
- }
152
- // Handle string
153
- if (typeof result === "string") {
154
- res.statusCode = 200;
155
- res.setHeader("content-type", "text/plain; charset=utf-8");
156
- res.end(result);
157
- return true;
158
- }
159
- // Handle object (JSON)
160
- res.statusCode = 200;
161
- res.setHeader("content-type", "application/json; charset=utf-8");
162
- res.end(JSON.stringify(result ?? null));
163
- return true;
245
+ res.statusCode = 400;
246
+ res.setHeader("content-type", "application/json; charset=utf-8");
247
+ res.end(JSON.stringify({ error: "Bad request", details: err.message }));
248
+ return true;
249
+ }
250
+ // Validate and coerce query parameters
251
+ let query;
252
+ try {
253
+ query = validateQuery(url);
254
+ } catch (err) {
255
+ res.statusCode = 400;
256
+ res.setHeader("content-type", "application/json; charset=utf-8");
257
+ res.end(
258
+ JSON.stringify({
259
+ error: "Invalid query parameters",
260
+ details: err.message,
261
+ }),
262
+ );
263
+ return true;
264
+ }
265
+ // Build handler context
266
+ const ctx = {
267
+ req,
268
+ res,
269
+ url,
270
+ method,
271
+ query,
272
+ body,
273
+ params: routeParams,
274
+ };
275
+ // Execute handler and serialize response
276
+ try {
277
+ const result = await handler(ctx);
278
+ // If handler manually wrote response, don't double-send
279
+ if (res.writableEnded) return true;
280
+ // Serialize Response object
281
+ if (result instanceof Response) {
282
+ res.statusCode = result.status;
283
+ result.headers.forEach((v, k) => res.setHeader(k, v));
284
+ const buf = Buffer.from(await result.arrayBuffer());
285
+ res.end(buf);
286
+ return true;
164
287
  }
165
- catch (err) {
166
- res.statusCode = 500;
167
- res.setHeader("content-type", "application/json; charset=utf-8");
168
- res.end(JSON.stringify({ error: "Internal server error", details: err.message }));
169
- return true;
288
+ // Serialize string as plain text
289
+ if (typeof result === "string") {
290
+ res.statusCode = 200;
291
+ res.setHeader("content-type", "text/plain; charset=utf-8");
292
+ res.end(result);
293
+ return true;
170
294
  }
295
+ // Serialize object as JSON (null is valid)
296
+ res.statusCode = 200;
297
+ res.setHeader("content-type", "application/json; charset=utf-8");
298
+ res.end(JSON.stringify(result ?? null));
299
+ return true;
300
+ } catch (err) {
301
+ res.statusCode = 500;
302
+ res.setHeader("content-type", "application/json; charset=utf-8");
303
+ res.end(
304
+ JSON.stringify({ error: "Internal server error", details: err.message }),
305
+ );
306
+ return true;
307
+ }
171
308
  }
172
309
  /**
173
- * Read request body (shared with old API handler).
310
+ * Parse request body based on Content-Type header with size limit enforcement.
311
+ * Reads all chunks from the request stream and deserializes based on content type.
312
+ *
313
+ * - GET/HEAD: Returns { body: null, size: 0 } (no body expected)
314
+ * - JSON (application/json): Parses and returns object; throws on invalid JSON
315
+ * - Other: Returns { body: { __raw }, size: byteLength }
316
+ *
317
+ * Throws ValidationError if body size exceeds maxSize.
318
+ *
319
+ * This function is shared between different request handlers in the framework.
320
+ *
321
+ * @param req - Node.js IncomingMessage to read body from
322
+ * @param maxSize - Maximum allowed body size in bytes (default 10MB)
323
+ * @returns Object with parsed body and size in bytes
324
+ * @throws ValidationError if body exceeds maxSize or invalid JSON
174
325
  */
175
- async function readRequestBody(req) {
176
- const method = (req.method ?? "GET").toUpperCase();
177
- if (method === "GET" || method === "HEAD")
178
- return null;
179
- const chunks = [];
326
+ async function readRequestBody(req, maxSize = DEFAULT_MAX_BODY_SIZE) {
327
+ const method = (req.method ?? "GET").toUpperCase();
328
+ // Methods without bodies per HTTP spec
329
+ if (method === "GET" || method === "HEAD") return { body: null, size: 0 };
330
+ // Read all body chunks with size limit check
331
+ const chunks = [];
332
+ let totalSize = 0;
333
+ try {
180
334
  for await (const chunk of req) {
181
- chunks.push(Buffer.from(chunk));
335
+ totalSize += chunk.length;
336
+ if (totalSize > maxSize) {
337
+ throw {
338
+ error: "Payload too large",
339
+ field: "body",
340
+ details: `Max size is ${maxSize} bytes, got at least ${totalSize} bytes`,
341
+ };
342
+ }
343
+ chunks.push(Buffer.from(chunk));
182
344
  }
183
- if (chunks.length === 0)
184
- return null;
185
- const raw = Buffer.concat(chunks).toString("utf8");
186
- const ct = (req.headers["content-type"] ?? "").toString();
187
- if (ct.includes("application/json")) {
188
- try {
189
- return JSON.parse(raw);
190
- }
191
- catch {
192
- return { __raw: raw };
193
- }
345
+ } catch (err) {
346
+ // Re-throw validation errors
347
+ if (err.error === "Payload too large") throw err;
348
+ throw new Error(`Failed to read request body: ${err.message}`);
349
+ }
350
+ if (chunks.length === 0) return { body: null, size: 0 };
351
+ const bodyBuffer = Buffer.concat(chunks);
352
+ const raw = bodyBuffer.toString("utf8");
353
+ const ct = (req.headers["content-type"] ?? "").toString();
354
+ // Try to parse JSON
355
+ if (ct.includes("application/json")) {
356
+ try {
357
+ return { body: JSON.parse(raw), size: bodyBuffer.byteLength };
358
+ } catch (err) {
359
+ throw new Error(`Invalid JSON: ${err.message}`);
194
360
  }
195
- return { __raw: raw };
361
+ }
362
+ // Return raw body for non-JSON content
363
+ return { body: { __raw: raw }, size: bodyBuffer.byteLength };
196
364
  }