@jasonshimmy/vite-plugin-cer-app 0.23.2 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/adapters/netlify.js +4 -2
- package/dist/cli/adapters/netlify.js.map +1 -1
- package/dist/cli/checks/lighthouse.d.ts +26 -0
- package/dist/cli/checks/lighthouse.d.ts.map +1 -0
- package/dist/cli/checks/lighthouse.js +121 -0
- package/dist/cli/checks/lighthouse.js.map +1 -0
- package/dist/cli/checks/links.d.ts +12 -0
- package/dist/cli/checks/links.d.ts.map +1 -0
- package/dist/cli/checks/links.js +89 -0
- package/dist/cli/checks/links.js.map +1 -0
- package/dist/cli/checks/performance.d.ts +17 -0
- package/dist/cli/checks/performance.d.ts.map +1 -0
- package/dist/cli/checks/performance.js +61 -0
- package/dist/cli/checks/performance.js.map +1 -0
- package/dist/cli/commands/check.d.ts +3 -0
- package/dist/cli/commands/check.d.ts.map +1 -0
- package/dist/cli/commands/check.js +85 -0
- package/dist/cli/commands/check.js.map +1 -0
- package/dist/cli/commands/preview.d.ts.map +1 -1
- package/dist/cli/commands/preview.js +4 -2
- package/dist/cli/commands/preview.js.map +1 -1
- package/dist/cli/create/index.d.ts +11 -1
- package/dist/cli/create/index.d.ts.map +1 -1
- package/dist/cli/create/index.js +135 -65
- package/dist/cli/create/index.js.map +1 -1
- package/dist/cli/create/templates/spa/package.json.tpl +5 -3
- package/dist/cli/create/templates/ssg/cer.config.ts.tpl +2 -0
- package/dist/cli/create/templates/ssg/package.json.tpl +5 -3
- package/dist/cli/create/templates/ssr/package.json.tpl +5 -3
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/plugin/build-ssg.d.ts +22 -6
- package/dist/plugin/build-ssg.d.ts.map +1 -1
- package/dist/plugin/build-ssg.js +226 -17
- package/dist/plugin/build-ssg.js.map +1 -1
- package/dist/plugin/content/index.d.ts +1 -1
- package/dist/plugin/content/index.d.ts.map +1 -1
- package/dist/plugin/content/index.js +8 -8
- package/dist/plugin/content/index.js.map +1 -1
- package/dist/plugin/content/parser.d.ts +3 -3
- package/dist/plugin/content/parser.d.ts.map +1 -1
- package/dist/plugin/content/parser.js +103 -24
- package/dist/plugin/content/parser.js.map +1 -1
- package/dist/plugin/dev-server.d.ts +4 -1
- package/dist/plugin/dev-server.d.ts.map +1 -1
- package/dist/plugin/dev-server.js.map +1 -1
- package/dist/plugin/dts-generator.d.ts.map +1 -1
- package/dist/plugin/dts-generator.js +50 -8
- package/dist/plugin/dts-generator.js.map +1 -1
- package/dist/plugin/generated-dir.d.ts +2 -0
- package/dist/plugin/generated-dir.d.ts.map +1 -1
- package/dist/plugin/generated-dir.js +17 -6
- package/dist/plugin/generated-dir.js.map +1 -1
- package/dist/plugin/html-post-process.d.ts +7 -0
- package/dist/plugin/html-post-process.d.ts.map +1 -1
- package/dist/plugin/html-post-process.js +26 -0
- package/dist/plugin/html-post-process.js.map +1 -1
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +60 -13
- package/dist/plugin/index.js.map +1 -1
- package/dist/plugin/transforms/auto-import.d.ts.map +1 -1
- package/dist/plugin/transforms/auto-import.js +7 -0
- package/dist/plugin/transforms/auto-import.js.map +1 -1
- package/dist/plugin/transforms/prune-runtime-css.d.ts +8 -0
- package/dist/plugin/transforms/prune-runtime-css.d.ts.map +1 -0
- package/dist/plugin/transforms/prune-runtime-css.js +40 -0
- package/dist/plugin/transforms/prune-runtime-css.js.map +1 -0
- package/dist/runtime/app-template.d.ts +1 -1
- package/dist/runtime/app-template.d.ts.map +1 -1
- package/dist/runtime/app-template.js +206 -36
- package/dist/runtime/app-template.js.map +1 -1
- package/dist/runtime/composables/index.d.ts +4 -0
- package/dist/runtime/composables/index.d.ts.map +1 -1
- package/dist/runtime/composables/index.js +2 -0
- package/dist/runtime/composables/index.js.map +1 -1
- package/dist/runtime/composables/use-active-headings.d.ts +24 -0
- package/dist/runtime/composables/use-active-headings.d.ts.map +1 -0
- package/dist/runtime/composables/use-active-headings.js +112 -0
- package/dist/runtime/composables/use-active-headings.js.map +1 -0
- package/dist/runtime/composables/use-content-page.d.ts +45 -0
- package/dist/runtime/composables/use-content-page.d.ts.map +1 -0
- package/dist/runtime/composables/use-content-page.js +181 -0
- package/dist/runtime/composables/use-content-page.js.map +1 -0
- package/dist/runtime/composables/use-content-search.d.ts.map +1 -1
- package/dist/runtime/composables/use-content-search.js +1 -5
- package/dist/runtime/composables/use-content-search.js.map +1 -1
- package/dist/runtime/composables/use-fetch.d.ts +2 -1
- package/dist/runtime/composables/use-fetch.d.ts.map +1 -1
- package/dist/runtime/composables/use-fetch.js +112 -43
- package/dist/runtime/composables/use-fetch.js.map +1 -1
- package/dist/runtime/composables/use-route.d.ts.map +1 -1
- package/dist/runtime/composables/use-route.js +39 -11
- package/dist/runtime/composables/use-route.js.map +1 -1
- package/dist/runtime/content/client.js +2 -2
- package/dist/runtime/content/client.js.map +1 -1
- package/dist/runtime/entry-server-template.d.ts +16 -1
- package/dist/runtime/entry-server-template.d.ts.map +1 -1
- package/dist/runtime/entry-server-template.js +120 -13
- package/dist/runtime/entry-server-template.js.map +1 -1
- package/dist/types/config.d.ts +45 -4
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js.map +1 -1
- package/dist/types/content.d.ts +18 -1
- package/dist/types/content.d.ts.map +1 -1
- package/dist/types/middleware.d.ts +2 -2
- package/dist/types/middleware.d.ts.map +1 -1
- package/package.json +22 -19
- package/.github/copilot-instructions.md +0 -169
- package/.github/workflows/publish.yml +0 -257
- package/.nvmrc +0 -1
- package/CHANGELOG.md +0 -236
- package/CLAUDE.md +0 -113
- package/commits.txt +0 -1
- package/cypress.config.ts +0 -16
- package/docs/authentication.md +0 -285
- package/docs/cli.md +0 -324
- package/docs/components.md +0 -237
- package/docs/composables.md +0 -907
- package/docs/configuration.md +0 -696
- package/docs/content.md +0 -570
- package/docs/data-loading.md +0 -336
- package/docs/getting-started.md +0 -237
- package/docs/head-management.md +0 -212
- package/docs/i18n.md +0 -159
- package/docs/layouts.md +0 -224
- package/docs/middleware.md +0 -234
- package/docs/plugins.md +0 -170
- package/docs/rendering-modes.md +0 -377
- package/docs/routing.md +0 -485
- package/docs/server-api.md +0 -253
- package/docs/testing.md +0 -455
- package/docs/use-fetch.md +0 -183
- package/e2e/cypress/e2e/api.cy.ts +0 -123
- package/e2e/cypress/e2e/async-component.cy.ts +0 -27
- package/e2e/cypress/e2e/component-splitting.cy.ts +0 -50
- package/e2e/cypress/e2e/content.cy.ts +0 -425
- package/e2e/cypress/e2e/cookie.cy.ts +0 -85
- package/e2e/cypress/e2e/data.cy.ts +0 -158
- package/e2e/cypress/e2e/error-boundary.cy.ts +0 -88
- package/e2e/cypress/e2e/fouc.cy.ts +0 -254
- package/e2e/cypress/e2e/group-meta.cy.ts +0 -36
- package/e2e/cypress/e2e/head.cy.ts +0 -89
- package/e2e/cypress/e2e/i18n.cy.ts +0 -79
- package/e2e/cypress/e2e/interactive.cy.ts +0 -137
- package/e2e/cypress/e2e/isr-nested-runtime.cy.ts +0 -102
- package/e2e/cypress/e2e/jit-css-custom-colors.cy.ts +0 -43
- package/e2e/cypress/e2e/middleware-chain.cy.ts +0 -89
- package/e2e/cypress/e2e/middleware-status.cy.ts +0 -30
- package/e2e/cypress/e2e/middleware.cy.ts +0 -45
- package/e2e/cypress/e2e/navigate.cy.ts +0 -39
- package/e2e/cypress/e2e/observability.cy.ts +0 -77
- package/e2e/cypress/e2e/per-route-error.cy.ts +0 -42
- package/e2e/cypress/e2e/per-route-render.cy.ts +0 -70
- package/e2e/cypress/e2e/preview-hardening.cy.ts +0 -88
- package/e2e/cypress/e2e/routes.cy.ts +0 -128
- package/e2e/cypress/e2e/seo-meta.cy.ts +0 -108
- package/e2e/cypress/e2e/server-middleware.cy.ts +0 -46
- package/e2e/cypress/e2e/session-rotation.cy.ts +0 -25
- package/e2e/cypress/e2e/session.cy.ts +0 -73
- package/e2e/cypress/e2e/ssr-render-error.cy.ts +0 -68
- package/e2e/cypress/e2e/synthetic-404.cy.ts +0 -45
- package/e2e/cypress/e2e/use-page-data.cy.ts +0 -122
- package/e2e/cypress/e2e/use-state.cy.ts +0 -138
- package/e2e/cypress/support/commands.ts +0 -120
- package/e2e/cypress/support/e2e.ts +0 -10
- package/e2e/cypress/tsconfig.json +0 -14
- package/e2e/kitchen-sink/app/components/ks-badge.ts +0 -8
- package/e2e/kitchen-sink/app/composables/useKsCounter.ts +0 -9
- package/e2e/kitchen-sink/app/error.ts +0 -18
- package/e2e/kitchen-sink/app/layouts/admin.ts +0 -13
- package/e2e/kitchen-sink/app/layouts/default.ts +0 -25
- package/e2e/kitchen-sink/app/layouts/group.ts +0 -9
- package/e2e/kitchen-sink/app/layouts/minimal.ts +0 -7
- package/e2e/kitchen-sink/app/loading.ts +0 -9
- package/e2e/kitchen-sink/app/middleware/auth.ts +0 -9
- package/e2e/kitchen-sink/app/middleware/custom-log.ts +0 -4
- package/e2e/kitchen-sink/app/middleware/group-auth.ts +0 -7
- package/e2e/kitchen-sink/app/middleware/logger.ts +0 -14
- package/e2e/kitchen-sink/app/pages/(auth)/login.ts +0 -13
- package/e2e/kitchen-sink/app/pages/(auth)/protected.ts +0 -16
- package/e2e/kitchen-sink/app/pages/404.ts +0 -9
- package/e2e/kitchen-sink/app/pages/about.ts +0 -17
- package/e2e/kitchen-sink/app/pages/admin/_layout.ts +0 -1
- package/e2e/kitchen-sink/app/pages/admin/dashboard.ts +0 -11
- package/e2e/kitchen-sink/app/pages/async-component-error-test.ts +0 -18
- package/e2e/kitchen-sink/app/pages/async-component-test.ts +0 -18
- package/e2e/kitchen-sink/app/pages/blog/[slug].ts +0 -59
- package/e2e/kitchen-sink/app/pages/blog/index.ts +0 -51
- package/e2e/kitchen-sink/app/pages/content-blog.ts +0 -37
- package/e2e/kitchen-sink/app/pages/content-doc.ts +0 -42
- package/e2e/kitchen-sink/app/pages/content-fallback.ts +0 -36
- package/e2e/kitchen-sink/app/pages/content-guides.ts +0 -35
- package/e2e/kitchen-sink/app/pages/content-index.ts +0 -39
- package/e2e/kitchen-sink/app/pages/content-search.ts +0 -36
- package/e2e/kitchen-sink/app/pages/cookie-test.ts +0 -22
- package/e2e/kitchen-sink/app/pages/counter.ts +0 -17
- package/e2e/kitchen-sink/app/pages/group-auth-blocked.ts +0 -9
- package/e2e/kitchen-sink/app/pages/group-meta-test/_layout.ts +0 -6
- package/e2e/kitchen-sink/app/pages/group-meta-test/custom-mw.ts +0 -14
- package/e2e/kitchen-sink/app/pages/group-meta-test/page.ts +0 -9
- package/e2e/kitchen-sink/app/pages/group-meta-test/protected.ts +0 -8
- package/e2e/kitchen-sink/app/pages/head.ts +0 -20
- package/e2e/kitchen-sink/app/pages/i18n-test.ts +0 -14
- package/e2e/kitchen-sink/app/pages/index.ts +0 -27
- package/e2e/kitchen-sink/app/pages/isr-test.ts +0 -17
- package/e2e/kitchen-sink/app/pages/items/[id].ts +0 -20
- package/e2e/kitchen-sink/app/pages/jit-css-custom-colors-test.ts +0 -14
- package/e2e/kitchen-sink/app/pages/loader-error-test.ts +0 -13
- package/e2e/kitchen-sink/app/pages/loader-props-test.ts +0 -19
- package/e2e/kitchen-sink/app/pages/loader-response-error-test.ts +0 -13
- package/e2e/kitchen-sink/app/pages/middleware-chain-test.ts +0 -12
- package/e2e/kitchen-sink/app/pages/middleware-status-test.ts +0 -9
- package/e2e/kitchen-sink/app/pages/navigate-test.ts +0 -16
- package/e2e/kitchen-sink/app/pages/observability-test.ts +0 -25
- package/e2e/kitchen-sink/app/pages/per-route-error-test.error.ts +0 -13
- package/e2e/kitchen-sink/app/pages/per-route-error-test.ts +0 -15
- package/e2e/kitchen-sink/app/pages/plugin-dsd-test.ts +0 -10
- package/e2e/kitchen-sink/app/pages/render-error-test.ts +0 -12
- package/e2e/kitchen-sink/app/pages/render-server-test.ts +0 -12
- package/e2e/kitchen-sink/app/pages/render-spa-test.ts +0 -12
- package/e2e/kitchen-sink/app/pages/route-info.ts +0 -14
- package/e2e/kitchen-sink/app/pages/seo-test.ts +0 -23
- package/e2e/kitchen-sink/app/pages/session-rotation-test.ts +0 -25
- package/e2e/kitchen-sink/app/pages/use-state-test.ts +0 -37
- package/e2e/kitchen-sink/app/plugins/01.setup.ts +0 -7
- package/e2e/kitchen-sink/app/plugins/02.ks-plugin-components.ts +0 -27
- package/e2e/kitchen-sink/cer-auto-imports.d.ts +0 -51
- package/e2e/kitchen-sink/cer-env.d.ts +0 -35
- package/e2e/kitchen-sink/cer-tsconfig.json +0 -30
- package/e2e/kitchen-sink/cer.config.ts +0 -43
- package/e2e/kitchen-sink/content/01.guides/01.index.md +0 -8
- package/e2e/kitchen-sink/content/01.guides/02.intro.md +0 -8
- package/e2e/kitchen-sink/content/01.guides/10.advanced.md +0 -8
- package/e2e/kitchen-sink/content/blog/2026-04-01-hello.md +0 -26
- package/e2e/kitchen-sink/content/blog/2026-04-02-draft.md +0 -10
- package/e2e/kitchen-sink/content/blog/index.md +0 -8
- package/e2e/kitchen-sink/content/blog/no-frontmatter.md +0 -7
- package/e2e/kitchen-sink/content/docs/getting-started.md +0 -48
- package/e2e/kitchen-sink/content/index.md +0 -16
- package/e2e/kitchen-sink/server/api/echo.ts +0 -12
- package/e2e/kitchen-sink/server/api/health.ts +0 -3
- package/e2e/kitchen-sink/server/api/posts/[slug].ts +0 -11
- package/e2e/kitchen-sink/server/api/posts/index.ts +0 -5
- package/e2e/kitchen-sink/server/api/session.ts +0 -23
- package/e2e/kitchen-sink/server/data/posts.ts +0 -21
- package/e2e/kitchen-sink/server/middleware/01-headers.ts +0 -6
- package/e2e/kitchen-sink/server/middleware/02-status-test.ts +0 -10
- package/e2e/kitchen-sink/tsconfig.json +0 -3
- package/e2e/scripts/clean.mjs +0 -14
- package/eslint.config.ts +0 -22
- package/src/__tests__/cli/adapters/cloudflare-worker.integration.test.ts +0 -132
- package/src/__tests__/cli/adapters/cloudflare.test.ts +0 -332
- package/src/__tests__/cli/adapters/netlify-bridge.integration.test.ts +0 -139
- package/src/__tests__/cli/adapters/netlify.test.ts +0 -286
- package/src/__tests__/cli/adapters/vercel-launcher.integration.test.ts +0 -129
- package/src/__tests__/cli/adapters/vercel.test.ts +0 -263
- package/src/__tests__/cli/preview-hardening.test.ts +0 -265
- package/src/__tests__/cli/preview-isr.test.ts +0 -320
- package/src/__tests__/index.test.ts +0 -21
- package/src/__tests__/plugin/app-template.test.ts +0 -166
- package/src/__tests__/plugin/build-ssg-render.test.ts +0 -155
- package/src/__tests__/plugin/build-ssg.test.ts +0 -598
- package/src/__tests__/plugin/build-ssr.test.ts +0 -192
- package/src/__tests__/plugin/cer-app-plugin.test.ts +0 -552
- package/src/__tests__/plugin/content/emitter.test.ts +0 -117
- package/src/__tests__/plugin/content/loader.test.ts +0 -154
- package/src/__tests__/plugin/content/parser.test.ts +0 -381
- package/src/__tests__/plugin/content/path-utils.test.ts +0 -69
- package/src/__tests__/plugin/content/search.test.ts +0 -119
- package/src/__tests__/plugin/dev-server.test.ts +0 -813
- package/src/__tests__/plugin/dts-generator.test.ts +0 -394
- package/src/__tests__/plugin/entry-server-template.test.ts +0 -385
- package/src/__tests__/plugin/generated-dir.test.ts +0 -144
- package/src/__tests__/plugin/html-post-process.test.ts +0 -146
- package/src/__tests__/plugin/path-utils.test.ts +0 -411
- package/src/__tests__/plugin/resolve-config.test.ts +0 -233
- package/src/__tests__/plugin/scanner.test.ts +0 -186
- package/src/__tests__/plugin/transforms/auto-import.test.ts +0 -510
- package/src/__tests__/plugin/transforms/head-inject.test.ts +0 -178
- package/src/__tests__/plugin/virtual/composables.test.ts +0 -57
- package/src/__tests__/plugin/virtual/content-components.test.ts +0 -66
- package/src/__tests__/plugin/virtual/error.test.ts +0 -71
- package/src/__tests__/plugin/virtual/layouts.test.ts +0 -70
- package/src/__tests__/plugin/virtual/loading.test.ts +0 -72
- package/src/__tests__/plugin/virtual/middleware.test.ts +0 -83
- package/src/__tests__/plugin/virtual/plugins.test.ts +0 -129
- package/src/__tests__/plugin/virtual/routes.test.ts +0 -884
- package/src/__tests__/plugin/virtual/server-api.test.ts +0 -164
- package/src/__tests__/plugin/virtual/server-middleware.test.ts +0 -102
- package/src/__tests__/runtime/app-template.test.ts +0 -208
- package/src/__tests__/runtime/define-middleware.test.ts +0 -64
- package/src/__tests__/runtime/define-server-middleware.test.ts +0 -54
- package/src/__tests__/runtime/entry-client-template.test.ts +0 -61
- package/src/__tests__/runtime/isr-handler.test.ts +0 -338
- package/src/__tests__/runtime/oauth/handler.test.ts +0 -358
- package/src/__tests__/runtime/oauth/providers.test.ts +0 -47
- package/src/__tests__/runtime/oauth-index.test.ts +0 -43
- package/src/__tests__/runtime/use-auth.test.ts +0 -169
- package/src/__tests__/runtime/use-content-search-composable.test.ts +0 -405
- package/src/__tests__/runtime/use-content-search.test.ts +0 -163
- package/src/__tests__/runtime/use-content.test.ts +0 -226
- package/src/__tests__/runtime/use-cookie.test.ts +0 -277
- package/src/__tests__/runtime/use-fetch-component.test.ts +0 -214
- package/src/__tests__/runtime/use-fetch.test.ts +0 -377
- package/src/__tests__/runtime/use-head.test.ts +0 -311
- package/src/__tests__/runtime/use-inject-client.test.ts +0 -67
- package/src/__tests__/runtime/use-inject.test.ts +0 -66
- package/src/__tests__/runtime/use-locale.test.ts +0 -152
- package/src/__tests__/runtime/use-navigate.test.ts +0 -121
- package/src/__tests__/runtime/use-page-data.test.ts +0 -298
- package/src/__tests__/runtime/use-route.test.ts +0 -156
- package/src/__tests__/runtime/use-runtime-config.test.ts +0 -182
- package/src/__tests__/runtime/use-seo-meta.test.ts +0 -109
- package/src/__tests__/runtime/use-session.test.ts +0 -320
- package/src/__tests__/runtime/use-state.test.ts +0 -340
- package/src/__tests__/types/config.test.ts +0 -18
- package/src/cli/adapters/cloudflare.ts +0 -335
- package/src/cli/adapters/netlify.ts +0 -326
- package/src/cli/adapters/vercel.ts +0 -311
- package/src/cli/commands/adapt.ts +0 -84
- package/src/cli/commands/build.ts +0 -165
- package/src/cli/commands/dev.ts +0 -125
- package/src/cli/commands/generate.ts +0 -91
- package/src/cli/commands/preview-isr.ts +0 -172
- package/src/cli/commands/preview.ts +0 -523
- package/src/cli/create/index.ts +0 -275
- package/src/cli/create/templates/shared/.gitignore.tpl +0 -25
- package/src/cli/create/templates/shared/app/layouts/default.ts.tpl +0 -15
- package/src/cli/create/templates/shared/app/pages/index.ts.tpl +0 -8
- package/src/cli/create/templates/shared/index.html.tpl +0 -12
- package/src/cli/create/templates/shared/tsconfig.json.tpl +0 -6
- package/src/cli/create/templates/spa/cer.config.ts.tpl +0 -6
- package/src/cli/create/templates/spa/package.json.tpl +0 -18
- package/src/cli/create/templates/ssg/cer.config.ts.tpl +0 -10
- package/src/cli/create/templates/ssg/package.json.tpl +0 -19
- package/src/cli/create/templates/ssr/cer.config.ts.tpl +0 -6
- package/src/cli/create/templates/ssr/package.json.tpl +0 -18
- package/src/cli/index.ts +0 -22
- package/src/index.ts +0 -20
- package/src/plugin/build-ssg.ts +0 -403
- package/src/plugin/build-ssr.ts +0 -134
- package/src/plugin/content/emitter.ts +0 -50
- package/src/plugin/content/index.ts +0 -233
- package/src/plugin/content/parser.ts +0 -259
- package/src/plugin/content/path-utils.ts +0 -55
- package/src/plugin/content/scanner.ts +0 -26
- package/src/plugin/content/search.ts +0 -28
- package/src/plugin/dev-server.ts +0 -379
- package/src/plugin/dts-generator.ts +0 -273
- package/src/plugin/generated-dir.ts +0 -121
- package/src/plugin/html-post-process.ts +0 -96
- package/src/plugin/index.ts +0 -584
- package/src/plugin/path-utils.ts +0 -186
- package/src/plugin/scanner.ts +0 -65
- package/src/plugin/transforms/auto-import.ts +0 -206
- package/src/plugin/transforms/head-inject.ts +0 -161
- package/src/plugin/virtual/composables.ts +0 -28
- package/src/plugin/virtual/content-components.ts +0 -83
- package/src/plugin/virtual/error.ts +0 -34
- package/src/plugin/virtual/layouts.ts +0 -41
- package/src/plugin/virtual/loading.ts +0 -32
- package/src/plugin/virtual/middleware.ts +0 -45
- package/src/plugin/virtual/plugins.ts +0 -46
- package/src/plugin/virtual/routes.ts +0 -514
- package/src/plugin/virtual/server-api.ts +0 -85
- package/src/plugin/virtual/server-middleware.ts +0 -44
- package/src/runtime/app-template.ts +0 -377
- package/src/runtime/composables/define-middleware.ts +0 -17
- package/src/runtime/composables/define-server-middleware.ts +0 -18
- package/src/runtime/composables/index.ts +0 -27
- package/src/runtime/composables/use-auth.ts +0 -125
- package/src/runtime/composables/use-content-search.ts +0 -205
- package/src/runtime/composables/use-content.ts +0 -146
- package/src/runtime/composables/use-cookie.ts +0 -135
- package/src/runtime/composables/use-fetch.ts +0 -438
- package/src/runtime/composables/use-head.ts +0 -234
- package/src/runtime/composables/use-inject.ts +0 -49
- package/src/runtime/composables/use-locale.ts +0 -109
- package/src/runtime/composables/use-navigate.ts +0 -58
- package/src/runtime/composables/use-page-data.ts +0 -93
- package/src/runtime/composables/use-route.ts +0 -71
- package/src/runtime/composables/use-runtime-config.ts +0 -123
- package/src/runtime/composables/use-seo-meta.ts +0 -80
- package/src/runtime/composables/use-session.ts +0 -186
- package/src/runtime/composables/use-state.ts +0 -92
- package/src/runtime/content/client.ts +0 -168
- package/src/runtime/entry-client-template.ts +0 -39
- package/src/runtime/entry-server-template.ts +0 -493
- package/src/runtime/isr-handler.ts +0 -184
- package/src/runtime/oauth/handler.ts +0 -407
- package/src/runtime/oauth/index.ts +0 -49
- package/src/runtime/oauth/providers.ts +0 -38
- package/src/types/api.ts +0 -40
- package/src/types/config.ts +0 -379
- package/src/types/content.ts +0 -66
- package/src/types/index.ts +0 -7
- package/src/types/middleware.ts +0 -63
- package/src/types/page.ts +0 -117
- package/src/types/plugin.ts +0 -34
- package/tsconfig.build.json +0 -10
- package/tsconfig.json +0 -19
- 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,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,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,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,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,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,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
|
-
}
|