@jasonshimmy/vite-plugin-cer-app 0.23.2 → 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 (392) 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/create/index.d.ts +11 -1
  18. package/dist/cli/create/index.d.ts.map +1 -1
  19. package/dist/cli/create/index.js +135 -65
  20. package/dist/cli/create/index.js.map +1 -1
  21. package/dist/cli/create/templates/spa/package.json.tpl +5 -3
  22. package/dist/cli/create/templates/ssg/cer.config.ts.tpl +2 -0
  23. package/dist/cli/create/templates/ssg/package.json.tpl +5 -3
  24. package/dist/cli/create/templates/ssr/package.json.tpl +5 -3
  25. package/dist/cli/index.js +2 -0
  26. package/dist/cli/index.js.map +1 -1
  27. package/dist/index.d.ts +3 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/plugin/build-ssg.d.ts +22 -6
  30. package/dist/plugin/build-ssg.d.ts.map +1 -1
  31. package/dist/plugin/build-ssg.js +227 -17
  32. package/dist/plugin/build-ssg.js.map +1 -1
  33. package/dist/plugin/content/parser.d.ts.map +1 -1
  34. package/dist/plugin/content/parser.js +54 -10
  35. package/dist/plugin/content/parser.js.map +1 -1
  36. package/dist/plugin/dev-server.d.ts +4 -1
  37. package/dist/plugin/dev-server.d.ts.map +1 -1
  38. package/dist/plugin/dev-server.js.map +1 -1
  39. package/dist/plugin/dts-generator.d.ts.map +1 -1
  40. package/dist/plugin/dts-generator.js +50 -8
  41. package/dist/plugin/dts-generator.js.map +1 -1
  42. package/dist/plugin/generated-dir.d.ts +2 -0
  43. package/dist/plugin/generated-dir.d.ts.map +1 -1
  44. package/dist/plugin/generated-dir.js +17 -6
  45. package/dist/plugin/generated-dir.js.map +1 -1
  46. package/dist/plugin/html-post-process.d.ts +6 -0
  47. package/dist/plugin/html-post-process.d.ts.map +1 -1
  48. package/dist/plugin/html-post-process.js +24 -0
  49. package/dist/plugin/html-post-process.js.map +1 -1
  50. package/dist/plugin/index.d.ts.map +1 -1
  51. package/dist/plugin/index.js +60 -13
  52. package/dist/plugin/index.js.map +1 -1
  53. package/dist/plugin/transforms/auto-import.d.ts.map +1 -1
  54. package/dist/plugin/transforms/auto-import.js +7 -0
  55. package/dist/plugin/transforms/auto-import.js.map +1 -1
  56. package/dist/plugin/transforms/prune-runtime-css.d.ts +8 -0
  57. package/dist/plugin/transforms/prune-runtime-css.d.ts.map +1 -0
  58. package/dist/plugin/transforms/prune-runtime-css.js +40 -0
  59. package/dist/plugin/transforms/prune-runtime-css.js.map +1 -0
  60. package/dist/runtime/app-template.d.ts +1 -1
  61. package/dist/runtime/app-template.d.ts.map +1 -1
  62. package/dist/runtime/app-template.js +206 -36
  63. package/dist/runtime/app-template.js.map +1 -1
  64. package/dist/runtime/composables/index.d.ts +4 -0
  65. package/dist/runtime/composables/index.d.ts.map +1 -1
  66. package/dist/runtime/composables/index.js +2 -0
  67. package/dist/runtime/composables/index.js.map +1 -1
  68. package/dist/runtime/composables/use-active-headings.d.ts +24 -0
  69. package/dist/runtime/composables/use-active-headings.d.ts.map +1 -0
  70. package/dist/runtime/composables/use-active-headings.js +112 -0
  71. package/dist/runtime/composables/use-active-headings.js.map +1 -0
  72. package/dist/runtime/composables/use-content-page.d.ts +45 -0
  73. package/dist/runtime/composables/use-content-page.d.ts.map +1 -0
  74. package/dist/runtime/composables/use-content-page.js +179 -0
  75. package/dist/runtime/composables/use-content-page.js.map +1 -0
  76. package/dist/runtime/composables/use-content-search.d.ts.map +1 -1
  77. package/dist/runtime/composables/use-content-search.js +1 -5
  78. package/dist/runtime/composables/use-content-search.js.map +1 -1
  79. package/dist/runtime/composables/use-fetch.d.ts +2 -1
  80. package/dist/runtime/composables/use-fetch.d.ts.map +1 -1
  81. package/dist/runtime/composables/use-fetch.js +112 -43
  82. package/dist/runtime/composables/use-fetch.js.map +1 -1
  83. package/dist/runtime/composables/use-route.d.ts.map +1 -1
  84. package/dist/runtime/composables/use-route.js +39 -11
  85. package/dist/runtime/composables/use-route.js.map +1 -1
  86. package/dist/runtime/content/client.js +2 -2
  87. package/dist/runtime/content/client.js.map +1 -1
  88. package/dist/runtime/entry-server-template.d.ts +16 -1
  89. package/dist/runtime/entry-server-template.d.ts.map +1 -1
  90. package/dist/runtime/entry-server-template.js +120 -13
  91. package/dist/runtime/entry-server-template.js.map +1 -1
  92. package/dist/types/config.d.ts +45 -4
  93. package/dist/types/config.d.ts.map +1 -1
  94. package/dist/types/config.js.map +1 -1
  95. package/dist/types/middleware.d.ts +2 -2
  96. package/dist/types/middleware.d.ts.map +1 -1
  97. package/package.json +22 -19
  98. package/.github/copilot-instructions.md +0 -169
  99. package/.github/workflows/publish.yml +0 -257
  100. package/.nvmrc +0 -1
  101. package/CHANGELOG.md +0 -236
  102. package/CLAUDE.md +0 -113
  103. package/commits.txt +0 -1
  104. package/cypress.config.ts +0 -16
  105. package/docs/authentication.md +0 -285
  106. package/docs/cli.md +0 -324
  107. package/docs/components.md +0 -237
  108. package/docs/composables.md +0 -907
  109. package/docs/configuration.md +0 -696
  110. package/docs/content.md +0 -570
  111. package/docs/data-loading.md +0 -336
  112. package/docs/getting-started.md +0 -237
  113. package/docs/head-management.md +0 -212
  114. package/docs/i18n.md +0 -159
  115. package/docs/layouts.md +0 -224
  116. package/docs/middleware.md +0 -234
  117. package/docs/plugins.md +0 -170
  118. package/docs/rendering-modes.md +0 -377
  119. package/docs/routing.md +0 -485
  120. package/docs/server-api.md +0 -253
  121. package/docs/testing.md +0 -455
  122. package/docs/use-fetch.md +0 -183
  123. package/e2e/cypress/e2e/api.cy.ts +0 -123
  124. package/e2e/cypress/e2e/async-component.cy.ts +0 -27
  125. package/e2e/cypress/e2e/component-splitting.cy.ts +0 -50
  126. package/e2e/cypress/e2e/content.cy.ts +0 -425
  127. package/e2e/cypress/e2e/cookie.cy.ts +0 -85
  128. package/e2e/cypress/e2e/data.cy.ts +0 -158
  129. package/e2e/cypress/e2e/error-boundary.cy.ts +0 -88
  130. package/e2e/cypress/e2e/fouc.cy.ts +0 -254
  131. package/e2e/cypress/e2e/group-meta.cy.ts +0 -36
  132. package/e2e/cypress/e2e/head.cy.ts +0 -89
  133. package/e2e/cypress/e2e/i18n.cy.ts +0 -79
  134. package/e2e/cypress/e2e/interactive.cy.ts +0 -137
  135. package/e2e/cypress/e2e/isr-nested-runtime.cy.ts +0 -102
  136. package/e2e/cypress/e2e/jit-css-custom-colors.cy.ts +0 -43
  137. package/e2e/cypress/e2e/middleware-chain.cy.ts +0 -89
  138. package/e2e/cypress/e2e/middleware-status.cy.ts +0 -30
  139. package/e2e/cypress/e2e/middleware.cy.ts +0 -45
  140. package/e2e/cypress/e2e/navigate.cy.ts +0 -39
  141. package/e2e/cypress/e2e/observability.cy.ts +0 -77
  142. package/e2e/cypress/e2e/per-route-error.cy.ts +0 -42
  143. package/e2e/cypress/e2e/per-route-render.cy.ts +0 -70
  144. package/e2e/cypress/e2e/preview-hardening.cy.ts +0 -88
  145. package/e2e/cypress/e2e/routes.cy.ts +0 -128
  146. package/e2e/cypress/e2e/seo-meta.cy.ts +0 -108
  147. package/e2e/cypress/e2e/server-middleware.cy.ts +0 -46
  148. package/e2e/cypress/e2e/session-rotation.cy.ts +0 -25
  149. package/e2e/cypress/e2e/session.cy.ts +0 -73
  150. package/e2e/cypress/e2e/ssr-render-error.cy.ts +0 -68
  151. package/e2e/cypress/e2e/synthetic-404.cy.ts +0 -45
  152. package/e2e/cypress/e2e/use-page-data.cy.ts +0 -122
  153. package/e2e/cypress/e2e/use-state.cy.ts +0 -138
  154. package/e2e/cypress/support/commands.ts +0 -120
  155. package/e2e/cypress/support/e2e.ts +0 -10
  156. package/e2e/cypress/tsconfig.json +0 -14
  157. package/e2e/kitchen-sink/app/components/ks-badge.ts +0 -8
  158. package/e2e/kitchen-sink/app/composables/useKsCounter.ts +0 -9
  159. package/e2e/kitchen-sink/app/error.ts +0 -18
  160. package/e2e/kitchen-sink/app/layouts/admin.ts +0 -13
  161. package/e2e/kitchen-sink/app/layouts/default.ts +0 -25
  162. package/e2e/kitchen-sink/app/layouts/group.ts +0 -9
  163. package/e2e/kitchen-sink/app/layouts/minimal.ts +0 -7
  164. package/e2e/kitchen-sink/app/loading.ts +0 -9
  165. package/e2e/kitchen-sink/app/middleware/auth.ts +0 -9
  166. package/e2e/kitchen-sink/app/middleware/custom-log.ts +0 -4
  167. package/e2e/kitchen-sink/app/middleware/group-auth.ts +0 -7
  168. package/e2e/kitchen-sink/app/middleware/logger.ts +0 -14
  169. package/e2e/kitchen-sink/app/pages/(auth)/login.ts +0 -13
  170. package/e2e/kitchen-sink/app/pages/(auth)/protected.ts +0 -16
  171. package/e2e/kitchen-sink/app/pages/404.ts +0 -9
  172. package/e2e/kitchen-sink/app/pages/about.ts +0 -17
  173. package/e2e/kitchen-sink/app/pages/admin/_layout.ts +0 -1
  174. package/e2e/kitchen-sink/app/pages/admin/dashboard.ts +0 -11
  175. package/e2e/kitchen-sink/app/pages/async-component-error-test.ts +0 -18
  176. package/e2e/kitchen-sink/app/pages/async-component-test.ts +0 -18
  177. package/e2e/kitchen-sink/app/pages/blog/[slug].ts +0 -59
  178. package/e2e/kitchen-sink/app/pages/blog/index.ts +0 -51
  179. package/e2e/kitchen-sink/app/pages/content-blog.ts +0 -37
  180. package/e2e/kitchen-sink/app/pages/content-doc.ts +0 -42
  181. package/e2e/kitchen-sink/app/pages/content-fallback.ts +0 -36
  182. package/e2e/kitchen-sink/app/pages/content-guides.ts +0 -35
  183. package/e2e/kitchen-sink/app/pages/content-index.ts +0 -39
  184. package/e2e/kitchen-sink/app/pages/content-search.ts +0 -36
  185. package/e2e/kitchen-sink/app/pages/cookie-test.ts +0 -22
  186. package/e2e/kitchen-sink/app/pages/counter.ts +0 -17
  187. package/e2e/kitchen-sink/app/pages/group-auth-blocked.ts +0 -9
  188. package/e2e/kitchen-sink/app/pages/group-meta-test/_layout.ts +0 -6
  189. package/e2e/kitchen-sink/app/pages/group-meta-test/custom-mw.ts +0 -14
  190. package/e2e/kitchen-sink/app/pages/group-meta-test/page.ts +0 -9
  191. package/e2e/kitchen-sink/app/pages/group-meta-test/protected.ts +0 -8
  192. package/e2e/kitchen-sink/app/pages/head.ts +0 -20
  193. package/e2e/kitchen-sink/app/pages/i18n-test.ts +0 -14
  194. package/e2e/kitchen-sink/app/pages/index.ts +0 -27
  195. package/e2e/kitchen-sink/app/pages/isr-test.ts +0 -17
  196. package/e2e/kitchen-sink/app/pages/items/[id].ts +0 -20
  197. package/e2e/kitchen-sink/app/pages/jit-css-custom-colors-test.ts +0 -14
  198. package/e2e/kitchen-sink/app/pages/loader-error-test.ts +0 -13
  199. package/e2e/kitchen-sink/app/pages/loader-props-test.ts +0 -19
  200. package/e2e/kitchen-sink/app/pages/loader-response-error-test.ts +0 -13
  201. package/e2e/kitchen-sink/app/pages/middleware-chain-test.ts +0 -12
  202. package/e2e/kitchen-sink/app/pages/middleware-status-test.ts +0 -9
  203. package/e2e/kitchen-sink/app/pages/navigate-test.ts +0 -16
  204. package/e2e/kitchen-sink/app/pages/observability-test.ts +0 -25
  205. package/e2e/kitchen-sink/app/pages/per-route-error-test.error.ts +0 -13
  206. package/e2e/kitchen-sink/app/pages/per-route-error-test.ts +0 -15
  207. package/e2e/kitchen-sink/app/pages/plugin-dsd-test.ts +0 -10
  208. package/e2e/kitchen-sink/app/pages/render-error-test.ts +0 -12
  209. package/e2e/kitchen-sink/app/pages/render-server-test.ts +0 -12
  210. package/e2e/kitchen-sink/app/pages/render-spa-test.ts +0 -12
  211. package/e2e/kitchen-sink/app/pages/route-info.ts +0 -14
  212. package/e2e/kitchen-sink/app/pages/seo-test.ts +0 -23
  213. package/e2e/kitchen-sink/app/pages/session-rotation-test.ts +0 -25
  214. package/e2e/kitchen-sink/app/pages/use-state-test.ts +0 -37
  215. package/e2e/kitchen-sink/app/plugins/01.setup.ts +0 -7
  216. package/e2e/kitchen-sink/app/plugins/02.ks-plugin-components.ts +0 -27
  217. package/e2e/kitchen-sink/cer-auto-imports.d.ts +0 -51
  218. package/e2e/kitchen-sink/cer-env.d.ts +0 -35
  219. package/e2e/kitchen-sink/cer-tsconfig.json +0 -30
  220. package/e2e/kitchen-sink/cer.config.ts +0 -43
  221. package/e2e/kitchen-sink/content/01.guides/01.index.md +0 -8
  222. package/e2e/kitchen-sink/content/01.guides/02.intro.md +0 -8
  223. package/e2e/kitchen-sink/content/01.guides/10.advanced.md +0 -8
  224. package/e2e/kitchen-sink/content/blog/2026-04-01-hello.md +0 -26
  225. package/e2e/kitchen-sink/content/blog/2026-04-02-draft.md +0 -10
  226. package/e2e/kitchen-sink/content/blog/index.md +0 -8
  227. package/e2e/kitchen-sink/content/blog/no-frontmatter.md +0 -7
  228. package/e2e/kitchen-sink/content/docs/getting-started.md +0 -48
  229. package/e2e/kitchen-sink/content/index.md +0 -16
  230. package/e2e/kitchen-sink/server/api/echo.ts +0 -12
  231. package/e2e/kitchen-sink/server/api/health.ts +0 -3
  232. package/e2e/kitchen-sink/server/api/posts/[slug].ts +0 -11
  233. package/e2e/kitchen-sink/server/api/posts/index.ts +0 -5
  234. package/e2e/kitchen-sink/server/api/session.ts +0 -23
  235. package/e2e/kitchen-sink/server/data/posts.ts +0 -21
  236. package/e2e/kitchen-sink/server/middleware/01-headers.ts +0 -6
  237. package/e2e/kitchen-sink/server/middleware/02-status-test.ts +0 -10
  238. package/e2e/kitchen-sink/tsconfig.json +0 -3
  239. package/e2e/scripts/clean.mjs +0 -14
  240. package/eslint.config.ts +0 -22
  241. package/src/__tests__/cli/adapters/cloudflare-worker.integration.test.ts +0 -132
  242. package/src/__tests__/cli/adapters/cloudflare.test.ts +0 -332
  243. package/src/__tests__/cli/adapters/netlify-bridge.integration.test.ts +0 -139
  244. package/src/__tests__/cli/adapters/netlify.test.ts +0 -286
  245. package/src/__tests__/cli/adapters/vercel-launcher.integration.test.ts +0 -129
  246. package/src/__tests__/cli/adapters/vercel.test.ts +0 -263
  247. package/src/__tests__/cli/preview-hardening.test.ts +0 -265
  248. package/src/__tests__/cli/preview-isr.test.ts +0 -320
  249. package/src/__tests__/index.test.ts +0 -21
  250. package/src/__tests__/plugin/app-template.test.ts +0 -166
  251. package/src/__tests__/plugin/build-ssg-render.test.ts +0 -155
  252. package/src/__tests__/plugin/build-ssg.test.ts +0 -598
  253. package/src/__tests__/plugin/build-ssr.test.ts +0 -192
  254. package/src/__tests__/plugin/cer-app-plugin.test.ts +0 -552
  255. package/src/__tests__/plugin/content/emitter.test.ts +0 -117
  256. package/src/__tests__/plugin/content/loader.test.ts +0 -154
  257. package/src/__tests__/plugin/content/parser.test.ts +0 -381
  258. package/src/__tests__/plugin/content/path-utils.test.ts +0 -69
  259. package/src/__tests__/plugin/content/search.test.ts +0 -119
  260. package/src/__tests__/plugin/dev-server.test.ts +0 -813
  261. package/src/__tests__/plugin/dts-generator.test.ts +0 -394
  262. package/src/__tests__/plugin/entry-server-template.test.ts +0 -385
  263. package/src/__tests__/plugin/generated-dir.test.ts +0 -144
  264. package/src/__tests__/plugin/html-post-process.test.ts +0 -146
  265. package/src/__tests__/plugin/path-utils.test.ts +0 -411
  266. package/src/__tests__/plugin/resolve-config.test.ts +0 -233
  267. package/src/__tests__/plugin/scanner.test.ts +0 -186
  268. package/src/__tests__/plugin/transforms/auto-import.test.ts +0 -510
  269. package/src/__tests__/plugin/transforms/head-inject.test.ts +0 -178
  270. package/src/__tests__/plugin/virtual/composables.test.ts +0 -57
  271. package/src/__tests__/plugin/virtual/content-components.test.ts +0 -66
  272. package/src/__tests__/plugin/virtual/error.test.ts +0 -71
  273. package/src/__tests__/plugin/virtual/layouts.test.ts +0 -70
  274. package/src/__tests__/plugin/virtual/loading.test.ts +0 -72
  275. package/src/__tests__/plugin/virtual/middleware.test.ts +0 -83
  276. package/src/__tests__/plugin/virtual/plugins.test.ts +0 -129
  277. package/src/__tests__/plugin/virtual/routes.test.ts +0 -884
  278. package/src/__tests__/plugin/virtual/server-api.test.ts +0 -164
  279. package/src/__tests__/plugin/virtual/server-middleware.test.ts +0 -102
  280. package/src/__tests__/runtime/app-template.test.ts +0 -208
  281. package/src/__tests__/runtime/define-middleware.test.ts +0 -64
  282. package/src/__tests__/runtime/define-server-middleware.test.ts +0 -54
  283. package/src/__tests__/runtime/entry-client-template.test.ts +0 -61
  284. package/src/__tests__/runtime/isr-handler.test.ts +0 -338
  285. package/src/__tests__/runtime/oauth/handler.test.ts +0 -358
  286. package/src/__tests__/runtime/oauth/providers.test.ts +0 -47
  287. package/src/__tests__/runtime/oauth-index.test.ts +0 -43
  288. package/src/__tests__/runtime/use-auth.test.ts +0 -169
  289. package/src/__tests__/runtime/use-content-search-composable.test.ts +0 -405
  290. package/src/__tests__/runtime/use-content-search.test.ts +0 -163
  291. package/src/__tests__/runtime/use-content.test.ts +0 -226
  292. package/src/__tests__/runtime/use-cookie.test.ts +0 -277
  293. package/src/__tests__/runtime/use-fetch-component.test.ts +0 -214
  294. package/src/__tests__/runtime/use-fetch.test.ts +0 -377
  295. package/src/__tests__/runtime/use-head.test.ts +0 -311
  296. package/src/__tests__/runtime/use-inject-client.test.ts +0 -67
  297. package/src/__tests__/runtime/use-inject.test.ts +0 -66
  298. package/src/__tests__/runtime/use-locale.test.ts +0 -152
  299. package/src/__tests__/runtime/use-navigate.test.ts +0 -121
  300. package/src/__tests__/runtime/use-page-data.test.ts +0 -298
  301. package/src/__tests__/runtime/use-route.test.ts +0 -156
  302. package/src/__tests__/runtime/use-runtime-config.test.ts +0 -182
  303. package/src/__tests__/runtime/use-seo-meta.test.ts +0 -109
  304. package/src/__tests__/runtime/use-session.test.ts +0 -320
  305. package/src/__tests__/runtime/use-state.test.ts +0 -340
  306. package/src/__tests__/types/config.test.ts +0 -18
  307. package/src/cli/adapters/cloudflare.ts +0 -335
  308. package/src/cli/adapters/netlify.ts +0 -326
  309. package/src/cli/adapters/vercel.ts +0 -311
  310. package/src/cli/commands/adapt.ts +0 -84
  311. package/src/cli/commands/build.ts +0 -165
  312. package/src/cli/commands/dev.ts +0 -125
  313. package/src/cli/commands/generate.ts +0 -91
  314. package/src/cli/commands/preview-isr.ts +0 -172
  315. package/src/cli/commands/preview.ts +0 -523
  316. package/src/cli/create/index.ts +0 -275
  317. package/src/cli/create/templates/shared/.gitignore.tpl +0 -25
  318. package/src/cli/create/templates/shared/app/layouts/default.ts.tpl +0 -15
  319. package/src/cli/create/templates/shared/app/pages/index.ts.tpl +0 -8
  320. package/src/cli/create/templates/shared/index.html.tpl +0 -12
  321. package/src/cli/create/templates/shared/tsconfig.json.tpl +0 -6
  322. package/src/cli/create/templates/spa/cer.config.ts.tpl +0 -6
  323. package/src/cli/create/templates/spa/package.json.tpl +0 -18
  324. package/src/cli/create/templates/ssg/cer.config.ts.tpl +0 -10
  325. package/src/cli/create/templates/ssg/package.json.tpl +0 -19
  326. package/src/cli/create/templates/ssr/cer.config.ts.tpl +0 -6
  327. package/src/cli/create/templates/ssr/package.json.tpl +0 -18
  328. package/src/cli/index.ts +0 -22
  329. package/src/index.ts +0 -20
  330. package/src/plugin/build-ssg.ts +0 -403
  331. package/src/plugin/build-ssr.ts +0 -134
  332. package/src/plugin/content/emitter.ts +0 -50
  333. package/src/plugin/content/index.ts +0 -233
  334. package/src/plugin/content/parser.ts +0 -259
  335. package/src/plugin/content/path-utils.ts +0 -55
  336. package/src/plugin/content/scanner.ts +0 -26
  337. package/src/plugin/content/search.ts +0 -28
  338. package/src/plugin/dev-server.ts +0 -379
  339. package/src/plugin/dts-generator.ts +0 -273
  340. package/src/plugin/generated-dir.ts +0 -121
  341. package/src/plugin/html-post-process.ts +0 -96
  342. package/src/plugin/index.ts +0 -584
  343. package/src/plugin/path-utils.ts +0 -186
  344. package/src/plugin/scanner.ts +0 -65
  345. package/src/plugin/transforms/auto-import.ts +0 -206
  346. package/src/plugin/transforms/head-inject.ts +0 -161
  347. package/src/plugin/virtual/composables.ts +0 -28
  348. package/src/plugin/virtual/content-components.ts +0 -83
  349. package/src/plugin/virtual/error.ts +0 -34
  350. package/src/plugin/virtual/layouts.ts +0 -41
  351. package/src/plugin/virtual/loading.ts +0 -32
  352. package/src/plugin/virtual/middleware.ts +0 -45
  353. package/src/plugin/virtual/plugins.ts +0 -46
  354. package/src/plugin/virtual/routes.ts +0 -514
  355. package/src/plugin/virtual/server-api.ts +0 -85
  356. package/src/plugin/virtual/server-middleware.ts +0 -44
  357. package/src/runtime/app-template.ts +0 -377
  358. package/src/runtime/composables/define-middleware.ts +0 -17
  359. package/src/runtime/composables/define-server-middleware.ts +0 -18
  360. package/src/runtime/composables/index.ts +0 -27
  361. package/src/runtime/composables/use-auth.ts +0 -125
  362. package/src/runtime/composables/use-content-search.ts +0 -205
  363. package/src/runtime/composables/use-content.ts +0 -146
  364. package/src/runtime/composables/use-cookie.ts +0 -135
  365. package/src/runtime/composables/use-fetch.ts +0 -438
  366. package/src/runtime/composables/use-head.ts +0 -234
  367. package/src/runtime/composables/use-inject.ts +0 -49
  368. package/src/runtime/composables/use-locale.ts +0 -109
  369. package/src/runtime/composables/use-navigate.ts +0 -58
  370. package/src/runtime/composables/use-page-data.ts +0 -93
  371. package/src/runtime/composables/use-route.ts +0 -71
  372. package/src/runtime/composables/use-runtime-config.ts +0 -123
  373. package/src/runtime/composables/use-seo-meta.ts +0 -80
  374. package/src/runtime/composables/use-session.ts +0 -186
  375. package/src/runtime/composables/use-state.ts +0 -92
  376. package/src/runtime/content/client.ts +0 -168
  377. package/src/runtime/entry-client-template.ts +0 -39
  378. package/src/runtime/entry-server-template.ts +0 -493
  379. package/src/runtime/isr-handler.ts +0 -184
  380. package/src/runtime/oauth/handler.ts +0 -407
  381. package/src/runtime/oauth/index.ts +0 -49
  382. package/src/runtime/oauth/providers.ts +0 -38
  383. package/src/types/api.ts +0 -40
  384. package/src/types/config.ts +0 -379
  385. package/src/types/content.ts +0 -66
  386. package/src/types/index.ts +0 -7
  387. package/src/types/middleware.ts +0 -63
  388. package/src/types/page.ts +0 -117
  389. package/src/types/plugin.ts +0 -34
  390. package/tsconfig.build.json +0 -10
  391. package/tsconfig.json +0 -19
  392. 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
- }