@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.
- 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/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 +3 -1
- 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 +227 -17
- package/dist/plugin/build-ssg.js.map +1 -1
- package/dist/plugin/content/parser.d.ts.map +1 -1
- package/dist/plugin/content/parser.js +54 -10
- 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 +6 -0
- package/dist/plugin/html-post-process.d.ts.map +1 -1
- package/dist/plugin/html-post-process.js +24 -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 +179 -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/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
package/src/types/config.ts
DELETED
|
@@ -1,379 +0,0 @@
|
|
|
1
|
-
import type { RouterConfig } from '@jasonshimmy/custom-elements-runtime/router'
|
|
2
|
-
import type { IncomingMessage } from 'node:http'
|
|
3
|
-
|
|
4
|
-
// ─── Observability hook context types ─────────────────────────────────────────
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Context passed to the `onError` hook.
|
|
8
|
-
* `type` indicates which layer the error originated from so reporters can
|
|
9
|
-
* tag or route errors appropriately.
|
|
10
|
-
*/
|
|
11
|
-
export interface ErrorHookContext {
|
|
12
|
-
/** The layer that threw the error. */
|
|
13
|
-
type: 'loader' | 'render' | 'middleware'
|
|
14
|
-
/** The request URL pathname (e.g. `/about`). */
|
|
15
|
-
path: string
|
|
16
|
-
/** The raw Node.js incoming request. */
|
|
17
|
-
req: IncomingMessage
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Context passed to the `onRequest` hook.
|
|
22
|
-
* Fires at the start of every SSR request, before the route is matched
|
|
23
|
-
* or the loader runs.
|
|
24
|
-
*/
|
|
25
|
-
export interface RequestHookContext {
|
|
26
|
-
/** The request URL pathname (e.g. `/about`). */
|
|
27
|
-
path: string
|
|
28
|
-
/** HTTP method in upper-case (e.g. `'GET'`). */
|
|
29
|
-
method: string
|
|
30
|
-
/** The raw Node.js incoming request. */
|
|
31
|
-
req: IncomingMessage
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Context passed to the `onResponse` hook.
|
|
36
|
-
* Fires after the response has been sent (both success and error paths).
|
|
37
|
-
* Use this for latency tracking and request logging.
|
|
38
|
-
*/
|
|
39
|
-
export interface ResponseHookContext {
|
|
40
|
-
/** The request URL pathname (e.g. `/about`). */
|
|
41
|
-
path: string
|
|
42
|
-
/** HTTP method in upper-case (e.g. `'GET'`). */
|
|
43
|
-
method: string
|
|
44
|
-
/** Final HTTP status code written to the response. */
|
|
45
|
-
statusCode: number
|
|
46
|
-
/** Request duration in milliseconds from the first byte received to `res.end()`. */
|
|
47
|
-
duration: number
|
|
48
|
-
/** The raw Node.js incoming request. */
|
|
49
|
-
req: IncomingMessage
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// ─── OAuth / Auth types ───────────────────────────────────────────────────────
|
|
53
|
-
|
|
54
|
-
/** Token payload returned by an OAuth provider after a successful authorization code exchange. */
|
|
55
|
-
export interface OAuthTokens {
|
|
56
|
-
accessToken: string
|
|
57
|
-
refreshToken?: string
|
|
58
|
-
expiresIn?: number
|
|
59
|
-
tokenType: string
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/** Configuration for a single OAuth 2.0 provider (Google, GitHub, Discord, or a custom provider). */
|
|
63
|
-
export interface OAuthProviderConfig {
|
|
64
|
-
/** OAuth application client ID. */
|
|
65
|
-
clientId: string
|
|
66
|
-
/** OAuth application client secret. Never serialized into the client bundle. */
|
|
67
|
-
clientSecret: string
|
|
68
|
-
/** Override the default OAuth scopes for this provider. */
|
|
69
|
-
scope?: string[]
|
|
70
|
-
/** Override the provider's authorization endpoint URL (custom/self-hosted providers). */
|
|
71
|
-
authorizationUrl?: string
|
|
72
|
-
/** Override the provider's token exchange endpoint URL. */
|
|
73
|
-
tokenUrl?: string
|
|
74
|
-
/** Override the provider's user-info endpoint URL. */
|
|
75
|
-
userInfoUrl?: string
|
|
76
|
-
/**
|
|
77
|
-
* Transform the raw provider profile into the object stored in the auth session.
|
|
78
|
-
* Return any serializable object — it becomes `useAuth().user` on both server and client.
|
|
79
|
-
* If omitted the framework normalises the profile to `{ provider, id, name, email, avatar }`.
|
|
80
|
-
*/
|
|
81
|
-
mapUser?: (profile: Record<string, unknown>, tokens: OAuthTokens) => Record<string, unknown>
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/** Authentication configuration. Enables OAuth login flows and auto-generates `/api/auth/*` routes. */
|
|
85
|
-
export interface AuthConfig {
|
|
86
|
-
/**
|
|
87
|
-
* OAuth provider configurations keyed by provider name.
|
|
88
|
-
* Built-in providers: `'google'`, `'github'`, `'discord'`.
|
|
89
|
-
* Custom providers must supply `authorizationUrl`, `tokenUrl`, and `userInfoUrl`.
|
|
90
|
-
*/
|
|
91
|
-
providers?: {
|
|
92
|
-
google?: OAuthProviderConfig
|
|
93
|
-
github?: OAuthProviderConfig
|
|
94
|
-
discord?: OAuthProviderConfig
|
|
95
|
-
[key: string]: OAuthProviderConfig | undefined
|
|
96
|
-
}
|
|
97
|
-
/** Path to redirect to after a successful login. Defaults to `'/'`. */
|
|
98
|
-
redirectAfterLogin?: string
|
|
99
|
-
/** Path to redirect to after logout. Defaults to `'/'`. */
|
|
100
|
-
redirectAfterLogout?: string
|
|
101
|
-
/**
|
|
102
|
-
* Session cookie name used to store the authenticated user.
|
|
103
|
-
* Defaults to `'auth'`. Must not collide with other `useSession()` names.
|
|
104
|
-
*/
|
|
105
|
-
sessionKey?: string
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/** Internationalisation routing configuration. When set, locale-aware URL routes are generated and `useLocale()` is enabled. */
|
|
109
|
-
export interface I18nConfig {
|
|
110
|
-
/**
|
|
111
|
-
* All supported locale codes. e.g. `['en', 'fr', 'de']`.
|
|
112
|
-
*/
|
|
113
|
-
locales: string[]
|
|
114
|
-
/**
|
|
115
|
-
* The default locale. Used as the fallback when no locale is detected in the URL.
|
|
116
|
-
*/
|
|
117
|
-
defaultLocale: string
|
|
118
|
-
/**
|
|
119
|
-
* URL strategy for locale routing.
|
|
120
|
-
* - `'prefix'` — every locale (including default) gets a URL prefix: `/en/about`, `/fr/about`
|
|
121
|
-
* - `'prefix_except_default'` — default locale has no prefix (`/about`), others do (`/fr/about`). **Default.**
|
|
122
|
-
* - `'no_prefix'` — locale is not reflected in the URL (read from cookie or header only)
|
|
123
|
-
*/
|
|
124
|
-
strategy?: 'prefix' | 'prefix_except_default' | 'no_prefix'
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/** Global Static Site Generation (SSG) configuration. Controls which routes are pre-rendered and at what concurrency. */
|
|
128
|
-
export interface SsgConfig {
|
|
129
|
-
/**
|
|
130
|
-
* Routes to pre-render.
|
|
131
|
-
* - `'auto'` (default) — pre-render every static route discovered in `app/pages/`.
|
|
132
|
-
* - `string[]` — explicit list of paths (e.g. `['/about', '/contact']`).
|
|
133
|
-
*/
|
|
134
|
-
routes?: 'auto' | string[]
|
|
135
|
-
/** Maximum number of pages rendered in parallel. Defaults to `1`. Increase for faster SSG builds at the cost of higher memory usage. */
|
|
136
|
-
concurrency?: number
|
|
137
|
-
/** When `true`, unenumerated routes fall back to SSR at runtime instead of returning 404. */
|
|
138
|
-
fallback?: boolean
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
/** JIT (Just-In-Time) CSS configuration for shadow-DOM style injection. */
|
|
142
|
-
export interface JitCssConfig {
|
|
143
|
-
/** Additional glob patterns for content files scanned by the JIT CSS engine. */
|
|
144
|
-
content?: string[]
|
|
145
|
-
/** Enable the extended color palette. Defaults to `false`. */
|
|
146
|
-
extendedColors?: boolean
|
|
147
|
-
/**
|
|
148
|
-
* Project-specific color families registered in the JIT CSS engine at both
|
|
149
|
-
* build time and runtime. Each key is a color family name (e.g. `brand`);
|
|
150
|
-
* its value is a map of scale steps to CSS color values.
|
|
151
|
-
*
|
|
152
|
-
* Color family names must be a single lowercase word (no hyphens). Shades
|
|
153
|
-
* can be any string key — numeric steps (`'500'`) or semantic names
|
|
154
|
-
* (`'DEFAULT'`, `'on'`, `'container'`). When no shade is specified in a
|
|
155
|
-
* utility class (e.g. `bg-brand`), the `DEFAULT` shade is used.
|
|
156
|
-
*
|
|
157
|
-
* @example
|
|
158
|
-
* ```ts
|
|
159
|
-
* customColors: {
|
|
160
|
-
* brand: { '100': '#ede9fe', '500': '#7c3aed', '900': '#4c1d95' },
|
|
161
|
-
* surface: { DEFAULT: 'var(--md-sys-color-surface)' },
|
|
162
|
-
* }
|
|
163
|
-
* ```
|
|
164
|
-
*/
|
|
165
|
-
customColors?: Record<string, Record<string, string>>
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
/** Fine-grained control over which auto-import categories are injected into page/layout/component files. All categories are enabled by default. */
|
|
169
|
-
export interface AutoImportsConfig {
|
|
170
|
-
/** Auto-import components defined in `app/components/`. Defaults to `true`. */
|
|
171
|
-
components?: boolean
|
|
172
|
-
/** Auto-import framework composables (`useHead`, `useState`, etc.). Defaults to `true`. */
|
|
173
|
-
composables?: boolean
|
|
174
|
-
/** Auto-import template directives (`when`, `each`, `bind`). Defaults to `true`. */
|
|
175
|
-
directives?: boolean
|
|
176
|
-
/** Auto-import runtime primitives (`component`, `html`, `ref`, etc.). Defaults to `true`. */
|
|
177
|
-
runtime?: boolean
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/** Arbitrary public runtime values serialized into the virtual module at build time. Available on both server and client via `useRuntimeConfig().public`. */
|
|
181
|
-
export interface RuntimePublicConfig {
|
|
182
|
-
[key: string]: unknown
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
/** Server-only secrets resolved from `process.env` at startup. Never serialized into the client bundle. Available via `useRuntimeConfig().private` in loaders and server middleware only. */
|
|
186
|
-
export interface RuntimePrivateConfig {
|
|
187
|
-
/**
|
|
188
|
-
* HMAC-SHA-256 signing secret(s) for `useSession()`.
|
|
189
|
-
*
|
|
190
|
-
* Pass a single string for simple usage, or an **array** to support secret
|
|
191
|
-
* rotation without logging everyone out:
|
|
192
|
-
* - The **first** element is the active key — new sessions are signed with it.
|
|
193
|
-
* - Subsequent elements are accepted for **verification only** — old sessions
|
|
194
|
-
* signed with them continue to work until they expire.
|
|
195
|
-
*
|
|
196
|
-
* ```ts
|
|
197
|
-
* // cer.config.ts
|
|
198
|
-
* runtimeConfig: {
|
|
199
|
-
* private: {
|
|
200
|
-
* sessionSecret: [
|
|
201
|
-
* process.env.SESSION_SECRET_NEW!, // signs new sessions
|
|
202
|
-
* process.env.SESSION_SECRET_OLD!, // still accepted during rotation
|
|
203
|
-
* ],
|
|
204
|
-
* },
|
|
205
|
-
* }
|
|
206
|
-
* ```
|
|
207
|
-
*/
|
|
208
|
-
sessionSecret?: string | string[]
|
|
209
|
-
[key: string]: string | string[] | undefined
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
/** Runtime configuration split into `public` (client + server) and `private` (server-only) sections. */
|
|
213
|
-
export interface RuntimeConfig {
|
|
214
|
-
/**
|
|
215
|
-
* Public runtime config — available on both server and client via
|
|
216
|
-
* `useRuntimeConfig().public`. Values are serialized into the virtual module
|
|
217
|
-
* at build time, so only use static/env-var values here.
|
|
218
|
-
*
|
|
219
|
-
* @example
|
|
220
|
-
* runtimeConfig: {
|
|
221
|
-
* public: {
|
|
222
|
-
* apiBase: process.env.VITE_API_BASE ?? 'https://api.example.com',
|
|
223
|
-
* }
|
|
224
|
-
* }
|
|
225
|
-
*/
|
|
226
|
-
public?: RuntimePublicConfig
|
|
227
|
-
/**
|
|
228
|
-
* Server-only secrets — never serialized into the client bundle.
|
|
229
|
-
* Declare keys with empty-string defaults here; at server startup each key
|
|
230
|
-
* is resolved from `process.env[KEY]` (case-insensitive, ALL_CAPS preferred).
|
|
231
|
-
*
|
|
232
|
-
* @example
|
|
233
|
-
* runtimeConfig: {
|
|
234
|
-
* private: { dbUrl: '', secretKey: '' },
|
|
235
|
-
* }
|
|
236
|
-
*/
|
|
237
|
-
private?: RuntimePrivateConfig
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
/** Root configuration object for `cer.config.ts`. Pass to `defineConfig()` for type-safe configuration. */
|
|
241
|
-
export interface CerAppConfig {
|
|
242
|
-
mode?: 'spa' | 'ssr' | 'ssg'
|
|
243
|
-
srcDir?: string // defaults to 'app'
|
|
244
|
-
/**
|
|
245
|
-
* The canonical origin of the site (e.g. `'https://example.com'`).
|
|
246
|
-
* No trailing slash. When set, the SSG build automatically:
|
|
247
|
-
* - Injects `<link rel="canonical" href="${siteUrl}${path}">` into every page.
|
|
248
|
-
* - Writes a `robots.txt` to `dist/` (skipped when a `public/robots.txt` already exists).
|
|
249
|
-
* Also available at runtime via `useRuntimeConfig().public.siteUrl`.
|
|
250
|
-
*/
|
|
251
|
-
siteUrl?: string
|
|
252
|
-
/** File-based content layer configuration. Reads from `content/` at the project root by default. */
|
|
253
|
-
content?: import('./content.js').CerContentConfig
|
|
254
|
-
/**
|
|
255
|
-
* Internationalisation (i18n) routing configuration.
|
|
256
|
-
* When set, the framework generates locale-aware URL routes and enables `useLocale()`.
|
|
257
|
-
*
|
|
258
|
-
* @example
|
|
259
|
-
* ```ts
|
|
260
|
-
* i18n: {
|
|
261
|
-
* locales: ['en', 'fr', 'de'],
|
|
262
|
-
* defaultLocale: 'en',
|
|
263
|
-
* strategy: 'prefix_except_default',
|
|
264
|
-
* }
|
|
265
|
-
* ```
|
|
266
|
-
*/
|
|
267
|
-
i18n?: I18nConfig
|
|
268
|
-
ssg?: SsgConfig
|
|
269
|
-
router?: Pick<RouterConfig, 'base' | 'scrollToFragment'>
|
|
270
|
-
jitCss?: JitCssConfig
|
|
271
|
-
autoImports?: AutoImportsConfig
|
|
272
|
-
port?: number
|
|
273
|
-
/**
|
|
274
|
-
* Runtime configuration accessible via `useRuntimeConfig()`.
|
|
275
|
-
* Only `public` values are exposed to the client; keep secrets
|
|
276
|
-
* out of `public`.
|
|
277
|
-
*/
|
|
278
|
-
runtimeConfig?: RuntimeConfig
|
|
279
|
-
/**
|
|
280
|
-
* Deployment platform adapter.
|
|
281
|
-
* When set, `cer-app build` automatically runs the adapter after the build
|
|
282
|
-
* completes, producing the platform-specific output alongside `dist/`.
|
|
283
|
-
*
|
|
284
|
-
* Built-in string values:
|
|
285
|
-
* - `'vercel'` — Vercel Build Output API v3 (`.vercel/output/`)
|
|
286
|
-
* - `'netlify'` — Netlify Functions v2 + `netlify.toml`
|
|
287
|
-
* - `'cloudflare'` — Cloudflare Pages `_worker.js` + `wrangler.toml`
|
|
288
|
-
*
|
|
289
|
-
* Pass a function for a **custom adapter** (Railway, Fly.io, bare Node, Docker, …):
|
|
290
|
-
* ```ts
|
|
291
|
-
* adapter: async (root) => {
|
|
292
|
-
* // root is the absolute project root directory
|
|
293
|
-
* // dist/client/ and dist/server/ are already present after the build
|
|
294
|
-
* await myPlatformDeploy(root)
|
|
295
|
-
* }
|
|
296
|
-
* ```
|
|
297
|
-
*
|
|
298
|
-
* You can also run the built-in adapters independently with `cer-app adapt --platform <name>`.
|
|
299
|
-
*/
|
|
300
|
-
adapter?: 'vercel' | 'netlify' | 'cloudflare' | ((root: string) => Promise<void>)
|
|
301
|
-
/**
|
|
302
|
-
* Authentication configuration.
|
|
303
|
-
* Enables OAuth login flows via `useAuth()` and auto-generates
|
|
304
|
-
* `/api/auth/:provider`, `/api/auth/callback/:provider`, and `/api/auth/logout` routes.
|
|
305
|
-
*
|
|
306
|
-
* @example
|
|
307
|
-
* ```ts
|
|
308
|
-
* import { defineConfig, defineOAuthProvider } from '@jasonshimmy/vite-plugin-cer-app'
|
|
309
|
-
*
|
|
310
|
-
* export default defineConfig({
|
|
311
|
-
* auth: {
|
|
312
|
-
* providers: {
|
|
313
|
-
* github: defineOAuthProvider({
|
|
314
|
-
* clientId: process.env.GITHUB_CLIENT_ID!,
|
|
315
|
-
* clientSecret: process.env.GITHUB_CLIENT_SECRET!,
|
|
316
|
-
* }),
|
|
317
|
-
* },
|
|
318
|
-
* },
|
|
319
|
-
* })
|
|
320
|
-
* ```
|
|
321
|
-
*/
|
|
322
|
-
auth?: AuthConfig
|
|
323
|
-
/**
|
|
324
|
-
* Called when an error is caught by the framework's SSR error boundaries
|
|
325
|
-
* (loader throws, render crash, or server middleware throws). Use this to
|
|
326
|
-
* forward errors to Sentry, Datadog, or any other error-reporting service.
|
|
327
|
-
*
|
|
328
|
-
* Errors in this hook are silently swallowed so they cannot crash the request handler.
|
|
329
|
-
*
|
|
330
|
-
* @example
|
|
331
|
-
* ```ts
|
|
332
|
-
* import * as Sentry from '@sentry/node'
|
|
333
|
-
* export default defineConfig({
|
|
334
|
-
* onError(err, ctx) {
|
|
335
|
-
* Sentry.captureException(err, { tags: { type: ctx.type, path: ctx.path } })
|
|
336
|
-
* },
|
|
337
|
-
* })
|
|
338
|
-
* ```
|
|
339
|
-
*/
|
|
340
|
-
onError?: (err: unknown, ctx: ErrorHookContext) => void | Promise<void>
|
|
341
|
-
/**
|
|
342
|
-
* Called at the start of every SSR request, before route matching and the loader.
|
|
343
|
-
* Use this for request logging or to initialise per-request APM transactions.
|
|
344
|
-
*
|
|
345
|
-
* Errors in this hook are silently swallowed.
|
|
346
|
-
*/
|
|
347
|
-
onRequest?: (ctx: RequestHookContext) => void | Promise<void>
|
|
348
|
-
/**
|
|
349
|
-
* Called after every SSR response is sent (both success and error paths).
|
|
350
|
-
* `ctx.duration` contains the elapsed milliseconds from first byte to `res.end()`.
|
|
351
|
-
* Use this for latency tracking and access logging.
|
|
352
|
-
*
|
|
353
|
-
* Errors in this hook are silently swallowed.
|
|
354
|
-
*/
|
|
355
|
-
onResponse?: (ctx: ResponseHookContext) => void | Promise<void>
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
/**
|
|
359
|
-
* Define the framework configuration with full TypeScript intellisense.
|
|
360
|
-
* This is a pass-through helper — it returns `config` unchanged and exists
|
|
361
|
-
* solely to provide type checking and IDE autocompletion in `cer.config.ts`.
|
|
362
|
-
*
|
|
363
|
-
* @example
|
|
364
|
-
* ```ts
|
|
365
|
-
* // cer.config.ts
|
|
366
|
-
* import { defineConfig } from '@jasonshimmy/vite-plugin-cer-app'
|
|
367
|
-
*
|
|
368
|
-
* export default defineConfig({
|
|
369
|
-
* mode: 'ssr',
|
|
370
|
-
* runtimeConfig: {
|
|
371
|
-
* public: { apiBase: 'https://api.example.com' },
|
|
372
|
-
* private: { dbUrl: '' },
|
|
373
|
-
* },
|
|
374
|
-
* })
|
|
375
|
-
* ```
|
|
376
|
-
*/
|
|
377
|
-
export function defineConfig(config: CerAppConfig): CerAppConfig {
|
|
378
|
-
return config
|
|
379
|
-
}
|
package/src/types/content.ts
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/** Heading extracted from Markdown during parsing. The `id` is slugified from the heading text and added as an HTML `id` attribute. */
|
|
2
|
-
export interface ContentHeading {
|
|
3
|
-
depth: 1 | 2 | 3 | 4 | 5 | 6
|
|
4
|
-
/** Slugified heading text — matches the `id` attribute in the rendered body HTML. */
|
|
5
|
-
id: string
|
|
6
|
-
/** Plain text of the heading. */
|
|
7
|
-
text: string
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Lean per-document metadata — returned by `.find()` and `.count()`.
|
|
12
|
-
* Kept small deliberately: no `body`, no `toc`, no `excerpt`.
|
|
13
|
-
* Use `description` for listing previews; set it in frontmatter.
|
|
14
|
-
*/
|
|
15
|
-
export interface ContentMeta {
|
|
16
|
-
/** URL path (e.g. `"/blog/hello"`). */
|
|
17
|
-
_path: string
|
|
18
|
-
/** Source file type. */
|
|
19
|
-
_type: 'markdown' | 'json'
|
|
20
|
-
title?: string
|
|
21
|
-
/** Use for listing previews — included in search index. */
|
|
22
|
-
description?: string
|
|
23
|
-
date?: string
|
|
24
|
-
draft?: boolean
|
|
25
|
-
/** Any other frontmatter key. */
|
|
26
|
-
[key: string]: unknown
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Full document — returned by `.first()`.
|
|
31
|
-
* Superset of `ContentMeta`; includes `body`, `toc`, `_file`, and optional `excerpt`.
|
|
32
|
-
*/
|
|
33
|
-
export interface ContentItem extends ContentMeta {
|
|
34
|
-
/** Relative path from `content/` at the project root (e.g. `"blog/hello.md"`). */
|
|
35
|
-
_file: string
|
|
36
|
-
/** Rendered HTML (Markdown) or the raw file contents (JSON files). */
|
|
37
|
-
body: string
|
|
38
|
-
/** Extracted headings. Empty array for JSON files. */
|
|
39
|
-
toc: ContentHeading[]
|
|
40
|
-
/** HTML content before `<!-- more -->`. Absent when the marker is not present. */
|
|
41
|
-
excerpt?: string
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Search result item returned by `useContentSearch()`.
|
|
46
|
-
* Contains only the MiniSearch stored fields: `_path`, `title`, `description`.
|
|
47
|
-
*/
|
|
48
|
-
export interface ContentSearchResult {
|
|
49
|
-
_path: string
|
|
50
|
-
title: string
|
|
51
|
-
description?: string
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/** Content layer configuration. Controls the directory and draft behaviour. */
|
|
55
|
-
export interface CerContentConfig {
|
|
56
|
-
/**
|
|
57
|
-
* Content directory relative to the project root. Defaults to `'content'`,
|
|
58
|
-
* which resolves to `{root}/content/` — at the same level as `app/`, `server/`, and `public/`.
|
|
59
|
-
*/
|
|
60
|
-
dir?: string
|
|
61
|
-
/**
|
|
62
|
-
* When `true`, draft items (`draft: true` in frontmatter) are included in
|
|
63
|
-
* production builds. Defaults to `false`.
|
|
64
|
-
*/
|
|
65
|
-
drafts?: boolean
|
|
66
|
-
}
|
package/src/types/index.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export type { CerAppConfig, SsgConfig, JitCssConfig, AutoImportsConfig, RuntimeConfig, RuntimePublicConfig, RuntimePrivateConfig, I18nConfig, ErrorHookContext, RequestHookContext, ResponseHookContext } from './config.js'
|
|
2
|
-
export { defineConfig } from './config.js'
|
|
3
|
-
export type { HydrateStrategy, SsgPathsContext, PageSsgConfig, PageMeta, PageLoaderContext, PageLoader } from './page.js'
|
|
4
|
-
export type { ApiRequest, ApiResponse, ApiHandler, ApiContext } from './api.js'
|
|
5
|
-
export type { AppContext, AppPlugin } from './plugin.js'
|
|
6
|
-
export type { MiddlewareFn, GuardResult, ServerMiddleware } from './middleware.js'
|
|
7
|
-
export type { LocaleComposable } from '../runtime/composables/use-locale.js'
|
package/src/types/middleware.ts
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import type { RouteState } from '@jasonshimmy/custom-elements-runtime/router'
|
|
2
|
-
import type { IncomingMessage, ServerResponse } from 'node:http'
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Return value from a route middleware function:
|
|
6
|
-
* - `true` — allow navigation
|
|
7
|
-
* - `false` — block navigation
|
|
8
|
-
* - `string` — redirect to that path
|
|
9
|
-
*/
|
|
10
|
-
export type GuardResult = boolean | string | Promise<boolean | string>
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Route middleware function.
|
|
14
|
-
*
|
|
15
|
-
* Return `true`/`false`/a redirect path to guard navigation, **or** call
|
|
16
|
-
* `next()` to explicitly pass control to the next middleware in the chain
|
|
17
|
-
* (useful for wrapper middleware that needs to run code before AND after
|
|
18
|
-
* downstream middleware completes).
|
|
19
|
-
*
|
|
20
|
-
* @example — guard
|
|
21
|
-
* ```ts
|
|
22
|
-
* export default defineMiddleware((to, from) => {
|
|
23
|
-
* if (!isLoggedIn()) return '/login'
|
|
24
|
-
* return true
|
|
25
|
-
* })
|
|
26
|
-
* ```
|
|
27
|
-
*
|
|
28
|
-
* @example — wrapper with next()
|
|
29
|
-
* ```ts
|
|
30
|
-
* export default defineMiddleware(async (to, from, next) => {
|
|
31
|
-
* console.time('nav')
|
|
32
|
-
* await next()
|
|
33
|
-
* console.timeEnd('nav')
|
|
34
|
-
* })
|
|
35
|
-
* ```
|
|
36
|
-
*/
|
|
37
|
-
export type MiddlewareFn = (
|
|
38
|
-
to: RouteState,
|
|
39
|
-
from: RouteState | null,
|
|
40
|
-
next: () => Promise<void>,
|
|
41
|
-
) => GuardResult | void
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Server middleware function. Receives the raw Node.js `req`/`res` pair and a `next`
|
|
45
|
-
* callback. Call `next()` to pass control to the next middleware in the chain,
|
|
46
|
-
* or call `next(err)` to signal an error (sets the response status from `err.status`,
|
|
47
|
-
* defaulting to 500).
|
|
48
|
-
*
|
|
49
|
-
* Defined with `defineServerMiddleware()` and placed in `app/middleware/`.
|
|
50
|
-
*
|
|
51
|
-
* @example
|
|
52
|
-
* ```ts
|
|
53
|
-
* export default defineServerMiddleware((req, res, next) => {
|
|
54
|
-
* res.setHeader('X-Request-Id', crypto.randomUUID())
|
|
55
|
-
* next()
|
|
56
|
-
* })
|
|
57
|
-
* ```
|
|
58
|
-
*/
|
|
59
|
-
export type ServerMiddleware = (
|
|
60
|
-
req: IncomingMessage,
|
|
61
|
-
res: ServerResponse,
|
|
62
|
-
next: (err?: unknown) => void,
|
|
63
|
-
) => void | Promise<void>
|
package/src/types/page.ts
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import type { IncomingMessage } from 'node:http'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Controls when the client-side JS activates a pre-rendered page component.
|
|
5
|
-
*
|
|
6
|
-
* - `'load'` — activate immediately on page load (default).
|
|
7
|
-
* - `'idle'` — defer until `requestIdleCallback` fires (browser idle time).
|
|
8
|
-
* - `'visible'` — defer until `cer-layout-view` enters the viewport (IntersectionObserver).
|
|
9
|
-
* - `'none'` — never activate; SSR HTML is served as static markup with no JS.
|
|
10
|
-
*/
|
|
11
|
-
export type HydrateStrategy = 'load' | 'idle' | 'visible' | 'none'
|
|
12
|
-
|
|
13
|
-
/** Context object passed to a page's `ssg.paths()` function. Contains resolved route params for one path variant. */
|
|
14
|
-
export interface SsgPathsContext {
|
|
15
|
-
params: Record<string, string>
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/** Per-page SSG / ISR configuration. Export as `export const meta = { ssg: { ... } }` from any page file. */
|
|
19
|
-
export interface PageSsgConfig {
|
|
20
|
-
/**
|
|
21
|
-
* Factory that returns the set of param combinations to pre-render for dynamic routes.
|
|
22
|
-
* Required for dynamic routes (e.g. `/posts/[slug]`) — without it the route is skipped
|
|
23
|
-
* during the static build.
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* ```ts
|
|
27
|
-
* export const meta = {
|
|
28
|
-
* ssg: {
|
|
29
|
-
* paths: async () => {
|
|
30
|
-
* const slugs = await fetchAllSlugs()
|
|
31
|
-
* return slugs.map(slug => ({ params: { slug } }))
|
|
32
|
-
* },
|
|
33
|
-
* },
|
|
34
|
-
* }
|
|
35
|
-
* ```
|
|
36
|
-
*/
|
|
37
|
-
paths?: () => Promise<SsgPathsContext[]> | SsgPathsContext[]
|
|
38
|
-
/**
|
|
39
|
-
* Seconds before a cached SSR response is stale and should be re-rendered.
|
|
40
|
-
* Enables Incremental Static Regeneration (ISR) in the preview server and
|
|
41
|
-
* any production adapter that reads `meta.ssg.revalidate`.
|
|
42
|
-
*
|
|
43
|
-
* @example export const meta = { ssg: { revalidate: 60 } }
|
|
44
|
-
*/
|
|
45
|
-
revalidate?: number
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Per-page metadata. Export as `export const meta = { ... }` from any page file.
|
|
50
|
-
* Values are read at build time and embedded into the route manifest.
|
|
51
|
-
*/
|
|
52
|
-
export interface PageMeta {
|
|
53
|
-
/** Layout component to wrap this page. Must match a file in `app/layouts/`. Defaults to `'default'`. */
|
|
54
|
-
layout?: string
|
|
55
|
-
/** Named middleware files from `app/middleware/` to run before this route activates. */
|
|
56
|
-
middleware?: string[]
|
|
57
|
-
hydrate?: HydrateStrategy
|
|
58
|
-
ssg?: PageSsgConfig
|
|
59
|
-
/**
|
|
60
|
-
* CSS transition name applied to the page during route changes.
|
|
61
|
-
* Set to `true` to use the default 'page' transition name.
|
|
62
|
-
* The framework adds/removes `[data-transition="<name>"]` on the root element
|
|
63
|
-
* so you can target it with CSS animations.
|
|
64
|
-
*
|
|
65
|
-
* @example export const meta = { transition: 'fade' }
|
|
66
|
-
*/
|
|
67
|
-
transition?: string | boolean
|
|
68
|
-
/**
|
|
69
|
-
* Per-route rendering strategy. Overrides the global `mode` for this route.
|
|
70
|
-
*
|
|
71
|
-
* - `'server'` — always render server-side, never pre-render. In SSG mode
|
|
72
|
-
* the route is skipped during the static build.
|
|
73
|
-
* - `'static'` — always serve pre-rendered static HTML. In the SSR preview
|
|
74
|
-
* server the pre-rendered file is served from disk; falls back to SSR if
|
|
75
|
-
* not found.
|
|
76
|
-
* - `'spa'` — client-only. In SSR mode the server returns the SPA shell
|
|
77
|
-
* (index.html) without rendering. In SSG mode the route is skipped.
|
|
78
|
-
*
|
|
79
|
-
* @example export const meta = { render: 'server' }
|
|
80
|
-
*/
|
|
81
|
-
render?: 'static' | 'server' | 'spa'
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Context object passed to a page's `loader` function.
|
|
86
|
-
* Available on the server only — the loader runs before the page component renders.
|
|
87
|
-
*/
|
|
88
|
-
export interface PageLoaderContext<P extends Record<string, string> = Record<string, string>> {
|
|
89
|
-
params: P
|
|
90
|
-
query: Record<string, string>
|
|
91
|
-
/** Present during SSR/SSG server render. Absent (`undefined`) during client-side navigation. */
|
|
92
|
-
req?: IncomingMessage
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Server-side data loader for a page. Export as `export const loader` (or `export async function loader`)
|
|
97
|
-
* from any page file. The returned object is:
|
|
98
|
-
* - Made available via `usePageData()` inside the page component.
|
|
99
|
-
* - Primitive values are also forwarded as element attributes so `useProps()` works.
|
|
100
|
-
* - Serialized into `window.__CER_DATA__` for client-side hydration.
|
|
101
|
-
*
|
|
102
|
-
* Throwing an error (with an optional `.status` property) renders the page's error component
|
|
103
|
-
* and sets the HTTP response status code.
|
|
104
|
-
*
|
|
105
|
-
* @example
|
|
106
|
-
* ```ts
|
|
107
|
-
* export const loader: PageLoader<{ slug: string }, { post: Post }> = async ({ params }) => {
|
|
108
|
-
* const post = await fetchPost(params.slug)
|
|
109
|
-
* if (!post) throw Object.assign(new Error('Not found'), { status: 404 })
|
|
110
|
-
* return { post }
|
|
111
|
-
* }
|
|
112
|
-
* ```
|
|
113
|
-
*/
|
|
114
|
-
export type PageLoader<
|
|
115
|
-
P extends Record<string, string> = Record<string, string>,
|
|
116
|
-
D = Record<string, unknown>,
|
|
117
|
-
> = (ctx: PageLoaderContext<P>) => Promise<D> | D
|
package/src/types/plugin.ts
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import type { Router } from '@jasonshimmy/custom-elements-runtime/router'
|
|
2
|
-
import type { CerAppConfig } from './config.js'
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Application context passed to each plugin's `setup()` function.
|
|
6
|
-
* Use it to provide values to the component tree, access the router,
|
|
7
|
-
* or read the resolved config.
|
|
8
|
-
*/
|
|
9
|
-
export interface AppContext {
|
|
10
|
-
provide(key: PropertyKey, value: unknown): void
|
|
11
|
-
router: Router
|
|
12
|
-
config: CerAppConfig
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* A framework plugin. Plugins run once at app startup (both server and client) before
|
|
17
|
-
* the first route renders. Use them for global setup: registering provide/inject values,
|
|
18
|
-
* subscribing to router events, or initialising third-party libraries.
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* ```ts
|
|
22
|
-
* // app/plugins/analytics.ts
|
|
23
|
-
* export default {
|
|
24
|
-
* name: 'analytics',
|
|
25
|
-
* async setup({ router }) {
|
|
26
|
-
* router.subscribe(({ path }) => trackPageView(path))
|
|
27
|
-
* },
|
|
28
|
-
* } satisfies AppPlugin
|
|
29
|
-
* ```
|
|
30
|
-
*/
|
|
31
|
-
export interface AppPlugin {
|
|
32
|
-
name: string
|
|
33
|
-
setup(app: AppContext): void | Promise<void>
|
|
34
|
-
}
|
package/tsconfig.build.json
DELETED