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,285 @@
1
+ /**
2
+ * Script optimizer for bundles: tree-shaking, code splitting, lazy-loading, auto-hashing, cache-busting
3
+ *
4
+ * Provides:
5
+ * - Automatic dead code elimination via feature gates
6
+ * - Intelligent code splitting (vendor, runtime, common, lazy)
7
+ * - Lazy-loading detection and chunk extraction
8
+ * - Content-based auto-hashing for cache-busting
9
+ * - Manifest generation for asset reference
10
+ */
11
+ export class ScriptOptimizer {
12
+ config;
13
+ chunks = new Map();
14
+ hashLength;
15
+ constructor(config = {}, hashLength = 12) {
16
+ this.config = {
17
+ treeShaking: true,
18
+ codeSplitting: true,
19
+ lazyLoading: true,
20
+ autoHashing: true,
21
+ cacheBusting: true,
22
+ splitChunks: {
23
+ vendor: true,
24
+ runtime: true,
25
+ common: true,
26
+ minSize: 20000,
27
+ },
28
+ ...config,
29
+ };
30
+ this.hashLength = hashLength;
31
+ }
32
+ /**
33
+ * Generate esbuild configuration for optimized bundling
34
+ */
35
+ generateEsbuildConfig() {
36
+ const config = {
37
+ minify: true,
38
+ format: "esm",
39
+ target: "es2015",
40
+ treeShaking: this.config.treeShaking,
41
+ };
42
+ // Configure code splitting with manual chunks
43
+ if (this.config.codeSplitting) {
44
+ config.splitting = true;
45
+ config.chunkNames = "[name]-[hash]";
46
+ // Manual chunk boundaries for predictable splitting
47
+ const manualChunks = {};
48
+ if (this.config.splitChunks?.vendor) {
49
+ manualChunks.vendor = [
50
+ "preact",
51
+ "preact/compat",
52
+ "preact/hooks",
53
+ "preact/compat/scheduler",
54
+ ];
55
+ }
56
+ if (this.config.splitChunks?.runtime) {
57
+ manualChunks.runtime = [
58
+ "../runtime/hydrate.js",
59
+ "../runtime/render.js",
60
+ ];
61
+ }
62
+ if (Object.keys(manualChunks).length > 0) {
63
+ config.manualChunks = manualChunks;
64
+ }
65
+ }
66
+ return config;
67
+ }
68
+ /**
69
+ * Detect lazy-loaded modules from AST comments
70
+ *
71
+ * @example
72
+ * ```
73
+ * // @lazy-load:"dashboard"
74
+ * const Dashboard = () => import('./dashboard.js');
75
+ * ```
76
+ */
77
+ detectLazyModules(source) {
78
+ const lazyMap = new Map();
79
+ const regex = /@lazy-load:"([^"]+)"/g;
80
+ let match;
81
+ while ((match = regex.exec(source)) !== null) {
82
+ const chunkName = match[1];
83
+ lazyMap.set(chunkName, chunkName);
84
+ }
85
+ return lazyMap;
86
+ }
87
+ /**
88
+ * Generate lazy-loading wrapper for dynamic imports
89
+ *
90
+ * Wraps dynamic imports with automatic chunk naming and loading feedback
91
+ */
92
+ generateLazyLoadWrapper(moduleId, chunkName) {
93
+ return `
94
+ /**
95
+ * Auto-generated lazy-loading wrapper for chunk: ${chunkName}
96
+ * Provides loading state management and error handling
97
+ */
98
+ export const load${this.toPascalCase(chunkName)} = () => {
99
+ const [loaded, setLoaded] = window.__lazyCache = window.__lazyCache || {};
100
+
101
+ if (loaded['${chunkName}']) {
102
+ return Promise.resolve(loaded['${chunkName}']);
103
+ }
104
+
105
+ return import(/* webpackChunkName: "${chunkName}" */ '${moduleId}')
106
+ .then(mod => {
107
+ loaded['${chunkName}'] = mod;
108
+ return mod;
109
+ })
110
+ .catch(err => {
111
+ console.error('Failed to load ${chunkName}:', err);
112
+ throw err;
113
+ });
114
+ };
115
+ `;
116
+ }
117
+ /**
118
+ * Generate hash for content with configurable length
119
+ */
120
+ hashContent(content) {
121
+ const crypto = require("node:crypto");
122
+ return crypto
123
+ .createHash("md5")
124
+ .update(content)
125
+ .digest("hex")
126
+ .slice(0, this.hashLength);
127
+ }
128
+ /**
129
+ * Generate hashed filename for cache-busting
130
+ *
131
+ * @example
132
+ * ```
133
+ * hashFilename("app.js", "a1b2c3d4e5f6g7h8i9j0")
134
+ * // Returns: "app.a1b2c3d4e5f6.js"
135
+ * ```
136
+ */
137
+ hashFilename(original, hash) {
138
+ const parts = original.split(".");
139
+ const ext = parts.pop();
140
+ const name = parts.join(".");
141
+ return `${name}.${hash}.${ext}`;
142
+ }
143
+ /**
144
+ * Register an optimized chunk for tracking
145
+ */
146
+ registerChunk(metadata) {
147
+ const hash = this.hashContent(metadata.path);
148
+ const hashedFilename = this.hashFilename(metadata.path, hash);
149
+ this.chunks.set(metadata.id, {
150
+ id: metadata.id,
151
+ filename: metadata.path,
152
+ hashedFilename,
153
+ size: metadata.size,
154
+ isLazy: metadata.isLazy ?? false,
155
+ dependencies: metadata.dependencies,
156
+ });
157
+ }
158
+ /**
159
+ * Get registered chunks
160
+ */
161
+ getChunks() {
162
+ return Array.from(this.chunks.values());
163
+ }
164
+ /**
165
+ * Generate manifest for asset lookups
166
+ *
167
+ * Maps original filenames to hashed versions for SSR/SSG rendering
168
+ */
169
+ generateManifest() {
170
+ const manifest = {};
171
+ for (const chunk of this.chunks.values()) {
172
+ manifest[chunk.filename] = chunk.hashedFilename;
173
+ }
174
+ return manifest;
175
+ }
176
+ /**
177
+ * Generate HTML script tags with optimized loading strategies
178
+ */
179
+ generateScriptTags(chunks, options = {}) {
180
+ const tags = [];
181
+ for (const chunk of chunks) {
182
+ // Add preload hint for non-lazy chunks (before script tag)
183
+ if (options.preload && !chunk.isLazy) {
184
+ tags.push(
185
+ `<link rel="preload" as="script" href="/${chunk.hashedFilename}">`,
186
+ );
187
+ }
188
+ let tag = `<script type="module"`;
189
+ if (options.defer) tag += ` defer`;
190
+ if (options.async && chunk.isLazy) tag += ` async`;
191
+ if (options.integrity) {
192
+ const hash = this.hashContent(chunk.filename);
193
+ tag += ` integrity="sha256-${hash}"`;
194
+ }
195
+ tag += ` src="/${chunk.hashedFilename}"></script>`;
196
+ tags.push(tag);
197
+ }
198
+ return tags;
199
+ }
200
+ /**
201
+ * Generate cache-busting strategy documentation
202
+ */
203
+ generateCacheBustingStrategy() {
204
+ return `
205
+ # Cache-Busting Strategy
206
+
207
+ ## File Versioning
208
+ - Hash: ${this.hashLength}-character content-based hash
209
+ - Pattern: \`filename.{hash}.ext\`
210
+ - Example: \`app.a1b2c3d4e5.js\`
211
+
212
+ ## Cache Control Headers
213
+ - Hashed assets: \`public, max-age=31536000, immutable\`
214
+ - Main bundle: \`public, max-age=3600\`
215
+ - HTML pages: \`public, max-age=0, must-revalidate\`
216
+
217
+ ## Invalidation
218
+ - Content change → new hash → new filename → automatic cache miss
219
+ - No manual cache purging required
220
+ - CDN respects Cache-Control headers
221
+
222
+ ## Manifest
223
+ Reference \`manifest.json\` for filename lookups:
224
+ \`\`\`json
225
+ {
226
+ "app.js": "app.a1b2c3d4e5f6.js",
227
+ "vendor.js": "vendor.f6e5d4c3b2a1.js"
228
+ }
229
+ \`\`\`
230
+ `;
231
+ }
232
+ /**
233
+ * Helper: convert string to PascalCase
234
+ */
235
+ toPascalCase(str) {
236
+ return str
237
+ .split(/[-_]/)
238
+ .map((s) => s.charAt(0).toUpperCase() + s.slice(1))
239
+ .join("");
240
+ }
241
+ }
242
+ /**
243
+ * esbuild plugin for automatic script optimization
244
+ */
245
+ export function scriptOptimizerPlugin(config = {}, hashLength = 12) {
246
+ const optimizer = new ScriptOptimizer(config, hashLength);
247
+ return {
248
+ name: "script-optimizer",
249
+ setup(build) {
250
+ // Intercept onLoad to detect lazy modules
251
+ build.onLoad({ filter: /\.[jt]sx?$/ }, async (args) => {
252
+ try {
253
+ const fs = require("node:fs");
254
+ const source = fs.readFileSync(args.path, "utf8");
255
+ const lazyModules = optimizer.detectLazyModules(source);
256
+ if (lazyModules.size > 0) {
257
+ // Mark for lazy loading via build metadata
258
+ return {
259
+ contents: source,
260
+ loader: args.path.endsWith(".ts") ? "ts" : "js",
261
+ };
262
+ }
263
+ return undefined;
264
+ } catch {
265
+ return undefined;
266
+ }
267
+ });
268
+ // After bundling, generate manifest
269
+ build.onEnd((result) => {
270
+ if (result.errors.length === 0) {
271
+ const manifest = optimizer.generateManifest();
272
+ const manifestPath = require("node:path").join(
273
+ process.cwd(),
274
+ build.initialOptions.outdir || "dist",
275
+ "manifest.json",
276
+ );
277
+ require("node:fs").writeFileSync(
278
+ manifestPath,
279
+ JSON.stringify(manifest, null, 2),
280
+ );
281
+ }
282
+ });
283
+ },
284
+ };
285
+ }
@@ -1,21 +1,12 @@
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
- import { mkdirSync, rmSync, writeFileSync, existsSync, copyFileSync, readdirSync, statSync, } from "node:fs";
1
+ import {
2
+ mkdirSync,
3
+ rmSync,
4
+ writeFileSync,
5
+ existsSync,
6
+ copyFileSync,
7
+ readdirSync,
8
+ statSync,
9
+ } from "node:fs";
19
10
  import { join } from "node:path";
