@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
package/docs/cli.md DELETED
@@ -1,324 +0,0 @@
1
- # CLI Reference
2
-
3
- The framework provides two CLI programs:
4
-
5
- - **`cer-app`** — dev server, build, preview, and generate commands
6
- - **`create-cer-app`** — project scaffolding
7
-
8
- Both are available after installing `@jasonshimmy/vite-plugin-cer-app` as a dev dependency, or globally:
9
-
10
- ```sh
11
- npm install -g @jasonshimmy/vite-plugin-cer-app
12
- ```
13
-
14
- ---
15
-
16
- ## `cer-app`
17
-
18
- ### `cer-app dev`
19
-
20
- Starts the Vite development server. Reads `cer.config.ts` from the current directory.
21
-
22
- ```sh
23
- cer-app dev [options]
24
- ```
25
-
26
- | Option | Default | Description |
27
- |---|---|---|
28
- | `-p, --port <port>` | `3000` | Port to listen on |
29
- | `--host <host>` | `localhost` | Host to bind to |
30
- | `--root <root>` | `process.cwd()` | Project root directory |
31
-
32
- **Examples:**
33
-
34
- ```sh
35
- cer-app dev
36
- cer-app dev --port 4000
37
- cer-app dev --host 0.0.0.0 --port 8080
38
- cer-app dev --root ./packages/my-app
39
- ```
40
-
41
- **Behavior:**
42
-
43
- - Loads and transpiles `cer.config.ts` (or `cer.config.js`)
44
- - Starts the Vite dev server with `cerApp()` plugins applied
45
- - In SSR mode: intercepts HTML requests and renders server-side
46
- - In SPA mode: standard Vite HMR
47
- - Watches `app/` and `server/` directories; full-reloads when pages or components are added/removed
48
- - Responds to `SIGTERM` and `SIGINT` with graceful shutdown
49
-
50
- ---
51
-
52
- ### `cer-app build`
53
-
54
- Builds the application for production.
55
-
56
- ```sh
57
- cer-app build [options]
58
- ```
59
-
60
- | Option | Default | Description |
61
- |---|---|---|
62
- | `--root <root>` | `process.cwd()` | Project root directory |
63
- | `--mode <mode>` | From `cer.config.ts` | Override rendering mode: `spa`, `ssr`, or `ssg` |
64
-
65
- **Examples:**
66
-
67
- ```sh
68
- cer-app build
69
- cer-app build --mode ssr
70
- cer-app build --mode ssg
71
- cer-app build --root ./packages/my-app
72
- ```
73
-
74
- **Per-mode behavior:**
75
-
76
- | Mode | Actions |
77
- |---|---|
78
- | `spa` | Standard `vite build` to `dist/` |
79
- | `ssr` | Dual build: client bundle to `dist/client/`, server bundle to `dist/server/server.js` |
80
- | `ssg` | Dual build + enumerate routes + render all paths to `dist/<path>/index.html` |
81
-
82
- ---
83
-
84
- ### `cer-app preview`
85
-
86
- Serves the production build locally.
87
-
88
- ```sh
89
- cer-app preview [options]
90
- ```
91
-
92
- | Option | Default | Description |
93
- |---|---|---|
94
- | `-p, --port <port>` | `4173` | Port to listen on |
95
- | `--host <host>` | `localhost` | Host to bind to |
96
- | `--root <root>` | `process.cwd()` | Project root directory |
97
- | `--ssr` | Auto-detected | Load `dist/server/server.js` as the request handler |
98
-
99
- **Examples:**
100
-
101
- ```sh
102
- cer-app preview # SPA/SSG static file server
103
- cer-app preview --ssr # SSR server using dist/server/server.js
104
- cer-app preview --port 8080
105
- ```
106
-
107
- **Behavior:**
108
-
109
- - If `dist/server/server.js` exists (or `--ssr` is passed), starts an SSR preview server
110
- - Static assets from `dist/client/` are served first; HTML requests fall through to the SSR handler
111
- - Otherwise, starts a static file server with SPA fallback (serves `index.html` for unknown paths)
112
- - Returns 404 for paths not found in `dist/` (static mode only)
113
- - **Path traversal protection:** all file requests are validated against the `dist/` root — requests attempting to escape it (e.g. `GET /../../../../etc/passwd`) receive a `400` response
114
- - **Security headers:** every response includes `X-Content-Type-Options: nosniff`, `X-Frame-Options: DENY`, and `Referrer-Policy: strict-origin-when-cross-origin`
115
- - **Smart Cache-Control:** Vite content-hashes assets placed in `/assets/` — these are served with `Cache-Control: public, max-age=31536000, immutable`. All other files (HTML, etc.) use `Cache-Control: no-cache` so browsers always revalidate
116
- - **Graceful shutdown:** on `SIGTERM` or `SIGINT`, the server stops accepting new connections and waits for in-flight requests to finish before exiting. A 10-second timeout triggers a forced exit if connections do not drain
117
- - **Request timeouts:** `headersTimeout` (10 s) aborts connections that stall while sending headers; `requestTimeout` (30 s) limits the total time allowed per request/response cycle, protecting against slow-client attacks
118
-
119
- ---
120
-
121
- ### `cer-app generate`
122
-
123
- Runs the SSG build pipeline. Alias for `cer-app build --mode ssg`.
124
-
125
- ```sh
126
- cer-app generate [options]
127
- ```
128
-
129
- | Option | Default | Description |
130
- |---|---|---|
131
- | `--root <root>` | `process.cwd()` | Project root directory |
132
-
133
- **Example:**
134
-
135
- ```sh
136
- cer-app generate
137
- ```
138
-
139
- **Output:**
140
-
141
- ```
142
- dist/
143
- index.html
144
- about/index.html
145
- blog/
146
- hello-world/index.html
147
- ssg-manifest.json
148
- ```
149
-
150
- ---
151
-
152
- ### `cer-app adapt`
153
-
154
- Adapts the production build for a deployment platform.
155
-
156
- Run this after `cer-app build` to produce the platform-specific output alongside `dist/`.
157
- You can also configure `adapter` in `cer.config.ts` so the adapter runs automatically at the end of every build.
158
-
159
- ```sh
160
- cer-app adapt [options]
161
- ```
162
-
163
- | Option | Default | Description |
164
- |---|---|---|
165
- | `--platform <platform>` | *(required)* | Target platform: `vercel`, `netlify`, or `cloudflare` |
166
- | `--root <root>` | `process.cwd()` | Project root directory |
167
-
168
- **Examples:**
169
-
170
- ```sh
171
- cer-app adapt --platform vercel
172
- cer-app adapt --platform netlify
173
- cer-app adapt --platform cloudflare
174
- cer-app adapt --platform vercel --root ./packages/my-app
175
- ```
176
-
177
- **Vercel behavior (`--platform vercel`):**
178
-
179
- - Writes `.vercel/output/` following the [Vercel Build Output API v3](https://vercel.com/docs/build-output-api/v3).
180
- - SSR builds: creates a Node.js Serverless Function at `.vercel/output/functions/index.func/` that routes `/api/*` to the exported API handlers and passes everything else to the SSR handler. Content-hashed assets are copied to `.vercel/output/static/` for CDN delivery.
181
- - SPA/SSG builds: copies static files to `.vercel/output/static/` with a SPA fallback route.
182
- - Deploy with `vercel deploy --prebuilt`.
183
-
184
- **Netlify behavior (`--platform netlify`):**
185
-
186
- - Writes `netlify/functions/ssr.mjs` — a Netlify Functions v2 bridge that converts the Web `Request`/`Response` API to the Node.js-style handler used by the server bundle. Handles `/api/*` routing inline.
187
- - Copies content-hashed assets to `.netlify/publish/` (no `index.html` — HTML is served by the function).
188
- - Writes `netlify.toml` with the publish directory, `Cache-Control` headers for assets, and a catch-all redirect to the SSR function.
189
- - SPA/SSG builds: writes `netlify.toml` only (no function needed).
190
- - SSR responses are streamed via the Web Streams `TransformStream` API — HTML chunks are forwarded to the client as they are written rather than waiting for the full page to render.
191
- - Deploy with `netlify deploy`.
192
-
193
- **Cloudflare behavior (`--platform cloudflare`):**
194
-
195
- - Writes `dist/_worker.js` — a Cloudflare Pages [Advanced Mode](https://developers.cloudflare.com/pages/functions/advanced-mode/) worker. The client HTML template is inlined in the worker as a string constant so `node:fs` is never needed at runtime.
196
- - Requires the `nodejs_compat` compatibility flag (written automatically into `wrangler.toml`) for `AsyncLocalStorage` and `node:stream` support.
197
- - Copies content-hashed assets to `dist/` alongside the worker. Cloudflare Pages CDN serves matched static files first; all other requests fall through to `_worker.js`.
198
- - SPA/SSG builds: no worker generated — Cloudflare Pages serves `dist/` as a static site.
199
- - SSR responses are streamed via the Web Streams `TransformStream` API — HTML chunks are forwarded to the client as they are written rather than waiting for the full page to render.
200
- - Deploy with `wrangler pages deploy dist`.
201
-
202
- **Auto-run via `cer.config.ts`:**
203
-
204
- ```ts
205
- // cer.config.ts — built-in adapter
206
- export default defineConfig({
207
- mode: 'ssr',
208
- adapter: 'vercel', // 'vercel' | 'netlify' | 'cloudflare'
209
- })
210
- ```
211
-
212
- ```ts
213
- // cer.config.ts — custom adapter (Railway, Fly.io, bare Node.js, Docker, …)
214
- export default defineConfig({
215
- mode: 'ssr',
216
- adapter: async (root) => {
217
- const { cp, mkdir } = await import('node:fs/promises')
218
- await mkdir(`${root}/deploy`, { recursive: true })
219
- await cp(`${root}/dist`, `${root}/deploy/dist`, { recursive: true })
220
- },
221
- })
222
- ```
223
-
224
- Pass `--platform custom` to `cer-app adapt` to run a function adapter without re-building:
225
-
226
- ```sh
227
- cer-app adapt --platform custom
228
- ```
229
-
230
- See [`adapter` in configuration.md](./configuration.md#adapter) for the full options reference.
231
-
232
- ---
233
-
234
- ## `create-cer-app`
235
-
236
- Scaffolds a new project from a template.
237
-
238
- > **Note:** Because the scaffolder is bundled inside `@jasonshimmy/vite-plugin-cer-app` rather than published as a standalone `create-cer-app` package, you must use the `--package` flag with `npx`:
239
- >
240
- > ```sh
241
- > npx --package @jasonshimmy/vite-plugin-cer-app create-cer-app [project-name] [options]
242
- > ```
243
-
244
- | Argument / Option | Description |
245
- |---|---|
246
- | `[project-name]` | Name of the project (also used as the output directory) |
247
- | `--mode <mode>` | Rendering mode: `spa`, `ssr`, or `ssg` (skips interactive prompt) |
248
- | `--dir <dir>` | Output directory (defaults to `project-name`) |
249
-
250
- **Examples:**
251
-
252
- ```sh
253
- npx --package @jasonshimmy/vite-plugin-cer-app create-cer-app # interactive prompts
254
- npx --package @jasonshimmy/vite-plugin-cer-app create-cer-app my-app # prompts for mode
255
- npx --package @jasonshimmy/vite-plugin-cer-app create-cer-app my-app --mode ssr # no prompts
256
- npx --package @jasonshimmy/vite-plugin-cer-app create-cer-app my-blog --mode ssg --dir ./sites/blog
257
- ```
258
-
259
- **Scaffolded files (all modes):**
260
-
261
- ```
262
- my-app/
263
- app/
264
- app.ts ← framework bootstrap (router, plugins, layout shell)
265
- pages/index.ts
266
- layouts/default.ts
267
- index.html
268
- cer.config.ts
269
- package.json
270
- ```
271
-
272
- **Per-mode differences:**
273
-
274
- | Mode | `cer.config.ts` | `package.json` scripts |
275
- |---|---|---|
276
- | SPA | `mode: 'spa'` | `dev`, `build`, `preview` |
277
- | SSR | `mode: 'ssr'` | `dev`, `build`, `preview --ssr` |
278
- | SSG | `mode: 'ssg'`, `ssg.routes: 'auto'` | `dev`, `build`, `preview`, `generate` |
279
-
280
- ---
281
-
282
- ## Config file loading
283
-
284
- Both `cer-app dev` and `cer-app build` load `cer.config.ts` by:
285
-
286
- 1. Bundling it with Vite into a temporary `.mjs` file in `node_modules/.cer-app-cache/`
287
- 2. Dynamically importing the result
288
-
289
- This allows TypeScript syntax in `cer.config.ts` with full type checking. The cached bundle is regenerated on every CLI invocation.
290
-
291
- If no `cer.config.ts` or `cer.config.js` is found, defaults are used and a warning is printed.
292
-
293
- ---
294
-
295
- ## Using with `npm run`
296
-
297
- After scaffolding, scripts are already set up in `package.json`:
298
-
299
- ```json
300
- {
301
- "scripts": {
302
- "dev": "cer-app dev",
303
- "build": "cer-app build",
304
- "preview": "cer-app preview",
305
- "generate": "cer-app generate"
306
- }
307
- }
308
- ```
309
-
310
- ```sh
311
- npm run dev
312
- npm run build
313
- npm run preview
314
- ```
315
-
316
- ---
317
-
318
- ## Using with `npx` (no global install)
319
-
320
- ```sh
321
- npx cer-app dev
322
- npx cer-app build
323
- npx --package @jasonshimmy/vite-plugin-cer-app create-cer-app my-app
324
- ```
@@ -1,237 +0,0 @@
1
- # Components
2
-
3
- Files in `app/components/` are automatically registered as custom elements and available throughout the application — no explicit import required.
4
-
5
- ---
6
-
7
- ## Creating a component
8
-
9
- ```ts
10
- // app/components/ui/my-button.ts
11
- component('my-button', () => {
12
- const props = useProps({ label: 'Click me', disabled: false })
13
-
14
- return html`
15
- <button :disabled="${props.disabled}">
16
- ${props.label}
17
- </button>
18
- `
19
- })
20
- ```
21
-
22
- Use it in any page or layout:
23
-
24
- ```ts
25
- // app/pages/index.ts
26
- component('page-index', () => {
27
- return html`
28
- <div>
29
- <my-button label="Submit"></my-button>
30
- </div>
31
- `
32
- })
33
- ```
34
-
35
- No import is needed. The framework scans each file's `html\`` templates and injects static `import` statements automatically.
36
-
37
- ---
38
-
39
- ## File → tag name
40
-
41
- The tag name is derived from the file path relative to `app/components/`, with path separators replaced by dashes. The file must call `component()` with the matching tag name.
42
-
43
- | File | Expected tag name |
44
- |---|---|
45
- | `app/components/my-button.ts` | `my-button` |
46
- | `app/components/ui/card.ts` | `ui-card` (or any name — tag name is from the `component()` call, not the path) |
47
- | `app/components/forms/text-input.ts` | `forms-text-input` |
48
-
49
- > **Note:** The tag name comes from the `component('tag-name', …)` call inside the file — the file path does not enforce a specific tag name.
50
-
51
- ---
52
-
53
- ## Code splitting
54
-
55
- Components are automatically code-split per page. Only the components a given page actually uses are loaded when that page is visited.
56
-
57
- The framework's build plugin (`cerComponentImports`) scans each page, layout, and component file for custom element tags in `html\`` template literals. For every tag it finds, it injects a static `import` at the top of that file pointing to the component's source file. Rollup then uses these graph edges to split components into the chunk for the page that uses them.
58
-
59
- **Example:** A project with 500 components where `/home` uses `<ks-badge>` and `/about` uses nothing will produce:
60
-
61
- - `home` chunk: includes `ks-badge.ts` + transitive deps
62
- - `about` chunk: does not include any component files
63
-
64
- Transitive dependencies are handled automatically: if `ks-card` uses `<ks-badge>` in its own template, the transform injects a `ks-badge` import into `ks-card.ts`, and Rollup traces the full dependency graph.
65
-
66
- **Components used in layouts** load eagerly by design. Since layouts are imported for every route, their component imports are always included in the initial bundle.
67
-
68
- ---
69
-
70
- ## Auto-import behavior
71
-
72
- When `autoImports.components` is `true` (the default), the framework's Vite transform hook:
73
-
74
- 1. Builds a manifest mapping tag names → source files by scanning `app/components/`
75
- 2. Transforms each page, layout, and component file: reads its `html\`` templates, extracts custom element tag names, and prepends static `import` statements for the matching source files
76
- 3. Rollup uses these imports as graph edges for automatic chunk splitting
77
-
78
- No generated virtual module is involved. Component registration is purely driven by the module graph.
79
-
80
- ---
81
-
82
- ## Opting out
83
-
84
- If you need to manage component registration manually, set `autoImports.components: false` in `cer.config.ts` and import components explicitly:
85
-
86
- ```ts
87
- // cer.config.ts
88
- export default defineConfig({
89
- autoImports: { components: false },
90
- })
91
- ```
92
-
93
- ```ts
94
- // app/plugins/components.ts — import from a plugin so they register before the first render
95
- import '../components/ui/my-button.ts'
96
- import '../components/forms/text-input.ts'
97
- ```
98
-
99
- ---
100
-
101
- ## Runtime auto-imports inside component files
102
-
103
- Files in `app/components/` also benefit from `autoImports.runtime`. When `runtime: true` (the default), `component`, `html`, `ref`, `useProps`, `useEmit`, and all other runtime identifiers are injected automatically at the top of each component file if they are used.
104
-
105
- This means you can write:
106
-
107
- ```ts
108
- // app/components/my-counter.ts
109
- component('my-counter', () => {
110
- const count = ref(0)
111
- return html`
112
- <button @click="${() => count.value++}">Count: ${count}</button>
113
- `
114
- })
115
- ```
116
-
117
- Without needing to add:
118
-
119
- ```ts
120
- import { component, html, ref } from '@jasonshimmy/custom-elements-runtime'
121
- ```
122
-
123
- ---
124
-
125
- ## Accessing slot content with `useSlots()`
126
-
127
- Use `useSlots()` inside a component's render function to read the content passed to named or default slots:
128
-
129
- ```ts
130
- // app/components/ui-badge.ts
131
- component('ui-badge', () => {
132
- const slots = useSlots()
133
-
134
- return html`
135
- <span class="badge">
136
- ${slots.default ?? 'badge'}
137
- </span>
138
- `
139
- })
140
- ```
141
-
142
- Usage in a page:
143
-
144
- ```ts
145
- // app/pages/index.ts
146
- component('page-index', () => {
147
- return html`
148
- <ui-badge>v1.0.0</ui-badge>
149
- <ui-badge>beta</ui-badge>
150
- `
151
- })
152
- ```
153
-
154
- `slots.default` contains the light-DOM children passed to the component. Named slots are accessed by their slot name:
155
-
156
- ```ts
157
- // app/components/app-card.ts
158
- component('app-card', () => {
159
- const slots = useSlots()
160
-
161
- return html`
162
- <div class="card">
163
- <header>${slots.header}</header>
164
- <main>${slots.default}</main>
165
- <footer>${slots.footer}</footer>
166
- </div>
167
- `
168
- })
169
- ```
170
-
171
- ```html
172
- <!-- usage -->
173
- <app-card>
174
- <span slot="header">Title</span>
175
- Body content goes here
176
- <span slot="footer">Footer</span>
177
- </app-card>
178
- ```
179
-
180
- ---
181
-
182
- ## `defineAsyncComponent`
183
-
184
- `defineAsyncComponent` registers a custom element whose implementation is loaded asynchronously. Use it for heavy components that should not block the initial render.
185
-
186
- ```ts
187
- defineAsyncComponent(
188
- 'ks-chart',
189
- () => import('./chart-impl').then(m => m.render), // returns a render fn
190
- {
191
- loading: () => html`<p>Loading chart…</p>`, // shown while loading
192
- error: () => html`<p>Failed to load chart.</p>`, // shown on rejection
193
- timeout: 5000, // ms before showing error (optional)
194
- },
195
- )
196
- ```
197
-
198
- The element transitions through four states:
199
-
200
- | State | Description |
201
- |---|---|
202
- | `loading` | Loader promise is pending. The `loading` template is rendered if provided. |
203
- | `resolved` | Loader resolved. The returned render function is called and its output is rendered. |
204
- | `error` | Loader rejected or timeout exceeded. The `error` template is rendered if provided. |
205
- | `idle` | No loader started yet (element connected before the loader is called). |
206
-
207
- **Loader return value:** The promise must resolve with a render function `() => TemplateResult | string`. The render function is called inside the component's normal reactive context — `useProps`, `ref`, etc. are available.
208
-
209
- **Timeout:** If `timeout` is set and the loader does not resolve within that many milliseconds, the state moves to `error` and the `error` template is rendered.
210
-
211
- **Options:**
212
-
213
- ```ts
214
- interface AsyncComponentOptions {
215
- loading?: () => TemplateResult | string // rendered while pending
216
- error?: () => TemplateResult | string // rendered on failure
217
- timeout?: number // milliseconds before treating as error
218
- }
219
- ```
220
-
221
- `defineAsyncComponent` is auto-imported — no import statement is needed in files under `app/`.
222
-
223
- If you need it outside auto-imported directories:
224
-
225
- ```ts
226
- import { defineAsyncComponent } from '@jasonshimmy/custom-elements-runtime'
227
- ```
228
-
229
- ---
230
-
231
- ## HMR
232
-
233
- Changes to a component file's render logic trigger standard Vite HMR — no full reload required, because the static import edge is already in Vite's module graph.
234
-
235
- If a component file's registered tag name changes (e.g. the `component('old-name', …)` call is edited to `component('new-name', …)`), the framework detects the manifest change and sends a full-reload so all pages pick up the updated import graph.
236
-
237
- When a new component file is added to `app/components/`, the manifest is updated synchronously via `watchChange`, and a full reload is triggered so the new tag becomes available.