@jasonshimmy/vite-plugin-cer-app 0.23.2 → 0.25.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 (404) hide show
  1. package/dist/cli/adapters/netlify.js +4 -2
  2. package/dist/cli/adapters/netlify.js.map +1 -1
  3. package/dist/cli/checks/lighthouse.d.ts +26 -0
  4. package/dist/cli/checks/lighthouse.d.ts.map +1 -0
  5. package/dist/cli/checks/lighthouse.js +121 -0
  6. package/dist/cli/checks/lighthouse.js.map +1 -0
  7. package/dist/cli/checks/links.d.ts +12 -0
  8. package/dist/cli/checks/links.d.ts.map +1 -0
  9. package/dist/cli/checks/links.js +89 -0
  10. package/dist/cli/checks/links.js.map +1 -0
  11. package/dist/cli/checks/performance.d.ts +17 -0
  12. package/dist/cli/checks/performance.d.ts.map +1 -0
  13. package/dist/cli/checks/performance.js +61 -0
  14. package/dist/cli/checks/performance.js.map +1 -0
  15. package/dist/cli/commands/check.d.ts +3 -0
  16. package/dist/cli/commands/check.d.ts.map +1 -0
  17. package/dist/cli/commands/check.js +85 -0
  18. package/dist/cli/commands/check.js.map +1 -0
  19. package/dist/cli/commands/preview.d.ts.map +1 -1
  20. package/dist/cli/commands/preview.js +4 -2
  21. package/dist/cli/commands/preview.js.map +1 -1
  22. package/dist/cli/create/index.d.ts +11 -1
  23. package/dist/cli/create/index.d.ts.map +1 -1
  24. package/dist/cli/create/index.js +135 -65
  25. package/dist/cli/create/index.js.map +1 -1
  26. package/dist/cli/create/templates/spa/package.json.tpl +5 -3
  27. package/dist/cli/create/templates/ssg/cer.config.ts.tpl +2 -0
  28. package/dist/cli/create/templates/ssg/package.json.tpl +5 -3
  29. package/dist/cli/create/templates/ssr/package.json.tpl +5 -3
  30. package/dist/cli/index.js +2 -0
  31. package/dist/cli/index.js.map +1 -1
  32. package/dist/index.d.ts +4 -2
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/plugin/build-ssg.d.ts +22 -6
  35. package/dist/plugin/build-ssg.d.ts.map +1 -1
  36. package/dist/plugin/build-ssg.js +226 -17
  37. package/dist/plugin/build-ssg.js.map +1 -1
  38. package/dist/plugin/content/index.d.ts +1 -1
  39. package/dist/plugin/content/index.d.ts.map +1 -1
  40. package/dist/plugin/content/index.js +8 -8
  41. package/dist/plugin/content/index.js.map +1 -1
  42. package/dist/plugin/content/parser.d.ts +3 -3
  43. package/dist/plugin/content/parser.d.ts.map +1 -1
  44. package/dist/plugin/content/parser.js +103 -24
  45. package/dist/plugin/content/parser.js.map +1 -1
  46. package/dist/plugin/dev-server.d.ts +4 -1
  47. package/dist/plugin/dev-server.d.ts.map +1 -1
  48. package/dist/plugin/dev-server.js.map +1 -1
  49. package/dist/plugin/dts-generator.d.ts.map +1 -1
  50. package/dist/plugin/dts-generator.js +50 -8
  51. package/dist/plugin/dts-generator.js.map +1 -1
  52. package/dist/plugin/generated-dir.d.ts +2 -0
  53. package/dist/plugin/generated-dir.d.ts.map +1 -1
  54. package/dist/plugin/generated-dir.js +17 -6
  55. package/dist/plugin/generated-dir.js.map +1 -1
  56. package/dist/plugin/html-post-process.d.ts +7 -0
  57. package/dist/plugin/html-post-process.d.ts.map +1 -1
  58. package/dist/plugin/html-post-process.js +26 -0
  59. package/dist/plugin/html-post-process.js.map +1 -1
  60. package/dist/plugin/index.d.ts.map +1 -1
  61. package/dist/plugin/index.js +60 -13
  62. package/dist/plugin/index.js.map +1 -1
  63. package/dist/plugin/transforms/auto-import.d.ts.map +1 -1
  64. package/dist/plugin/transforms/auto-import.js +7 -0
  65. package/dist/plugin/transforms/auto-import.js.map +1 -1
  66. package/dist/plugin/transforms/prune-runtime-css.d.ts +8 -0
  67. package/dist/plugin/transforms/prune-runtime-css.d.ts.map +1 -0
  68. package/dist/plugin/transforms/prune-runtime-css.js +40 -0
  69. package/dist/plugin/transforms/prune-runtime-css.js.map +1 -0
  70. package/dist/runtime/app-template.d.ts +1 -1
  71. package/dist/runtime/app-template.d.ts.map +1 -1
  72. package/dist/runtime/app-template.js +206 -36
  73. package/dist/runtime/app-template.js.map +1 -1
  74. package/dist/runtime/composables/index.d.ts +4 -0
  75. package/dist/runtime/composables/index.d.ts.map +1 -1
  76. package/dist/runtime/composables/index.js +2 -0
  77. package/dist/runtime/composables/index.js.map +1 -1
  78. package/dist/runtime/composables/use-active-headings.d.ts +24 -0
  79. package/dist/runtime/composables/use-active-headings.d.ts.map +1 -0
  80. package/dist/runtime/composables/use-active-headings.js +112 -0
  81. package/dist/runtime/composables/use-active-headings.js.map +1 -0
  82. package/dist/runtime/composables/use-content-page.d.ts +45 -0
  83. package/dist/runtime/composables/use-content-page.d.ts.map +1 -0
  84. package/dist/runtime/composables/use-content-page.js +181 -0
  85. package/dist/runtime/composables/use-content-page.js.map +1 -0
  86. package/dist/runtime/composables/use-content-search.d.ts.map +1 -1
  87. package/dist/runtime/composables/use-content-search.js +1 -5
  88. package/dist/runtime/composables/use-content-search.js.map +1 -1
  89. package/dist/runtime/composables/use-fetch.d.ts +2 -1
  90. package/dist/runtime/composables/use-fetch.d.ts.map +1 -1
  91. package/dist/runtime/composables/use-fetch.js +112 -43
  92. package/dist/runtime/composables/use-fetch.js.map +1 -1
  93. package/dist/runtime/composables/use-route.d.ts.map +1 -1
  94. package/dist/runtime/composables/use-route.js +39 -11
  95. package/dist/runtime/composables/use-route.js.map +1 -1
  96. package/dist/runtime/content/client.js +2 -2
  97. package/dist/runtime/content/client.js.map +1 -1
  98. package/dist/runtime/entry-server-template.d.ts +16 -1
  99. package/dist/runtime/entry-server-template.d.ts.map +1 -1
  100. package/dist/runtime/entry-server-template.js +120 -13
  101. package/dist/runtime/entry-server-template.js.map +1 -1
  102. package/dist/types/config.d.ts +45 -4
  103. package/dist/types/config.d.ts.map +1 -1
  104. package/dist/types/config.js.map +1 -1
  105. package/dist/types/content.d.ts +18 -1
  106. package/dist/types/content.d.ts.map +1 -1
  107. package/dist/types/middleware.d.ts +2 -2
  108. package/dist/types/middleware.d.ts.map +1 -1
  109. package/package.json +22 -19
  110. package/.github/copilot-instructions.md +0 -169
  111. package/.github/workflows/publish.yml +0 -257
  112. package/.nvmrc +0 -1
  113. package/CHANGELOG.md +0 -236
  114. package/CLAUDE.md +0 -113
  115. package/commits.txt +0 -1
  116. package/cypress.config.ts +0 -16
  117. package/docs/authentication.md +0 -285
  118. package/docs/cli.md +0 -324
  119. package/docs/components.md +0 -237
  120. package/docs/composables.md +0 -907
  121. package/docs/configuration.md +0 -696
  122. package/docs/content.md +0 -570
  123. package/docs/data-loading.md +0 -336
  124. package/docs/getting-started.md +0 -237
  125. package/docs/head-management.md +0 -212
  126. package/docs/i18n.md +0 -159
  127. package/docs/layouts.md +0 -224
  128. package/docs/middleware.md +0 -234
  129. package/docs/plugins.md +0 -170
  130. package/docs/rendering-modes.md +0 -377
  131. package/docs/routing.md +0 -485
  132. package/docs/server-api.md +0 -253
  133. package/docs/testing.md +0 -455
  134. package/docs/use-fetch.md +0 -183
  135. package/e2e/cypress/e2e/api.cy.ts +0 -123
  136. package/e2e/cypress/e2e/async-component.cy.ts +0 -27
  137. package/e2e/cypress/e2e/component-splitting.cy.ts +0 -50
  138. package/e2e/cypress/e2e/content.cy.ts +0 -425
  139. package/e2e/cypress/e2e/cookie.cy.ts +0 -85
  140. package/e2e/cypress/e2e/data.cy.ts +0 -158
  141. package/e2e/cypress/e2e/error-boundary.cy.ts +0 -88
  142. package/e2e/cypress/e2e/fouc.cy.ts +0 -254
  143. package/e2e/cypress/e2e/group-meta.cy.ts +0 -36
  144. package/e2e/cypress/e2e/head.cy.ts +0 -89
  145. package/e2e/cypress/e2e/i18n.cy.ts +0 -79
  146. package/e2e/cypress/e2e/interactive.cy.ts +0 -137
  147. package/e2e/cypress/e2e/isr-nested-runtime.cy.ts +0 -102
  148. package/e2e/cypress/e2e/jit-css-custom-colors.cy.ts +0 -43
  149. package/e2e/cypress/e2e/middleware-chain.cy.ts +0 -89
  150. package/e2e/cypress/e2e/middleware-status.cy.ts +0 -30
  151. package/e2e/cypress/e2e/middleware.cy.ts +0 -45
  152. package/e2e/cypress/e2e/navigate.cy.ts +0 -39
  153. package/e2e/cypress/e2e/observability.cy.ts +0 -77
  154. package/e2e/cypress/e2e/per-route-error.cy.ts +0 -42
  155. package/e2e/cypress/e2e/per-route-render.cy.ts +0 -70
  156. package/e2e/cypress/e2e/preview-hardening.cy.ts +0 -88
  157. package/e2e/cypress/e2e/routes.cy.ts +0 -128
  158. package/e2e/cypress/e2e/seo-meta.cy.ts +0 -108
  159. package/e2e/cypress/e2e/server-middleware.cy.ts +0 -46
  160. package/e2e/cypress/e2e/session-rotation.cy.ts +0 -25
  161. package/e2e/cypress/e2e/session.cy.ts +0 -73
  162. package/e2e/cypress/e2e/ssr-render-error.cy.ts +0 -68
  163. package/e2e/cypress/e2e/synthetic-404.cy.ts +0 -45
  164. package/e2e/cypress/e2e/use-page-data.cy.ts +0 -122
  165. package/e2e/cypress/e2e/use-state.cy.ts +0 -138
  166. package/e2e/cypress/support/commands.ts +0 -120
  167. package/e2e/cypress/support/e2e.ts +0 -10
  168. package/e2e/cypress/tsconfig.json +0 -14
  169. package/e2e/kitchen-sink/app/components/ks-badge.ts +0 -8
  170. package/e2e/kitchen-sink/app/composables/useKsCounter.ts +0 -9
  171. package/e2e/kitchen-sink/app/error.ts +0 -18
  172. package/e2e/kitchen-sink/app/layouts/admin.ts +0 -13
  173. package/e2e/kitchen-sink/app/layouts/default.ts +0 -25
  174. package/e2e/kitchen-sink/app/layouts/group.ts +0 -9
  175. package/e2e/kitchen-sink/app/layouts/minimal.ts +0 -7
  176. package/e2e/kitchen-sink/app/loading.ts +0 -9
  177. package/e2e/kitchen-sink/app/middleware/auth.ts +0 -9
  178. package/e2e/kitchen-sink/app/middleware/custom-log.ts +0 -4
  179. package/e2e/kitchen-sink/app/middleware/group-auth.ts +0 -7
  180. package/e2e/kitchen-sink/app/middleware/logger.ts +0 -14
  181. package/e2e/kitchen-sink/app/pages/(auth)/login.ts +0 -13
  182. package/e2e/kitchen-sink/app/pages/(auth)/protected.ts +0 -16
  183. package/e2e/kitchen-sink/app/pages/404.ts +0 -9
  184. package/e2e/kitchen-sink/app/pages/about.ts +0 -17
  185. package/e2e/kitchen-sink/app/pages/admin/_layout.ts +0 -1
  186. package/e2e/kitchen-sink/app/pages/admin/dashboard.ts +0 -11
  187. package/e2e/kitchen-sink/app/pages/async-component-error-test.ts +0 -18
  188. package/e2e/kitchen-sink/app/pages/async-component-test.ts +0 -18
  189. package/e2e/kitchen-sink/app/pages/blog/[slug].ts +0 -59
  190. package/e2e/kitchen-sink/app/pages/blog/index.ts +0 -51
  191. package/e2e/kitchen-sink/app/pages/content-blog.ts +0 -37
  192. package/e2e/kitchen-sink/app/pages/content-doc.ts +0 -42
  193. package/e2e/kitchen-sink/app/pages/content-fallback.ts +0 -36
  194. package/e2e/kitchen-sink/app/pages/content-guides.ts +0 -35
  195. package/e2e/kitchen-sink/app/pages/content-index.ts +0 -39
  196. package/e2e/kitchen-sink/app/pages/content-search.ts +0 -36
  197. package/e2e/kitchen-sink/app/pages/cookie-test.ts +0 -22
  198. package/e2e/kitchen-sink/app/pages/counter.ts +0 -17
  199. package/e2e/kitchen-sink/app/pages/group-auth-blocked.ts +0 -9
  200. package/e2e/kitchen-sink/app/pages/group-meta-test/_layout.ts +0 -6
  201. package/e2e/kitchen-sink/app/pages/group-meta-test/custom-mw.ts +0 -14
  202. package/e2e/kitchen-sink/app/pages/group-meta-test/page.ts +0 -9
  203. package/e2e/kitchen-sink/app/pages/group-meta-test/protected.ts +0 -8
  204. package/e2e/kitchen-sink/app/pages/head.ts +0 -20
  205. package/e2e/kitchen-sink/app/pages/i18n-test.ts +0 -14
  206. package/e2e/kitchen-sink/app/pages/index.ts +0 -27
  207. package/e2e/kitchen-sink/app/pages/isr-test.ts +0 -17
  208. package/e2e/kitchen-sink/app/pages/items/[id].ts +0 -20
  209. package/e2e/kitchen-sink/app/pages/jit-css-custom-colors-test.ts +0 -14
  210. package/e2e/kitchen-sink/app/pages/loader-error-test.ts +0 -13
  211. package/e2e/kitchen-sink/app/pages/loader-props-test.ts +0 -19
  212. package/e2e/kitchen-sink/app/pages/loader-response-error-test.ts +0 -13
  213. package/e2e/kitchen-sink/app/pages/middleware-chain-test.ts +0 -12
  214. package/e2e/kitchen-sink/app/pages/middleware-status-test.ts +0 -9
  215. package/e2e/kitchen-sink/app/pages/navigate-test.ts +0 -16
  216. package/e2e/kitchen-sink/app/pages/observability-test.ts +0 -25
  217. package/e2e/kitchen-sink/app/pages/per-route-error-test.error.ts +0 -13
  218. package/e2e/kitchen-sink/app/pages/per-route-error-test.ts +0 -15
  219. package/e2e/kitchen-sink/app/pages/plugin-dsd-test.ts +0 -10
  220. package/e2e/kitchen-sink/app/pages/render-error-test.ts +0 -12
  221. package/e2e/kitchen-sink/app/pages/render-server-test.ts +0 -12
  222. package/e2e/kitchen-sink/app/pages/render-spa-test.ts +0 -12
  223. package/e2e/kitchen-sink/app/pages/route-info.ts +0 -14
  224. package/e2e/kitchen-sink/app/pages/seo-test.ts +0 -23
  225. package/e2e/kitchen-sink/app/pages/session-rotation-test.ts +0 -25
  226. package/e2e/kitchen-sink/app/pages/use-state-test.ts +0 -37
  227. package/e2e/kitchen-sink/app/plugins/01.setup.ts +0 -7
  228. package/e2e/kitchen-sink/app/plugins/02.ks-plugin-components.ts +0 -27
  229. package/e2e/kitchen-sink/cer-auto-imports.d.ts +0 -51
  230. package/e2e/kitchen-sink/cer-env.d.ts +0 -35
  231. package/e2e/kitchen-sink/cer-tsconfig.json +0 -30
  232. package/e2e/kitchen-sink/cer.config.ts +0 -43
  233. package/e2e/kitchen-sink/content/01.guides/01.index.md +0 -8
  234. package/e2e/kitchen-sink/content/01.guides/02.intro.md +0 -8
  235. package/e2e/kitchen-sink/content/01.guides/10.advanced.md +0 -8
  236. package/e2e/kitchen-sink/content/blog/2026-04-01-hello.md +0 -26
  237. package/e2e/kitchen-sink/content/blog/2026-04-02-draft.md +0 -10
  238. package/e2e/kitchen-sink/content/blog/index.md +0 -8
  239. package/e2e/kitchen-sink/content/blog/no-frontmatter.md +0 -7
  240. package/e2e/kitchen-sink/content/docs/getting-started.md +0 -48
  241. package/e2e/kitchen-sink/content/index.md +0 -16
  242. package/e2e/kitchen-sink/server/api/echo.ts +0 -12
  243. package/e2e/kitchen-sink/server/api/health.ts +0 -3
  244. package/e2e/kitchen-sink/server/api/posts/[slug].ts +0 -11
  245. package/e2e/kitchen-sink/server/api/posts/index.ts +0 -5
  246. package/e2e/kitchen-sink/server/api/session.ts +0 -23
  247. package/e2e/kitchen-sink/server/data/posts.ts +0 -21
  248. package/e2e/kitchen-sink/server/middleware/01-headers.ts +0 -6
  249. package/e2e/kitchen-sink/server/middleware/02-status-test.ts +0 -10
  250. package/e2e/kitchen-sink/tsconfig.json +0 -3
  251. package/e2e/scripts/clean.mjs +0 -14
  252. package/eslint.config.ts +0 -22
  253. package/src/__tests__/cli/adapters/cloudflare-worker.integration.test.ts +0 -132
  254. package/src/__tests__/cli/adapters/cloudflare.test.ts +0 -332
  255. package/src/__tests__/cli/adapters/netlify-bridge.integration.test.ts +0 -139
  256. package/src/__tests__/cli/adapters/netlify.test.ts +0 -286
  257. package/src/__tests__/cli/adapters/vercel-launcher.integration.test.ts +0 -129
  258. package/src/__tests__/cli/adapters/vercel.test.ts +0 -263
  259. package/src/__tests__/cli/preview-hardening.test.ts +0 -265
  260. package/src/__tests__/cli/preview-isr.test.ts +0 -320
  261. package/src/__tests__/index.test.ts +0 -21
  262. package/src/__tests__/plugin/app-template.test.ts +0 -166
  263. package/src/__tests__/plugin/build-ssg-render.test.ts +0 -155
  264. package/src/__tests__/plugin/build-ssg.test.ts +0 -598
  265. package/src/__tests__/plugin/build-ssr.test.ts +0 -192
  266. package/src/__tests__/plugin/cer-app-plugin.test.ts +0 -552
  267. package/src/__tests__/plugin/content/emitter.test.ts +0 -117
  268. package/src/__tests__/plugin/content/loader.test.ts +0 -154
  269. package/src/__tests__/plugin/content/parser.test.ts +0 -381
  270. package/src/__tests__/plugin/content/path-utils.test.ts +0 -69
  271. package/src/__tests__/plugin/content/search.test.ts +0 -119
  272. package/src/__tests__/plugin/dev-server.test.ts +0 -813
  273. package/src/__tests__/plugin/dts-generator.test.ts +0 -394
  274. package/src/__tests__/plugin/entry-server-template.test.ts +0 -385
  275. package/src/__tests__/plugin/generated-dir.test.ts +0 -144
  276. package/src/__tests__/plugin/html-post-process.test.ts +0 -146
  277. package/src/__tests__/plugin/path-utils.test.ts +0 -411
  278. package/src/__tests__/plugin/resolve-config.test.ts +0 -233
  279. package/src/__tests__/plugin/scanner.test.ts +0 -186
  280. package/src/__tests__/plugin/transforms/auto-import.test.ts +0 -510
  281. package/src/__tests__/plugin/transforms/head-inject.test.ts +0 -178
  282. package/src/__tests__/plugin/virtual/composables.test.ts +0 -57
  283. package/src/__tests__/plugin/virtual/content-components.test.ts +0 -66
  284. package/src/__tests__/plugin/virtual/error.test.ts +0 -71
  285. package/src/__tests__/plugin/virtual/layouts.test.ts +0 -70
  286. package/src/__tests__/plugin/virtual/loading.test.ts +0 -72
  287. package/src/__tests__/plugin/virtual/middleware.test.ts +0 -83
  288. package/src/__tests__/plugin/virtual/plugins.test.ts +0 -129
  289. package/src/__tests__/plugin/virtual/routes.test.ts +0 -884
  290. package/src/__tests__/plugin/virtual/server-api.test.ts +0 -164
  291. package/src/__tests__/plugin/virtual/server-middleware.test.ts +0 -102
  292. package/src/__tests__/runtime/app-template.test.ts +0 -208
  293. package/src/__tests__/runtime/define-middleware.test.ts +0 -64
  294. package/src/__tests__/runtime/define-server-middleware.test.ts +0 -54
  295. package/src/__tests__/runtime/entry-client-template.test.ts +0 -61
  296. package/src/__tests__/runtime/isr-handler.test.ts +0 -338
  297. package/src/__tests__/runtime/oauth/handler.test.ts +0 -358
  298. package/src/__tests__/runtime/oauth/providers.test.ts +0 -47
  299. package/src/__tests__/runtime/oauth-index.test.ts +0 -43
  300. package/src/__tests__/runtime/use-auth.test.ts +0 -169
  301. package/src/__tests__/runtime/use-content-search-composable.test.ts +0 -405
  302. package/src/__tests__/runtime/use-content-search.test.ts +0 -163
  303. package/src/__tests__/runtime/use-content.test.ts +0 -226
  304. package/src/__tests__/runtime/use-cookie.test.ts +0 -277
  305. package/src/__tests__/runtime/use-fetch-component.test.ts +0 -214
  306. package/src/__tests__/runtime/use-fetch.test.ts +0 -377
  307. package/src/__tests__/runtime/use-head.test.ts +0 -311
  308. package/src/__tests__/runtime/use-inject-client.test.ts +0 -67
  309. package/src/__tests__/runtime/use-inject.test.ts +0 -66
  310. package/src/__tests__/runtime/use-locale.test.ts +0 -152
  311. package/src/__tests__/runtime/use-navigate.test.ts +0 -121
  312. package/src/__tests__/runtime/use-page-data.test.ts +0 -298
  313. package/src/__tests__/runtime/use-route.test.ts +0 -156
  314. package/src/__tests__/runtime/use-runtime-config.test.ts +0 -182
  315. package/src/__tests__/runtime/use-seo-meta.test.ts +0 -109
  316. package/src/__tests__/runtime/use-session.test.ts +0 -320
  317. package/src/__tests__/runtime/use-state.test.ts +0 -340
  318. package/src/__tests__/types/config.test.ts +0 -18
  319. package/src/cli/adapters/cloudflare.ts +0 -335
  320. package/src/cli/adapters/netlify.ts +0 -326
  321. package/src/cli/adapters/vercel.ts +0 -311
  322. package/src/cli/commands/adapt.ts +0 -84
  323. package/src/cli/commands/build.ts +0 -165
  324. package/src/cli/commands/dev.ts +0 -125
  325. package/src/cli/commands/generate.ts +0 -91
  326. package/src/cli/commands/preview-isr.ts +0 -172
  327. package/src/cli/commands/preview.ts +0 -523
  328. package/src/cli/create/index.ts +0 -275
  329. package/src/cli/create/templates/shared/.gitignore.tpl +0 -25
  330. package/src/cli/create/templates/shared/app/layouts/default.ts.tpl +0 -15
  331. package/src/cli/create/templates/shared/app/pages/index.ts.tpl +0 -8
  332. package/src/cli/create/templates/shared/index.html.tpl +0 -12
  333. package/src/cli/create/templates/shared/tsconfig.json.tpl +0 -6
  334. package/src/cli/create/templates/spa/cer.config.ts.tpl +0 -6
  335. package/src/cli/create/templates/spa/package.json.tpl +0 -18
  336. package/src/cli/create/templates/ssg/cer.config.ts.tpl +0 -10
  337. package/src/cli/create/templates/ssg/package.json.tpl +0 -19
  338. package/src/cli/create/templates/ssr/cer.config.ts.tpl +0 -6
  339. package/src/cli/create/templates/ssr/package.json.tpl +0 -18
  340. package/src/cli/index.ts +0 -22
  341. package/src/index.ts +0 -20
  342. package/src/plugin/build-ssg.ts +0 -403
  343. package/src/plugin/build-ssr.ts +0 -134
  344. package/src/plugin/content/emitter.ts +0 -50
  345. package/src/plugin/content/index.ts +0 -233
  346. package/src/plugin/content/parser.ts +0 -259
  347. package/src/plugin/content/path-utils.ts +0 -55
  348. package/src/plugin/content/scanner.ts +0 -26
  349. package/src/plugin/content/search.ts +0 -28
  350. package/src/plugin/dev-server.ts +0 -379
  351. package/src/plugin/dts-generator.ts +0 -273
  352. package/src/plugin/generated-dir.ts +0 -121
  353. package/src/plugin/html-post-process.ts +0 -96
  354. package/src/plugin/index.ts +0 -584
  355. package/src/plugin/path-utils.ts +0 -186
  356. package/src/plugin/scanner.ts +0 -65
  357. package/src/plugin/transforms/auto-import.ts +0 -206
  358. package/src/plugin/transforms/head-inject.ts +0 -161
  359. package/src/plugin/virtual/composables.ts +0 -28
  360. package/src/plugin/virtual/content-components.ts +0 -83
  361. package/src/plugin/virtual/error.ts +0 -34
  362. package/src/plugin/virtual/layouts.ts +0 -41
  363. package/src/plugin/virtual/loading.ts +0 -32
  364. package/src/plugin/virtual/middleware.ts +0 -45
  365. package/src/plugin/virtual/plugins.ts +0 -46
  366. package/src/plugin/virtual/routes.ts +0 -514
  367. package/src/plugin/virtual/server-api.ts +0 -85
  368. package/src/plugin/virtual/server-middleware.ts +0 -44
  369. package/src/runtime/app-template.ts +0 -377
  370. package/src/runtime/composables/define-middleware.ts +0 -17
  371. package/src/runtime/composables/define-server-middleware.ts +0 -18
  372. package/src/runtime/composables/index.ts +0 -27
  373. package/src/runtime/composables/use-auth.ts +0 -125
  374. package/src/runtime/composables/use-content-search.ts +0 -205
  375. package/src/runtime/composables/use-content.ts +0 -146
  376. package/src/runtime/composables/use-cookie.ts +0 -135
  377. package/src/runtime/composables/use-fetch.ts +0 -438
  378. package/src/runtime/composables/use-head.ts +0 -234
  379. package/src/runtime/composables/use-inject.ts +0 -49
  380. package/src/runtime/composables/use-locale.ts +0 -109
  381. package/src/runtime/composables/use-navigate.ts +0 -58
  382. package/src/runtime/composables/use-page-data.ts +0 -93
  383. package/src/runtime/composables/use-route.ts +0 -71
  384. package/src/runtime/composables/use-runtime-config.ts +0 -123
  385. package/src/runtime/composables/use-seo-meta.ts +0 -80
  386. package/src/runtime/composables/use-session.ts +0 -186
  387. package/src/runtime/composables/use-state.ts +0 -92
  388. package/src/runtime/content/client.ts +0 -168
  389. package/src/runtime/entry-client-template.ts +0 -39
  390. package/src/runtime/entry-server-template.ts +0 -493
  391. package/src/runtime/isr-handler.ts +0 -184
  392. package/src/runtime/oauth/handler.ts +0 -407
  393. package/src/runtime/oauth/index.ts +0 -49
  394. package/src/runtime/oauth/providers.ts +0 -38
  395. package/src/types/api.ts +0 -40
  396. package/src/types/config.ts +0 -379
  397. package/src/types/content.ts +0 -66
  398. package/src/types/index.ts +0 -7
  399. package/src/types/middleware.ts +0 -63
  400. package/src/types/page.ts +0 -117
  401. package/src/types/plugin.ts +0 -34
  402. package/tsconfig.build.json +0 -10
  403. package/tsconfig.json +0 -19
  404. package/vitest.config.ts +0 -33
