@vitella-ssr/vue 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/README.md ADDED
@@ -0,0 +1,2 @@
1
+ # @vitella-ssr/vue
2
+ This is a plugin for Vitella that enables vue to be SSR through Vitella.
@@ -0,0 +1,4 @@
1
+ import type { Adapter } from '@vitella-ssr/core';
2
+ export { useHead } from './use-head.js';
3
+ export declare const vueAdapter: Adapter;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAGhD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,eAAO,MAAM,UAAU,EAAE,OAyBxB,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,29 @@
1
+ import { renderVueComponent } from './renderer.js';
2
+ export { useHead } from './use-head.js';
3
+ export const vueAdapter = {
4
+ name: 'vue',
5
+ extensions: ['.vue'],
6
+ render: async ({ component, loadData, layout }) => {
7
+ return renderVueComponent(component, loadData, layout);
8
+ },
9
+ getClientEntry(page, pagePath, layout) {
10
+ if (layout) {
11
+ return [
12
+ `import { createSSRApp, h } from 'vue'`,
13
+ `import Layout from ${JSON.stringify(layout)}`,
14
+ `import Page from ${JSON.stringify(pagePath)}`,
15
+ `const __initState = typeof window !== 'undefined' ? window.__INITIAL_STATE__ || {} : {}`,
16
+ `const app = createSSRApp({ render() { return h(Layout, null, { default: () => h(Page, __initState) }) } })`,
17
+ `app.mount('#app')`,
18
+ ].join('\n');
19
+ }
20
+ return [
21
+ `import { createSSRApp } from 'vue'`,
22
+ `import Page from ${JSON.stringify(pagePath)}`,
23
+ `const __initState = typeof window !== 'undefined' ? window.__INITIAL_STATE__ || {} : {}`,
24
+ `const app = createSSRApp(Page, __initState)`,
25
+ `app.mount('#app')`,
26
+ ].join('\n');
27
+ },
28
+ };
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAElD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,MAAM,CAAC,MAAM,UAAU,GAAY;IACjC,IAAI,EAAE,KAAK;IACX,UAAU,EAAE,CAAC,MAAM,CAAC;IACpB,MAAM,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;QAChD,OAAO,kBAAkB,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;IACxD,CAAC;IACD,cAAc,CAAC,IAAY,EAAE,QAAgB,EAAE,MAAe;QAC5D,IAAI,MAAM,EAAE,CAAC;YACX,OAAO;gBACL,uCAAuC;gBACvC,sBAAsB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;gBAC9C,oBAAoB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;gBAC9C,yFAAyF;gBACzF,4GAA4G;gBAC5G,mBAAmB;aACpB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACd,CAAC;QACD,OAAO;YACL,oCAAoC;YACpC,oBAAoB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;YAC9C,yFAAyF;YACzF,6CAA6C;YAC7C,mBAAmB;SACpB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACd,CAAC;CACF,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { AdapterRenderResult } from '@vitella-ssr/core';
2
+ export declare function renderVueComponent(component: any, loadData: Record<string, unknown>, layout?: any): Promise<string | AdapterRenderResult>;
3
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAE5D,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,GAAG,EACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,MAAM,CAAC,EAAE,GAAG,GACX,OAAO,CAAC,MAAM,GAAG,mBAAmB,CAAC,CAsCvC"}
@@ -0,0 +1,36 @@
1
+ import { createSSRApp, h } from 'vue';
2
+ import { renderToString } from '@vue/server-renderer';
3
+ export async function renderVueComponent(component, loadData, layout) {
4
+ const ssrContext = {};
5
+ const app = createSSRApp({
6
+ render() {
7
+ if (layout) {
8
+ return h(layout, null, {
9
+ default: () => h(component, loadData),
10
+ });
11
+ }
12
+ return h(component, loadData);
13
+ },
14
+ });
15
+ const html = await renderToString(app, ssrContext);
16
+ const headData = ssrContext.head;
17
+ if (!headData)
18
+ return html;
19
+ let head = '';
20
+ if (headData.meta) {
21
+ head += headData.meta
22
+ .map((m) => `<meta${m.charset ? ` charset="${m.charset}"` : ''}${m.name ? ` name="${m.name}"` : ''}${m.property ? ` property="${m.property}"` : ''}${m.content ? ` content="${m.content}"` : ''}>`)
23
+ .join('\n ');
24
+ }
25
+ if (headData.link) {
26
+ head += headData.link
27
+ .map((l) => `<link rel="${l.rel}" href="${l.href}">`)
28
+ .join('\n ');
29
+ }
30
+ return {
31
+ html,
32
+ title: headData.title,
33
+ head: head || undefined,
34
+ };
35
+ }
36
+ //# sourceMappingURL=renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAGrD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,SAAc,EACd,QAAiC,EACjC,MAAY;IAEZ,MAAM,UAAU,GAAwE,EAAE,CAAA;IAE1F,MAAM,GAAG,GAAG,YAAY,CAAC;QACvB,MAAM;YACJ,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE;oBACrB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC;iBACtC,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;QAC/B,CAAC;KACF,CAAC,CAAA;IAEF,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;IAElD,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAA;IAChC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAA;IAE1B,IAAI,IAAI,GAAG,EAAE,CAAA;IACb,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClB,IAAI,IAAI,QAAQ,CAAC,IAAI;aAClB,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CACd,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CACvL;aACA,IAAI,CAAC,MAAM,CAAC,CAAA;IACjB,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClB,IAAI,IAAI,QAAQ,CAAC,IAAI;aAClB,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,IAAI,CAAC;aACzD,IAAI,CAAC,MAAM,CAAC,CAAA;IACjB,CAAC;IAED,OAAO;QACL,IAAI;QACJ,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,IAAI,EAAE,IAAI,IAAI,SAAS;KACxB,CAAA;AACH,CAAC"}
@@ -0,0 +1,15 @@
1
+ export interface HeadAttrs {
2
+ title?: string;
3
+ meta?: Array<{
4
+ charset?: string;
5
+ name?: string;
6
+ property?: string;
7
+ content?: string;
8
+ }>;
9
+ link?: Array<{
10
+ rel: string;
11
+ href: string;
12
+ }>;
13
+ }
14
+ export declare function useHead(options: HeadAttrs): void;
15
+ //# sourceMappingURL=use-head.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-head.d.ts","sourceRoot":"","sources":["../src/use-head.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,KAAK,CAAC;QACX,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,OAAO,CAAC,EAAE,MAAM,CAAA;KACjB,CAAC,CAAA;IACF,IAAI,CAAC,EAAE,KAAK,CAAC;QACX,GAAG,EAAE,MAAM,CAAA;QACX,IAAI,EAAE,MAAM,CAAA;KACb,CAAC,CAAA;CACH;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,SAAS,QAiBzC"}
@@ -0,0 +1,20 @@
1
+ import { inject } from 'vue';
2
+ const SSR_CONTEXT_KEY = Symbol.for('v-scx');
3
+ export function useHead(options) {
4
+ const ctx = inject(SSR_CONTEXT_KEY, null);
5
+ if (!ctx)
6
+ return;
7
+ if (!ctx.head) {
8
+ ctx.head = {};
9
+ }
10
+ if (options.title !== undefined) {
11
+ ctx.head.title = options.title;
12
+ }
13
+ if (options.meta) {
14
+ ctx.head.meta = options.meta;
15
+ }
16
+ if (options.link) {
17
+ ctx.head.link = options.link;
18
+ }
19
+ }
20
+ //# sourceMappingURL=use-head.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-head.js","sourceRoot":"","sources":["../src/use-head.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAA;AAE5B,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AAgB3C,MAAM,UAAU,OAAO,CAAC,OAAkB;IACxC,MAAM,GAAG,GAAG,MAAM,CAA8B,eAAe,EAAE,IAAI,CAAC,CAAA;IACtE,IAAI,CAAC,GAAG;QAAE,OAAM;IAEhB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACd,GAAG,CAAC,IAAI,GAAG,EAAE,CAAA;IACf,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAChC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;IAChC,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;IAC9B,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;IAC9B,CAAC;AACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@vitella-ssr/vue",
3
+ "version": "0.1.0",
4
+ "description": "A plugin to support Vue in Vitella",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": ["dist"],
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "test": "vitest run",
18
+ "dev": "vitest"
19
+ },
20
+ "overrides": {
21
+ "vite": "8.0.16"
22
+ },
23
+ "dependencies": {
24
+ "vue": "3.5.38",
25
+ "@vue/server-renderer": "3.5.38"
26
+ },
27
+ "peerDependencies": {
28
+ "@vitella-ssr/core": "^0.1.0"
29
+ },
30
+ "devDependencies": {
31
+ "@vitella-ssr/core": "*",
32
+ "@vitejs/plugin-vue": "^5.0.0",
33
+ "vue": "3.5.38",
34
+ "@vue/server-renderer": "3.5.38",
35
+ "vitest": "4.1.9",
36
+ "@types/node": "25.9.3"
37
+ }
38
+ }