create-jen-app 1.2.3 → 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 (355) hide show
  1. package/dist/colors.js +0 -17
  2. package/dist/create.js +5 -17
  3. package/dist/generator.js +14 -31
  4. package/dist/index.js +6 -1
  5. package/package.json +1 -1
  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).js +9 -0
  11. package/templates/ssr-isr/lib/auth/cookie-utils.js +79 -0
  12. package/templates/ssr-isr/lib/auth/index.js +2 -0
  13. package/templates/ssr-isr/lib/auth/jwt.js +57 -0
  14. package/templates/ssr-isr/lib/auth/session.js +92 -0
  15. package/templates/ssr-isr/lib/build/asset-hashing.d.ts +10 -0
  16. package/templates/ssr-isr/lib/build/asset-hashing.js +25 -0
  17. package/templates/ssr-isr/lib/build/asset-manifest.d.ts +11 -0
  18. package/templates/ssr-isr/lib/build/asset-manifest.js +21 -0
  19. package/templates/{static → ssr-isr}/lib/build/build.d.ts +1 -1
  20. package/templates/ssr-isr/lib/build/build.js +141 -0
  21. package/templates/{static → ssr-isr}/lib/build/island-hydration.d.ts +8 -5
  22. package/templates/ssr-isr/lib/build/island-hydration.js +44 -0
  23. package/templates/ssr-isr/lib/build/minifier.d.ts +20 -0
  24. package/templates/ssr-isr/lib/build/minifier.js +46 -0
  25. package/templates/ssr-isr/lib/build/page-renderer.d.ts +17 -0
  26. package/templates/ssr-isr/lib/build/page-renderer.js +28 -0
  27. package/templates/ssr-isr/lib/build/production-build.d.ts +10 -0
  28. package/templates/ssr-isr/lib/build/production-build.js +13 -0
  29. package/templates/ssr-isr/lib/build/ssg-pipeline.d.ts +15 -0
  30. package/templates/ssr-isr/lib/build/ssg-pipeline.js +113 -0
  31. package/templates/ssr-isr/lib/build-tools/build-site.js +36 -0
  32. package/templates/ssr-isr/lib/cache/index.js +10 -0
  33. package/templates/ssr-isr/lib/cache/memory.js +40 -0
  34. package/templates/ssr-isr/lib/cache/redis.js +61 -0
  35. package/templates/ssr-isr/lib/cli/banner.js +28 -0
  36. package/templates/ssr-isr/lib/cli/templates/ssg/jen.config.js +32 -0
  37. package/templates/ssr-isr/lib/cli/templates/ssg/site/index.js +9 -0
  38. package/templates/ssr-isr/lib/cli/templates/ssr/jen.config.js +32 -0
  39. package/templates/ssr-isr/lib/cli/templates/ssr/site/index.js +9 -0
  40. package/templates/ssr-isr/lib/compilers/esbuild-plugins.js +111 -0
  41. package/templates/ssr-isr/lib/compilers/svelte.js +44 -0
  42. package/templates/ssr-isr/lib/compilers/vue.js +90 -0
  43. package/templates/ssr-isr/lib/core/http.js +71 -0
  44. package/templates/ssr-isr/lib/core/middleware-hooks.js +97 -0
  45. package/templates/ssr-isr/lib/core/paths.js +39 -0
  46. package/templates/ssr-isr/lib/core/routes/match.js +47 -0
  47. package/templates/ssr-isr/lib/core/routes/scan.js +190 -0
  48. package/templates/ssr-isr/lib/core/types.js +1 -0
  49. package/templates/ssr-isr/lib/css/compiler.js +74 -0
  50. package/templates/ssr-isr/lib/db/connector.js +42 -0
  51. package/templates/ssr-isr/lib/db/drivers/jdb.js +44 -0
  52. package/templates/ssr-isr/lib/db/drivers/sql.js +182 -0
  53. package/templates/ssr-isr/lib/db/index.js +48 -0
  54. package/templates/ssr-isr/lib/db/types.js +1 -0
  55. package/templates/ssr-isr/lib/graphql/index.js +52 -0
  56. package/templates/ssr-isr/lib/graphql/resolvers.js +25 -0
  57. package/templates/ssr-isr/lib/graphql/schema.js +35 -0
  58. package/templates/ssr-isr/lib/i18n/en.json +4 -0
  59. package/templates/ssr-isr/lib/i18n/es.json +4 -0
  60. package/templates/ssr-isr/lib/i18n/index.js +15 -0
  61. package/templates/ssr-isr/lib/import/jen-import.js +161 -0
  62. package/templates/ssr-isr/lib/index.js +116 -0
  63. package/templates/ssr-isr/lib/jdb/engine.js +275 -0
  64. package/templates/ssr-isr/lib/jdb/index.js +34 -0
  65. package/templates/ssr-isr/lib/jdb/types.js +1 -0
  66. package/templates/ssr-isr/lib/jdb/utils.js +176 -0
  67. package/templates/{static → ssr-isr}/lib/middleware/builtins/body-parser.js +0 -17
  68. package/templates/ssr-isr/lib/middleware/builtins/cors.js +54 -0
  69. package/templates/{static → ssr-isr}/lib/middleware/builtins/logger.js +0 -17
  70. package/templates/{static → ssr-isr}/lib/middleware/builtins/rate-limit.js +0 -17
  71. package/templates/{static → ssr-isr}/lib/middleware/builtins/request-id.js +0 -17
  72. package/templates/{static → ssr-isr}/lib/middleware/builtins/security-headers.js +0 -17
  73. package/templates/ssr-isr/lib/middleware/context.js +124 -0
  74. package/templates/{static → ssr-isr}/lib/middleware/decorators.js +0 -17
  75. package/templates/{static → ssr-isr}/lib/middleware/errors/handler.js +0 -17
  76. package/templates/ssr-isr/lib/middleware/errors/http-error.js +10 -0
  77. package/templates/ssr-isr/lib/middleware/kernel.js +85 -0
  78. package/templates/ssr-isr/lib/middleware/pipeline.js +148 -0
  79. package/templates/ssr-isr/lib/middleware/registry.js +85 -0
  80. package/templates/ssr-isr/lib/middleware/response.js +107 -0
  81. package/templates/ssr-isr/lib/middleware/types.d.ts +1 -0
  82. package/templates/ssr-isr/lib/middleware/types.js +1 -0
  83. package/templates/ssr-isr/lib/middleware/utils/matcher.js +13 -0
  84. package/templates/{static → ssr-isr}/lib/native/bundle.js +0 -17
  85. package/templates/{static → ssr-isr}/lib/native/dev-server.js +0 -17
  86. package/templates/{static → ssr-isr}/lib/native/index.js +0 -17
  87. package/templates/{static → ssr-isr}/lib/native/optimizer.js +0 -17
  88. package/templates/ssr-isr/lib/native/style-compiler.js +19 -0
  89. package/templates/ssr-isr/lib/plugin/loader.js +36 -0
  90. package/templates/ssr-isr/lib/runtime/client-runtime.js +25 -0
  91. package/templates/ssr-isr/lib/runtime/hmr.js +59 -0
  92. package/templates/ssr-isr/lib/runtime/hydrate.js +55 -0
  93. package/templates/ssr-isr/lib/runtime/island-hydration-client.js +146 -0
  94. package/templates/ssr-isr/lib/runtime/islands.js +110 -0
  95. package/templates/ssr-isr/lib/runtime/render.js +244 -0
  96. package/templates/ssr-isr/lib/server/api-routes.js +237 -0
  97. package/templates/ssr-isr/lib/server/api.js +108 -0
  98. package/templates/ssr-isr/lib/server/app.js +438 -0
  99. package/templates/ssr-isr/lib/server/runtimeServe.js +169 -0
  100. package/templates/ssr-isr/lib/server/ssr.js +202 -0
  101. package/templates/ssr-isr/lib/shared/log.js +64 -0
  102. package/templates/ssr-isr/package.json +23 -0
  103. package/templates/ssr-isr/server.js +128 -0
  104. package/templates/ssr-isr/site/pages/(index).tsx +11 -0
  105. package/templates/ssr-isr/site/styles/global.scss +37 -0
  106. package/templates/ssr-isr/tsconfig.json +39 -0
  107. package/templates/static/build.js +30 -18
  108. package/templates/static/jen.config.ts +0 -18
  109. package/templates/static/jenjs.d.ts +0 -18
  110. package/templates/static/lib/api/(hello).js +0 -17
  111. package/templates/static/lib/api/examples/files/[...slug].js +22 -0
  112. package/templates/static/lib/api/examples/hello.js +11 -0
  113. package/templates/static/lib/api/examples/posts/[id].js +37 -0
  114. package/templates/static/lib/api/examples/posts.js +37 -0
  115. package/templates/static/lib/api/examples/search.js +23 -0
  116. package/templates/static/lib/api/index.js +41 -0
  117. package/templates/static/lib/api/loader.js +234 -0
  118. package/templates/static/lib/api/router.js +259 -0
  119. package/templates/static/lib/assets/types.js +1 -0
  120. package/templates/static/lib/auth/cookie-utils.js +3 -16
  121. package/templates/static/lib/auth/index.js +0 -17
  122. package/templates/static/lib/auth/jwt.js +0 -17
  123. package/templates/static/lib/auth/session.js +0 -17
  124. package/templates/static/lib/build/asset-hashing.js +44 -36
  125. package/templates/static/lib/build/asset-manifest.js +16 -33
  126. package/templates/static/lib/build/build.js +270 -125
  127. package/templates/static/lib/build/bundle-analyzer-ui.js +417 -0
  128. package/templates/static/lib/build/bundle-analyzer.js +945 -0
  129. package/templates/static/lib/build/code-splitter.js +194 -0
  130. package/templates/static/lib/build/feature-analyzer.js +190 -0
  131. package/templates/static/lib/build/feature-gate.js +257 -0
  132. package/templates/static/lib/build/island-hydration.js +17 -35
  133. package/templates/static/lib/build/lazy-loader.js +322 -0
  134. package/templates/static/lib/build/minifier.js +40 -59
  135. package/templates/static/lib/build/page-renderer.js +23 -40
  136. package/templates/static/lib/build/production-build.js +9 -26
  137. package/templates/static/lib/build/rust-hashing.js +71 -0
  138. package/templates/static/lib/build/script-optimizer.js +285 -0
  139. package/templates/static/lib/build/ssg-pipeline.js +100 -106
  140. package/templates/static/lib/build/vercel-output.js +298 -0
  141. package/templates/static/lib/build-tools/build-site.js +0 -17
  142. package/templates/static/lib/cache/index.js +0 -17
  143. package/templates/static/lib/cache/memory.js +0 -17
  144. package/templates/static/lib/cache/redis.js +0 -17
  145. package/templates/static/lib/cli/banner.js +0 -17
  146. package/templates/static/lib/cli/templates/ssg/jen.config.js +0 -17
  147. package/templates/static/lib/cli/templates/ssr/jen.config.js +0 -17
  148. package/templates/static/lib/client/Image.js +42 -0
  149. package/templates/static/lib/client/Link.js +190 -0
  150. package/templates/static/lib/client/PWA.js +46 -0
  151. package/templates/static/lib/client/Seo.js +97 -0
  152. package/templates/static/lib/client/index.js +9 -0
  153. package/templates/static/lib/client/useNavigation.js +25 -0
  154. package/templates/static/lib/client/useRouter.js +64 -0
  155. package/templates/static/lib/client-routing/Link.js +17 -0
  156. package/templates/static/lib/client-routing/index.js +19 -0
  157. package/templates/static/lib/client-routing/router.js +151 -0
  158. package/templates/static/lib/client-routing/signal.js +147 -0
  159. package/templates/static/lib/compilers/esbuild-plugins.js +0 -17
  160. package/templates/static/lib/compilers/svelte.js +0 -17
  161. package/templates/static/lib/compilers/vue.js +0 -17
  162. package/templates/static/lib/core/config.js +0 -17
  163. package/templates/static/lib/core/feature-guard.js +136 -0
  164. package/templates/static/lib/core/features.js +99 -0
  165. package/templates/static/lib/core/http.js +0 -17
  166. package/templates/static/lib/core/layouts/index.js +10 -0
  167. package/templates/static/lib/core/layouts/render.js +158 -0
  168. package/templates/static/lib/core/layouts/scan.js +112 -0
  169. package/templates/static/lib/core/layouts/types.js +1 -0
  170. package/templates/static/lib/core/lifecycle.js +129 -0
  171. package/templates/static/lib/core/loader-schema.js +81 -0
  172. package/templates/static/lib/core/middleware-hooks.js +0 -17
  173. package/templates/static/lib/core/paths.js +0 -17
  174. package/templates/static/lib/core/routes/advanced.js +114 -0
  175. package/templates/static/lib/core/routes/handlers.js +181 -0
  176. package/templates/static/lib/core/routes/match.js +89 -17
  177. package/templates/static/lib/core/routes/orchestrator.js +171 -0
  178. package/templates/static/lib/core/routes/rendering-config.js +131 -0
  179. package/templates/static/lib/core/routes/scan.js +0 -17
  180. package/templates/static/lib/core/types.js +0 -17
  181. package/templates/static/lib/css/compiler.js +1 -18
  182. package/templates/static/lib/data-fetching/cache.js +223 -0
  183. package/templates/static/lib/data-fetching/client.js +202 -0
  184. package/templates/static/lib/data-fetching/feature-guard.js +29 -0
  185. package/templates/static/lib/data-fetching/graphql.js +265 -0
  186. package/templates/static/lib/data-fetching/index.js +57 -0
  187. package/templates/static/lib/data-fetching/rest.js +256 -0
  188. package/templates/static/lib/data-fetching/server.js +182 -0
  189. package/templates/static/lib/data-fetching/types.js +5 -0
  190. package/templates/static/lib/db/connector.js +0 -17
  191. package/templates/static/lib/db/drivers/jdb.js +0 -17
  192. package/templates/static/lib/db/drivers/sql.js +0 -17
  193. package/templates/static/lib/db/index.js +0 -17
  194. package/templates/static/lib/db/types.js +0 -17
  195. package/templates/static/lib/devtools/component-tree.js +106 -0
  196. package/templates/static/lib/devtools/devtools.js +638 -0
  197. package/templates/static/lib/devtools/event-bus.js +29 -0
  198. package/templates/static/lib/devtools/event-logger.js +67 -0
  199. package/templates/static/lib/devtools/index.js +9 -0
  200. package/templates/static/lib/devtools/integration.js +149 -0
  201. package/templates/static/lib/devtools/performance.js +84 -0
  202. package/templates/static/lib/devtools/persistence.js +57 -0
  203. package/templates/static/lib/devtools/plugins.js +97 -0
  204. package/templates/static/lib/devtools/search.js +89 -0
  205. package/templates/static/lib/devtools/ui.js +769 -0
  206. package/templates/static/lib/features/api/handler.js +10 -0
  207. package/templates/static/lib/features/api/index.js +5 -0
  208. package/templates/static/lib/features/api/types.js +4 -0
  209. package/templates/static/lib/features/middleware/compiled.js +7 -0
  210. package/templates/static/lib/features/middleware/index.js +5 -0
  211. package/templates/static/lib/features/middleware/types.js +4 -0
  212. package/templates/static/lib/fonts/index.js +46 -0
  213. package/templates/static/lib/fonts/inject.js +125 -0
  214. package/templates/static/lib/fonts/loader.js +196 -0
  215. package/templates/static/lib/fonts/types.js +1 -0
  216. package/templates/static/lib/graphql/index.js +1 -18
  217. package/templates/static/lib/graphql/resolvers.js +20 -13
  218. package/templates/static/lib/graphql/schema.js +0 -17
  219. package/templates/static/lib/i18n/index.js +7 -19
  220. package/templates/static/lib/import/jen-import.js +1 -18
  221. package/templates/static/lib/index.js +79 -125
  222. package/templates/static/lib/jdb/engine.js +0 -17
  223. package/templates/static/lib/jdb/index.js +1 -18
  224. package/templates/static/lib/jdb/types.js +0 -17
  225. package/templates/static/lib/jdb/utils.js +0 -17
  226. package/templates/static/lib/middleware/builtins/cors.js +3 -16
  227. package/templates/static/lib/middleware/context.js +0 -17
  228. package/templates/static/lib/middleware/kernel.js +117 -25
  229. package/templates/static/lib/middleware/pipeline.js +0 -17
  230. package/templates/static/lib/middleware/registry.js +0 -17
  231. package/templates/static/lib/middleware/response.js +0 -17
  232. package/templates/static/lib/plugin/examples/analytics-plugin.js +183 -0
  233. package/templates/static/lib/plugin/examples/cdn-upload-plugin.js +94 -0
  234. package/templates/static/lib/plugin/loader.js +0 -17
  235. package/templates/static/lib/plugin/plugin-manager.js +177 -0
  236. package/templates/static/lib/plugin/types.js +28 -0
  237. package/templates/static/lib/runtime/client-runtime.js +0 -17
  238. package/templates/static/lib/runtime/hmr.js +0 -17
  239. package/templates/static/lib/runtime/hydrate.js +0 -17
  240. package/templates/static/lib/runtime/island-hydration-client.js +0 -17
  241. package/templates/static/lib/runtime/islands.js +0 -17
  242. package/templates/static/lib/runtime/render.js +208 -50
  243. package/templates/static/lib/security/security-config.js +60 -0
  244. package/templates/static/lib/security/security-middleware.js +229 -0
  245. package/templates/static/lib/server/api-routes.js +153 -43
  246. package/templates/static/lib/server/api.js +0 -17
  247. package/templates/static/lib/server/app.js +539 -223
  248. package/templates/static/lib/server/isr.js +365 -0
  249. package/templates/static/lib/server/runtimeServe.js +31 -24
  250. package/templates/static/lib/server/ssr.js +98 -22
  251. package/templates/static/lib/server-actions/handler.js +180 -0
  252. package/templates/static/lib/server-actions/index.js +19 -0
  253. package/templates/static/lib/server-actions/middleware.js +146 -0
  254. package/templates/static/lib/server-actions/scan.js +152 -0
  255. package/templates/static/lib/server-actions/types.js +1 -0
  256. package/templates/static/lib/server-actions/validators.js +156 -0
  257. package/templates/static/lib/shared/log.js +19 -20
  258. package/templates/static/lib/telemetry/api/rate-limiter.js +32 -0
  259. package/templates/static/lib/telemetry/api/validator.js +67 -0
  260. package/templates/static/lib/telemetry/client.js +121 -0
  261. package/templates/static/lib/telemetry/tests/rate-limiter.test.js +46 -0
  262. package/templates/static/lib/telemetry/tests/validator.test.js +62 -0
  263. package/templates/static/lib/vendor/glob/glob.js +4766 -0
  264. package/templates/static/lib/vendor/preact/LICENSE +21 -0
  265. package/templates/static/lib/vendor/preact/preact.module.js +797 -0
  266. package/templates/static/lib/vendor/sass/sass.node.mjs +212 -0
  267. package/templates/static/package.json +4 -0
  268. package/templates/static/server.js +22 -22
  269. package/templates/static/site/(home).tsx +0 -18
  270. package/templates/static/tsconfig.json +5 -1
  271. package/templates/static/.esbuild/jen.config.js +0 -19
  272. package/templates/static/lib/build/asset-hashing.d.ts +0 -10
  273. package/templates/static/lib/build/asset-manifest.d.ts +0 -11
  274. package/templates/static/lib/build/minifier.d.ts +0 -20
  275. package/templates/static/lib/build/page-renderer.d.ts +0 -17
  276. package/templates/static/lib/build/production-build.d.ts +0 -10
  277. package/templates/static/lib/build/ssg-pipeline.d.ts +0 -15
  278. package/templates/static/lib/middleware/errors/http-error.js +0 -27
  279. package/templates/static/lib/middleware/types.js +0 -18
  280. package/templates/static/lib/middleware/utils/matcher.js +0 -30
  281. package/templates/static/lib/native/style-compiler.js +0 -36
  282. /package/templates/{static → ssr-isr}/lib/api/(hello).d.ts +0 -0
  283. /package/templates/{static → ssr-isr}/lib/auth/cookie-utils.d.ts +0 -0
  284. /package/templates/{static → ssr-isr}/lib/auth/index.d.ts +0 -0
  285. /package/templates/{static → ssr-isr}/lib/auth/jwt.d.ts +0 -0
  286. /package/templates/{static → ssr-isr}/lib/auth/session.d.ts +0 -0
  287. /package/templates/{static → ssr-isr}/lib/build-tools/build-site.d.ts +0 -0
  288. /package/templates/{static → ssr-isr}/lib/cache/index.d.ts +0 -0
  289. /package/templates/{static → ssr-isr}/lib/cache/memory.d.ts +0 -0
  290. /package/templates/{static → ssr-isr}/lib/cache/redis.d.ts +0 -0
  291. /package/templates/{static → ssr-isr}/lib/cli/banner.d.ts +0 -0
  292. /package/templates/{static → ssr-isr}/lib/cli/templates/ssg/jen.config.d.ts +0 -0
  293. /package/templates/{static → ssr-isr}/lib/cli/templates/ssg/site/index.d.ts +0 -0
  294. /package/templates/{static → ssr-isr}/lib/cli/templates/ssr/jen.config.d.ts +0 -0
  295. /package/templates/{static → ssr-isr}/lib/cli/templates/ssr/site/index.d.ts +0 -0
  296. /package/templates/{static → ssr-isr}/lib/compilers/esbuild-plugins.d.ts +0 -0
  297. /package/templates/{static → ssr-isr}/lib/compilers/svelte.d.ts +0 -0
  298. /package/templates/{static → ssr-isr}/lib/compilers/vue.d.ts +0 -0
  299. /package/templates/{static → ssr-isr}/lib/core/config.d.ts +0 -0
  300. /package/templates/{static/lib/middleware/types.d.ts → ssr-isr/lib/core/config.js} +0 -0
  301. /package/templates/{static → ssr-isr}/lib/core/http.d.ts +0 -0
  302. /package/templates/{static → ssr-isr}/lib/core/middleware-hooks.d.ts +0 -0
  303. /package/templates/{static → ssr-isr}/lib/core/paths.d.ts +0 -0
  304. /package/templates/{static → ssr-isr}/lib/core/routes/match.d.ts +0 -0
  305. /package/templates/{static → ssr-isr}/lib/core/routes/scan.d.ts +0 -0
  306. /package/templates/{static → ssr-isr}/lib/core/types.d.ts +0 -0
  307. /package/templates/{static → ssr-isr}/lib/css/compiler.d.ts +0 -0
  308. /package/templates/{static → ssr-isr}/lib/db/connector.d.ts +0 -0
  309. /package/templates/{static → ssr-isr}/lib/db/drivers/jdb.d.ts +0 -0
  310. /package/templates/{static → ssr-isr}/lib/db/drivers/sql.d.ts +0 -0
  311. /package/templates/{static → ssr-isr}/lib/db/index.d.ts +0 -0
  312. /package/templates/{static → ssr-isr}/lib/db/types.d.ts +0 -0
  313. /package/templates/{static → ssr-isr}/lib/graphql/index.d.ts +0 -0
  314. /package/templates/{static → ssr-isr}/lib/graphql/resolvers.d.ts +0 -0
  315. /package/templates/{static → ssr-isr}/lib/graphql/schema.d.ts +0 -0
  316. /package/templates/{static → ssr-isr}/lib/i18n/index.d.ts +0 -0
  317. /package/templates/{static → ssr-isr}/lib/import/jen-import.d.ts +0 -0
  318. /package/templates/{static → ssr-isr}/lib/index.d.ts +0 -0
  319. /package/templates/{static → ssr-isr}/lib/jdb/engine.d.ts +0 -0
  320. /package/templates/{static → ssr-isr}/lib/jdb/index.d.ts +0 -0
  321. /package/templates/{static → ssr-isr}/lib/jdb/types.d.ts +0 -0
  322. /package/templates/{static → ssr-isr}/lib/jdb/utils.d.ts +0 -0
  323. /package/templates/{static → ssr-isr}/lib/middleware/builtins/body-parser.d.ts +0 -0
  324. /package/templates/{static → ssr-isr}/lib/middleware/builtins/cors.d.ts +0 -0
  325. /package/templates/{static → ssr-isr}/lib/middleware/builtins/logger.d.ts +0 -0
  326. /package/templates/{static → ssr-isr}/lib/middleware/builtins/rate-limit.d.ts +0 -0
  327. /package/templates/{static → ssr-isr}/lib/middleware/builtins/request-id.d.ts +0 -0
  328. /package/templates/{static → ssr-isr}/lib/middleware/builtins/security-headers.d.ts +0 -0
  329. /package/templates/{static → ssr-isr}/lib/middleware/context.d.ts +0 -0
  330. /package/templates/{static → ssr-isr}/lib/middleware/decorators.d.ts +0 -0
  331. /package/templates/{static → ssr-isr}/lib/middleware/errors/handler.d.ts +0 -0
  332. /package/templates/{static → ssr-isr}/lib/middleware/errors/http-error.d.ts +0 -0
  333. /package/templates/{static → ssr-isr}/lib/middleware/kernel.d.ts +0 -0
  334. /package/templates/{static → ssr-isr}/lib/middleware/pipeline.d.ts +0 -0
  335. /package/templates/{static → ssr-isr}/lib/middleware/registry.d.ts +0 -0
  336. /package/templates/{static → ssr-isr}/lib/middleware/response.d.ts +0 -0
  337. /package/templates/{static → ssr-isr}/lib/middleware/utils/matcher.d.ts +0 -0
  338. /package/templates/{static → ssr-isr}/lib/native/bundle.d.ts +0 -0
  339. /package/templates/{static → ssr-isr}/lib/native/dev-server.d.ts +0 -0
  340. /package/templates/{static → ssr-isr}/lib/native/index.d.ts +0 -0
  341. /package/templates/{static → ssr-isr}/lib/native/optimizer.d.ts +0 -0
  342. /package/templates/{static → ssr-isr}/lib/native/style-compiler.d.ts +0 -0
  343. /package/templates/{static → ssr-isr}/lib/plugin/loader.d.ts +0 -0
  344. /package/templates/{static → ssr-isr}/lib/runtime/client-runtime.d.ts +0 -0
  345. /package/templates/{static → ssr-isr}/lib/runtime/hmr.d.ts +0 -0
  346. /package/templates/{static → ssr-isr}/lib/runtime/hydrate.d.ts +0 -0
  347. /package/templates/{static → ssr-isr}/lib/runtime/island-hydration-client.d.ts +0 -0
  348. /package/templates/{static → ssr-isr}/lib/runtime/islands.d.ts +0 -0
  349. /package/templates/{static → ssr-isr}/lib/runtime/render.d.ts +0 -0
  350. /package/templates/{static → ssr-isr}/lib/server/api-routes.d.ts +0 -0
  351. /package/templates/{static → ssr-isr}/lib/server/api.d.ts +0 -0
  352. /package/templates/{static → ssr-isr}/lib/server/app.d.ts +0 -0
  353. /package/templates/{static → ssr-isr}/lib/server/runtimeServe.d.ts +0 -0
  354. /package/templates/{static → ssr-isr}/lib/server/ssr.d.ts +0 -0
  355. /package/templates/{static → ssr-isr}/lib/shared/log.d.ts +0 -0
