@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,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
- }