@jasonshimmy/vite-plugin-cer-app 0.23.1 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (397) hide show
  1. package/dist/cli/checks/lighthouse.d.ts +26 -0
  2. package/dist/cli/checks/lighthouse.d.ts.map +1 -0
  3. package/dist/cli/checks/lighthouse.js +121 -0
  4. package/dist/cli/checks/lighthouse.js.map +1 -0
  5. package/dist/cli/checks/links.d.ts +12 -0
  6. package/dist/cli/checks/links.d.ts.map +1 -0
  7. package/dist/cli/checks/links.js +89 -0
  8. package/dist/cli/checks/links.js.map +1 -0
  9. package/dist/cli/checks/performance.d.ts +17 -0
  10. package/dist/cli/checks/performance.d.ts.map +1 -0
  11. package/dist/cli/checks/performance.js +61 -0
  12. package/dist/cli/checks/performance.js.map +1 -0
  13. package/dist/cli/commands/check.d.ts +3 -0
  14. package/dist/cli/commands/check.d.ts.map +1 -0
  15. package/dist/cli/commands/check.js +85 -0
  16. package/dist/cli/commands/check.js.map +1 -0
  17. package/dist/cli/commands/preview.d.ts.map +1 -1
  18. package/dist/cli/commands/preview.js +37 -4
  19. package/dist/cli/commands/preview.js.map +1 -1
  20. package/dist/cli/create/index.d.ts +11 -1
  21. package/dist/cli/create/index.d.ts.map +1 -1
  22. package/dist/cli/create/index.js +135 -65
  23. package/dist/cli/create/index.js.map +1 -1
  24. package/dist/cli/create/templates/spa/package.json.tpl +5 -3
  25. package/dist/cli/create/templates/ssg/cer.config.ts.tpl +2 -0
  26. package/dist/cli/create/templates/ssg/package.json.tpl +5 -3
  27. package/dist/cli/create/templates/ssr/package.json.tpl +5 -3
  28. package/dist/cli/index.js +2 -0
  29. package/dist/cli/index.js.map +1 -1
  30. package/dist/index.d.ts +3 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/plugin/build-ssg.d.ts +22 -4
  33. package/dist/plugin/build-ssg.d.ts.map +1 -1
  34. package/dist/plugin/build-ssg.js +273 -13
  35. package/dist/plugin/build-ssg.js.map +1 -1
  36. package/dist/plugin/content/parser.d.ts.map +1 -1
  37. package/dist/plugin/content/parser.js +54 -10
  38. package/dist/plugin/content/parser.js.map +1 -1
  39. package/dist/plugin/dev-server.d.ts +6 -1
  40. package/dist/plugin/dev-server.d.ts.map +1 -1
  41. package/dist/plugin/dev-server.js.map +1 -1
  42. package/dist/plugin/dts-generator.d.ts.map +1 -1
  43. package/dist/plugin/dts-generator.js +50 -8
  44. package/dist/plugin/dts-generator.js.map +1 -1
  45. package/dist/plugin/generated-dir.d.ts +2 -0
  46. package/dist/plugin/generated-dir.d.ts.map +1 -1
  47. package/dist/plugin/generated-dir.js +17 -6
  48. package/dist/plugin/generated-dir.js.map +1 -1
  49. package/dist/plugin/html-post-process.d.ts +35 -0
  50. package/dist/plugin/html-post-process.d.ts.map +1 -0
  51. package/dist/plugin/html-post-process.js +112 -0
  52. package/dist/plugin/html-post-process.js.map +1 -0
  53. package/dist/plugin/index.d.ts +9 -0
  54. package/dist/plugin/index.d.ts.map +1 -1
  55. package/dist/plugin/index.js +89 -14
  56. package/dist/plugin/index.js.map +1 -1
  57. package/dist/plugin/transforms/auto-import.d.ts.map +1 -1
  58. package/dist/plugin/transforms/auto-import.js +7 -0
  59. package/dist/plugin/transforms/auto-import.js.map +1 -1
  60. package/dist/plugin/transforms/prune-runtime-css.d.ts +8 -0
  61. package/dist/plugin/transforms/prune-runtime-css.d.ts.map +1 -0
  62. package/dist/plugin/transforms/prune-runtime-css.js +40 -0
  63. package/dist/plugin/transforms/prune-runtime-css.js.map +1 -0
  64. package/dist/runtime/app-template.d.ts +1 -4
  65. package/dist/runtime/app-template.d.ts.map +1 -1
  66. package/dist/runtime/app-template.js +211 -40
  67. package/dist/runtime/app-template.js.map +1 -1
  68. package/dist/runtime/composables/index.d.ts +4 -0
  69. package/dist/runtime/composables/index.d.ts.map +1 -1
  70. package/dist/runtime/composables/index.js +2 -0
  71. package/dist/runtime/composables/index.js.map +1 -1
  72. package/dist/runtime/composables/use-active-headings.d.ts +24 -0
  73. package/dist/runtime/composables/use-active-headings.d.ts.map +1 -0
  74. package/dist/runtime/composables/use-active-headings.js +112 -0
  75. package/dist/runtime/composables/use-active-headings.js.map +1 -0
  76. package/dist/runtime/composables/use-content-page.d.ts +45 -0
  77. package/dist/runtime/composables/use-content-page.d.ts.map +1 -0
  78. package/dist/runtime/composables/use-content-page.js +179 -0
  79. package/dist/runtime/composables/use-content-page.js.map +1 -0
  80. package/dist/runtime/composables/use-content-search.d.ts.map +1 -1
  81. package/dist/runtime/composables/use-content-search.js +1 -5
  82. package/dist/runtime/composables/use-content-search.js.map +1 -1
  83. package/dist/runtime/composables/use-fetch.d.ts +2 -1
  84. package/dist/runtime/composables/use-fetch.d.ts.map +1 -1
  85. package/dist/runtime/composables/use-fetch.js +112 -43
  86. package/dist/runtime/composables/use-fetch.js.map +1 -1
  87. package/dist/runtime/composables/use-head.d.ts.map +1 -1
  88. package/dist/runtime/composables/use-head.js +30 -6
  89. package/dist/runtime/composables/use-head.js.map +1 -1
  90. package/dist/runtime/composables/use-route.d.ts.map +1 -1
  91. package/dist/runtime/composables/use-route.js +39 -11
  92. package/dist/runtime/composables/use-route.js.map +1 -1
  93. package/dist/runtime/content/client.js +2 -2
  94. package/dist/runtime/content/client.js.map +1 -1
  95. package/dist/runtime/entry-server-template.d.ts +16 -1
  96. package/dist/runtime/entry-server-template.d.ts.map +1 -1
  97. package/dist/runtime/entry-server-template.js +120 -13
  98. package/dist/runtime/entry-server-template.js.map +1 -1
  99. package/dist/types/config.d.ts +53 -4
  100. package/dist/types/config.d.ts.map +1 -1
  101. package/dist/types/config.js.map +1 -1
  102. package/dist/types/middleware.d.ts +2 -2
  103. package/dist/types/middleware.d.ts.map +1 -1
  104. package/package.json +22 -19
  105. package/.github/copilot-instructions.md +0 -169
  106. package/.github/workflows/publish.yml +0 -257
  107. package/.nvmrc +0 -1
  108. package/CHANGELOG.md +0 -232
  109. package/CLAUDE.md +0 -113
  110. package/commits.txt +0 -1
  111. package/cypress.config.ts +0 -16
  112. package/docs/authentication.md +0 -285
  113. package/docs/cli.md +0 -324
  114. package/docs/components.md +0 -237
  115. package/docs/composables.md +0 -907
  116. package/docs/configuration.md +0 -667
  117. package/docs/content.md +0 -570
  118. package/docs/data-loading.md +0 -336
  119. package/docs/getting-started.md +0 -237
  120. package/docs/head-management.md +0 -212
  121. package/docs/i18n.md +0 -159
  122. package/docs/layouts.md +0 -224
  123. package/docs/middleware.md +0 -234
  124. package/docs/plugins.md +0 -170
  125. package/docs/rendering-modes.md +0 -377
  126. package/docs/routing.md +0 -485
  127. package/docs/server-api.md +0 -253
  128. package/docs/testing.md +0 -455
  129. package/docs/use-fetch.md +0 -183
  130. package/e2e/cypress/e2e/api.cy.ts +0 -123
  131. package/e2e/cypress/e2e/async-component.cy.ts +0 -27
  132. package/e2e/cypress/e2e/component-splitting.cy.ts +0 -50
  133. package/e2e/cypress/e2e/content.cy.ts +0 -425
  134. package/e2e/cypress/e2e/cookie.cy.ts +0 -85
  135. package/e2e/cypress/e2e/data.cy.ts +0 -158
  136. package/e2e/cypress/e2e/error-boundary.cy.ts +0 -88
  137. package/e2e/cypress/e2e/fouc.cy.ts +0 -254
  138. package/e2e/cypress/e2e/group-meta.cy.ts +0 -36
  139. package/e2e/cypress/e2e/head.cy.ts +0 -89
  140. package/e2e/cypress/e2e/i18n.cy.ts +0 -79
  141. package/e2e/cypress/e2e/interactive.cy.ts +0 -137
  142. package/e2e/cypress/e2e/isr-nested-runtime.cy.ts +0 -102
  143. package/e2e/cypress/e2e/jit-css-custom-colors.cy.ts +0 -43
  144. package/e2e/cypress/e2e/middleware-chain.cy.ts +0 -89
  145. package/e2e/cypress/e2e/middleware-status.cy.ts +0 -30
  146. package/e2e/cypress/e2e/middleware.cy.ts +0 -45
  147. package/e2e/cypress/e2e/navigate.cy.ts +0 -39
  148. package/e2e/cypress/e2e/observability.cy.ts +0 -77
  149. package/e2e/cypress/e2e/per-route-error.cy.ts +0 -42
  150. package/e2e/cypress/e2e/per-route-render.cy.ts +0 -70
  151. package/e2e/cypress/e2e/preview-hardening.cy.ts +0 -88
  152. package/e2e/cypress/e2e/routes.cy.ts +0 -128
  153. package/e2e/cypress/e2e/seo-meta.cy.ts +0 -108
  154. package/e2e/cypress/e2e/server-middleware.cy.ts +0 -46
  155. package/e2e/cypress/e2e/session-rotation.cy.ts +0 -25
  156. package/e2e/cypress/e2e/session.cy.ts +0 -73
  157. package/e2e/cypress/e2e/ssr-render-error.cy.ts +0 -68
  158. package/e2e/cypress/e2e/synthetic-404.cy.ts +0 -45
  159. package/e2e/cypress/e2e/use-page-data.cy.ts +0 -122
  160. package/e2e/cypress/e2e/use-state.cy.ts +0 -138
  161. package/e2e/cypress/support/commands.ts +0 -120
  162. package/e2e/cypress/support/e2e.ts +0 -10
  163. package/e2e/cypress/tsconfig.json +0 -14
  164. package/e2e/kitchen-sink/app/components/ks-badge.ts +0 -8
  165. package/e2e/kitchen-sink/app/composables/useKsCounter.ts +0 -9
  166. package/e2e/kitchen-sink/app/error.ts +0 -18
  167. package/e2e/kitchen-sink/app/layouts/admin.ts +0 -13
  168. package/e2e/kitchen-sink/app/layouts/default.ts +0 -25
  169. package/e2e/kitchen-sink/app/layouts/group.ts +0 -9
  170. package/e2e/kitchen-sink/app/layouts/minimal.ts +0 -7
  171. package/e2e/kitchen-sink/app/loading.ts +0 -9
  172. package/e2e/kitchen-sink/app/middleware/auth.ts +0 -9
  173. package/e2e/kitchen-sink/app/middleware/custom-log.ts +0 -4
  174. package/e2e/kitchen-sink/app/middleware/group-auth.ts +0 -7
  175. package/e2e/kitchen-sink/app/middleware/logger.ts +0 -14
  176. package/e2e/kitchen-sink/app/pages/(auth)/login.ts +0 -13
  177. package/e2e/kitchen-sink/app/pages/(auth)/protected.ts +0 -16
  178. package/e2e/kitchen-sink/app/pages/404.ts +0 -9
  179. package/e2e/kitchen-sink/app/pages/about.ts +0 -17
  180. package/e2e/kitchen-sink/app/pages/admin/_layout.ts +0 -1
  181. package/e2e/kitchen-sink/app/pages/admin/dashboard.ts +0 -11
  182. package/e2e/kitchen-sink/app/pages/async-component-error-test.ts +0 -18
  183. package/e2e/kitchen-sink/app/pages/async-component-test.ts +0 -18
  184. package/e2e/kitchen-sink/app/pages/blog/[slug].ts +0 -59
  185. package/e2e/kitchen-sink/app/pages/blog/index.ts +0 -51
  186. package/e2e/kitchen-sink/app/pages/content-blog.ts +0 -37
  187. package/e2e/kitchen-sink/app/pages/content-doc.ts +0 -42
  188. package/e2e/kitchen-sink/app/pages/content-fallback.ts +0 -36
  189. package/e2e/kitchen-sink/app/pages/content-guides.ts +0 -35
  190. package/e2e/kitchen-sink/app/pages/content-index.ts +0 -39
  191. package/e2e/kitchen-sink/app/pages/content-search.ts +0 -36
  192. package/e2e/kitchen-sink/app/pages/cookie-test.ts +0 -22
  193. package/e2e/kitchen-sink/app/pages/counter.ts +0 -17
  194. package/e2e/kitchen-sink/app/pages/group-auth-blocked.ts +0 -9
  195. package/e2e/kitchen-sink/app/pages/group-meta-test/_layout.ts +0 -6
  196. package/e2e/kitchen-sink/app/pages/group-meta-test/custom-mw.ts +0 -14
  197. package/e2e/kitchen-sink/app/pages/group-meta-test/page.ts +0 -9
  198. package/e2e/kitchen-sink/app/pages/group-meta-test/protected.ts +0 -8
  199. package/e2e/kitchen-sink/app/pages/head.ts +0 -20
  200. package/e2e/kitchen-sink/app/pages/i18n-test.ts +0 -14
  201. package/e2e/kitchen-sink/app/pages/index.ts +0 -27
  202. package/e2e/kitchen-sink/app/pages/isr-test.ts +0 -17
  203. package/e2e/kitchen-sink/app/pages/items/[id].ts +0 -20
  204. package/e2e/kitchen-sink/app/pages/jit-css-custom-colors-test.ts +0 -14
  205. package/e2e/kitchen-sink/app/pages/loader-error-test.ts +0 -13
  206. package/e2e/kitchen-sink/app/pages/loader-props-test.ts +0 -19
  207. package/e2e/kitchen-sink/app/pages/loader-response-error-test.ts +0 -13
  208. package/e2e/kitchen-sink/app/pages/middleware-chain-test.ts +0 -12
  209. package/e2e/kitchen-sink/app/pages/middleware-status-test.ts +0 -9
  210. package/e2e/kitchen-sink/app/pages/navigate-test.ts +0 -16
  211. package/e2e/kitchen-sink/app/pages/observability-test.ts +0 -25
  212. package/e2e/kitchen-sink/app/pages/per-route-error-test.error.ts +0 -13
  213. package/e2e/kitchen-sink/app/pages/per-route-error-test.ts +0 -15
  214. package/e2e/kitchen-sink/app/pages/plugin-dsd-test.ts +0 -10
  215. package/e2e/kitchen-sink/app/pages/render-error-test.ts +0 -12
  216. package/e2e/kitchen-sink/app/pages/render-server-test.ts +0 -12
  217. package/e2e/kitchen-sink/app/pages/render-spa-test.ts +0 -12
  218. package/e2e/kitchen-sink/app/pages/route-info.ts +0 -14
  219. package/e2e/kitchen-sink/app/pages/seo-test.ts +0 -23
  220. package/e2e/kitchen-sink/app/pages/session-rotation-test.ts +0 -25
  221. package/e2e/kitchen-sink/app/pages/use-state-test.ts +0 -37
  222. package/e2e/kitchen-sink/app/plugins/01.setup.ts +0 -7
  223. package/e2e/kitchen-sink/app/plugins/02.ks-plugin-components.ts +0 -27
  224. package/e2e/kitchen-sink/cer-auto-imports.d.ts +0 -51
  225. package/e2e/kitchen-sink/cer-env.d.ts +0 -35
  226. package/e2e/kitchen-sink/cer-tsconfig.json +0 -30
  227. package/e2e/kitchen-sink/cer.config.ts +0 -43
  228. package/e2e/kitchen-sink/content/01.guides/01.index.md +0 -8
  229. package/e2e/kitchen-sink/content/01.guides/02.intro.md +0 -8
  230. package/e2e/kitchen-sink/content/01.guides/10.advanced.md +0 -8
  231. package/e2e/kitchen-sink/content/blog/2026-04-01-hello.md +0 -26
  232. package/e2e/kitchen-sink/content/blog/2026-04-02-draft.md +0 -10
  233. package/e2e/kitchen-sink/content/blog/index.md +0 -8
  234. package/e2e/kitchen-sink/content/blog/no-frontmatter.md +0 -7
  235. package/e2e/kitchen-sink/content/docs/getting-started.md +0 -48
  236. package/e2e/kitchen-sink/content/index.md +0 -16
  237. package/e2e/kitchen-sink/server/api/echo.ts +0 -12
  238. package/e2e/kitchen-sink/server/api/health.ts +0 -3
  239. package/e2e/kitchen-sink/server/api/posts/[slug].ts +0 -11
  240. package/e2e/kitchen-sink/server/api/posts/index.ts +0 -5
  241. package/e2e/kitchen-sink/server/api/session.ts +0 -23
  242. package/e2e/kitchen-sink/server/data/posts.ts +0 -21
  243. package/e2e/kitchen-sink/server/middleware/01-headers.ts +0 -6
  244. package/e2e/kitchen-sink/server/middleware/02-status-test.ts +0 -10
  245. package/e2e/kitchen-sink/tsconfig.json +0 -3
  246. package/e2e/scripts/clean.mjs +0 -14
  247. package/eslint.config.ts +0 -22
  248. package/src/__tests__/cli/adapters/cloudflare-worker.integration.test.ts +0 -132
  249. package/src/__tests__/cli/adapters/cloudflare.test.ts +0 -332
  250. package/src/__tests__/cli/adapters/netlify-bridge.integration.test.ts +0 -139
  251. package/src/__tests__/cli/adapters/netlify.test.ts +0 -286
  252. package/src/__tests__/cli/adapters/vercel-launcher.integration.test.ts +0 -129
  253. package/src/__tests__/cli/adapters/vercel.test.ts +0 -263
  254. package/src/__tests__/cli/preview-hardening.test.ts +0 -265
  255. package/src/__tests__/cli/preview-isr.test.ts +0 -320
  256. package/src/__tests__/index.test.ts +0 -21
  257. package/src/__tests__/plugin/app-template.test.ts +0 -112
  258. package/src/__tests__/plugin/build-ssg-render.test.ts +0 -155
  259. package/src/__tests__/plugin/build-ssg.test.ts +0 -598
  260. package/src/__tests__/plugin/build-ssr.test.ts +0 -192
  261. package/src/__tests__/plugin/cer-app-plugin.test.ts +0 -552
  262. package/src/__tests__/plugin/content/emitter.test.ts +0 -117
  263. package/src/__tests__/plugin/content/loader.test.ts +0 -154
  264. package/src/__tests__/plugin/content/parser.test.ts +0 -381
  265. package/src/__tests__/plugin/content/path-utils.test.ts +0 -69
  266. package/src/__tests__/plugin/content/search.test.ts +0 -119
  267. package/src/__tests__/plugin/dev-server.test.ts +0 -813
  268. package/src/__tests__/plugin/dts-generator.test.ts +0 -394
  269. package/src/__tests__/plugin/entry-server-template.test.ts +0 -385
  270. package/src/__tests__/plugin/generated-dir.test.ts +0 -144
  271. package/src/__tests__/plugin/path-utils.test.ts +0 -411
  272. package/src/__tests__/plugin/resolve-config.test.ts +0 -200
  273. package/src/__tests__/plugin/scanner.test.ts +0 -186
  274. package/src/__tests__/plugin/transforms/auto-import.test.ts +0 -510
  275. package/src/__tests__/plugin/transforms/head-inject.test.ts +0 -178
  276. package/src/__tests__/plugin/virtual/composables.test.ts +0 -57
  277. package/src/__tests__/plugin/virtual/content-components.test.ts +0 -66
  278. package/src/__tests__/plugin/virtual/error.test.ts +0 -71
  279. package/src/__tests__/plugin/virtual/layouts.test.ts +0 -70
  280. package/src/__tests__/plugin/virtual/loading.test.ts +0 -72
  281. package/src/__tests__/plugin/virtual/middleware.test.ts +0 -83
  282. package/src/__tests__/plugin/virtual/plugins.test.ts +0 -129
  283. package/src/__tests__/plugin/virtual/routes.test.ts +0 -884
  284. package/src/__tests__/plugin/virtual/server-api.test.ts +0 -164
  285. package/src/__tests__/plugin/virtual/server-middleware.test.ts +0 -102
  286. package/src/__tests__/runtime/app-template.test.ts +0 -198
  287. package/src/__tests__/runtime/define-middleware.test.ts +0 -64
  288. package/src/__tests__/runtime/define-server-middleware.test.ts +0 -54
  289. package/src/__tests__/runtime/entry-client-template.test.ts +0 -61
  290. package/src/__tests__/runtime/isr-handler.test.ts +0 -338
  291. package/src/__tests__/runtime/oauth/handler.test.ts +0 -358
  292. package/src/__tests__/runtime/oauth/providers.test.ts +0 -47
  293. package/src/__tests__/runtime/oauth-index.test.ts +0 -43
  294. package/src/__tests__/runtime/use-auth.test.ts +0 -169
  295. package/src/__tests__/runtime/use-content-search-composable.test.ts +0 -405
  296. package/src/__tests__/runtime/use-content-search.test.ts +0 -163
  297. package/src/__tests__/runtime/use-content.test.ts +0 -226
  298. package/src/__tests__/runtime/use-cookie.test.ts +0 -277
  299. package/src/__tests__/runtime/use-fetch-component.test.ts +0 -214
  300. package/src/__tests__/runtime/use-fetch.test.ts +0 -377
  301. package/src/__tests__/runtime/use-head.test.ts +0 -266
  302. package/src/__tests__/runtime/use-inject-client.test.ts +0 -67
  303. package/src/__tests__/runtime/use-inject.test.ts +0 -66
  304. package/src/__tests__/runtime/use-locale.test.ts +0 -152
  305. package/src/__tests__/runtime/use-navigate.test.ts +0 -121
  306. package/src/__tests__/runtime/use-page-data.test.ts +0 -298
  307. package/src/__tests__/runtime/use-route.test.ts +0 -156
  308. package/src/__tests__/runtime/use-runtime-config.test.ts +0 -182
  309. package/src/__tests__/runtime/use-seo-meta.test.ts +0 -109
  310. package/src/__tests__/runtime/use-session.test.ts +0 -320
  311. package/src/__tests__/runtime/use-state.test.ts +0 -340
  312. package/src/__tests__/types/config.test.ts +0 -18
  313. package/src/cli/adapters/cloudflare.ts +0 -335
  314. package/src/cli/adapters/netlify.ts +0 -326
  315. package/src/cli/adapters/vercel.ts +0 -311
  316. package/src/cli/commands/adapt.ts +0 -84
  317. package/src/cli/commands/build.ts +0 -165
  318. package/src/cli/commands/dev.ts +0 -125
  319. package/src/cli/commands/generate.ts +0 -91
  320. package/src/cli/commands/preview-isr.ts +0 -172
  321. package/src/cli/commands/preview.ts +0 -489
  322. package/src/cli/create/index.ts +0 -275
  323. package/src/cli/create/templates/shared/.gitignore.tpl +0 -25
  324. package/src/cli/create/templates/shared/app/layouts/default.ts.tpl +0 -15
  325. package/src/cli/create/templates/shared/app/pages/index.ts.tpl +0 -8
  326. package/src/cli/create/templates/shared/index.html.tpl +0 -12
  327. package/src/cli/create/templates/shared/tsconfig.json.tpl +0 -6
  328. package/src/cli/create/templates/spa/cer.config.ts.tpl +0 -6
  329. package/src/cli/create/templates/spa/package.json.tpl +0 -18
  330. package/src/cli/create/templates/ssg/cer.config.ts.tpl +0 -10
  331. package/src/cli/create/templates/ssg/package.json.tpl +0 -19
  332. package/src/cli/create/templates/ssr/cer.config.ts.tpl +0 -6
  333. package/src/cli/create/templates/ssr/package.json.tpl +0 -18
  334. package/src/cli/index.ts +0 -22
  335. package/src/index.ts +0 -20
  336. package/src/plugin/build-ssg.ts +0 -336
  337. package/src/plugin/build-ssr.ts +0 -134
  338. package/src/plugin/content/emitter.ts +0 -50
  339. package/src/plugin/content/index.ts +0 -233
  340. package/src/plugin/content/parser.ts +0 -259
  341. package/src/plugin/content/path-utils.ts +0 -55
  342. package/src/plugin/content/scanner.ts +0 -26
  343. package/src/plugin/content/search.ts +0 -28
  344. package/src/plugin/dev-server.ts +0 -377
  345. package/src/plugin/dts-generator.ts +0 -273
  346. package/src/plugin/generated-dir.ts +0 -121
  347. package/src/plugin/index.ts +0 -553
  348. package/src/plugin/path-utils.ts +0 -186
  349. package/src/plugin/scanner.ts +0 -65
  350. package/src/plugin/transforms/auto-import.ts +0 -206
  351. package/src/plugin/transforms/head-inject.ts +0 -161
  352. package/src/plugin/virtual/composables.ts +0 -28
  353. package/src/plugin/virtual/content-components.ts +0 -83
  354. package/src/plugin/virtual/error.ts +0 -34
  355. package/src/plugin/virtual/layouts.ts +0 -41
  356. package/src/plugin/virtual/loading.ts +0 -32
  357. package/src/plugin/virtual/middleware.ts +0 -45
  358. package/src/plugin/virtual/plugins.ts +0 -46
  359. package/src/plugin/virtual/routes.ts +0 -514
  360. package/src/plugin/virtual/server-api.ts +0 -85
  361. package/src/plugin/virtual/server-middleware.ts +0 -44
  362. package/src/runtime/app-template.ts +0 -380
  363. package/src/runtime/composables/define-middleware.ts +0 -17
  364. package/src/runtime/composables/define-server-middleware.ts +0 -18
  365. package/src/runtime/composables/index.ts +0 -27
  366. package/src/runtime/composables/use-auth.ts +0 -125
  367. package/src/runtime/composables/use-content-search.ts +0 -205
  368. package/src/runtime/composables/use-content.ts +0 -146
  369. package/src/runtime/composables/use-cookie.ts +0 -135
  370. package/src/runtime/composables/use-fetch.ts +0 -438
  371. package/src/runtime/composables/use-head.ts +0 -212
  372. package/src/runtime/composables/use-inject.ts +0 -49
  373. package/src/runtime/composables/use-locale.ts +0 -109
  374. package/src/runtime/composables/use-navigate.ts +0 -58
  375. package/src/runtime/composables/use-page-data.ts +0 -93
  376. package/src/runtime/composables/use-route.ts +0 -71
  377. package/src/runtime/composables/use-runtime-config.ts +0 -123
  378. package/src/runtime/composables/use-seo-meta.ts +0 -80
  379. package/src/runtime/composables/use-session.ts +0 -186
  380. package/src/runtime/composables/use-state.ts +0 -92
  381. package/src/runtime/content/client.ts +0 -168
  382. package/src/runtime/entry-client-template.ts +0 -39
  383. package/src/runtime/entry-server-template.ts +0 -493
  384. package/src/runtime/isr-handler.ts +0 -184
  385. package/src/runtime/oauth/handler.ts +0 -407
  386. package/src/runtime/oauth/index.ts +0 -49
  387. package/src/runtime/oauth/providers.ts +0 -38
  388. package/src/types/api.ts +0 -40
  389. package/src/types/config.ts +0 -371
  390. package/src/types/content.ts +0 -66
  391. package/src/types/index.ts +0 -7
  392. package/src/types/middleware.ts +0 -63
  393. package/src/types/page.ts +0 -117
  394. package/src/types/plugin.ts +0 -34
  395. package/tsconfig.build.json +0 -10
  396. package/tsconfig.json +0 -19
  397. package/vitest.config.ts +0 -33