@@ -0,0 +1,202 @@
1
+ import { RestFetcher } from "./rest.js";
2
+ import { GraphQLClient } from "./graphql.js";
3
+ /**
4
+ * Client-side data fetching utilities for browser and Preact components.
5
+ * Provides reactive data fetching with cache, retry, and suspense support.
6
+ *
7
+ * Features:
8
+ * - Automatic refetch on mount/dependency changes
9
+ * - Suspense integration for data boundaries
10
+ * - In-flight request deduplication
11
+ * - Optimistic updates
12
+ */
13
+ export class ClientDataFetcher {
14
+ rest;
15
+ graphql;
16
+ inflight = new Map();
17
+ constructor(clientCtx) {
18
+ this.rest = new RestFetcher({
19
+ cache: clientCtx.cache,
20
+ interceptors: clientCtx.interceptors,
21
+ });
22
+ this.graphql = new GraphQLClient({
23
+ endpoint: clientCtx.config.baseUrl || "/api/graphql",
24
+ cache: clientCtx.cache,
25
+ interceptors: clientCtx.interceptors,
26
+ });
27
+ }
28
+ /**
29
+ * Fetches data with deduplication.
30
+ * Multiple requests for the same URL while one is inflight return the same promise.
31
+ */
32
+ async fetch(url, config) {
33
+ const key = `${config?.method || "GET"}:${url}`;
34
+ // Return existing promise if request is in-flight
35
+ if (this.inflight.has(key)) {
36
+ return this.inflight.get(key);
37
+ }
38
+ const promise = this.rest.fetch(url, config).finally(() => {
39
+ this.inflight.delete(key);
40
+ });
41
+ this.inflight.set(key, promise);
42
+ return promise;
43
+ }
44
+ /**
45
+ * Fetches multiple resources in parallel with race condition handling.
46
+ */
47
+ async fetchAll(urls, config) {
48
+ const results = {};
49
+ const promises = Object.entries(urls).map(async ([key, url]) => {
50
+ const result = await this.fetch(url, config);
51
+ if (!result.ok) {
52
+ throw new Error(`Failed to fetch ${key}: ${result.error.message}`);
53
+ }
54
+ results[key] = result.data;
55
+ });
56
+ try {
57
+ await Promise.all(promises);
58
+ return {
59
+ ok: true,
60
+ data: results,
61
+ meta: {
62
+ status: 200,
63
+ statusText: "OK",
64
+ headers: {},
65
+ url: Object.values(urls)[0],
66
+ ok: true,
67
+ },
68
+ };
69
+ } catch (err) {
70
+ return {
71
+ ok: false,
72
+ error: {
73
+ message: err.message,
74
+ details: err,
75
+ },
76
+ };
77
+ }
78
+ }
79
+ /**
80
+ * Adds an authorization token to all requests.
81
+ */
82
+ withAuthToken(token) {
83
+ this.rest.addInterceptor({
84
+ beforeRequest: (req) => {
85
+ req.headers = {
86
+ ...req.headers,
87
+ Authorization: `Bearer ${token}`,
88
+ };
89
+ return req;
90
+ },
91
+ });
92
+ return this;
93
+ }
94
+ /**
95
+ * Adds common headers to all requests.
96
+ */
97
+ withHeaders(headers) {
98
+ this.rest.addInterceptor({
99
+ beforeRequest: (req) => {
100
+ req.headers = {
101
+ ...req.headers,
102
+ ...headers,
103
+ };
104
+ return req;
105
+ },
106
+ });
107
+ return this;
108
+ }
109
+ }
110
+ /**
111
+ * Global client fetch context for browser.
112
+ * Initialized when app hydrates on client.
113
+ */
114
+ let globalClientFetcher = null;
115
+ /**
116
+ * Initializes the client data fetcher.
117
+ * Should be called during client hydration.
118
+ */
119
+ export function initializeClientFetch(context) {
120
+ globalClientFetcher = new ClientDataFetcher(context);
121
+ }
122
+ /**
123
+ * Gets the global client data fetcher.
124
+ */
125
+ export function getClientDataFetcher() {
126
+ if (!globalClientFetcher) {
127
+ throw new Error(
128
+ "Client fetch not initialized. Call initializeClientFetch() during client hydration.",
129
+ );
130
+ }
131
+ return globalClientFetcher;
132
+ }
133
+ /**
134
+ * Convenience hook for fetching data in components.
135
+ * Returns { data, error, loading, refetch }.
136
+ */
137
+ export function useData(url, options) {
138
+ // This is a simplified API description
139
+ // Full implementation would use Preact hooks (useEffect, useState)
140
+ return {
141
+ data: options?.initialData || null,
142
+ error: null,
143
+ loading: false,
144
+ refetch: async () => {
145
+ const fetcher = getClientDataFetcher();
146
+ return fetcher.rest.get(url, options);
147
+ },
148
+ };
149
+ }
150
+ /**
151
+ * Convenience hook for fetching multiple resources in parallel.
152
+ */
153
+ export function useDataAll(urls, options) {
154
+ return {
155
+ data: {},
156
+ error: null,
157
+ loading: false,
158
+ refetch: async () => {
159
+ const fetcher = getClientDataFetcher();
160
+ return fetcher.fetchAll(urls, options);
161
+ },
162
+ };
163
+ }
164
+ /**
165
+ * Convenience hook for GraphQL queries in components.
166
+ */
167
+ export function useGraphQL(query, variables) {
168
+ return {
169
+ data: null,
170
+ error: null,
171
+ loading: false,
172
+ refetch: async () => {
173
+ const fetcher = getClientDataFetcher();
174
+ return fetcher.graphql.query(
175
+ { query, variables },
176
+ { cache: { strategy: "cache-first" } },
177
+ );
178
+ },
179
+ };
180
+ }
181
+ /**
182
+ * Convenience hook for GraphQL mutations in components.
183
+ */
184
+ export function useMutation(mutation, onSuccess, onError) {
185
+ return {
186
+ execute: async (variables) => {
187
+ const fetcher = getClientDataFetcher();
188
+ const result = await fetcher.graphql.mutation(
189
+ { query: mutation, variables },
190
+ { cache: { strategy: "no-cache" } },
191
+ );
192
+ if (result.ok) {
193
+ onSuccess?.(result.data);
194
+ } else {
195
+ onError?.(new Error(result.error.message));
196
+ }
197
+ return result;
198
+ },
199
+ loading: false,
200
+ error: null,
201
+ };
202
+ }
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Feature guards for data-fetching module.
3
+ *
4
+ * The data-fetching feature must be enabled in jen.config.ts:
5
+ * ```
6
+ * features: {
7
+ * dataFetching: true
8
+ * }
9
+ * ```
10
+ *
11
+ * This module would typically use the framework's feature gating system
12
+ * to ensure the feature is enabled before allowing use of these utilities.
13
+ */
14
+ /**
15
+ * Validates that data-fetching feature is enabled.
16
+ * Throws helpful error if disabled.
17
+ */
18
+ export function requireDataFetchingFeature(features, context) {
19
+ // Note: "dataFetching" would be added to FeatureName type in features.ts
20
+ // For now, this is a placeholder that documents the pattern
21
+ // guardFeature(features, "dataFetching", context);
22
+ }
23
+ /**
24
+ * Validates that both cache and data-fetching features are enabled.
25
+ * Required for some advanced caching features.
26
+ */
27
+ export function requireCacheWithDataFetching(features, context) {
28
+ // guardFeatures(features, ["cache", "dataFetching"], context);
29
+ }
@@ -0,0 +1,265 @@
1
+ import { RestFetcher } from "./rest.js";
2
+ import { executeCacheStrategy } from "./cache.js";
3
+ /**
4
+ * GraphQL client for querying GraphQL APIs.
5
+ * Integrates with REST fetcher infrastructure for cache and interceptor support.
6
+ *
7
+ * Features:
8
+ * - Query and mutation execution
9
+ * - Automatic error extraction from GraphQL responses
10
+ * - Cache support with tag-based invalidation
11
+ * - Request/response interceptors
12
+ * - Type-safe operation configuration
13
+ */
14
+ export class GraphQLClient {
15
+ restFetcher;
16
+ endpoint;
17
+ cache;
18
+ interceptors;
19
+ constructor(opts) {
20
+ this.endpoint = opts.endpoint;
21
+ this.cache = opts.cache;
22
+ this.interceptors = opts.interceptors || [];
23
+ this.restFetcher = new RestFetcher({
24
+ cache: opts.cache,
25
+ interceptors: opts.interceptors,
26
+ baseUrl: opts.endpoint.includes("http")
27
+ ? undefined
28
+ : "https://api.example.com",
29
+ defaultHeaders: {
30
+ "content-type": "application/json",
31
+ ...opts.defaultHeaders,
32
+ },
33
+ });
34
+ }
35
+ /**
36
+ * Registers a new interceptor.
37
+ */
38
+ addInterceptor(interceptor) {
39
+ this.restFetcher.addInterceptor(interceptor);
40
+ this.interceptors.push(interceptor);
41
+ }
42
+ /**
43
+ * Executes a GraphQL query.
44
+ * Queries are cached by default (cache-first strategy).
45
+ */
46
+ async query(request, config) {
47
+ const gqlRequest =
48
+ typeof request === "string" ? { query: request } : request;
49
+ // Queries are safe to cache
50
+ const cacheConfig = {
51
+ strategy: "cache-first",
52
+ ttl: 300000, // 5 minutes default
53
+ };
54
+ if (config?.cache && typeof config.cache === "object") {
55
+ Object.assign(cacheConfig, config.cache);
56
+ }
57
+ return this.execute(gqlRequest, {
58
+ ...config,
59
+ cache: cacheConfig,
60
+ });
61
+ }
62
+ /**
63
+ * Executes a GraphQL mutation.
64
+ * Mutations are NOT cached by default (no-cache strategy).
65
+ */
66
+ async mutation(request, config) {
67
+ const gqlRequest =
68
+ typeof request === "string" ? { query: request } : request;
69
+ // Mutations should not be cached
70
+ const cacheConfig = {
71
+ strategy: "no-cache",
72
+ };
73
+ if (config?.cache && typeof config.cache === "object") {
74
+ Object.assign(cacheConfig, config.cache);
75
+ }
76
+ return this.execute(gqlRequest, {
77
+ ...config,
78
+ cache: cacheConfig,
79
+ });
80
+ }
81
+ /**
82
+ * Core GraphQL execution with cache and interceptor support.
83
+ */
84
+ async execute(request, config) {
85
+ const cacheStrategy = config?.cache?.strategy || "cache-first";
86
+ const cacheKey = this.createGraphQLCacheKey(request);
87
+ const cacheTtl = config?.cache?.ttl || 300000;
88
+ const cacheTags = config?.cache?.tags || [
89
+ `gql:${this.extractOperationName(request)}`,
90
+ ];
91
+ try {
92
+ let data;
93
+ if (cacheStrategy !== "no-cache") {
94
+ const { data: cachedData, cached } = await executeCacheStrategy(
95
+ cacheStrategy,
96
+ {
97
+ key: cacheKey,
98
+ cache: this.cache,
99
+ fetchFn: () => this.performRequest(request),
100
+ ttl: cacheTtl,
101
+ tags: cacheTags,
102
+ },
103
+ );
104
+ data = cachedData;
105
+ } else {
106
+ data = await this.performRequest(request);
107
+ }
108
+ const result = {
109
+ ok: true,
110
+ data,
111
+ meta: {
112
+ status: 200,
113
+ statusText: "OK",
114
+ headers: { "content-type": "application/json" },
115
+ url: this.endpoint,
116
+ ok: true,
117
+ },
118
+ };
119
+ // Run afterResponse interceptors
120
+ for (const interceptor of this.interceptors) {
121
+ if (interceptor.afterResponse) {
122
+ const intercepted = await interceptor.afterResponse(result);
123
+ if (!intercepted.ok) return intercepted;
124
+ if (intercepted.ok) {
125
+ result.data = intercepted.data;
126
+ }
127
+ }
128
+ }
129
+ return result;
130
+ } catch (err) {
131
+ const errorResult = {
132
+ ok: false,
133
+ error: {
134
+ message: err.message || "GraphQL request failed",
135
+ code: err.code,
136
+ details: err,
137
+ },
138
+ };
139
+ // Run onError interceptors
140
+ for (const interceptor of this.interceptors) {
141
+ if (interceptor.onError) {
142
+ return await interceptor.onError(errorResult);
143
+ }
144
+ }
145
+ return errorResult;
146
+ }
147
+ }
148
+ /**
149
+ * Performs the actual GraphQL request.
150
+ */
151
+ async performRequest(request) {
152
+ const response = await this.restFetcher.post(this.endpoint, request, {
153
+ cache: false, // Already handled by execute()
154
+ });
155
+ if (!response.ok) {
156
+ throw new Error(`GraphQL request failed: ${response.error.message}`);
157
+ }
158
+ const { data, errors } = response.data;
159
+ if (errors && errors.length > 0) {
160
+ const errorMessages = errors.map((e) => e.message).join("; ");
161
+ throw new Error(`GraphQL errors: ${errorMessages}`);
162
+ }
163
+ return data;
164
+ }
165
+ /**
166
+ * Generates cache key from GraphQL request.
167
+ */
168
+ createGraphQLCacheKey(request) {
169
+ const key = `gql:${this.extractOperationName(request)}`;
170
+ const varsStr = request.variables ? JSON.stringify(request.variables) : "";
171
+ return `${key}:${varsStr}`;
172
+ }
173
+ /**
174
+ * Extracts operation name from GraphQL query/mutation.
175
+ */
176
+ extractOperationName(request) {
177
+ if (request.operationName) return request.operationName;
178
+ // Try to extract from query string
179
+ const match = request.query.match(/(?:query|mutation)\s+(\w+)/);
180
+ return match ? match[1] : "anonymous";
181
+ }
182
+ /**
183
+ * Invalidates cache entries by GraphQL operation name(s).
184
+ */
185
+ async invalidate(operationNames) {
186
+ const tags = operationNames.map((name) => `gql:${name}`);
187
+ await this.cache.invalidate(tags);
188
+ }
189
+ /**
190
+ * Batch execute multiple GraphQL queries.
191
+ */
192
+ async batch(requests, config) {
193
+ const results = {};
194
+ for (const [key, request] of Object.entries(requests)) {
195
+ const result = await this.query(request, config);
196
+ if (!result.ok) {
197
+ return result;
198
+ }
199
+ results[key] = result.data;
200
+ }
201
+ return {
202
+ ok: true,
203
+ data: results,
204
+ meta: {
205
+ status: 200,
206
+ statusText: "OK",
207
+ headers: {},
208
+ url: this.endpoint,
209
+ ok: true,
210
+ },
211
+ };
212
+ }
213
+ }
214
+ /**
215
+ * Creates a GraphQL client with sensible defaults.
216
+ */
217
+ export function createGraphQLClient(opts) {
218
+ return new GraphQLClient(opts);
219
+ }
220
+ /**
221
+ * Helper to build GraphQL query strings programmatically.
222
+ * Useful for type-safe query construction.
223
+ */
224
+ export class GraphQLQueryBuilder {
225
+ query = "";
226
+ variables = {};
227
+ /**
228
+ * Adds a field selection to the query.
229
+ */
230
+ field(name, fields) {
231
+ this.query += name;
232
+ if (fields) {
233
+ this.query += ` { ${fields.join(" ")} }`;
234
+ }
235
+ return this;
236
+ }
237
+ /**
238
+ * Adds a variable to the query.
239
+ */
240
+ variable(name, type, value) {
241
+ if (value !== undefined) {
242
+ this.variables[name] = value;
243
+ }
244
+ return this;
245
+ }
246
+ /**
247
+ * Builds the final GraphQL request.
248
+ */
249
+ build(operationType = "query", operationName) {
250
+ const opName = operationName || "Operation";
251
+ const vars = Object.entries(this.variables).map(
252
+ ([name, value]) => `$${name}: ${typeof value}`,
253
+ );
254
+ const finalQuery = `
255
+ ${operationType} ${opName}${vars.length ? `(${vars.join(", ")})` : ""} {
256
+ ${this.query}
257
+ }
258
+ `.trim();
259
+ return {
260
+ query: finalQuery,
261
+ variables: this.variables,
262
+ operationName: opName,
263
+ };
264
+ }
265
+ }
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Jen.js Data Fetching Module
3
+ *
4
+ * Comprehensive data fetching infrastructure with support for:
5
+ * - REST/HTTP APIs with automatic retry and timeout handling
6
+ * - GraphQL queries and mutations with error handling
7
+ * - Multi-backend caching (memory, Redis, custom)
8
+ * - Cache strategies (cache-first, network-first, stale-while-revalidate)
9
+ * - Request/response interceptors
10
+ * - Server-side and client-side fetching
11
+ * - Type-safe configuration and results
12
+ *
13
+ * Key exports:
14
+ * - Types: FetchResult, DataFetchConfig, CacheBackend, etc.
15
+ * - REST: RestFetcher, createRestFetcher
16
+ * - GraphQL: GraphQLClient, createGraphQLClient
17
+ * - Cache: MemoryDataCache, NoOpCache, createCacheKey
18
+ * - Server: ServerDataFetcher, initializeServerFetch, getServerDataFetcher
19
+ * - Client: ClientDataFetcher, initializeClientFetch, getClientDataFetcher
20
+ */
21
+ // Cache exports
22
+ export {
23
+ MemoryDataCache,
24
+ NoOpCache,
25
+ createCacheKey,
26
+ executeCacheStrategy,
27
+ } from "./cache.js";
28
+ // REST/HTTP exports
29
+ export { RestFetcher, createRestFetcher } from "./rest.js";
30
+ // GraphQL exports
31
+ export {
32
+ GraphQLClient,
33
+ createGraphQLClient,
34
+ GraphQLQueryBuilder,
35
+ } from "./graphql.js";
36
+ // Server-side exports
37
+ export {
38
+ ServerDataFetcher,
39
+ initializeServerFetch,
40
+ getServerDataFetcher,
41
+ fetchData,
42
+ queryGraphQL,
43
+ createDataLoader,
44
+ createParallelDataLoader,
45
+ createConditionalDataLoader,
46
+ createResilientDataLoader,
47
+ } from "./server.js";
48
+ // Client-side exports
49
+ export {
50
+ ClientDataFetcher,
51
+ initializeClientFetch,
52
+ getClientDataFetcher,
53
+ useData,
54
+ useDataAll,
55
+ useGraphQL,
56
+ useMutation,
57
+ } from "./client.js";