@@ -1,16 +0,0 @@
1
- // Tests programmatic navigation via navigateTo().
2
- component('page-navigate-test', () => {
3
- return html`
4
- <div>
5
- <h1 data-cy="navigate-test-heading">Navigate Test</h1>
6
- <button data-cy="navigate-to-about" @click="${() => navigateTo('/about')}">
7
- Go to About
8
- </button>
9
- <button data-cy="navigate-to-route-info" @click="${() => navigateTo('/route-info')}">
10
- Go to Route Info
11
- </button>
12
- </div>
13
- `
14
- })
15
-
16
- export const meta = { layout: 'minimal' }
@@ -1,25 +0,0 @@
1
- component('page-observability-test', () => {
2
- const { public: pub } = useRuntimeConfig()
3
-
4
- // Verify that accessing .private in a browser context throws the Proxy error.
5
- // The component render function runs client-side (inside the custom element upgrade),
6
- // so typeof window !== 'undefined' is true here and the Proxy fires.
7
- let privateError = ''
8
- if (typeof window !== 'undefined') {
9
- try {
10
- const cfg = useRuntimeConfig()
11
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
- void (cfg as any).private
13
- } catch (e) {
14
- privateError = (e as Error).message
15
- }
16
- }
17
-
18
- return html`
19
- <div>
20
- <h1 data-cy="observability-heading">Observability Test</h1>
21
- <div data-cy="public-app-name">${pub.appName as string}</div>
22
- <div data-cy="private-proxy-error">${privateError}</div>
23
- </div>
24
- `
25
- })
@@ -1,13 +0,0 @@
1
- // P2-2: Co-located per-route error component for per-route-error-test.ts.
2
- // Rendered instead of the global error component when this page's loader throws.
3
- component('page-per-route-error-test-error', () => {
4
- const props = useProps({ error: '', status: '' })
5
-
6
- return html`
7
- <div data-cy="per-route-error">
8
- <h1>Per-Route Error</h1>
9
- <p data-cy="per-route-error-message">${props.error || 'unknown error'}</p>
10
- <p data-cy="per-route-error-status">${props.status || '500'}</p>
11
- </div>
12
- `
13
- })
@@ -1,15 +0,0 @@
1
- // P2-2: Page with a co-located error component.
2
- // The loader throws, so the co-located per-route-error-test.error.ts is rendered.
3
- component('page-per-route-error-test', () => {
4
- return html`
5
- <div>
6
- <h1>Per-Route Error Test</h1>
7
- </div>
8
- `
9
- })
10
-
11
- export async function loader() {
12
- const err = new Error('per-route-error intentional') as Error & { status?: number }
13
- err.status = 422
14
- throw err
15
- }
@@ -1,10 +0,0 @@
1
- export default component('page-plugin-dsd-test', () => {
2
- return html`
3
- <div data-cy="plugin-dsd-test-page">
4
- <h1 data-cy="plugin-dsd-heading">Plugin DSD Test</h1>
5
- <ks-plugin-card>
6
- <span data-cy="plugin-card-content">Card content from plugin component</span>
7
- </ks-plugin-card>
8
- </div>
9
- `
10
- })
@@ -1,12 +0,0 @@
1
- /**
2
- * Kitchen-sink page for P0-1: SSR render error handling.
3
- *
4
- * This page's component throws during render to simulate an unexpected error
5
- * in the rendering pipeline. In SSR mode the server must respond with a 500
6
- * page rather than crashing or hanging indefinitely.
7
- */
8
- component('page-render-error-test', () => {
9
- throw new Error('Intentional render error for P0-1 testing')
10
- // unreachable
11
- return html`<div></div>`
12
- })
@@ -1,12 +0,0 @@
1
- component('page-render-server-test', () => {
2
- return html`
3
- <div>
4
- <h1 data-cy="render-server-heading">Render Server Test</h1>
5
- <p>This page always renders server-side.</p>
6
- </div>
7
- `
8
- })
9
-
10
- export const meta = {
11
- render: 'server',
12
- }
@@ -1,12 +0,0 @@
1
- component('page-render-spa-test', () => {
2
- return html`
3
- <div>
4
- <h1 data-cy="render-spa-heading">Render SPA Test</h1>
5
- <p>This page is client-only.</p>
6
- </div>
7
- `
8
- })
9
-
10
- export const meta = {
11
- render: 'spa',
12
- }
@@ -1,14 +0,0 @@
1
- // Tests that useRoute() returns the correct path, params, query, and meta.
2
- component('page-route-info', () => {
3
- const route = useRoute()
4
-
5
- return html`
6
- <div>
7
- <h1 data-cy="route-info-heading">Route Info</h1>
8
- <p data-cy="route-path">Path: <code>${route.path}</code></p>
9
- <p data-cy="route-meta-title">Meta title: <code>${route.meta?.title ?? 'none'}</code></p>
10
- </div>
11
- `
12
- })
13
-
14
- export const meta = { layout: 'minimal', title: 'Route Info Page' }
@@ -1,23 +0,0 @@
1
- component('page-seo-test', () => {
2
- useSeoMeta({
3
- title: 'SEO Test — Kitchen Sink',
4
- description: 'A test page for useSeoMeta().',
5
- ogTitle: 'SEO Test OG Title',
6
- ogDescription: 'SEO Test OG description.',
7
- ogImage: 'https://example.com/og/seo-test.png',
8
- ogUrl: 'https://example.com/seo-test',
9
- ogType: 'website',
10
- ogSiteName: 'Kitchen Sink',
11
- twitterCard: 'summary_large_image',
12
- twitterTitle: 'SEO Test Twitter Title',
13
- twitterSite: '@ks',
14
- canonical: 'https://example.com/seo-test',
15
- })
16
-
17
- return html`
18
- <div>
19
- <h1 data-cy="seo-test-heading">SEO Test</h1>
20
- <p data-cy="seo-test-description">This page sets SEO tags via <code>useSeoMeta()</code>.</p>
21
- </div>
22
- `
23
- })
@@ -1,25 +0,0 @@
1
- // P1-3: Session secret rotation test page.
2
- // The loader runs server-side where runtimeConfig.private (sessionSecret) is
3
- // available. It signs a session with the configured secret(s) and sets the
4
- // httpOnly cookie. The value returned by the loader is displayed by the
5
- // component, confirming the loader ran successfully.
6
- // (set → response cookie is verified by the companion e2e cookie assertion;
7
- // the signed token itself is what proves the secret is configured correctly.)
8
- export const loader = async () => {
9
- const session = useSession<{ user: string }>()
10
- await session.set({ user: 'rotation-user' })
11
- return { user: 'rotation-user' }
12
- }
13
-
14
- component('page-session-rotation-test', () => {
15
- const ssrData = usePageData<{ user: string }>()
16
-
17
- return html`
18
- <div>
19
- <h1 data-cy="session-rotation-heading">Session Rotation Test</h1>
20
- <p data-cy="session-read">${ssrData?.user ?? 'loading…'}</p>
21
- </div>
22
- `
23
- })
24
-
25
- export const meta = { layout: 'default' }
@@ -1,37 +0,0 @@
1
- // Tests useState() — globally-keyed reactive state shared between layout and page.
2
- // The loader sets pageTitle before rendering so the layout sees it on SSR.
3
- // The page also exposes a button to change the title client-side to verify
4
- // that the layout re-renders reactively when useState is mutated.
5
-
6
- export const loader = async () => {
7
- useState<string>('pageTitle').value = 'useState Page Title'
8
- return {}
9
- }
10
-
11
- component('page-use-state-test', () => {
12
- const pageTitle = useState<string>('pageTitle')
13
-
14
- function changeTitle() {
15
- pageTitle.value = 'Title Updated!'
16
- }
17
-
18
- function resetTitle() {
19
- pageTitle.value = 'useState Page Title'
20
- }
21
-
22
- return html`
23
- <div>
24
- <h1 data-cy="use-state-heading">${pageTitle.value}</h1>
25
- <p data-cy="use-state-description">
26
- Tests <code>useState()</code> — globally-keyed reactive state shared
27
- between this page and the layout.
28
- </p>
29
- <p>
30
- Current title:
31
- <strong data-cy="page-title-display">${pageTitle.value}</strong>
32
- </p>
33
- <button data-cy="change-title" @click="${changeTitle}">Change Title</button>
34
- <button data-cy="reset-title" @click="${resetTitle}">Reset Title</button>
35
- </div>
36
- `
37
- })
@@ -1,7 +0,0 @@
1
- // Plugin 01: provides a greeting string via app.provide()
2
- export default {
3
- name: 'ks-setup',
4
- setup(app: any) {
5
- app.provide('ks-greeting', 'Hello from ks-setup plugin!')
6
- },
7
- }
@@ -1,27 +0,0 @@
1
- // Simulates a third-party component library imported as a plugin side-effect.
2
- // This component is NOT in app/components/ (auto-scanned), so it can only be
3
- // registered by this plugin import — exactly like @jasonshimmy/cer-material or
4
- // any other npm CER component package.
5
- //
6
- // In SSR/SSG the server bundle must share one CER runtime registry with this
7
- // plugin so that renderToStreamWithJITCSSDSD can emit DSD for ks-plugin-card.
8
- import { component, html, css, useStyle } from '@jasonshimmy/custom-elements-runtime'
9
-
10
- component('ks-plugin-card', () => {
11
- useStyle(() => css`
12
- :host { display: block; }
13
- .card {
14
- background: #f0fdf4;
15
- border: 1px solid #bbf7d0;
16
- border-radius: 8px;
17
- padding: 16px;
18
- }
19
- `)
20
- return html`
21
- <div class="card" data-cy="ks-plugin-card">
22
- <slot></slot>
23
- </div>
24
- `
25
- })
26
-
27
- export default { name: 'ks-plugin-components' }
@@ -1,51 +0,0 @@
1
- // AUTO-GENERATED by @jasonshimmy/vite-plugin-cer-app
2
- // Do not edit — regenerated automatically on dev server start and build.
3
-
4
- export {}
5
-
6
- declare global {
7
- const component: typeof import('@jasonshimmy/custom-elements-runtime')['component']
8
- const html: typeof import('@jasonshimmy/custom-elements-runtime')['html']
9
- const css: typeof import('@jasonshimmy/custom-elements-runtime')['css']
10
- const ref: typeof import('@jasonshimmy/custom-elements-runtime')['ref']
11
- const computed: typeof import('@jasonshimmy/custom-elements-runtime')['computed']
12
- const watch: typeof import('@jasonshimmy/custom-elements-runtime')['watch']
13
- const watchEffect: typeof import('@jasonshimmy/custom-elements-runtime')['watchEffect']
14
- const useProps: typeof import('@jasonshimmy/custom-elements-runtime')['useProps']
15
- const useEmit: typeof import('@jasonshimmy/custom-elements-runtime')['useEmit']
16
- const useOnConnected: typeof import('@jasonshimmy/custom-elements-runtime')['useOnConnected']
17
- const useOnDisconnected: typeof import('@jasonshimmy/custom-elements-runtime')['useOnDisconnected']
18
- const useOnAttributeChanged: typeof import('@jasonshimmy/custom-elements-runtime')['useOnAttributeChanged']
19
- const useOnError: typeof import('@jasonshimmy/custom-elements-runtime')['useOnError']
20
- const useStyle: typeof import('@jasonshimmy/custom-elements-runtime')['useStyle']
21
- const useDesignTokens: typeof import('@jasonshimmy/custom-elements-runtime')['useDesignTokens']
22
- const useGlobalStyle: typeof import('@jasonshimmy/custom-elements-runtime')['useGlobalStyle']
23
- const useExpose: typeof import('@jasonshimmy/custom-elements-runtime')['useExpose']
24
- const useSlots: typeof import('@jasonshimmy/custom-elements-runtime')['useSlots']
25
- const provide: typeof import('@jasonshimmy/custom-elements-runtime')['provide']
26
- const inject: typeof import('@jasonshimmy/custom-elements-runtime')['inject']
27
- const createComposable: typeof import('@jasonshimmy/custom-elements-runtime')['createComposable']
28
- const nextTick: typeof import('@jasonshimmy/custom-elements-runtime')['nextTick']
29
- const defineModel: typeof import('@jasonshimmy/custom-elements-runtime')['defineModel']
30
- const getCurrentComponentContext: typeof import('@jasonshimmy/custom-elements-runtime')['getCurrentComponentContext']
31
- const isReactiveState: typeof import('@jasonshimmy/custom-elements-runtime')['isReactiveState']
32
- const unsafeHTML: typeof import('@jasonshimmy/custom-elements-runtime')['unsafeHTML']
33
- const decodeEntities: typeof import('@jasonshimmy/custom-elements-runtime')['decodeEntities']
34
- const useTeleport: typeof import('@jasonshimmy/custom-elements-runtime')['useTeleport']
35
-
36
- const when: typeof import('@jasonshimmy/custom-elements-runtime/directives')['when']
37
- const each: typeof import('@jasonshimmy/custom-elements-runtime/directives')['each']
38
- const match: typeof import('@jasonshimmy/custom-elements-runtime/directives')['match']
39
- const anchorBlock: typeof import('@jasonshimmy/custom-elements-runtime/directives')['anchorBlock']
40
-
41
- const useHead: typeof import('@jasonshimmy/vite-plugin-cer-app/composables')['useHead']
42
- const usePageData: typeof import('@jasonshimmy/vite-plugin-cer-app/composables')['usePageData']
43
- const useInject: typeof import('@jasonshimmy/vite-plugin-cer-app/composables')['useInject']
44
-
45
- const useKsCounter: typeof import('./app/composables/useKsCounter')['useKsCounter']
46
-
47
- // SSR loader data injected as window.__CER_DATA__ by the server.
48
- // Consumed once by usePageData() during client hydration.
49
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
- var __CER_DATA__: any
51
- }
@@ -1,35 +0,0 @@
1
- // AUTO-GENERATED by @jasonshimmy/vite-plugin-cer-app
2
- // Do not edit — regenerated automatically on dev server start and build.
3
-
4
- declare module 'virtual:cer-routes' {
5
- import type { Route } from '@jasonshimmy/custom-elements-runtime/router'
6
- const routes: Route[]
7
- export default routes
8
- }
9
-
10
- declare module 'virtual:cer-layouts' {}
11
-
12
- declare module 'virtual:cer-plugins' {
13
- import type { AppPlugin } from '@jasonshimmy/vite-plugin-cer-app/types'
14
- const plugins: AppPlugin[]
15
- export default plugins
16
- }
17
-
18
- declare module 'virtual:cer-composables' {
19
- export { useKsCounter } from './app/composables/useKsCounter'
20
- }
21
-
22
- declare module 'virtual:cer-middleware' {
23
- const middleware: Record<string, Function>
24
- export { middleware }
25
- }
26
-
27
- declare module 'virtual:cer-loading' {
28
- export const hasLoading: boolean
29
- export const loadingTag: string | null
30
- }
31
-
32
- declare module 'virtual:cer-error' {
33
- export const hasError: boolean
34
- export const errorTag: string | null
35
- }
@@ -1,30 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "paths": {
4
- "~/*": [
5
- "./app/*"
6
- ],
7
- "~/pages/*": [
8
- "./app/pages/*"
9
- ],
10
- "~/layouts/*": [
11
- "./app/layouts/*"
12
- ],
13
- "~/components/*": [
14
- "./app/components/*"
15
- ],
16
- "~/composables/*": [
17
- "./app/composables/*"
18
- ],
19
- "~/plugins/*": [
20
- "./app/plugins/*"
21
- ],
22
- "~/middleware/*": [
23
- "./app/middleware/*"
24
- ],
25
- "~/assets/*": [
26
- "./app/assets/*"
27
- ]
28
- }
29
- }
30
- }
@@ -1,43 +0,0 @@
1
- import { appendFileSync } from 'node:fs'
2
- import type { RequestHookContext, ResponseHookContext, ErrorHookContext } from '@jasonshimmy/vite-plugin-cer-app/types'
3
-
4
- const LOG_FILE = '/tmp/cer-hooks-test.log'
5
-
6
- // Kitchen sink configuration — mode is overridden by --mode CLI flag
7
- export default {
8
- content: {},
9
- jitCss: {
10
- customColors: {
11
- // A distinctive purple used to verify customColors reaches the runtime.
12
- brand: { '500': '#7c3aed', '100': '#ede9fe', '900': '#4c1d95' },
13
- },
14
- },
15
- ssg: { routes: 'auto', concurrency: 2 },
16
- autoImports: { runtime: true, components: true, composables: true },
17
- runtimeConfig: {
18
- public: {
19
- appName: 'Kitchen Sink',
20
- },
21
- private: {
22
- // Resolved from SESSION_SECRET env var at server startup.
23
- // A hardcoded fallback is used here so e2e tests work without env setup.
24
- sessionSecret: 'kitchen-sink-e2e-test-secret-at-least-32-chars!',
25
- },
26
- },
27
- // i18n: prefix_except_default keeps default-locale (en) URLs unchanged so all
28
- // existing e2e tests continue to pass. Only /fr-prefixed variants are new.
29
- i18n: {
30
- locales: ['en', 'fr'],
31
- defaultLocale: 'en',
32
- strategy: 'prefix_except_default',
33
- },
34
- onRequest(ctx: RequestHookContext) {
35
- try { appendFileSync(LOG_FILE, `REQUEST ${ctx.method} ${ctx.path}\n`) } catch { /* ignore */ }
36
- },
37
- onResponse(ctx: ResponseHookContext) {
38
- try { appendFileSync(LOG_FILE, `RESPONSE ${ctx.statusCode} ${ctx.method} ${ctx.path} ${ctx.duration}ms\n`) } catch { /* ignore */ }
39
- },
40
- onError(_err: unknown, ctx: ErrorHookContext) {
41
- try { appendFileSync(LOG_FILE, `ERROR ${ctx.type} ${ctx.path}\n`) } catch { /* ignore */ }
42
- },
43
- }
@@ -1,8 +0,0 @@
1
- ---
2
- title: Guides Home
3
- description: Landing page for the guides section.
4
- ---
5
-
6
- # Guides Home
7
-
8
- Welcome to the ordered guides section.
@@ -1,8 +0,0 @@
1
- ---
2
- title: Intro Guide
3
- description: The first ordered guide.
4
- ---
5
-
6
- # Intro Guide
7
-
8
- This guide should appear before the advanced guide.
@@ -1,8 +0,0 @@
1
- ---
2
- title: Advanced Guide
3
- description: The later ordered guide.
4
- ---
5
-
6
- # Advanced Guide
7
-
8
- This guide should appear after the intro guide.
@@ -1,26 +0,0 @@
1
- ---
2
- title: Hello World
3
- description: The first content blog post — tests excerpt and TOC extraction.
4
- date: 2026-04-01
5
- draft: false
6
- ---
7
-
8
- # Hello World
9
-
10
- Welcome to the content layer.
11
-
12
- <!-- more -->
13
-
14
- ## Introduction
15
-
16
- This post exercises the `<!-- more -->` excerpt boundary.
17
-
18
- ## Features
19
-
20
- - Parsed frontmatter
21
- - TOC extraction
22
- - Excerpt support
23
-
24
- ## Conclusion
25
-
26
- That's all for now.
@@ -1,10 +0,0 @@
1
- ---
2
- title: Draft Post
3
- description: This post is a draft and should be excluded from production builds.
4
- date: 2026-04-02
5
- draft: true
6
- ---
7
-
8
- # Draft Post
9
-
10
- This post should never appear in production because `draft: true`.
@@ -1,8 +0,0 @@
1
- ---
2
- title: Blog
3
- description: All blog posts — used as a listing page in content tests.
4
- ---
5
-
6
- # Blog
7
-
8
- Browse all posts below.
@@ -1,7 +0,0 @@
1
- # Derived From Body
2
-
3
- This description is derived from the first paragraph because no frontmatter is present.
4
-
5
- ## More Content
6
-
7
- Additional body content below the first paragraph.
@@ -1,48 +0,0 @@
1
- ---
2
- title: Getting Started
3
- description: How to install and configure the content layer — tests TOC depth and heading ids.
4
- ---
5
-
6
- # Getting Started
7
-
8
- This guide walks you through installation and basic usage.
9
-
10
- <ks-badge>Docs Badge</ks-badge>
11
-
12
- ## Installation
13
-
14
- Run the following command:
15
-
16
- ```sh
17
- npm install @jasonshimmy/vite-plugin-cer-app
18
- ```
19
-
20
- ## Configuration
21
-
22
- Add the `content` option to `cer.config.ts`:
23
-
24
- ```ts
25
- export default defineConfig({
26
- content: {},
27
- })
28
- ```
29
-
30
- ### Options
31
-
32
- | Option | Default | Description |
33
- |---|---|---|
34
- | `dir` | `'content'` | Content directory relative to `app/`. |
35
- | `drafts` | `false` | Include draft items in production builds. |
36
-
37
- ## Usage
38
-
39
- Use `queryContent()` in any page or loader:
40
-
41
- ```ts
42
- const posts = await queryContent('/blog').find()
43
- ```
44
-
45
- ## Next Steps
46
-
47
- - Read the [full docs](https://example.com)
48
- - Join the community
@@ -1,16 +0,0 @@
1
- ---
2
- title: Welcome
3
- description: Kitchen sink home content page — verifies root content query.
4
- ---
5
-
6
- # Welcome
7
-
8
- This is the **root content** item (`_path: '/'`).
9
-
10
- <!-- more -->
11
-
12
- Below the excerpt boundary.
13
-
14
- - Item A
15
- - Item B
16
- - Item C
@@ -1,12 +0,0 @@
1
- // Echo endpoint — used by e2e tests to verify req.body and req.query parsing.
2
- //
3
- // POST /api/echo { ...any } → echoes the JSON body back
4
- // GET /api/echo?k=v → echoes the query string back
5
-
6
- export const GET = (req: any, res: any) => {
7
- res.json({ query: req.query })
8
- }
9
-
10
- export const POST = (req: any, res: any) => {
11
- res.json({ echo: req.body })
12
- }
@@ -1,3 +0,0 @@
1
- export const GET = (_req: any, res: any) => {
2
- res.json({ status: 'ok', service: 'kitchen-sink' })
3
- }
@@ -1,11 +0,0 @@
1
- import { posts } from '../../data/posts'
2
-
3
- export const GET = (req: any, res: any) => {
4
- const { slug } = req.params
5
- const post = posts.find((p) => p.slug === slug)
6
- if (!post) {
7
- res.statusCode = 404
8
- return res.json({ error: 'Not found' })
9
- }
10
- res.json(post)
11
- }
@@ -1,5 +0,0 @@
1
- import { posts } from '../../data/posts'
2
-
3
- export const GET = (_req: any, res: any) => {
4
- res.json(posts)
5
- }
@@ -1,23 +0,0 @@
1
- // Session API endpoints — used by e2e tests to verify useSession() round-trips.
2
- //
3
- // GET /api/session → { userId: string | null }
4
- // POST /api/session → creates a session with userId = 'test-user'
5
- // DELETE /api/session → clears the session
6
- import { useSession } from '@jasonshimmy/vite-plugin-cer-app/composables'
7
-
8
- export const GET = async (_req: any, res: any) => {
9
- const session = useSession<{ userId: string }>()
10
- const data = await session.get()
11
- res.json({ userId: data?.userId ?? null })
12
- }
13
-
14
- export const POST = async (_req: any, res: any) => {
15
- const session = useSession<{ userId: string }>()
16
- await session.set({ userId: 'test-user' })
17
- res.json({ ok: true })
18
- }
19
-
20
- export const DELETE = async (_req: any, res: any) => {
21
- await useSession().clear()
22
- res.json({ ok: true })
23
- }