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
@@ -1,20 +1,13 @@
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
- */
1
+ // ANSI color codes
2
+ const colors = {
3
+ reset: "\x1b[0m",
4
+ dim: "\x1b[2m",
5
+ green: "\x1b[32m",
6
+ yellow: "\x1b[33m",
7
+ red: "\x1b[31m",
8
+ cyan: "\x1b[36m",
9
+ bold: "\x1b[1m",
10
+ };
18
11
  /**
19
12
  * Get current timestamp in ISO 8601 format.
20
13
  * Used to prefix all log messages with precise UTC time information for debugging and monitoring.
@@ -54,7 +47,9 @@ export const log = {
54
47
  * @example log.info("Server running on port 3000");
55
48
  */
56
49
  info(msg) {
57
- console.log(`[${ts()}] [INFO] ${msg}`);
50
+ console.log(
51
+ `${colors.dim}[${ts()}]${colors.reset} ${colors.cyan}[INFO]${colors.reset} ${msg}`,
52
+ );
58
53
  },
59
54
  /**
60
55
  * Logs a warning message with timestamp and [WARN] prefix.
@@ -65,7 +60,9 @@ export const log = {
65
60
  * @example log.warn("Configuration file not found, using defaults");
66
61
  */
67
62
  warn(msg) {
68
- console.warn(`[${ts()}] [WARN] ${msg}`);
63
+ console.warn(
64
+ `${colors.dim}[${ts()}]${colors.reset} ${colors.yellow}[WARN]${colors.reset} ${msg}`,
65
+ );
69
66
  },
70
67
  /**
71
68
  * Logs an error message with timestamp and [ERROR] prefix.
@@ -76,6 +73,8 @@ export const log = {
76
73
  * @example log.error("Failed to compile SCSS: syntax error on line 42");
77
74
  */
78
75
  error(msg) {
79
- console.error(`[${ts()}] [ERROR] ${msg}`);
76
+ console.error(
77
+ `${colors.dim}[${ts()}]${colors.reset} ${colors.red}[ERROR]${colors.reset} ${msg}`,
78
+ );
80
79
  },
