@jasonshimmy/vite-plugin-cer-app 0.1.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/.github/copilot-instructions.md +130 -0
- package/.github/workflows/publish.yml +206 -0
- package/.nvmrc +1 -0
- package/CHANGELOG.md +10 -0
- package/IMPLEMENTATION_PLAN.md +391 -0
- package/README.md +231 -0
- package/VITE_PLUGIN_FRAMEWORK_PLAN.md +594 -0
- package/commits.txt +3 -0
- package/dist/__tests__/plugin/path-utils.test.d.ts +2 -0
- package/dist/__tests__/plugin/path-utils.test.d.ts.map +1 -0
- package/dist/__tests__/plugin/path-utils.test.js +305 -0
- package/dist/__tests__/plugin/path-utils.test.js.map +1 -0
- package/dist/__tests__/plugin/scanner.test.d.ts +2 -0
- package/dist/__tests__/plugin/scanner.test.d.ts.map +1 -0
- package/dist/__tests__/plugin/scanner.test.js +143 -0
- package/dist/__tests__/plugin/scanner.test.js.map +1 -0
- package/dist/__tests__/plugin/transforms/auto-import.test.d.ts +2 -0
- package/dist/__tests__/plugin/transforms/auto-import.test.d.ts.map +1 -0
- package/dist/__tests__/plugin/transforms/auto-import.test.js +151 -0
- package/dist/__tests__/plugin/transforms/auto-import.test.js.map +1 -0
- package/dist/__tests__/plugin/transforms/head-inject.test.d.ts +2 -0
- package/dist/__tests__/plugin/transforms/head-inject.test.d.ts.map +1 -0
- package/dist/__tests__/plugin/transforms/head-inject.test.js +151 -0
- package/dist/__tests__/plugin/transforms/head-inject.test.js.map +1 -0
- package/dist/__tests__/plugin/virtual/components.test.d.ts +2 -0
- package/dist/__tests__/plugin/virtual/components.test.d.ts.map +1 -0
- package/dist/__tests__/plugin/virtual/components.test.js +47 -0
- package/dist/__tests__/plugin/virtual/components.test.js.map +1 -0
- package/dist/__tests__/plugin/virtual/composables.test.d.ts +2 -0
- package/dist/__tests__/plugin/virtual/composables.test.d.ts.map +1 -0
- package/dist/__tests__/plugin/virtual/composables.test.js +48 -0
- package/dist/__tests__/plugin/virtual/composables.test.js.map +1 -0
- package/dist/__tests__/plugin/virtual/layouts.test.d.ts +2 -0
- package/dist/__tests__/plugin/virtual/layouts.test.d.ts.map +1 -0
- package/dist/__tests__/plugin/virtual/layouts.test.js +59 -0
- package/dist/__tests__/plugin/virtual/layouts.test.js.map +1 -0
- package/dist/__tests__/plugin/virtual/middleware.test.d.ts +2 -0
- package/dist/__tests__/plugin/virtual/middleware.test.d.ts.map +1 -0
- package/dist/__tests__/plugin/virtual/middleware.test.js +58 -0
- package/dist/__tests__/plugin/virtual/middleware.test.js.map +1 -0
- package/dist/__tests__/plugin/virtual/plugins.test.d.ts +2 -0
- package/dist/__tests__/plugin/virtual/plugins.test.d.ts.map +1 -0
- package/dist/__tests__/plugin/virtual/plugins.test.js +73 -0
- package/dist/__tests__/plugin/virtual/plugins.test.js.map +1 -0
- package/dist/__tests__/plugin/virtual/routes.test.d.ts +2 -0
- package/dist/__tests__/plugin/virtual/routes.test.d.ts.map +1 -0
- package/dist/__tests__/plugin/virtual/routes.test.js +167 -0
- package/dist/__tests__/plugin/virtual/routes.test.js.map +1 -0
- package/dist/__tests__/plugin/virtual/server-api.test.d.ts +2 -0
- package/dist/__tests__/plugin/virtual/server-api.test.d.ts.map +1 -0
- package/dist/__tests__/plugin/virtual/server-api.test.js +72 -0
- package/dist/__tests__/plugin/virtual/server-api.test.js.map +1 -0
- package/dist/__tests__/runtime/use-head.test.d.ts +2 -0
- package/dist/__tests__/runtime/use-head.test.d.ts.map +1 -0
- package/dist/__tests__/runtime/use-head.test.js +202 -0
- package/dist/__tests__/runtime/use-head.test.js.map +1 -0
- package/dist/__tests__/runtime/use-page-data.test.d.ts +2 -0
- package/dist/__tests__/runtime/use-page-data.test.d.ts.map +1 -0
- package/dist/__tests__/runtime/use-page-data.test.js +41 -0
- package/dist/__tests__/runtime/use-page-data.test.js.map +1 -0
- package/dist/cli/commands/build.d.ts +3 -0
- package/dist/cli/commands/build.d.ts.map +1 -0
- package/dist/cli/commands/build.js +103 -0
- package/dist/cli/commands/build.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +3 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/dev.js +92 -0
- package/dist/cli/commands/dev.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +7 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +72 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/preview.d.ts +3 -0
- package/dist/cli/commands/preview.d.ts.map +1 -0
- package/dist/cli/commands/preview.js +191 -0
- package/dist/cli/commands/preview.js.map +1 -0
- package/dist/cli/create/index.d.ts +3 -0
- package/dist/cli/create/index.d.ts.map +1 -0
- package/dist/cli/create/index.js +184 -0
- package/dist/cli/create/index.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +17 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin/build-ssg.d.ts +12 -0
- package/dist/plugin/build-ssg.d.ts.map +1 -0
- package/dist/plugin/build-ssg.js +212 -0
- package/dist/plugin/build-ssg.js.map +1 -0
- package/dist/plugin/build-ssr.d.ts +10 -0
- package/dist/plugin/build-ssr.d.ts.map +1 -0
- package/dist/plugin/build-ssr.js +139 -0
- package/dist/plugin/build-ssr.js.map +1 -0
- package/dist/plugin/dev-server.d.ts +46 -0
- package/dist/plugin/dev-server.d.ts.map +1 -0
- package/dist/plugin/dev-server.js +194 -0
- package/dist/plugin/dev-server.js.map +1 -0
- package/dist/plugin/dts-generator.d.ts +27 -0
- package/dist/plugin/dts-generator.d.ts.map +1 -0
- package/dist/plugin/dts-generator.js +180 -0
- package/dist/plugin/dts-generator.js.map +1 -0
- package/dist/plugin/index.d.ts +13 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +298 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/plugin/path-utils.d.ts +57 -0
- package/dist/plugin/path-utils.d.ts.map +1 -0
- package/dist/plugin/path-utils.js +160 -0
- package/dist/plugin/path-utils.js.map +1 -0
- package/dist/plugin/scanner.d.ts +17 -0
- package/dist/plugin/scanner.d.ts.map +1 -0
- package/dist/plugin/scanner.js +54 -0
- package/dist/plugin/scanner.js.map +1 -0
- package/dist/plugin/transforms/auto-import.d.ts +14 -0
- package/dist/plugin/transforms/auto-import.d.ts.map +1 -0
- package/dist/plugin/transforms/auto-import.js +154 -0
- package/dist/plugin/transforms/auto-import.js.map +1 -0
- package/dist/plugin/transforms/head-inject.d.ts +29 -0
- package/dist/plugin/transforms/head-inject.d.ts.map +1 -0
- package/dist/plugin/transforms/head-inject.js +127 -0
- package/dist/plugin/transforms/head-inject.js.map +1 -0
- package/dist/plugin/virtual/components.d.ts +6 -0
- package/dist/plugin/virtual/components.d.ts.map +1 -0
- package/dist/plugin/virtual/components.js +22 -0
- package/dist/plugin/virtual/components.js.map +1 -0
- package/dist/plugin/virtual/composables.d.ts +6 -0
- package/dist/plugin/virtual/composables.d.ts.map +1 -0
- package/dist/plugin/virtual/composables.js +22 -0
- package/dist/plugin/virtual/composables.js.map +1 -0
- package/dist/plugin/virtual/error.d.ts +13 -0
- package/dist/plugin/virtual/error.d.ts.map +1 -0
- package/dist/plugin/virtual/error.js +32 -0
- package/dist/plugin/virtual/error.js.map +1 -0
- package/dist/plugin/virtual/layouts.d.ts +6 -0
- package/dist/plugin/virtual/layouts.d.ts.map +1 -0
- package/dist/plugin/virtual/layouts.js +33 -0
- package/dist/plugin/virtual/layouts.js.map +1 -0
- package/dist/plugin/virtual/loading.d.ts +11 -0
- package/dist/plugin/virtual/loading.d.ts.map +1 -0
- package/dist/plugin/virtual/loading.js +30 -0
- package/dist/plugin/virtual/loading.js.map +1 -0
- package/dist/plugin/virtual/middleware.d.ts +6 -0
- package/dist/plugin/virtual/middleware.d.ts.map +1 -0
- package/dist/plugin/virtual/middleware.js +36 -0
- package/dist/plugin/virtual/middleware.js.map +1 -0
- package/dist/plugin/virtual/plugins.d.ts +6 -0
- package/dist/plugin/virtual/plugins.d.ts.map +1 -0
- package/dist/plugin/virtual/plugins.js +30 -0
- package/dist/plugin/virtual/plugins.js.map +1 -0
- package/dist/plugin/virtual/routes.d.ts +16 -0
- package/dist/plugin/virtual/routes.d.ts.map +1 -0
- package/dist/plugin/virtual/routes.js +131 -0
- package/dist/plugin/virtual/routes.js.map +1 -0
- package/dist/plugin/virtual/server-api.d.ts +6 -0
- package/dist/plugin/virtual/server-api.d.ts.map +1 -0
- package/dist/plugin/virtual/server-api.js +41 -0
- package/dist/plugin/virtual/server-api.js.map +1 -0
- package/dist/plugin/virtual/server-middleware.d.ts +6 -0
- package/dist/plugin/virtual/server-middleware.d.ts.map +1 -0
- package/dist/plugin/virtual/server-middleware.js +36 -0
- package/dist/plugin/virtual/server-middleware.js.map +1 -0
- package/dist/runtime/app-template.d.ts +10 -0
- package/dist/runtime/app-template.d.ts.map +1 -0
- package/dist/runtime/app-template.js +143 -0
- package/dist/runtime/app-template.js.map +1 -0
- package/dist/runtime/composables/index.d.ts +4 -0
- package/dist/runtime/composables/index.d.ts.map +1 -0
- package/dist/runtime/composables/index.js +3 -0
- package/dist/runtime/composables/index.js.map +1 -0
- package/dist/runtime/composables/use-head.d.ts +30 -0
- package/dist/runtime/composables/use-head.d.ts.map +1 -0
- package/dist/runtime/composables/use-head.js +182 -0
- package/dist/runtime/composables/use-head.js.map +1 -0
- package/dist/runtime/composables/use-page-data.d.ts +32 -0
- package/dist/runtime/composables/use-page-data.d.ts.map +1 -0
- package/dist/runtime/composables/use-page-data.js +41 -0
- package/dist/runtime/composables/use-page-data.js.map +1 -0
- package/dist/runtime/entry-client-template.d.ts +8 -0
- package/dist/runtime/entry-client-template.d.ts.map +1 -0
- package/dist/runtime/entry-client-template.js +18 -0
- package/dist/runtime/entry-client-template.js.map +1 -0
- package/dist/runtime/entry-server-template.d.ts +9 -0
- package/dist/runtime/entry-server-template.d.ts.map +1 -0
- package/dist/runtime/entry-server-template.js +72 -0
- package/dist/runtime/entry-server-template.js.map +1 -0
- package/dist/types/api.d.ts +16 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/api.js +2 -0
- package/dist/types/api.js.map +1 -0
- package/dist/types/config.d.ts +32 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +4 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/middleware.d.ts +6 -0
- package/dist/types/middleware.d.ts.map +1 -0
- package/dist/types/middleware.js +2 -0
- package/dist/types/middleware.js.map +1 -0
- package/dist/types/page.d.ts +21 -0
- package/dist/types/page.d.ts.map +1 -0
- package/dist/types/page.js +2 -0
- package/dist/types/page.js.map +1 -0
- package/dist/types/plugin.d.ts +12 -0
- package/dist/types/plugin.d.ts.map +1 -0
- package/dist/types/plugin.js +2 -0
- package/dist/types/plugin.js.map +1 -0
- package/docs/cli.md +233 -0
- package/docs/components.md +114 -0
- package/docs/composables.md +99 -0
- package/docs/configuration.md +270 -0
- package/docs/data-loading.md +165 -0
- package/docs/getting-started.md +235 -0
- package/docs/head-management.md +206 -0
- package/docs/layouts.md +112 -0
- package/docs/middleware.md +140 -0
- package/docs/plugins.md +138 -0
- package/docs/rendering-modes.md +251 -0
- package/docs/routing.md +180 -0
- package/docs/server-api.md +172 -0
- package/docs/testing.md +462 -0
- package/package.json +75 -0
- package/src/__tests__/plugin/path-utils.test.ts +399 -0
- package/src/__tests__/plugin/scanner.test.ts +172 -0
- package/src/__tests__/plugin/transforms/auto-import.test.ts +229 -0
- package/src/__tests__/plugin/transforms/head-inject.test.ts +178 -0
- package/src/__tests__/plugin/virtual/components.test.ts +56 -0
- package/src/__tests__/plugin/virtual/composables.test.ts +57 -0
- package/src/__tests__/plugin/virtual/layouts.test.ts +70 -0
- package/src/__tests__/plugin/virtual/middleware.test.ts +68 -0
- package/src/__tests__/plugin/virtual/plugins.test.ts +84 -0
- package/src/__tests__/plugin/virtual/routes.test.ts +202 -0
- package/src/__tests__/plugin/virtual/server-api.test.ts +85 -0
- package/src/__tests__/runtime/use-head.test.ts +243 -0
- package/src/__tests__/runtime/use-page-data.test.ts +45 -0
- package/src/cli/commands/build.ts +114 -0
- package/src/cli/commands/dev.ts +101 -0
- package/src/cli/commands/generate.ts +81 -0
- package/src/cli/commands/preview.ts +218 -0
- package/src/cli/create/index.ts +250 -0
- package/src/cli/create/templates/spa/app/app.ts.tpl +74 -0
- package/src/cli/create/templates/spa/app/layouts/default.ts.tpl +15 -0
- package/src/cli/create/templates/spa/app/pages/index.ts.tpl +8 -0
- package/src/cli/create/templates/spa/cer.config.ts.tpl +6 -0
- package/src/cli/create/templates/spa/index.html.tpl +12 -0
- package/src/cli/create/templates/spa/package.json.tpl +18 -0
- package/src/cli/create/templates/ssg/app/app.ts.tpl +74 -0
- package/src/cli/create/templates/ssg/app/layouts/default.ts.tpl +15 -0
- package/src/cli/create/templates/ssg/app/pages/index.ts.tpl +17 -0
- package/src/cli/create/templates/ssg/cer.config.ts.tpl +13 -0
- package/src/cli/create/templates/ssg/index.html.tpl +12 -0
- package/src/cli/create/templates/ssg/package.json.tpl +19 -0
- package/src/cli/create/templates/ssr/app/app.ts.tpl +74 -0
- package/src/cli/create/templates/ssr/app/layouts/default.ts.tpl +15 -0
- package/src/cli/create/templates/ssr/app/pages/index.ts.tpl +8 -0
- package/src/cli/create/templates/ssr/cer.config.ts.tpl +10 -0
- package/src/cli/create/templates/ssr/index.html.tpl +12 -0
- package/src/cli/create/templates/ssr/package.json.tpl +18 -0
- package/src/cli/index.ts +20 -0
- package/src/index.ts +13 -0
- package/src/plugin/build-ssg.ts +259 -0
- package/src/plugin/build-ssr.ts +147 -0
- package/src/plugin/dev-server.ts +266 -0
- package/src/plugin/dts-generator.ts +214 -0
- package/src/plugin/index.ts +330 -0
- package/src/plugin/path-utils.ts +186 -0
- package/src/plugin/scanner.ts +65 -0
- package/src/plugin/transforms/auto-import.ts +190 -0
- package/src/plugin/transforms/head-inject.ts +161 -0
- package/src/plugin/virtual/components.ts +28 -0
- package/src/plugin/virtual/composables.ts +28 -0
- package/src/plugin/virtual/error.ts +34 -0
- package/src/plugin/virtual/layouts.ts +41 -0
- package/src/plugin/virtual/loading.ts +33 -0
- package/src/plugin/virtual/middleware.ts +45 -0
- package/src/plugin/virtual/plugins.ts +36 -0
- package/src/plugin/virtual/routes.ts +147 -0
- package/src/plugin/virtual/server-api.ts +52 -0
- package/src/plugin/virtual/server-middleware.ts +44 -0
- package/src/runtime/app-template.ts +142 -0
- package/src/runtime/composables/index.ts +3 -0
- package/src/runtime/composables/use-head.ts +204 -0
- package/src/runtime/composables/use-page-data.ts +39 -0
- package/src/runtime/entry-client-template.ts +17 -0
- package/src/runtime/entry-server-template.ts +71 -0
- package/src/types/api.ts +19 -0
- package/src/types/config.ts +39 -0
- package/src/types/index.ts +6 -0
- package/src/types/middleware.ts +16 -0
- package/src/types/page.ts +29 -0
- package/src/types/plugin.ts +13 -0
- package/tsconfig.build.json +10 -0
- package/tsconfig.json +19 -0
- package/vitest.config.ts +29 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Template string for `entry-server.ts`.
|
|
3
|
+
*
|
|
4
|
+
* This is the Node.js SSR entry point. It imports all virtual modules,
|
|
5
|
+
* wires up the routing, and exports a handler compatible with
|
|
6
|
+
* Express/Fastify/Node http.
|
|
7
|
+
*/
|
|
8
|
+
export const ENTRY_SERVER_TEMPLATE = `// Server-side entry — AUTO-GENERATED by vite-plugin-cer-app
|
|
9
|
+
import 'virtual:cer-components'
|
|
10
|
+
import routes from 'virtual:cer-routes'
|
|
11
|
+
import layouts from 'virtual:cer-layouts'
|
|
12
|
+
import plugins from 'virtual:cer-plugins'
|
|
13
|
+
import apiRoutes from 'virtual:cer-server-api'
|
|
14
|
+
import { html, registerBuiltinComponents } from '@jasonshimmy/custom-elements-runtime'
|
|
15
|
+
import { initRouter } from '@jasonshimmy/custom-elements-runtime/router'
|
|
16
|
+
import { createStreamingSSRHandler } from '@jasonshimmy/custom-elements-runtime/ssr-middleware'
|
|
17
|
+
|
|
18
|
+
registerBuiltinComponents()
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Per-request VNode factory — initializes a fresh router at the request URL,
|
|
22
|
+
* resolves the active layout from the matched route's meta, calls the matched
|
|
23
|
+
* route's data loader (if any), and injects the serialized result into the
|
|
24
|
+
* document head as window.__CER_DATA__ for client-side hydration.
|
|
25
|
+
*
|
|
26
|
+
* createStreamingSSRHandler threads the router through each component's SSR
|
|
27
|
+
* context so router-view reads from the per-request instance instead of the
|
|
28
|
+
* shared activeRouterProxy singleton. This makes concurrent SSR requests safe.
|
|
29
|
+
*/
|
|
30
|
+
const vnodeFactory = async (req) => {
|
|
31
|
+
const router = initRouter({ routes, initialUrl: req.url ?? '/' })
|
|
32
|
+
const current = router.getCurrent()
|
|
33
|
+
const { route, params } = router.matchRoute(current.path)
|
|
34
|
+
const layoutName = route?.meta?.layout ?? 'default'
|
|
35
|
+
const layoutTag = layouts[layoutName]
|
|
36
|
+
const inner = html\`<router-view></router-view>\`
|
|
37
|
+
const vnode = layoutTag
|
|
38
|
+
? { tag: layoutTag, props: {}, children: [inner] }
|
|
39
|
+
: inner
|
|
40
|
+
|
|
41
|
+
// Call the route's data loader (if present) and serialize for client hydration.
|
|
42
|
+
let head
|
|
43
|
+
if (route?.load) {
|
|
44
|
+
try {
|
|
45
|
+
const mod = await route.load()
|
|
46
|
+
if (typeof mod.loader === 'function') {
|
|
47
|
+
const query = current.query ?? {}
|
|
48
|
+
const data = await mod.loader({ params, query, req })
|
|
49
|
+
if (data !== undefined && data !== null) {
|
|
50
|
+
head = \`<script>window.__CER_DATA__ = \${JSON.stringify(data)}</script>\`
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
} catch {
|
|
54
|
+
// Loader errors are non-fatal during SSR; the client will refetch.
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return { vnode, router, head }
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* The main request handler.
|
|
63
|
+
* Compatible with Express, Fastify, and Node's raw http.createServer.
|
|
64
|
+
*/
|
|
65
|
+
export const handler = createStreamingSSRHandler(vnodeFactory, {
|
|
66
|
+
render: { dsd: true },
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
export { apiRoutes, plugins, layouts, routes }
|
|
70
|
+
export default handler
|
|
71
|
+
`
|
package/src/types/api.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from 'node:http'
|
|
2
|
+
|
|
3
|
+
export interface ApiRequest extends IncomingMessage {
|
|
4
|
+
params: Record<string, string>
|
|
5
|
+
query: Record<string, string>
|
|
6
|
+
body: unknown
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface ApiResponse extends ServerResponse {
|
|
10
|
+
json(data: unknown): void
|
|
11
|
+
status(code: number): ApiResponse
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export type ApiHandler = (req: ApiRequest, res: ApiResponse) => Promise<void> | void
|
|
15
|
+
|
|
16
|
+
export interface ApiContext {
|
|
17
|
+
req: ApiRequest
|
|
18
|
+
res: ApiResponse
|
|
19
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { RouterConfig } from '@jasonshimmy/custom-elements-runtime/router'
|
|
2
|
+
|
|
3
|
+
export interface SsgConfig {
|
|
4
|
+
routes?: 'auto' | string[]
|
|
5
|
+
concurrency?: number
|
|
6
|
+
fallback?: boolean // fall back to SSR for unenumerated routes
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface JitCssConfig {
|
|
10
|
+
content?: string[]
|
|
11
|
+
extendedColors?: boolean
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface SsrConfig {
|
|
15
|
+
dsd?: boolean
|
|
16
|
+
streaming?: boolean
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface AutoImportsConfig {
|
|
20
|
+
components?: boolean
|
|
21
|
+
composables?: boolean
|
|
22
|
+
directives?: boolean
|
|
23
|
+
runtime?: boolean
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface CerAppConfig {
|
|
27
|
+
mode?: 'spa' | 'ssr' | 'ssg'
|
|
28
|
+
srcDir?: string // defaults to 'app'
|
|
29
|
+
ssg?: SsgConfig
|
|
30
|
+
router?: Pick<RouterConfig, 'base' | 'scrollToFragment'>
|
|
31
|
+
jitCss?: JitCssConfig
|
|
32
|
+
ssr?: SsrConfig
|
|
33
|
+
autoImports?: AutoImportsConfig
|
|
34
|
+
port?: number
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function defineConfig(config: CerAppConfig): CerAppConfig {
|
|
38
|
+
return config
|
|
39
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { CerAppConfig, SsgConfig, JitCssConfig, SsrConfig, AutoImportsConfig } 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 { NextFunction, RouteMiddleware, ServerMiddleware } from './middleware.js'
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { RouteState } from '@jasonshimmy/custom-elements-runtime/router'
|
|
2
|
+
import type { IncomingMessage, ServerResponse } from 'node:http'
|
|
3
|
+
|
|
4
|
+
export type NextFunction = (redirectTo?: string) => void
|
|
5
|
+
|
|
6
|
+
export type RouteMiddleware = (
|
|
7
|
+
to: RouteState,
|
|
8
|
+
from: RouteState | null,
|
|
9
|
+
next: NextFunction,
|
|
10
|
+
) => void | Promise<void>
|
|
11
|
+
|
|
12
|
+
export type ServerMiddleware = (
|
|
13
|
+
req: IncomingMessage,
|
|
14
|
+
res: ServerResponse,
|
|
15
|
+
next: () => void,
|
|
16
|
+
) => void | Promise<void>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { IncomingMessage } from 'node:http'
|
|
2
|
+
|
|
3
|
+
export type HydrateStrategy = 'load' | 'idle' | 'visible' | 'none'
|
|
4
|
+
|
|
5
|
+
export interface SsgPathsContext {
|
|
6
|
+
params: Record<string, string>
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface PageSsgConfig {
|
|
10
|
+
paths?: () => Promise<SsgPathsContext[]> | SsgPathsContext[]
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface PageMeta {
|
|
14
|
+
layout?: string // name of layout in app/layouts/ (default: 'default')
|
|
15
|
+
middleware?: string[] // named middleware files from app/middleware/
|
|
16
|
+
hydrate?: HydrateStrategy
|
|
17
|
+
ssg?: PageSsgConfig
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface PageLoaderContext<P extends Record<string, string> = Record<string, string>> {
|
|
21
|
+
params: P
|
|
22
|
+
query: Record<string, string>
|
|
23
|
+
req: IncomingMessage
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export type PageLoader<
|
|
27
|
+
P extends Record<string, string> = Record<string, string>,
|
|
28
|
+
D = Record<string, unknown>,
|
|
29
|
+
> = (ctx: PageLoaderContext<P>) => Promise<D> | D
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Router } from '@jasonshimmy/custom-elements-runtime/router'
|
|
2
|
+
import type { CerAppConfig } from './config.js'
|
|
3
|
+
|
|
4
|
+
export interface AppContext {
|
|
5
|
+
provide(key: PropertyKey, value: unknown): void
|
|
6
|
+
router: Router
|
|
7
|
+
config: CerAppConfig
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface AppPlugin {
|
|
11
|
+
name: string
|
|
12
|
+
setup(app: AppContext): void | Promise<void>
|
|
13
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "NodeNext",
|
|
5
|
+
"moduleResolution": "NodeNext",
|
|
6
|
+
"lib": ["ES2022", "DOM"],
|
|
7
|
+
"strict": true,
|
|
8
|
+
"esModuleInterop": true,
|
|
9
|
+
"skipLibCheck": true,
|
|
10
|
+
"resolveJsonModule": true,
|
|
11
|
+
"declaration": true,
|
|
12
|
+
"declarationMap": true,
|
|
13
|
+
"sourceMap": true,
|
|
14
|
+
"outDir": "dist",
|
|
15
|
+
"rootDir": "src"
|
|
16
|
+
},
|
|
17
|
+
"include": ["src/**/*.ts"],
|
|
18
|
+
"exclude": ["node_modules", "dist", "src/cli/create/templates"]
|
|
19
|
+
}
|
package/vitest.config.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { defineConfig } from 'vitest/config'
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
test: {
|
|
5
|
+
environment: 'node',
|
|
6
|
+
environmentOptions: {
|
|
7
|
+
happyDom: {
|
|
8
|
+
// Prevent happy-dom from attempting to fetch external script files
|
|
9
|
+
settings: {
|
|
10
|
+
disableJavaScriptFileLoading: true,
|
|
11
|
+
disableJavaScriptEvaluation: true,
|
|
12
|
+
disableComputedStyleRendering: true,
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
coverage: {
|
|
17
|
+
provider: 'v8',
|
|
18
|
+
reporter: ['text', 'lcov'],
|
|
19
|
+
include: ['src/**/*.ts'],
|
|
20
|
+
exclude: [
|
|
21
|
+
'src/cli/**',
|
|
22
|
+
'src/runtime/app-template.ts',
|
|
23
|
+
'src/runtime/entry-client-template.ts',
|
|
24
|
+
'src/runtime/entry-server-template.ts',
|
|
25
|
+
'src/__tests__/**',
|
|
26
|
+
],
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
})
|