20
11
  import { scanRoutes } from "../core/routes/scan.js";
21
12
  import { resolveDistPath } from "../core/paths.js";
@@ -24,96 +15,99 @@ import { PageRenderer } from "./page-renderer.js";
24
15
  import { AssetHasher } from "./asset-hashing.js";
25
16
  import { createScssCompiler } from "../css/compiler.js";
26
17
  export class SSGPipeline {
27
- config;
28
- dist;
29
- constructor(config) {
30
- this.config = config;
31
- this.dist = resolveDistPath(config);
18
+ config;
19
+ dist;
20
+ constructor(config) {
21
+ this.config = config;
22
+ this.dist = resolveDistPath(config);
23
+ }
24
+ /**
25
+ * Run the full SSG Pipeline
26
+ */
27
+ async run() {
28
+ log.info("Starting SSG Pipeline (Enterprise Build)");
29
+ // 1. Prepare dist
30
+ this.prepareDist();
31
+ // 2. Process Assets
32
+ await this.processAssets();
33
+ // 3. Compile Styles
34
+ const cssPath = await this.compileStyles();
35
+ // 4. Render Pages
36
+ await this.renderPages();
37
+ log.info("Pipeline complete.");
38
+ }
39
+ prepareDist() {
40
+ rmSync(this.dist, { recursive: true, force: true });
41
+ mkdirSync(this.dist, { recursive: true });
42
+ }
43
+ async processAssets() {
44
+ const assetDir = join(process.cwd(), this.config.siteDir, "assets");
45
+ const targetDir = join(this.dist, "assets");
46
+ if (existsSync(assetDir)) {
47
+ this.copyRecursive(assetDir, targetDir);
48
+ log.info("Assets copied to dist");
32
49
  }
33
- /**
34
- * Run the full SSG Pipeline
35
- */
36
- async run() {
37
- log.info("Starting SSG Pipeline (Enterprise Build)");
38
- // 1. Prepare dist
39
- this.prepareDist();
40
- // 2. Process Assets
41
- await this.processAssets();
42
- // 3. Compile Styles
43
- const cssPath = await this.compileStyles();
44
- // 4. Render Pages
45
- await this.renderPages();
46
- log.info("Pipeline complete.");
50
+ }
51
+ async compileStyles() {
52
+ const scssPath = join(process.cwd(), this.config.css.globalScss);
53
+ if (!existsSync(scssPath)) return null;
54
+ const compiler = createScssCompiler();
55
+ const result = compiler.compile({
56
+ inputPath: scssPath,
57
+ minified: true,
58
+ });
59
+ if (result.error) {
60
+ log.error(`SCSS Failed: ${result.error}`);
61
+ return null;
47
62
  }
48
- prepareDist() {
49
- rmSync(this.dist, { recursive: true, force: true });
50
- mkdirSync(this.dist, { recursive: true });
63
+ const cssFile = join(this.dist, "styles.css");
64
+ writeFileSync(cssFile, result.css);
65
+ // Hash the CSS
66
+ const hashedName = AssetHasher.hashFile(cssFile);
67
+ log.info(`Styles compiled and hashed: ${hashedName}`);
68
+ return hashedName;
69
+ }
70
+ async renderPages() {
71
+ const routes = scanRoutes(this.config);
72
+ for (const r of routes) {
73
+ try {
74
+ const url = new URL("http://localhost" + r.urlPath);
75
+ const html = await PageRenderer.render(
76
+ {
77
+ config: this.config,
78
+ route: r,
79
+ url,
80
+ params: {},
81
+ query: {},
82
+ headers: {},
83
+ cookies: {},
84
+ },
85
+ true,
86
+ );
87
+ const outDir = join(
88
+ this.dist,
89
+ r.urlPath === "/" ? "" : r.urlPath.slice(1),
90
+ );
91
+ mkdirSync(outDir, { recursive: true });
92
+ writeFileSync(join(outDir, "index.html"), html);
93
+ log.info(`Rendered ${r.urlPath}`);
94
+ } catch (err) {
95
+ const errorMsg = err instanceof Error ? err.message : String(err);
96
+ log.error(`Failed to render ${r.urlPath}: ${errorMsg}`);
97
+ throw err;
98
+ }
51
99
  }
52
- async processAssets() {
53
- const assetDir = join(process.cwd(), this.config.siteDir, "assets");
54
- const targetDir = join(this.dist, "assets");
55
- if (existsSync(assetDir)) {
56
- this.copyRecursive(assetDir, targetDir);
57
- log.info("Assets copied to dist");
58
- }
59
- }
60
- async compileStyles() {
61
- const scssPath = join(process.cwd(), this.config.css.globalScss);
62
- if (!existsSync(scssPath))
63
- return null;
64
- const compiler = createScssCompiler();
65
- const result = compiler.compile({
66
- inputPath: scssPath,
67
- minified: true,
68
- });
69
- if (result.error) {
70
- log.error(`SCSS Failed: ${result.error}`);
71
- return null;
72
- }
73
- const cssFile = join(this.dist, "styles.css");
74
- writeFileSync(cssFile, result.css);
75
- // Hash the CSS
76
- const hashedName = AssetHasher.hashFile(cssFile);
77
- log.info(`Styles compiled and hashed: ${hashedName}`);
78
- return hashedName;
79
- }
80
- async renderPages() {
81
- const routes = scanRoutes(this.config);
82
- for (const r of routes) {
83
- try {
84
- const url = new URL("http://localhost" + r.urlPath);
85
- const html = await PageRenderer.render({
86
- config: this.config,
87
- route: r,
88
- url,
89
- params: {},
90
- query: {},
91
- headers: {},
92
- cookies: {},
93
- }, true);
94
- const outDir = join(this.dist, r.urlPath === "/" ? "" : r.urlPath.slice(1));
95
- mkdirSync(outDir, { recursive: true });
96
- writeFileSync(join(outDir, "index.html"), html);
97
- log.info(`Rendered ${r.urlPath}`);
98
- }
99
- catch (err) {
100
- const errorMsg = err instanceof Error ? err.message : String(err);
101
- log.error(`Failed to render ${r.urlPath}: ${errorMsg}`);
102
- throw err;
103
- }
104
- }
105
- }
106
- copyRecursive(src, dst) {
107
- mkdirSync(dst, { recursive: true });
108
- for (const name of readdirSync(src)) {
109
- const sp = join(src, name);
110
- const dp = join(dst, name);
111
- if (statSync(sp).isDirectory()) {
112
- this.copyRecursive(sp, dp);
113
- }
114
- else {
115
- copyFileSync(sp, dp);
116
- }
117
- }
100
+ }
101
+ copyRecursive(src, dst) {
102
+ mkdirSync(dst, { recursive: true });
103
+ for (const name of readdirSync(src)) {
104
+ const sp = join(src, name);
105
+ const dp = join(dst, name);
106
+ if (statSync(sp).isDirectory()) {
107
+ this.copyRecursive(sp, dp);
108
+ } else {
109
+ copyFileSync(sp, dp);
110
+ }
118
111
  }
112
+ }
119
113
  }