81
80
  };
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Rate limiter for telemetry API
3
+ * Limits requests per IP address
4
+ */
5
+ class RateLimiter {
6
+ store = new Map();
7
+ limit = 10;
8
+ windowMs = 60 * 1000; // 60 seconds
9
+ check(ip) {
10
+ const now = Date.now();
11
+ const entry = this.store.get(ip);
12
+ // Reset if window has expired
13
+ if (!entry || now > entry.resetTime) {
14
+ this.store.set(ip, {
15
+ count: 1,
16
+ resetTime: now + this.windowMs,
17
+ });
18
+ return true;
19
+ }
20
+ // Check if limit exceeded
21
+ if (entry.count >= this.limit) {
22
+ return false;
23
+ }
24
+ // Increment and allow
25
+ entry.count++;
26
+ return true;
27
+ }
28
+ reset() {
29
+ this.store.clear();
30
+ }
31
+ }
32
+ export const rateLimiter = new RateLimiter();
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Telemetry payload validator
3
+ */
4
+ const MAX_STRING_LENGTH = 50;
5
+ const MAX_EVENTS = 100;
6
+ export function validatePayload(payload) {
7
+ // Handle array of events
8
+ if (Array.isArray(payload)) {
9
+ if (payload.length === 0) {
10
+ return { valid: false, error: "Event array cannot be empty" };
11
+ }
12
+ if (payload.length > MAX_EVENTS) {
13
+ return {
14
+ valid: false,
15
+ error: `Too many events (max ${MAX_EVENTS})`,
16
+ };
17
+ }
18
+ // Validate each event
19
+ for (const event of payload) {
20
+ const result = validateEvent(event);
21
+ if (!result.valid) {
22
+ return result;
23
+ }
24
+ }
25
+ return { valid: true };
26
+ }
27
+ // Handle single event
28
+ return validateEvent(payload);
29
+ }
30
+ function validateEvent(event) {
31
+ if (typeof event !== "object" || event === null) {
32
+ return { valid: false, error: "Event must be an object" };
33
+ }
34
+ const obj = event;
35
+ // Required fields
36
+ if (typeof obj.framework !== "string") {
37
+ return { valid: false, error: "Missing or invalid framework field" };
38
+ }
39
+ if (typeof obj.version !== "string") {
40
+ return { valid: false, error: "Missing or invalid version field" };
41
+ }
42
+ // Validate string lengths
43
+ if (obj.framework.length > MAX_STRING_LENGTH) {
44
+ return {
45
+ valid: false,
46
+ error: `framework exceeds max length of ${MAX_STRING_LENGTH}`,
47
+ };
48
+ }
49
+ if (obj.version.length > MAX_STRING_LENGTH) {
50
+ return {
51
+ valid: false,
52
+ error: `version exceeds max length of ${MAX_STRING_LENGTH}`,
53
+ };
54
+ }
55
+ // Optional string fields
56
+ for (const field of ["command", "os", "error"]) {
57
+ if (field in obj && typeof obj[field] === "string") {
58
+ if (obj[field].length > MAX_STRING_LENGTH) {
59
+ return {
60
+ valid: false,
61
+ error: `${field} exceeds max length of ${MAX_STRING_LENGTH}`,
62
+ };
63
+ }
64
+ }
65
+ }
66
+ return { valid: true };
67
+ }
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Jen.js Telemetry Client
3
+ *
4
+ * Collects telemetry events and sends them in batches.
5
+ * Usage:
6
+ * telemetry.track({ command: 'dev', os: 'win32' });
7
+ * // Events are sent automatically every 15 seconds or when batch is full
8
+ */
9
+ import { platform } from "os";
10
+ class TelemetryClient {
11
+ endpoint;
12
+ batchSize;
13
+ batchInterval;
14
+ disabled;
15
+ queue = [];
16
+ flushTimer = null;
17
+ version;
18
+ constructor(version, options = {}) {
19
+ this.version = version;
20
+ this.endpoint =
21
+ options.endpoint || "https://telemetry-six.vercel.app/telemetry";
22
+ this.batchSize = options.batchSize || 50;
23
+ this.batchInterval = options.batchInterval || 15 * 1000; // 15 seconds
24
+ this.disabled = options.disabled || process.env.TELEMETRY_DISABLED === "1";
25
+ }
26
+ track(event) {
27
+ if (this.disabled) {
28
+ return;
29
+ }
30
+ const telemetryEvent = {
31
+ framework: "jenjs",
32
+ version: this.version,
33
+ os: platform(),
34
+ ...event,
35
+ };
36
+ this.queue.push(telemetryEvent);
37
+ // Flush immediately if batch is full
38
+ if (this.queue.length >= this.batchSize) {
39
+ this.flush();
40
+ return;
41
+ }
42
+ // Schedule flush if not already scheduled
43
+ if (!this.flushTimer) {
44
+ this.flushTimer = setTimeout(() => this.flush(), this.batchInterval);
45
+ }
46
+ }
47
+ async flush() {
48
+ if (this.flushTimer) {
49
+ clearTimeout(this.flushTimer);
50
+ this.flushTimer = null;
51
+ }
52
+ if (this.queue.length === 0) {
53
+ return;
54
+ }
55
+ const events = this.queue;
56
+ this.queue = [];
57
+ try {
58
+ await this.send(events);
59
+ } catch (error) {
60
+ if (process.env.DEBUG_TELEMETRY) {
61
+ console.error("Telemetry send failed:", error);
62
+ }
63
+ // Silently fail - telemetry is fire-and-forget
64
+ }
65
+ }
66
+ async send(events) {
67
+ // Try using fetch if available (Node 18+)
68
+ if (typeof fetch !== "undefined") {
69
+ const response = await fetch(this.endpoint, {
70
+ method: "POST",
71
+ headers: { "Content-Type": "application/json" },
72
+ body: JSON.stringify(events),
73
+ });
74
+ if (!response.ok) {
75
+ throw new Error(`HTTP ${response.status}`);
76
+ }
77
+ return;
78
+ }
79
+ // Fallback to https module for older Node versions
80
+ await this.sendWithHttps(events);
81
+ }
82
+ async sendWithHttps(events) {
83
+ const https = await import("https");
84
+ const url = new URL(this.endpoint);
85
+ const body = JSON.stringify(events);
86
+ return new Promise((resolve, reject) => {
87
+ const options = {
88
+ hostname: url.hostname,
89
+ port: url.port,
90
+ path: url.pathname,
91
+ method: "POST",
92
+ headers: {
93
+ "Content-Type": "application/json",
94
+ "Content-Length": Buffer.byteLength(body),
95
+ },
96
+ };
97
+ const req = https.request(options, (res) => {
98
+ if (res.statusCode !== 200) {
99
+ reject(new Error(`HTTP ${res.statusCode}`));
100
+ } else {
101
+ resolve();
102
+ }
103
+ res.on("data", () => {});
104
+ });
105
+ req.on("error", reject);
106
+ req.write(body);
107
+ req.end();
108
+ });
109
+ }
110
+ disable() {
111
+ this.disabled = true;
112
+ this.queue = [];
113
+ }
114
+ enable() {
115
+ this.disabled = false;
116
+ }
117
+ }
118
+ // Export factory function
119
+ export function createTelemetry(version, options) {
120
+ return new TelemetryClient(version, options);
121
+ }
@@ -0,0 +1,46 @@
1
+ import { describe, it, expect, beforeEach, vi } from "vitest";
2
+ import { rateLimiter } from "../api/rate-limiter.js";
3
+ describe("Rate Limiter", () => {
4
+ beforeEach(() => {
5
+ vi.clearAllMocks();
6
+ });
7
+ it("should allow requests within limit", () => {
8
+ const ip = "192.168.1.1";
9
+ for (let i = 0; i < 10; i++) {
10
+ expect(rateLimiter.check(ip)).toBe(true);
11
+ }
12
+ });
13
+ it("should block requests exceeding limit", () => {
14
+ const ip = "192.168.1.2";
15
+ // First 10 allowed
16
+ for (let i = 0; i < 10; i++) {
17
+ expect(rateLimiter.check(ip)).toBe(true);
18
+ }
19
+ // 11th blocked
20
+ expect(rateLimiter.check(ip)).toBe(false);
21
+ });
22
+ it("should allow different IPs independently", () => {
23
+ const ip1 = "192.168.1.100";
24
+ const ip2 = "192.168.1.101";
25
+ for (let i = 0; i < 10; i++) {
26
+ expect(rateLimiter.check(ip1)).toBe(true);
27
+ expect(rateLimiter.check(ip2)).toBe(true);
28
+ }
29
+ expect(rateLimiter.check(ip1)).toBe(false);
30
+ expect(rateLimiter.check(ip2)).toBe(false);
31
+ });
32
+ it("should reset limits after window expires", () => {
33
+ vi.useFakeTimers();
34
+ const ip = "192.168.1.200";
35
+ // Fill limit
36
+ for (let i = 0; i < 10; i++) {
37
+ expect(rateLimiter.check(ip)).toBe(true);
38
+ }
39
+ expect(rateLimiter.check(ip)).toBe(false);
40
+ // Advance time past window
41
+ vi.advanceTimersByTime(61 * 1000); // 61 seconds
42
+ // Should allow again
43
+ expect(rateLimiter.check(ip)).toBe(true);
44
+ vi.useRealTimers();
45
+ });
46
+ });
@@ -0,0 +1,62 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { validatePayload } from "../api/validator.js";
3
+ describe("Telemetry Validator", () => {
4
+ it("should accept valid event", () => {
5
+ const payload = {
6
+ framework: "jenjs",
7
+ version: "0.1.0",
8
+ command: "dev",
9
+ os: "win32",
10
+ };
11
+ const result = validatePayload(payload);
12
+ expect(result.valid).toBe(true);
13
+ });
14
+ it("should accept array of events", () => {
15
+ const payload = [
16
+ { framework: "jenjs", version: "0.1.0" },
17
+ { framework: "jenjs", version: "0.1.0", command: "build" },
18
+ ];
19
+ const result = validatePayload(payload);
20
+ expect(result.valid).toBe(true);
21
+ });
22
+ it("should reject missing framework", () => {
23
+ const payload = { version: "0.1.0" };
24
+ const result = validatePayload(payload);
25
+ expect(result.valid).toBe(false);
26
+ expect(result.error).toMatch(/framework/i);
27
+ });
28
+ it("should reject missing version", () => {
29
+ const payload = { framework: "jenjs" };
30
+ const result = validatePayload(payload);
31
+ expect(result.valid).toBe(false);
32
+ expect(result.error).toMatch(/version/i);
33
+ });
34
+ it("should reject non-string framework", () => {
35
+ const payload = { framework: 123, version: "0.1.0" };
36
+ const result = validatePayload(payload);
37
+ expect(result.valid).toBe(false);
38
+ });
39
+ it("should reject fields that are too long", () => {
40
+ const payload = {
41
+ framework: "jenjs",
42
+ version: "0.1.0",
43
+ command: "x".repeat(100),
44
+ };
45
+ const result = validatePayload(payload);
46
+ expect(result.valid).toBe(false);
47
+ });
48
+ it("should reject empty event list", () => {
49
+ const payload = [];
50
+ const result = validatePayload(payload);
51
+ expect(result.valid).toBe(false);
52
+ });
53
+ it("should reject too many events", () => {
54
+ const payload = Array(101).fill({
55
+ framework: "jenjs",
56
+ version: "0.1.0",
57
+ });
58
+ const result = validatePayload(payload);
59
+ expect(result.valid).toBe(false);
60
+ expect(result.error).toMatch(/too many/i);
61
+ });
62
+ });