@@ -1,371 +0,0 @@
1
- import type { RouterConfig } from '@jasonshimmy/custom-elements-runtime/router'
2
- import type { IncomingMessage } from 'node:http'
3
-
4
- // ─── Observability hook context types ─────────────────────────────────────────
5
-
6
- /**
7
- * Context passed to the `onError` hook.
8
- * `type` indicates which layer the error originated from so reporters can
9
- * tag or route errors appropriately.
10
- */
11
- export interface ErrorHookContext {
12
- /** The layer that threw the error. */
13
- type: 'loader' | 'render' | 'middleware'
14
- /** The request URL pathname (e.g. `/about`). */
15
- path: string
16
- /** The raw Node.js incoming request. */
17
- req: IncomingMessage
18
- }
19
-
20
- /**
21
- * Context passed to the `onRequest` hook.
22
- * Fires at the start of every SSR request, before the route is matched
23
- * or the loader runs.
24
- */
25
- export interface RequestHookContext {
26
- /** The request URL pathname (e.g. `/about`). */
27
- path: string
28
- /** HTTP method in upper-case (e.g. `'GET'`). */
29
- method: string
30
- /** The raw Node.js incoming request. */
31
- req: IncomingMessage
32
- }
33
-
34
- /**
35
- * Context passed to the `onResponse` hook.
36
- * Fires after the response has been sent (both success and error paths).
37
- * Use this for latency tracking and request logging.
38
- */
39
- export interface ResponseHookContext {
40
- /** The request URL pathname (e.g. `/about`). */
41
- path: string
42
- /** HTTP method in upper-case (e.g. `'GET'`). */
43
- method: string
44
- /** Final HTTP status code written to the response. */
45
- statusCode: number
46
- /** Request duration in milliseconds from the first byte received to `res.end()`. */
47
- duration: number
48
- /** The raw Node.js incoming request. */
49
- req: IncomingMessage
50
- }
51
-
52
- // ─── OAuth / Auth types ───────────────────────────────────────────────────────
53
-
54
- /** Token payload returned by an OAuth provider after a successful authorization code exchange. */
55
- export interface OAuthTokens {
56
- accessToken: string
57
- refreshToken?: string
58
- expiresIn?: number
59
- tokenType: string
60
- }
61
-
62
- /** Configuration for a single OAuth 2.0 provider (Google, GitHub, Discord, or a custom provider). */
63
- export interface OAuthProviderConfig {
64
- /** OAuth application client ID. */
65
- clientId: string
66
- /** OAuth application client secret. Never serialized into the client bundle. */
67
- clientSecret: string
68
- /** Override the default OAuth scopes for this provider. */
69
- scope?: string[]
70
- /** Override the provider's authorization endpoint URL (custom/self-hosted providers). */
71
- authorizationUrl?: string
72
- /** Override the provider's token exchange endpoint URL. */
73
- tokenUrl?: string
74
- /** Override the provider's user-info endpoint URL. */
75
- userInfoUrl?: string
76
- /**
77
- * Transform the raw provider profile into the object stored in the auth session.
78
- * Return any serializable object — it becomes `useAuth().user` on both server and client.
79
- * If omitted the framework normalises the profile to `{ provider, id, name, email, avatar }`.
80
- */
81
- mapUser?: (profile: Record<string, unknown>, tokens: OAuthTokens) => Record<string, unknown>
82
- }
83
-
84
- /** Authentication configuration. Enables OAuth login flows and auto-generates `/api/auth/*` routes. */
85
- export interface AuthConfig {
86
- /**
87
- * OAuth provider configurations keyed by provider name.
88
- * Built-in providers: `'google'`, `'github'`, `'discord'`.
89
- * Custom providers must supply `authorizationUrl`, `tokenUrl`, and `userInfoUrl`.
90
- */
91
- providers?: {
92
- google?: OAuthProviderConfig
93
- github?: OAuthProviderConfig
94
- discord?: OAuthProviderConfig
95
- [key: string]: OAuthProviderConfig | undefined
96
- }
97
- /** Path to redirect to after a successful login. Defaults to `'/'`. */
98
- redirectAfterLogin?: string
99
- /** Path to redirect to after logout. Defaults to `'/'`. */
100
- redirectAfterLogout?: string
101
- /**
102
- * Session cookie name used to store the authenticated user.
103
- * Defaults to `'auth'`. Must not collide with other `useSession()` names.
104
- */
105
- sessionKey?: string
106
- }
107
-
108
- /** Internationalisation routing configuration. When set, locale-aware URL routes are generated and `useLocale()` is enabled. */
109
- export interface I18nConfig {
110
- /**
111
- * All supported locale codes. e.g. `['en', 'fr', 'de']`.
112
- */
113
- locales: string[]
114
- /**
115
- * The default locale. Used as the fallback when no locale is detected in the URL.
116
- */
117
- defaultLocale: string
118
- /**
119
- * URL strategy for locale routing.
120
- * - `'prefix'` — every locale (including default) gets a URL prefix: `/en/about`, `/fr/about`
121
- * - `'prefix_except_default'` — default locale has no prefix (`/about`), others do (`/fr/about`). **Default.**
122
- * - `'no_prefix'` — locale is not reflected in the URL (read from cookie or header only)
123
- */
124
- strategy?: 'prefix' | 'prefix_except_default' | 'no_prefix'
125
- }
126
-
127
- /** Global Static Site Generation (SSG) configuration. Controls which routes are pre-rendered and at what concurrency. */
128
- export interface SsgConfig {
129
- /**
130
- * Routes to pre-render.
131
- * - `'auto'` (default) — pre-render every static route discovered in `app/pages/`.
132
- * - `string[]` — explicit list of paths (e.g. `['/about', '/contact']`).
133
- */
134
- routes?: 'auto' | string[]
135
- /** Maximum number of pages rendered in parallel. Defaults to `1`. Increase for faster SSG builds at the cost of higher memory usage. */
136
- concurrency?: number
137
- /** When `true`, unenumerated routes fall back to SSR at runtime instead of returning 404. */
138
- fallback?: boolean
139
- }
140
-
141
- /** JIT (Just-In-Time) CSS configuration for shadow-DOM style injection. */
142
- export interface JitCssConfig {
143
- /** Additional glob patterns for content files scanned by the JIT CSS engine. */
144
- content?: string[]
145
- /** Enable the extended color palette. Defaults to `false`. */
146
- extendedColors?: boolean
147
- /**
148
- * Project-specific color families registered in the JIT CSS engine at both
149
- * build time and runtime. Each key is a color family name (e.g. `brand`);
150
- * its value is a map of scale steps to CSS color values.
151
- *
152
- * Color family names must be a single lowercase word (no hyphens). Shades
153
- * can be any string key — numeric steps (`'500'`) or semantic names
154
- * (`'DEFAULT'`, `'on'`, `'container'`). When no shade is specified in a
155
- * utility class (e.g. `bg-brand`), the `DEFAULT` shade is used.
156
- *
157
- * @example
158
- * ```ts
159
- * customColors: {
160
- * brand: { '100': '#ede9fe', '500': '#7c3aed', '900': '#4c1d95' },
161
- * surface: { DEFAULT: 'var(--md-sys-color-surface)' },
162
- * }
163
- * ```
164
- */
165
- customColors?: Record<string, Record<string, string>>
166
- }
167
-
168
- /** Fine-grained control over which auto-import categories are injected into page/layout/component files. All categories are enabled by default. */
169
- export interface AutoImportsConfig {
170
- /** Auto-import components defined in `app/components/`. Defaults to `true`. */
171
- components?: boolean
172
- /** Auto-import framework composables (`useHead`, `useState`, etc.). Defaults to `true`. */
173
- composables?: boolean
174
- /** Auto-import template directives (`when`, `each`, `bind`). Defaults to `true`. */
175
- directives?: boolean
176
- /** Auto-import runtime primitives (`component`, `html`, `ref`, etc.). Defaults to `true`. */
177
- runtime?: boolean
178
- }
179
-
180
- /** Arbitrary public runtime values serialized into the virtual module at build time. Available on both server and client via `useRuntimeConfig().public`. */
181
- export interface RuntimePublicConfig {
182
- [key: string]: unknown
183
- }
184
-
185
- /** Server-only secrets resolved from `process.env` at startup. Never serialized into the client bundle. Available via `useRuntimeConfig().private` in loaders and server middleware only. */
186
- export interface RuntimePrivateConfig {
187
- /**
188
- * HMAC-SHA-256 signing secret(s) for `useSession()`.
189
- *
190
- * Pass a single string for simple usage, or an **array** to support secret
191
- * rotation without logging everyone out:
192
- * - The **first** element is the active key — new sessions are signed with it.
193
- * - Subsequent elements are accepted for **verification only** — old sessions
194
- * signed with them continue to work until they expire.
195
- *
196
- * ```ts
197
- * // cer.config.ts
198
- * runtimeConfig: {
199
- * private: {
200
- * sessionSecret: [
201
- * process.env.SESSION_SECRET_NEW!, // signs new sessions
202
- * process.env.SESSION_SECRET_OLD!, // still accepted during rotation
203
- * ],
204
- * },
205
- * }
206
- * ```
207
- */
208
- sessionSecret?: string | string[]
209
- [key: string]: string | string[] | undefined
210
- }
211
-
212
- /** Runtime configuration split into `public` (client + server) and `private` (server-only) sections. */
213
- export interface RuntimeConfig {
214
- /**
215
- * Public runtime config — available on both server and client via
216
- * `useRuntimeConfig().public`. Values are serialized into the virtual module
217
- * at build time, so only use static/env-var values here.
218
- *
219
- * @example
220
- * runtimeConfig: {
221
- * public: {
222
- * apiBase: process.env.VITE_API_BASE ?? 'https://api.example.com',
223
- * }
224
- * }
225
- */
226
- public?: RuntimePublicConfig
227
- /**
228
- * Server-only secrets — never serialized into the client bundle.
229
- * Declare keys with empty-string defaults here; at server startup each key
230
- * is resolved from `process.env[KEY]` (case-insensitive, ALL_CAPS preferred).
231
- *
232
- * @example
233
- * runtimeConfig: {
234
- * private: { dbUrl: '', secretKey: '' },
235
- * }
236
- */
237
- private?: RuntimePrivateConfig
238
- }
239
-
240
- /** Root configuration object for `cer.config.ts`. Pass to `defineConfig()` for type-safe configuration. */
241
- export interface CerAppConfig {
242
- mode?: 'spa' | 'ssr' | 'ssg'
243
- srcDir?: string // defaults to 'app'
244
- /** File-based content layer configuration. Reads from `content/` at the project root by default. */
245
- content?: import('./content.js').CerContentConfig
246
- /**
247
- * Internationalisation (i18n) routing configuration.
248
- * When set, the framework generates locale-aware URL routes and enables `useLocale()`.
249
- *
250
- * @example
251
- * ```ts
252
- * i18n: {
253
- * locales: ['en', 'fr', 'de'],
254
- * defaultLocale: 'en',
255
- * strategy: 'prefix_except_default',
256
- * }
257
- * ```
258
- */
259
- i18n?: I18nConfig
260
- ssg?: SsgConfig
261
- router?: Pick<RouterConfig, 'base' | 'scrollToFragment'>
262
- jitCss?: JitCssConfig
263
- autoImports?: AutoImportsConfig
264
- port?: number
265
- /**
266
- * Runtime configuration accessible via `useRuntimeConfig()`.
267
- * Only `public` values are exposed to the client; keep secrets
268
- * out of `public`.
269
- */
270
- runtimeConfig?: RuntimeConfig
271
- /**
272
- * Deployment platform adapter.
273
- * When set, `cer-app build` automatically runs the adapter after the build
274
- * completes, producing the platform-specific output alongside `dist/`.
275
- *
276
- * Built-in string values:
277
- * - `'vercel'` — Vercel Build Output API v3 (`.vercel/output/`)
278
- * - `'netlify'` — Netlify Functions v2 + `netlify.toml`
279
- * - `'cloudflare'` — Cloudflare Pages `_worker.js` + `wrangler.toml`
280
- *
281
- * Pass a function for a **custom adapter** (Railway, Fly.io, bare Node, Docker, …):
282
- * ```ts
283
- * adapter: async (root) => {
284
- * // root is the absolute project root directory
285
- * // dist/client/ and dist/server/ are already present after the build
286
- * await myPlatformDeploy(root)
287
- * }
288
- * ```
289
- *
290
- * You can also run the built-in adapters independently with `cer-app adapt --platform <name>`.
291
- */
292
- adapter?: 'vercel' | 'netlify' | 'cloudflare' | ((root: string) => Promise<void>)
293
- /**
294
- * Authentication configuration.
295
- * Enables OAuth login flows via `useAuth()` and auto-generates
296
- * `/api/auth/:provider`, `/api/auth/callback/:provider`, and `/api/auth/logout` routes.
297
- *
298
- * @example
299
- * ```ts
300
- * import { defineConfig, defineOAuthProvider } from '@jasonshimmy/vite-plugin-cer-app'
301
- *
302
- * export default defineConfig({
303
- * auth: {
304
- * providers: {
305
- * github: defineOAuthProvider({
306
- * clientId: process.env.GITHUB_CLIENT_ID!,
307
- * clientSecret: process.env.GITHUB_CLIENT_SECRET!,
308
- * }),
309
- * },
310
- * },
311
- * })
312
- * ```
313
- */
314
- auth?: AuthConfig
315
- /**
316
- * Called when an error is caught by the framework's SSR error boundaries
317
- * (loader throws, render crash, or server middleware throws). Use this to
318
- * forward errors to Sentry, Datadog, or any other error-reporting service.
319
- *
320
- * Errors in this hook are silently swallowed so they cannot crash the request handler.
321
- *
322
- * @example
323
- * ```ts
324
- * import * as Sentry from '@sentry/node'
325
- * export default defineConfig({
326
- * onError(err, ctx) {
327
- * Sentry.captureException(err, { tags: { type: ctx.type, path: ctx.path } })
328
- * },
329
- * })
330
- * ```
331
- */
332
- onError?: (err: unknown, ctx: ErrorHookContext) => void | Promise<void>
333
- /**
334
- * Called at the start of every SSR request, before route matching and the loader.
335
- * Use this for request logging or to initialise per-request APM transactions.
336
- *
337
- * Errors in this hook are silently swallowed.
338
- */
339
- onRequest?: (ctx: RequestHookContext) => void | Promise<void>
340
- /**
341
- * Called after every SSR response is sent (both success and error paths).
342
- * `ctx.duration` contains the elapsed milliseconds from first byte to `res.end()`.
343
- * Use this for latency tracking and access logging.
344
- *
345
- * Errors in this hook are silently swallowed.
346
- */
347
- onResponse?: (ctx: ResponseHookContext) => void | Promise<void>
348
- }
349
-
350
- /**
351
- * Define the framework configuration with full TypeScript intellisense.
352
- * This is a pass-through helper — it returns `config` unchanged and exists
353
- * solely to provide type checking and IDE autocompletion in `cer.config.ts`.
354
- *
355
- * @example
356
- * ```ts
357
- * // cer.config.ts
358
- * import { defineConfig } from '@jasonshimmy/vite-plugin-cer-app'
359
- *
360
- * export default defineConfig({
361
- * mode: 'ssr',
362
- * runtimeConfig: {
363
- * public: { apiBase: 'https://api.example.com' },
364
- * private: { dbUrl: '' },
365
- * },
366
- * })
367
- * ```
368
- */
369
- export function defineConfig(config: CerAppConfig): CerAppConfig {
370
- return config
371
- }
@@ -1,66 +0,0 @@
1
- /** Heading extracted from Markdown during parsing. The `id` is slugified from the heading text and added as an HTML `id` attribute. */
2
- export interface ContentHeading {
3
- depth: 1 | 2 | 3 | 4 | 5 | 6
4
- /** Slugified heading text — matches the `id` attribute in the rendered body HTML. */
5
- id: string
6
- /** Plain text of the heading. */
7
- text: string
8
- }
9
-
10
- /**
11
- * Lean per-document metadata — returned by `.find()` and `.count()`.
12
- * Kept small deliberately: no `body`, no `toc`, no `excerpt`.
13
- * Use `description` for listing previews; set it in frontmatter.
14
- */
15
- export interface ContentMeta {
16
- /** URL path (e.g. `"/blog/hello"`). */
17
- _path: string
18
- /** Source file type. */
19
- _type: 'markdown' | 'json'
20
- title?: string
21
- /** Use for listing previews — included in search index. */
22
- description?: string
23
- date?: string
24
- draft?: boolean
25
- /** Any other frontmatter key. */
26
- [key: string]: unknown
27
- }
28
-
29
- /**
30
- * Full document — returned by `.first()`.
31
- * Superset of `ContentMeta`; includes `body`, `toc`, `_file`, and optional `excerpt`.
32
- */
33
- export interface ContentItem extends ContentMeta {
34
- /** Relative path from `content/` at the project root (e.g. `"blog/hello.md"`). */
35
- _file: string
36
- /** Rendered HTML (Markdown) or the raw file contents (JSON files). */
37
- body: string
38
- /** Extracted headings. Empty array for JSON files. */
39
- toc: ContentHeading[]
40
- /** HTML content before `<!-- more -->`. Absent when the marker is not present. */
41
- excerpt?: string
42
- }
43
-
44
- /**
45
- * Search result item returned by `useContentSearch()`.
46
- * Contains only the MiniSearch stored fields: `_path`, `title`, `description`.
47
- */
48
- export interface ContentSearchResult {
49
- _path: string
50
- title: string
51
- description?: string
52
- }
53
-
54
- /** Content layer configuration. Controls the directory and draft behaviour. */
55
- export interface CerContentConfig {
56
- /**
57
- * Content directory relative to the project root. Defaults to `'content'`,
58
- * which resolves to `{root}/content/` — at the same level as `app/`, `server/`, and `public/`.
59
- */
60
- dir?: string
61
- /**
62
- * When `true`, draft items (`draft: true` in frontmatter) are included in
63
- * production builds. Defaults to `false`.
64
- */
65
- drafts?: boolean
66
- }
@@ -1,7 +0,0 @@
1
- export type { CerAppConfig, SsgConfig, JitCssConfig, AutoImportsConfig, RuntimeConfig, RuntimePublicConfig, RuntimePrivateConfig, I18nConfig, ErrorHookContext, RequestHookContext, ResponseHookContext } from './config.js'
2
- export { defineConfig } from './config.js'
3
- export type { HydrateStrategy, SsgPathsContext, PageSsgConfig, PageMeta, PageLoaderContext, PageLoader } from './page.js'
4
- export type { ApiRequest, ApiResponse, ApiHandler, ApiContext } from './api.js'
5
- export type { AppContext, AppPlugin } from './plugin.js'
6
- export type { MiddlewareFn, GuardResult, ServerMiddleware } from './middleware.js'
7
- export type { LocaleComposable } from '../runtime/composables/use-locale.js'
@@ -1,63 +0,0 @@
1
- import type { RouteState } from '@jasonshimmy/custom-elements-runtime/router'
2
- import type { IncomingMessage, ServerResponse } from 'node:http'
3
-
4
- /**
5
- * Return value from a route middleware function:
6
- * - `true` — allow navigation
7
- * - `false` — block navigation
8
- * - `string` — redirect to that path
9
- */
10
- export type GuardResult = boolean | string | Promise<boolean | string>
11
-
12
- /**
13
- * Route middleware function.
14
- *
15
- * Return `true`/`false`/a redirect path to guard navigation, **or** call
16
- * `next()` to explicitly pass control to the next middleware in the chain
17
- * (useful for wrapper middleware that needs to run code before AND after
18
- * downstream middleware completes).
19
- *
20
- * @example — guard
21
- * ```ts
22
- * export default defineMiddleware((to, from) => {
23
- * if (!isLoggedIn()) return '/login'
24
- * return true
25
- * })
26
- * ```
27
- *
28
- * @example — wrapper with next()
29
- * ```ts
30
- * export default defineMiddleware(async (to, from, next) => {
31
- * console.time('nav')
32
- * await next()
33
- * console.timeEnd('nav')
34
- * })
35
- * ```
36
- */
37
- export type MiddlewareFn = (
38
- to: RouteState,
39
- from: RouteState | null,
40
- next: () => Promise<void>,
41
- ) => GuardResult | void
42
-
43
- /**
44
- * Server middleware function. Receives the raw Node.js `req`/`res` pair and a `next`
45
- * callback. Call `next()` to pass control to the next middleware in the chain,
46
- * or call `next(err)` to signal an error (sets the response status from `err.status`,
47
- * defaulting to 500).
48
- *
49
- * Defined with `defineServerMiddleware()` and placed in `app/middleware/`.
50
- *
51
- * @example
52
- * ```ts
53
- * export default defineServerMiddleware((req, res, next) => {
54
- * res.setHeader('X-Request-Id', crypto.randomUUID())
55
- * next()
56
- * })
57
- * ```
58
- */
59
- export type ServerMiddleware = (
60
- req: IncomingMessage,
61
- res: ServerResponse,
62
- next: (err?: unknown) => void,
63
- ) => void | Promise<void>
package/src/types/page.ts DELETED
@@ -1,117 +0,0 @@
1
- import type { IncomingMessage } from 'node:http'
2
-
3
- /**
4
- * Controls when the client-side JS activates a pre-rendered page component.
5
- *
6
- * - `'load'` — activate immediately on page load (default).
7
- * - `'idle'` — defer until `requestIdleCallback` fires (browser idle time).
8
- * - `'visible'` — defer until `cer-layout-view` enters the viewport (IntersectionObserver).
9
- * - `'none'` — never activate; SSR HTML is served as static markup with no JS.
10
- */
11
- export type HydrateStrategy = 'load' | 'idle' | 'visible' | 'none'
12
-
13
- /** Context object passed to a page's `ssg.paths()` function. Contains resolved route params for one path variant. */
14
- export interface SsgPathsContext {
15
- params: Record<string, string>
16
- }
17
-
18
- /** Per-page SSG / ISR configuration. Export as `export const meta = { ssg: { ... } }` from any page file. */
19
- export interface PageSsgConfig {
20
- /**
21
- * Factory that returns the set of param combinations to pre-render for dynamic routes.
22
- * Required for dynamic routes (e.g. `/posts/[slug]`) — without it the route is skipped
23
- * during the static build.
24
- *
25
- * @example
26
- * ```ts
27
- * export const meta = {
28
- * ssg: {
29
- * paths: async () => {
30
- * const slugs = await fetchAllSlugs()
31
- * return slugs.map(slug => ({ params: { slug } }))
32
- * },
33
- * },
34
- * }
35
- * ```
36
- */
37
- paths?: () => Promise<SsgPathsContext[]> | SsgPathsContext[]
38
- /**
39
- * Seconds before a cached SSR response is stale and should be re-rendered.
40
- * Enables Incremental Static Regeneration (ISR) in the preview server and
41
- * any production adapter that reads `meta.ssg.revalidate`.
42
- *
43
- * @example export const meta = { ssg: { revalidate: 60 } }
44
- */
45
- revalidate?: number
46
- }
47
-
48
- /**
49
- * Per-page metadata. Export as `export const meta = { ... }` from any page file.
50
- * Values are read at build time and embedded into the route manifest.
51
- */
52
- export interface PageMeta {
53
- /** Layout component to wrap this page. Must match a file in `app/layouts/`. Defaults to `'default'`. */
54
- layout?: string
55
- /** Named middleware files from `app/middleware/` to run before this route activates. */
56
- middleware?: string[]
57
- hydrate?: HydrateStrategy
58
- ssg?: PageSsgConfig
59
- /**
60
- * CSS transition name applied to the page during route changes.
61
- * Set to `true` to use the default 'page' transition name.
62
- * The framework adds/removes `[data-transition="<name>"]` on the root element
63
- * so you can target it with CSS animations.
64
- *
65
- * @example export const meta = { transition: 'fade' }
66
- */
67
- transition?: string | boolean
68
- /**
69
- * Per-route rendering strategy. Overrides the global `mode` for this route.
70
- *
71
- * - `'server'` — always render server-side, never pre-render. In SSG mode
72
- * the route is skipped during the static build.
73
- * - `'static'` — always serve pre-rendered static HTML. In the SSR preview
74
- * server the pre-rendered file is served from disk; falls back to SSR if
75
- * not found.
76
- * - `'spa'` — client-only. In SSR mode the server returns the SPA shell
77
- * (index.html) without rendering. In SSG mode the route is skipped.
78
- *
79
- * @example export const meta = { render: 'server' }
80
- */
81
- render?: 'static' | 'server' | 'spa'
82
- }
83
-
84
- /**
85
- * Context object passed to a page's `loader` function.
86
- * Available on the server only — the loader runs before the page component renders.
87
- */
88
- export interface PageLoaderContext<P extends Record<string, string> = Record<string, string>> {
89
- params: P
90
- query: Record<string, string>
91
- /** Present during SSR/SSG server render. Absent (`undefined`) during client-side navigation. */
92
- req?: IncomingMessage
93
- }
94
-
95
- /**
96
- * Server-side data loader for a page. Export as `export const loader` (or `export async function loader`)
97
- * from any page file. The returned object is:
98
- * - Made available via `usePageData()` inside the page component.
99
- * - Primitive values are also forwarded as element attributes so `useProps()` works.
100
- * - Serialized into `window.__CER_DATA__` for client-side hydration.
101
- *
102
- * Throwing an error (with an optional `.status` property) renders the page's error component
103
- * and sets the HTTP response status code.
104
- *
105
- * @example
106
- * ```ts
107
- * export const loader: PageLoader<{ slug: string }, { post: Post }> = async ({ params }) => {
108
- * const post = await fetchPost(params.slug)
109
- * if (!post) throw Object.assign(new Error('Not found'), { status: 404 })
110
- * return { post }
111
- * }
112
- * ```
113
- */
114
- export type PageLoader<
115
- P extends Record<string, string> = Record<string, string>,
116
- D = Record<string, unknown>,
117
- > = (ctx: PageLoaderContext<P>) => Promise<D> | D
@@ -1,34 +0,0 @@
1
- import type { Router } from '@jasonshimmy/custom-elements-runtime/router'
2
- import type { CerAppConfig } from './config.js'
3
-
4
- /**
5
- * Application context passed to each plugin's `setup()` function.
6
- * Use it to provide values to the component tree, access the router,
7
- * or read the resolved config.
8
- */
9
- export interface AppContext {
10
- provide(key: PropertyKey, value: unknown): void
11
- router: Router
12
- config: CerAppConfig
13
- }
14
-
15
- /**
16
- * A framework plugin. Plugins run once at app startup (both server and client) before
17
- * the first route renders. Use them for global setup: registering provide/inject values,
18
- * subscribing to router events, or initialising third-party libraries.
19
- *
20
- * @example
21
- * ```ts
22
- * // app/plugins/analytics.ts
23
- * export default {
24
- * name: 'analytics',
25
- * async setup({ router }) {
26
- * router.subscribe(({ path }) => trackPageView(path))
27
- * },
28
- * } satisfies AppPlugin
29
- * ```
30
- */
31
- export interface AppPlugin {
32
- name: string
33
- setup(app: AppContext): void | Promise<void>
34
- }
@@ -1,10 +0,0 @@
1
- {
2
- "extends": "./tsconfig.json",
3
- "compilerOptions": {
4
- "declaration": true,
5
- "declarationMap": true,
6
- "outDir": "dist",
7
- "rootDir": "src"
8
- },
9
- "exclude": ["node_modules", "dist", "src/cli/create/templates", "src/__tests__"]
10
- }
package/tsconfig.json DELETED
@@ -1,19 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "module": "NodeNext",
5
- "moduleResolution": "NodeNext",
6
- "lib": ["ES2022", "DOM"],
7
- "strict": true,
8
- "esModuleInterop": true,
9
- "skipLibCheck": true,
10
- "resolveJsonModule": true,
11
- "declaration": true,
12
- "declarationMap": true,
13
- "sourceMap": true,
14
- "outDir": "dist",
15
- "rootDir": "src"
16
- },
17
- "include": ["src/**/*.ts"],
18
- "exclude": ["node_modules", "dist", "src/cli/create/templates"]
19
- }