From c77f35398d93080a3f91e1efc764893e54b2c266 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Thu, 2 Oct 2025 22:33:51 +0900 Subject: [PATCH 01/27] feat: add vue-router-ssr example --- examples/vue-router-ssr/.gitignore | 5 + examples/vue-router-ssr/package.json | 22 ++ examples/vue-router-ssr/public/favicon.ico | Bin 0 -> 4286 bytes .../src/framework/entry.client.tsx | 31 ++ .../src/framework/entry.server.tsx | 65 ++++ examples/vue-router-ssr/src/root.vue | 51 +++ examples/vue-router-ssr/src/routes.ts | 91 +++++ examples/vue-router-ssr/src/routes/about.vue | 9 + examples/vue-router-ssr/src/routes/index.vue | 52 +++ .../vue-router-ssr/src/routes/not-found.vue | 5 + examples/vue-router-ssr/src/styles.css | 49 +++ examples/vue-router-ssr/tsconfig.json | 15 + examples/vue-router-ssr/vite.config.ts | 37 ++ pnpm-lock.yaml | 324 ++++++++++++++++-- 14 files changed, 726 insertions(+), 30 deletions(-) create mode 100644 examples/vue-router-ssr/.gitignore create mode 100644 examples/vue-router-ssr/package.json create mode 100644 examples/vue-router-ssr/public/favicon.ico create mode 100644 examples/vue-router-ssr/src/framework/entry.client.tsx create mode 100644 examples/vue-router-ssr/src/framework/entry.server.tsx create mode 100644 examples/vue-router-ssr/src/root.vue create mode 100644 examples/vue-router-ssr/src/routes.ts create mode 100644 examples/vue-router-ssr/src/routes/about.vue create mode 100644 examples/vue-router-ssr/src/routes/index.vue create mode 100644 examples/vue-router-ssr/src/routes/not-found.vue create mode 100644 examples/vue-router-ssr/src/styles.css create mode 100644 examples/vue-router-ssr/tsconfig.json create mode 100644 examples/vue-router-ssr/vite.config.ts diff --git a/examples/vue-router-ssr/.gitignore b/examples/vue-router-ssr/.gitignore new file mode 100644 index 0000000..42c690b --- /dev/null +++ b/examples/vue-router-ssr/.gitignore @@ -0,0 +1,5 @@ +dist +node_modules +*.tsbuildinfo +.output +.nitro diff --git a/examples/vue-router-ssr/package.json b/examples/vue-router-ssr/package.json new file mode 100644 index 0000000..e89c78e --- /dev/null +++ b/examples/vue-router-ssr/package.json @@ -0,0 +1,22 @@ +{ + "name": "nitro-vite-vue-router-ssr", + "private": true, + "type": "module", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "NITRO_HOST=127.0.0.1 false" + }, + "devDependencies": { + "@hiogawa/vite-plugin-fullstack": "https://pkg.pr.new/hi-ogawa/vite-plugins/@hiogawa/vite-plugin-fullstack@2fc4555", + "@tsconfig/strictest": "^2.0.6", + "@unhead/vue": "^2.0.17", + "@vitejs/plugin-vue": "^6.0.1", + "nitro": "npm:nitro-nightly@3.0.0-20251002-102506-5324ee74", + "srvx": "^0.8.7", + "vite": "^7", + "vite-plugin-devtools-json": "^1.0.0", + "vue": "^3.5.22", + "vue-router": "^4.5.1" + } +} diff --git a/examples/vue-router-ssr/public/favicon.ico b/examples/vue-router-ssr/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4aff076603f8f01fb3b7d8b5e38df77cc1efdd69 GIT binary patch literal 4286 zcmc(jeOQ&{9mmi9Y5(N4wKaEHmR6cpj%~hXo13+jb7bn2986aeCEr<~nOgZmpr$E` zf`o4brE!#(M1gZu646vl&`1pxMdw?|n=m>c+@F0P;mO>tlyk0ib#r~sdCqh0=e|Gp z@BY2q2Z!Sa`s>)yVZAyw{@CGY>u@-_O1kCfFIo4mH+}bzU$dHTI2`!e8Vx4;1ZKh^ zxKi)yD84^;xC-;kZcMM8u;Hxl=0 zrl(}R$D9P?+i+ezRaK9fv=7rK8`IkjJ!J!H{(<@MS+!R~`O?{>ox=Qa3-rsRXz(63 z2OX9VwCuy2qfp=E%do9`=6nq%BuDe7!jtKI6u6hZ(Up|S59#T~^xp-0ue5F~Z+jVS zZek&3&_;~E69#PN+~91w#MclR`Z@H~e)M!gs0@p&odJ103qFqWoKTLTHzP(@mAxzj(#e6hoycovD(ij}ivB{e#lRuP=cG5k$iaRo)dtx=G zM`-QOi1(><%*tYDlHdB;$}2ES5-{NlF)zQ3nIet}%c&n1$C&sM{8FwGkZ_g`sUGg! z3T>ptZyW}H`KjW=1Y|*Rxo@*u@#a=udF@Tij3~@2VhCG&oq>tVm=kl5JGI?yq#tEV znyQW7d%s`BnUNog;R7)^G4l^7CpCJ{a9%Yn`Yp_y*_byXFtZ{t(-+7Viy(9{&V^aD zbs2uD6#Nr0*t#nRmP8cFH{WZ{6~oeCpO^7?twAxY_*(EPM7@rgXEDr!SrITj3c}}8 zG&hNdv%li*9q=>hZiT(2yL8>xDH{YUC=?&&*$uMcN6JZFoDoXp$8j^YkZG`J2F#yD zT~q{{;?mf*+{vkkRh*ogz;80kX{(g`^V}P1yAv!$FZ=}TTrvCu$T`)zJ@6=Iw#2~7 zDX=^omRbzcx$<@-Pv=~u!|o<}xvTke<^?+EHqb5)?vdJw!(HPN#foO70Yl-k>>`W6NT?SD*WDt)y&<{AiS7Soz8*XK=RiTNo5?#oDKo7j&K*4as9+{Y$WBf^0FF zhPW_7T*Y)e2oGsl4=Su|Js>7q|IHS&LZG8pDR+w@NcCf#pc|Y1m!a|mxHMN<5IFx1 z8~>pkE;}TKz}oRNCQKpRUBH8fptD@dQYW$4vY4(*To35FgLJ?22Ui7UQ&lU1W0kw( zmA{hV*u|UYZ&JK{x(u?0L*`#0{co^Y3@IiNbQp!w zO~^{sk=0O8+H8YsRd7@>zI!0-dJcAo!6iFvdtPxEsQr*FoZ{FpidEZFc~oV-Tk*|$ zOiZ@A>Uvn-1u7yJ!OXeJSCKGPdDF_>p{gGfEe6%GMd?tjc)TqC{6ur_9{_tS27fUO z62lPLLUzcOFS-?jc~K-4?ZfXl{PI|{{KR7G7oUNpZc?8j4+TjnD#%v;R^FZ=O;ZgC zQw<4K9kXibq*$#{4s=ZGD|!+NHE*G=kG!mVVn4kRE-IKSOQ7zG>Zpg*Dnk!_{PpKI z^ege$`kG68tF7N7moCV*M=`td75h4u#3o_hR4h!F4JOMLvlF2rN59`Pl%M4|o^y(g zS}=__`)A81R}DOVN=Mz3(8JOR)qGpx>fXX;*=W+gG@L^E>t@wck4JM=z=<;1T8?r+ z2K1tp)T{Jd($Pnl{u<(`)5^1QqbH<3;_5B+5|_m^P~VlR|NpaD%c*J7PrU}Yugsfq z6=KWbwaXB4Ua4MOgTyu9jE-TFWv}nL35VJirUPP1tyZ~^yM!slY|{1Zn*D!(@9X_P D`VsgZ literal 0 HcmV?d00001 diff --git a/examples/vue-router-ssr/src/framework/entry.client.tsx b/examples/vue-router-ssr/src/framework/entry.client.tsx new file mode 100644 index 0000000..829af0c --- /dev/null +++ b/examples/vue-router-ssr/src/framework/entry.client.tsx @@ -0,0 +1,31 @@ +import { createHead } from "@unhead/vue/client"; +import { createSSRApp } from "vue"; +import { createRouter, createWebHistory } from "vue-router"; +import Root from "../root.vue"; +import { routes } from "../routes"; + +async function main() { + const app = createSSRApp(Root); + + const router = createRouter({ + history: createWebHistory(), + routes, + }); + app.use(router); + + const head = createHead(); + app.use(head); + + await router.isReady(); + app.mount("#root"); + + if (import.meta.hot) { + // TODO + import.meta.hot.on("fullstack:update", (e) => { + console.log("[fullstack:update]", e); + window.location.reload(); + }); + } +} + +main(); diff --git a/examples/vue-router-ssr/src/framework/entry.server.tsx b/examples/vue-router-ssr/src/framework/entry.server.tsx new file mode 100644 index 0000000..e316fa2 --- /dev/null +++ b/examples/vue-router-ssr/src/framework/entry.server.tsx @@ -0,0 +1,65 @@ +import { createHead, transformHtmlTemplate } from "@unhead/vue/server"; +import { createSSRApp } from "vue"; +import { createMemoryHistory, createRouter } from "vue-router"; +import { renderToString } from "vue/server-renderer"; +import Root from "../root.vue"; +import { routes } from "../routes"; + +const assets = import.meta.vite.assets({ + import: "./entry.client.tsx", + environment: "client", +}); + +async function handler(request: Request): Promise { + // setup router + const router = createRouter({ + history: createMemoryHistory(), + routes, + }); + const url = new URL(request.url); + const href = url.href.slice(url.origin.length); + router.push(href); + + // setup app + const app = createSSRApp(Root); + app.use(router); + + const head = createHead(); + app.use(head); + + // render + await router.isReady(); + const ssrStream = await renderToString(app); + + let htmlStream = `\ + + + + + + Vue Router Custom Framework + + +
${ssrStream}
+ + + +`; + htmlStream = await transformHtmlTemplate(head, htmlStream); + + return new Response(htmlStream, { + headers: { + "Content-Type": "text/html;charset=utf-8", + }, + }); +} + +export default { + fetch: handler, +}; + +if (import.meta.hot) { + import.meta.hot.accept(); +} diff --git a/examples/vue-router-ssr/src/root.vue b/examples/vue-router-ssr/src/root.vue new file mode 100644 index 0000000..a7f2cc5 --- /dev/null +++ b/examples/vue-router-ssr/src/root.vue @@ -0,0 +1,51 @@ + + + + + + diff --git a/examples/vue-router-ssr/src/routes.ts b/examples/vue-router-ssr/src/routes.ts new file mode 100644 index 0000000..36a293e --- /dev/null +++ b/examples/vue-router-ssr/src/routes.ts @@ -0,0 +1,91 @@ +import { + type ImportAssetsResult, + mergeAssets, +} from "@hiogawa/vite-plugin-fullstack/runtime"; +import { useHead } from "@unhead/vue"; +import type { RouteRecordRaw } from "vue-router"; + +// custom framework may employ fs router convention and/or transform plugin +// to reduce boilerplace +export const routes: RouteRecordRaw[] = [ + { + path: "/", + name: "home", + component: () => import("./routes/index.vue"), + beforeEnter: (_from, _to, next) => { + useAssets( + import.meta.vite.assets({ + import: "./routes/index.vue", + environment: "client", + }), + import.meta.vite.assets({ + import: "./routes/index.vue", + environment: "ssr", + }), + ); + next(); + }, + }, + { + path: "/about", + name: "client", + component: () => import("./routes/about.vue"), + beforeEnter: (_from, _to, next) => { + useAssets( + import.meta.vite.assets({ + import: "./routes/about.vue", + environment: "client", + }), + import.meta.vite.assets({ + import: "./routes/about.vue", + environment: "ssr", + }), + ); + next(); + }, + }, + { + path: "/:catchAll(.*)", + name: "not-found", + component: () => import("./routes/not-found.vue"), + beforeEnter: (_from, _to, next) => { + useAssets( + import.meta.vite.assets({ + import: "./routes/not-found.vue", + environment: "client", + }), + import.meta.vite.assets({ + import: "./routes/not-found.vue", + environment: "ssr", + }), + ); + next(); + }, + }, +]; + +const rootAssets = [ + import.meta.vite.assets({ + import: "./root.vue", + environment: "client", + }), + import.meta.vite.assets({ + import: "./root.vue", + environment: "ssr", + }), + import.meta.vite.assets({ + import: "./framework/entry.client.tsx", + environment: "client", + }), +]; + +function useAssets(...args: ImportAssetsResult[]) { + if (!import.meta.env.SSR) return; + const assets = mergeAssets(...args, ...rootAssets); + useHead({ + link: [ + ...assets.css.map((attrs) => ({ rel: "stylesheet", ...attrs })), + ...assets.js.map((attrs) => ({ rel: "modulepreload", ...attrs })), + ], + }); +} diff --git a/examples/vue-router-ssr/src/routes/about.vue b/examples/vue-router-ssr/src/routes/about.vue new file mode 100644 index 0000000..70cde26 --- /dev/null +++ b/examples/vue-router-ssr/src/routes/about.vue @@ -0,0 +1,9 @@ + diff --git a/examples/vue-router-ssr/src/routes/index.vue b/examples/vue-router-ssr/src/routes/index.vue new file mode 100644 index 0000000..c8bfa5a --- /dev/null +++ b/examples/vue-router-ssr/src/routes/index.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/examples/vue-router-ssr/src/routes/not-found.vue b/examples/vue-router-ssr/src/routes/not-found.vue new file mode 100644 index 0000000..199773a --- /dev/null +++ b/examples/vue-router-ssr/src/routes/not-found.vue @@ -0,0 +1,5 @@ + diff --git a/examples/vue-router-ssr/src/styles.css b/examples/vue-router-ssr/src/styles.css new file mode 100644 index 0000000..501226a --- /dev/null +++ b/examples/vue-router-ssr/src/styles.css @@ -0,0 +1,49 @@ +* { + box-sizing: border-box; +} + +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; + background: #f5f5f5; + color: #333; +} + +main { + max-width: 800px; + margin: 0 auto; + padding: 2rem; +} + +h1 { + font-size: 2.5rem; + margin-bottom: 0.5rem; +} + +.card { + background: white; + border-radius: 8px; + padding: 2rem; + box-shadow: 0 2px 4px rgba(0,0,0,0.1); + margin: 2rem 0; +} + +button { + background: #646cff; + color: white; + border: none; + padding: 0.5rem 1rem; + border-radius: 4px; + font-size: 1rem; + cursor: pointer; +} + +button:hover { + background: #535bf2; +} + +.subtitle { + color: #666; + font-size: 1.1rem; + margin-bottom: 2rem; +} diff --git a/examples/vue-router-ssr/tsconfig.json b/examples/vue-router-ssr/tsconfig.json new file mode 100644 index 0000000..e61d35f --- /dev/null +++ b/examples/vue-router-ssr/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "@tsconfig/strictest/tsconfig.json", + "include": ["src", "*.ts", "src/**/*.vue"], + "compilerOptions": { + "noImplicitReturns": false, + "exactOptionalPropertyTypes": false, + "verbatimModuleSyntax": true, + "noEmit": true, + "moduleResolution": "Bundler", + "module": "ESNext", + "target": "ESNext", + "lib": ["ESNext", "DOM", "DOM.Iterable", "DOM.AsyncIterable"], + "types": ["vite/client", "@hiogawa/vite-plugin-fullstack/types"] + } +} diff --git a/examples/vue-router-ssr/vite.config.ts b/examples/vue-router-ssr/vite.config.ts new file mode 100644 index 0000000..94fe7dc --- /dev/null +++ b/examples/vue-router-ssr/vite.config.ts @@ -0,0 +1,37 @@ +import { assetsPlugin } from "@hiogawa/vite-plugin-fullstack"; +import vue from "@vitejs/plugin-vue"; +import { defineConfig } from "vite"; +import devtoolsJson from "vite-plugin-devtools-json"; +import { nitro } from "nitro/vite"; + +export default defineConfig((_env) => ({ + clearScreen: false, + plugins: [ + vue(), + devtoolsJson(), + assetsPlugin(), + nitro(), + ], + environments: { + client: { + build: { + rollupOptions: { + input: "./src/framework/entry.client.tsx", + } + } + }, + ssr: { + build: { + rollupOptions: { + input: "./src/framework/entry.server.tsx", + } + } + }, + }, + builder: { + async buildApp(builder) { + await builder.build(builder.environments["ssr"]!); + await builder.build(builder.environments["client"]!); + }, + }, +})); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index edfa2db..3e35a4a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,7 +35,7 @@ importers: devDependencies: h3: specifier: npm:h3-nightly@beta - version: h3-nightly@2.0.0-20250827-145159-0ca624d(crossws@0.4.1(srvx@0.8.7)) + version: h3-nightly@2.0.0-beta.5(crossws@0.4.1(srvx@0.8.9)) nitro: specifier: npm:nitro-nightly@3.0.0-20250827-221052-f5f24698 version: nitro-nightly@3.0.0-20250827-221052-f5f24698(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)) @@ -123,7 +123,7 @@ importers: version: 1.132.0-alpha.4(@tanstack/react-router@1.132.0-alpha.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(@tanstack/router-core@1.132.0-alpha.4)(csstype@3.1.3)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(solid-js@1.9.9)(tiny-invariant@1.3.3) '@tanstack/react-start': specifier: ^1.132.0-alpha.6 - version: 1.132.0-alpha.7(@tanstack/react-router@1.132.0-alpha.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(crossws@0.4.1(srvx@0.8.7))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@7.1.3(@types/node@22.18.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)))(vite@7.1.3(@types/node@22.18.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)) + version: 1.132.0-alpha.7(@tanstack/react-router@1.132.0-alpha.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(crossws@0.4.1(srvx@0.8.9))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@7.1.3(@types/node@22.18.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)))(vite@7.1.3(@types/node@22.18.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)) '@types/node': specifier: ^22.5.4 version: 22.18.0 @@ -155,6 +155,39 @@ importers: specifier: ^5.1.4 version: 5.1.4(typescript@5.9.2)(vite@7.1.3(@types/node@22.18.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)) + examples/vue-router-ssr: + devDependencies: + '@hiogawa/vite-plugin-fullstack': + specifier: https://pkg.pr.new/hi-ogawa/vite-plugins/@hiogawa/vite-plugin-fullstack@2fc4555 + version: https://pkg.pr.new/hi-ogawa/vite-plugins/@hiogawa/vite-plugin-fullstack@2fc4555(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)) + '@tsconfig/strictest': + specifier: ^2.0.6 + version: 2.0.6 + '@unhead/vue': + specifier: ^2.0.17 + version: 2.0.17(vue@3.5.22(typescript@5.9.2)) + '@vitejs/plugin-vue': + specifier: ^6.0.1 + version: 6.0.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5))(vue@3.5.22(typescript@5.9.2)) + nitro: + specifier: npm:nitro-nightly@3.0.0-20250827-221052-f5f24698 + version: nitro-nightly@3.0.0-20250827-221052-f5f24698(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)) + srvx: + specifier: ^0.8.7 + version: 0.8.7 + vite: + specifier: ^7.1.0 + version: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5) + vite-plugin-devtools-json: + specifier: ^1.0.0 + version: 1.0.0(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)) + vue: + specifier: ^3.5.22 + version: 3.5.22(typescript@5.9.2) + vue-router: + specifier: ^4.5.1 + version: 4.5.1(vue@3.5.22(typescript@5.9.2)) + examples/vue-ssr: devDependencies: '@vitejs/plugin-vue': @@ -271,6 +304,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.28.4': + resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-syntax-jsx@7.27.1': resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} engines: {node: '>=6.9.0'} @@ -329,6 +367,10 @@ packages: resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} engines: {node: '>=6.9.0'} + '@babel/types@7.28.4': + resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} + engines: {node: '>=6.9.0'} + '@esbuild/aix-ppc64@0.25.9': resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==} engines: {node: '>=18'} @@ -485,6 +527,12 @@ packages: cpu: [x64] os: [win32] + '@hiogawa/vite-plugin-fullstack@https://pkg.pr.new/hi-ogawa/vite-plugins/@hiogawa/vite-plugin-fullstack@2fc4555': + resolution: {tarball: https://pkg.pr.new/hi-ogawa/vite-plugins/@hiogawa/vite-plugin-fullstack@2fc4555} + version: 0.0.0-alpha.0 + peerDependencies: + vite: ^7.1.0 + '@ioredis/commands@1.3.0': resolution: {integrity: sha512-M/T6Zewn7sDaBQEqIZ8Rb+i9y8qfGmq+5SDFSf9sA2lUZTmdDLVdOiQaeDp+Q4wElZ9HG1GAX5KhDaidp6LQsQ==} @@ -968,6 +1016,9 @@ packages: resolution: {integrity: sha512-sFkWgYRPV3IQ3EzHFhnALh8VXa+HR4pbcilZPEiqr3K+B+G+BCQeY1tDSCug6oPKNiX2tHliMIgNNntvB5K0aw==} engines: {node: '>=12'} + '@tsconfig/strictest@2.0.6': + resolution: {integrity: sha512-tPOhmDhIUcDjvpDDYyiUdssP84Eqm7n5KxJe5J3/g+s6xoDIPAf+SIn06dhw7VkhxIvLOnhDDrX7tsqMHNEhDg==} + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -992,6 +1043,11 @@ packages: '@types/node@24.3.0': resolution: {integrity: sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==} + '@types/react-dom@19.1.7': + resolution: {integrity: sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw==} + peerDependencies: + '@types/react': ^19.0.0 + '@types/react-dom@19.1.8': resolution: {integrity: sha512-xG7xaBMJCpcK0RpN8jDbAACQo54ycO6h4dSSmgv8+fu6ZIAdANkx/WsawASUjVXYfy+J9AbUpRMNNEsXCDfDBQ==} peerDependencies: @@ -1000,17 +1056,17 @@ packages: '@types/react@19.1.12': resolution: {integrity: sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==} - '@types/react-dom@19.1.7': - resolution: {integrity: sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw==} - peerDependencies: - '@types/react': ^19.0.0 - '@types/react@19.1.9': resolution: {integrity: sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==} '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + '@unhead/vue@2.0.17': + resolution: {integrity: sha512-jzmGZYeMAhETV6qfetmLbZzUjjx1TjdNvFSobeFZb73D7dwD9wl/nOAx36qq+TvjZsLJdF5PQWToz2oDGAUqCg==} + peerDependencies: + vue: '>=3.5.18' + '@vercel/nft@0.30.1': resolution: {integrity: sha512-2mgJZv4AYBFkD/nJ4QmiX5Ymxi+AisPLPcS/KPXVqniyQNqKXX+wjieAbDXQP3HcogfEbpHoRMs49Cd4pfkk8g==} engines: {node: '>=18'} @@ -1032,32 +1088,64 @@ packages: '@vue/compiler-core@3.5.20': resolution: {integrity: sha512-8TWXUyiqFd3GmP4JTX9hbiTFRwYHgVL/vr3cqhr4YQ258+9FADwvj7golk2sWNGHR67QgmCZ8gz80nQcMokhwg==} + '@vue/compiler-core@3.5.22': + resolution: {integrity: sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==} + '@vue/compiler-dom@3.5.20': resolution: {integrity: sha512-whB44M59XKjqUEYOMPYU0ijUV0G+4fdrHVKDe32abNdX/kJe1NUEMqsi4cwzXa9kyM9w5S8WqFsrfo1ogtBZGQ==} + '@vue/compiler-dom@3.5.22': + resolution: {integrity: sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==} + '@vue/compiler-sfc@3.5.20': resolution: {integrity: sha512-SFcxapQc0/feWiSBfkGsa1v4DOrnMAQSYuvDMpEaxbpH5dKbnEM5KobSNSgU+1MbHCl+9ftm7oQWxvwDB6iBfw==} + '@vue/compiler-sfc@3.5.22': + resolution: {integrity: sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==} + '@vue/compiler-ssr@3.5.20': resolution: {integrity: sha512-RSl5XAMc5YFUXpDQi+UQDdVjH9FnEpLDHIALg5J0ITHxkEzJ8uQLlo7CIbjPYqmZtt6w0TsIPbo1izYXwDG7JA==} + '@vue/compiler-ssr@3.5.22': + resolution: {integrity: sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==} + + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + '@vue/reactivity@3.5.20': resolution: {integrity: sha512-hS8l8x4cl1fmZpSQX/NXlqWKARqEsNmfkwOIYqtR2F616NGfsLUm0G6FQBK6uDKUCVyi1YOL8Xmt/RkZcd/jYQ==} + '@vue/reactivity@3.5.22': + resolution: {integrity: sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A==} + '@vue/runtime-core@3.5.20': resolution: {integrity: sha512-vyQRiH5uSZlOa+4I/t4Qw/SsD/gbth0SW2J7oMeVlMFMAmsG1rwDD6ok0VMmjXY3eI0iHNSSOBilEDW98PLRKw==} + '@vue/runtime-core@3.5.22': + resolution: {integrity: sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ==} + '@vue/runtime-dom@3.5.20': resolution: {integrity: sha512-KBHzPld/Djw3im0CQ7tGCpgRedryIn4CcAl047EhFTCCPT2xFf4e8j6WeKLgEEoqPSl9TYqShc3Q6tpWpz/Xgw==} + '@vue/runtime-dom@3.5.22': + resolution: {integrity: sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww==} + '@vue/server-renderer@3.5.20': resolution: {integrity: sha512-HthAS0lZJDH21HFJBVNTtx+ULcIbJQRpjSVomVjfyPkFSpCwvsPTA+jIzOaUm3Hrqx36ozBHePztQFg6pj5aKg==} peerDependencies: vue: 3.5.20 + '@vue/server-renderer@3.5.22': + resolution: {integrity: sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ==} + peerDependencies: + vue: 3.5.22 + '@vue/shared@3.5.20': resolution: {integrity: sha512-SoRGP596KU/ig6TfgkCMbXkr4YJ91n/QSdMuqeP5r3hVIYA3CPHUBCc7Skak0EAKV+5lL4KyIh61VA/pK1CIAA==} + '@vue/shared@3.5.22': + resolution: {integrity: sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==} + abbrev@3.0.1: resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} engines: {node: ^18.17.0 || >=20.5.0} @@ -1464,6 +1552,9 @@ packages: fetchdts@0.1.6: resolution: {integrity: sha512-yR7rc9v+7KOEnSU5sOJfH9OaxhWRfrrk3am1CUliTCy6Bc+JQtGcxFT9MxvmbU34wA8HYkCk5r9lVRAld8IAcQ==} + fetchdts@0.1.7: + resolution: {integrity: sha512-YoZjBdafyLIop9lSxXVI33oLD5kN31q4Td+CasofLLYeLXRFeOsuOw0Uo+XNRi9PZlbfdlN2GmRtm4tCEQ9/KA==} + file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} @@ -1540,8 +1631,8 @@ packages: resolution: {integrity: sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - h3-nightly@2.0.0-20250827-145159-0ca624d: - resolution: {integrity: sha512-aYHFGGn19/eD9ZDmbwE/MElnp/bkhug0Yi0J+6S+DtX/KlYYEoz0Lukw/hOFlondheN9Z5M5nW6w2g3xHBosiQ==} + h3-nightly@2.0.0-beta.5: + resolution: {integrity: sha512-wl1MLRfwAXS3WepD3aaO0Q5V1SseSzeJRXdx3HVy2+rvAW4EEGt1NtsnYICFmX7dFtWGJ21UMZNNYpw23yUnRA==} engines: {node: '>=20.11.1'} peerDependencies: crossws: ^0.4.1 @@ -1763,6 +1854,9 @@ packages: magic-string@0.30.18: resolution: {integrity: sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==} + magic-string@0.30.19: + resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} + magicast@0.3.5: resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} @@ -2086,6 +2180,9 @@ packages: rou3@0.7.3: resolution: {integrity: sha512-KKenF/hB2iIhS1ohj226LT+/8uKCBpSMqeS4V1UPN9vad99uLoyIhrULRRB1skaB40LQHcBlSsAi3sT8MaoDDQ==} + rou3@0.7.7: + resolution: {integrity: sha512-z+6o7c3DarUbuBMLIdhzj2CqJLtUWrGk4fZlf07dIMitX3UpBXeInJ3lMD9huxj9yh9eo1RqtXf9aL0YzkDDUA==} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -2187,6 +2284,11 @@ packages: engines: {node: '>=20.16.0'} hasBin: true + srvx@0.8.9: + resolution: {integrity: sha512-wYc3VLZHRzwYrWJhkEqkhLb31TI0SOkfYZDkUhXdp3NoCnNS0FqajiQszZZjfow/VYEuc6Q5sZh9nM6kPy2NBQ==} + engines: {node: '>=20.16.0'} + hasBin: true + standard-as-callback@2.1.0: resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} @@ -2321,6 +2423,9 @@ packages: unenv@2.0.0-rc.19: resolution: {integrity: sha512-t/OMHBNAkknVCI7bVB9OWjUUAwhVv9vsPIAGnNUxnu3FxPQN11rjh0sksLMzc3g7IlTgvHmOTl4JM7JHpcv5wA==} + unhead@2.0.17: + resolution: {integrity: sha512-xX3PCtxaE80khRZobyWCVxeFF88/Tg9eJDcJWY9us727nsTC7C449B8BUfVBmiF2+3LjPcmqeoB2iuMs0U4oJQ==} + unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} @@ -2432,9 +2537,18 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + uuid@11.1.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} + hasBin: true + validate-html-nesting@1.2.3: resolution: {integrity: sha512-kdkWdCl6eCeLlRShJKbjVOU2kFKxMF8Ghu50n+crEoyx+VKm3FxAxF9z4DCy6+bbTOqNW0+jcIYRnjoIRzigRw==} + vite-plugin-devtools-json@1.0.0: + resolution: {integrity: sha512-MobvwqX76Vqt/O4AbnNMNWoXWGrKUqZbphCUle/J2KXH82yKQiunOeKnz/nqEPosPsoWWPP9FtNuPBSYpiiwkw==} + peerDependencies: + vite: ^7.1.0 + vite-plugin-solid@2.11.8: resolution: {integrity: sha512-hFrCxBfv3B1BmFqnJF4JOCYpjrmi/zwyeKjcomQ0khh8HFyQ8SbuBWQ7zGojfrz6HUOBFrJBNySDi/JgAHytWg==} peerDependencies: @@ -2501,6 +2615,11 @@ packages: vite: optional: true + vue-router@4.5.1: + resolution: {integrity: sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw==} + peerDependencies: + vue: ^3.2.0 + vue@3.5.20: resolution: {integrity: sha512-2sBz0x/wis5TkF1XZ2vH25zWq3G1bFEPOfkBcx2ikowmphoQsPH6X0V3mmPCXA2K1N/XGTnifVyDQP4GfDDeQw==} peerDependencies: @@ -2509,6 +2628,14 @@ packages: typescript: optional: true + vue@3.5.22: + resolution: {integrity: sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -2712,6 +2839,10 @@ snapshots: dependencies: '@babel/types': 7.28.2 + '@babel/parser@7.28.4': + dependencies: + '@babel/types': 7.28.4 + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.3)': dependencies: '@babel/core': 7.28.3 @@ -2787,6 +2918,11 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 + '@babel/types@7.28.4': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@esbuild/aix-ppc64@0.25.9': optional: true @@ -2865,6 +3001,12 @@ snapshots: '@esbuild/win32-x64@0.25.9': optional: true + '@hiogawa/vite-plugin-fullstack@https://pkg.pr.new/hi-ogawa/vite-plugins/@hiogawa/vite-plugin-fullstack@2fc4555(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5))': + dependencies: + magic-string: 0.30.19 + srvx: 0.8.9 + vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5) + '@ioredis/commands@1.3.0': {} '@isaacs/cliui@8.0.2': @@ -3210,24 +3352,24 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/react-start-server@1.132.0-alpha.7(crossws@0.4.1(srvx@0.8.7))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@tanstack/react-start-server@1.132.0-alpha.7(crossws@0.4.1(srvx@0.8.9))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@tanstack/history': 1.132.0-alpha.1 '@tanstack/react-router': 1.132.0-alpha.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@tanstack/router-core': 1.132.0-alpha.4 '@tanstack/start-client-core': 1.132.0-alpha.7 - '@tanstack/start-server-core': 1.132.0-alpha.7(crossws@0.4.1(srvx@0.8.7)) + '@tanstack/start-server-core': 1.132.0-alpha.7(crossws@0.4.1(srvx@0.8.9)) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) transitivePeerDependencies: - crossws - '@tanstack/react-start@1.132.0-alpha.7(@tanstack/react-router@1.132.0-alpha.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(crossws@0.4.1(srvx@0.8.7))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@7.1.3(@types/node@22.18.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)))(vite@7.1.3(@types/node@22.18.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5))': + '@tanstack/react-start@1.132.0-alpha.7(@tanstack/react-router@1.132.0-alpha.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(crossws@0.4.1(srvx@0.8.9))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@7.1.3(@types/node@22.18.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)))(vite@7.1.3(@types/node@22.18.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5))': dependencies: '@tanstack/react-start-client': 1.132.0-alpha.7(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@tanstack/react-start-server': 1.132.0-alpha.7(crossws@0.4.1(srvx@0.8.7))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@tanstack/react-start-server': 1.132.0-alpha.7(crossws@0.4.1(srvx@0.8.9))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@tanstack/router-utils': 1.132.0-alpha.1 - '@tanstack/start-plugin-core': 1.132.0-alpha.7(@tanstack/react-router@1.132.0-alpha.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(crossws@0.4.1(srvx@0.8.7))(vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@7.1.3(@types/node@22.18.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)))(vite@7.1.3(@types/node@22.18.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)) + '@tanstack/start-plugin-core': 1.132.0-alpha.7(@tanstack/react-router@1.132.0-alpha.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(crossws@0.4.1(srvx@0.8.9))(vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@7.1.3(@types/node@22.18.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)))(vite@7.1.3(@types/node@22.18.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)) pathe: 2.0.3 react: 19.1.1 react-dom: 19.1.1(react@19.1.1) @@ -3342,7 +3484,7 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/start-plugin-core@1.132.0-alpha.7(@tanstack/react-router@1.132.0-alpha.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(crossws@0.4.1(srvx@0.8.7))(vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@7.1.3(@types/node@22.18.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)))(vite@7.1.3(@types/node@22.18.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5))': + '@tanstack/start-plugin-core@1.132.0-alpha.7(@tanstack/react-router@1.132.0-alpha.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(crossws@0.4.1(srvx@0.8.9))(vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@7.1.3(@types/node@22.18.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)))(vite@7.1.3(@types/node@22.18.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5))': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.28.3 @@ -3352,7 +3494,7 @@ snapshots: '@tanstack/router-plugin': 1.132.0-alpha.4(@tanstack/react-router@1.132.0-alpha.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@7.1.3(@types/node@22.18.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)))(vite@7.1.3(@types/node@22.18.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)) '@tanstack/router-utils': 1.132.0-alpha.1 '@tanstack/server-functions-plugin': 1.132.0-alpha.3(vite@7.1.3(@types/node@22.18.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)) - '@tanstack/start-server-core': 1.132.0-alpha.7(crossws@0.4.1(srvx@0.8.7)) + '@tanstack/start-server-core': 1.132.0-alpha.7(crossws@0.4.1(srvx@0.8.9)) babel-dead-code-elimination: 1.0.10 cheerio: 1.1.2 exsolve: 1.0.7 @@ -3371,7 +3513,7 @@ snapshots: - vite-plugin-solid - webpack - '@tanstack/start-server-core@1.132.0-alpha.7(crossws@0.4.1(srvx@0.8.7))': + '@tanstack/start-server-core@1.132.0-alpha.7(crossws@0.4.1(srvx@0.8.9))': dependencies: '@standard-schema/spec': 1.0.0 '@tanstack/history': 1.132.0-alpha.1 @@ -3380,7 +3522,7 @@ snapshots: '@tanstack/start-storage-context': 1.132.0-alpha.4 cookie-es: 2.0.0 fetchdts: 0.1.6 - h3: 2.0.0-beta.3(crossws@0.4.1(srvx@0.8.7)) + h3: 2.0.0-beta.3(crossws@0.4.1(srvx@0.8.9)) seroval: 1.3.2 tiny-invariant: 1.3.3 transitivePeerDependencies: @@ -3394,6 +3536,8 @@ snapshots: '@tanstack/virtual-file-routes@1.132.0-alpha.1': {} + '@tsconfig/strictest@2.0.6': {} + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.28.3 @@ -3430,6 +3574,10 @@ snapshots: undici-types: 7.10.0 optional: true + '@types/react-dom@19.1.7(@types/react@19.1.9)': + dependencies: + '@types/react': 19.1.9 + '@types/react-dom@19.1.8(@types/react@19.1.12)': dependencies: '@types/react': 19.1.12 @@ -3438,16 +3586,18 @@ snapshots: dependencies: csstype: 3.1.3 - '@types/react-dom@19.1.7(@types/react@19.1.9)': - dependencies: - '@types/react': 19.1.9 - '@types/react@19.1.9': dependencies: csstype: 3.1.3 '@types/resolve@1.20.2': {} + '@unhead/vue@2.0.17(vue@3.5.22(typescript@5.9.2))': + dependencies: + hookable: 5.5.3 + unhead: 2.0.17 + vue: 3.5.22(typescript@5.9.2) + '@vercel/nft@0.30.1(rollup@4.49.0)': dependencies: '@mapbox/node-pre-gyp': 2.0.0 @@ -3497,6 +3647,12 @@ snapshots: vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5) vue: 3.5.20(typescript@5.9.2) + '@vitejs/plugin-vue@6.0.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5))(vue@3.5.22(typescript@5.9.2))': + dependencies: + '@rolldown/pluginutils': 1.0.0-beta.29 + vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5) + vue: 3.5.22(typescript@5.9.2) + '@vue/compiler-core@3.5.20': dependencies: '@babel/parser': 7.28.3 @@ -3505,11 +3661,24 @@ snapshots: estree-walker: 2.0.2 source-map-js: 1.2.1 + '@vue/compiler-core@3.5.22': + dependencies: + '@babel/parser': 7.28.4 + '@vue/shared': 3.5.22 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + '@vue/compiler-dom@3.5.20': dependencies: '@vue/compiler-core': 3.5.20 '@vue/shared': 3.5.20 + '@vue/compiler-dom@3.5.22': + dependencies: + '@vue/compiler-core': 3.5.22 + '@vue/shared': 3.5.22 + '@vue/compiler-sfc@3.5.20': dependencies: '@babel/parser': 7.28.3 @@ -3522,20 +3691,48 @@ snapshots: postcss: 8.5.6 source-map-js: 1.2.1 + '@vue/compiler-sfc@3.5.22': + dependencies: + '@babel/parser': 7.28.4 + '@vue/compiler-core': 3.5.22 + '@vue/compiler-dom': 3.5.22 + '@vue/compiler-ssr': 3.5.22 + '@vue/shared': 3.5.22 + estree-walker: 2.0.2 + magic-string: 0.30.19 + postcss: 8.5.6 + source-map-js: 1.2.1 + '@vue/compiler-ssr@3.5.20': dependencies: '@vue/compiler-dom': 3.5.20 '@vue/shared': 3.5.20 + '@vue/compiler-ssr@3.5.22': + dependencies: + '@vue/compiler-dom': 3.5.22 + '@vue/shared': 3.5.22 + + '@vue/devtools-api@6.6.4': {} + '@vue/reactivity@3.5.20': dependencies: '@vue/shared': 3.5.20 + '@vue/reactivity@3.5.22': + dependencies: + '@vue/shared': 3.5.22 + '@vue/runtime-core@3.5.20': dependencies: '@vue/reactivity': 3.5.20 '@vue/shared': 3.5.20 + '@vue/runtime-core@3.5.22': + dependencies: + '@vue/reactivity': 3.5.22 + '@vue/shared': 3.5.22 + '@vue/runtime-dom@3.5.20': dependencies: '@vue/reactivity': 3.5.20 @@ -3543,14 +3740,29 @@ snapshots: '@vue/shared': 3.5.20 csstype: 3.1.3 + '@vue/runtime-dom@3.5.22': + dependencies: + '@vue/reactivity': 3.5.22 + '@vue/runtime-core': 3.5.22 + '@vue/shared': 3.5.22 + csstype: 3.1.3 + '@vue/server-renderer@3.5.20(vue@3.5.20(typescript@5.9.2))': dependencies: '@vue/compiler-ssr': 3.5.20 '@vue/shared': 3.5.20 vue: 3.5.20(typescript@5.9.2) + '@vue/server-renderer@3.5.22(vue@3.5.22(typescript@5.9.2))': + dependencies: + '@vue/compiler-ssr': 3.5.22 + '@vue/shared': 3.5.22 + vue: 3.5.22(typescript@5.9.2) + '@vue/shared@3.5.20': {} + '@vue/shared@3.5.22': {} + abbrev@3.0.1: {} acorn-import-attributes@1.9.5(acorn@8.15.0): @@ -3783,6 +3995,11 @@ snapshots: optionalDependencies: srvx: 0.8.7 + crossws@0.4.1(srvx@0.8.9): + optionalDependencies: + srvx: 0.8.9 + optional: true + css-select@5.2.2: dependencies: boolbase: 1.0.0 @@ -3955,6 +4172,8 @@ snapshots: fetchdts@0.1.6: {} + fetchdts@0.1.7: {} + file-uri-to-path@1.0.0: {} fill-range@7.1.1: @@ -4034,14 +4253,14 @@ snapshots: dependencies: duplexer: 0.1.2 - h3-nightly@2.0.0-20250827-145159-0ca624d(crossws@0.4.1(srvx@0.8.7)): + h3-nightly@2.0.0-beta.5(crossws@0.4.1(srvx@0.8.9)): dependencies: cookie-es: 2.0.0 - fetchdts: 0.1.6 - rou3: 0.7.3 - srvx: 0.8.7 + fetchdts: 0.1.7 + rou3: 0.7.7 + srvx: 0.8.9 optionalDependencies: - crossws: 0.4.1(srvx@0.8.7) + crossws: 0.4.1(srvx@0.8.9) h3@1.15.4: dependencies: @@ -4055,14 +4274,14 @@ snapshots: ufo: 1.6.1 uncrypto: 0.1.3 - h3@2.0.0-beta.3(crossws@0.4.1(srvx@0.8.7)): + h3@2.0.0-beta.3(crossws@0.4.1(srvx@0.8.9)): dependencies: cookie-es: 2.0.0 fetchdts: 0.1.6 rou3: 0.7.3 srvx: 0.8.7 optionalDependencies: - crossws: 0.4.1(srvx@0.8.7) + crossws: 0.4.1(srvx@0.8.9) h3@2.0.0-beta.4(crossws@0.4.1(srvx@0.8.7)): dependencies: @@ -4073,6 +4292,15 @@ snapshots: optionalDependencies: crossws: 0.4.1(srvx@0.8.7) + h3@2.0.0-beta.4(crossws@0.4.1(srvx@0.8.9)): + dependencies: + cookie-es: 2.0.0 + fetchdts: 0.1.6 + rou3: 0.7.3 + srvx: 0.8.7 + optionalDependencies: + crossws: 0.4.1(srvx@0.8.9) + hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -4263,6 +4491,10 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + magic-string@0.30.19: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + magicast@0.3.5: dependencies: '@babel/parser': 7.28.3 @@ -4353,7 +4585,7 @@ snapshots: fs-extra: 11.3.1 globby: 14.1.0 gzip-size: 7.0.0 - h3: 2.0.0-beta.4(crossws@0.4.1(srvx@0.8.7)) + h3: 2.0.0-beta.4(crossws@0.4.1(srvx@0.8.9)) hookable: 5.5.3 httpxy: 0.1.7 ioredis: 5.7.0 @@ -4748,6 +4980,8 @@ snapshots: rou3@0.7.3: {} + rou3@0.7.7: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -4849,6 +5083,10 @@ snapshots: dependencies: cookie-es: 2.0.0 + srvx@0.8.9: + dependencies: + cookie-es: 2.0.0 + standard-as-callback@2.1.0: {} statuses@2.0.1: {} @@ -4969,6 +5207,10 @@ snapshots: pathe: 2.0.3 ufo: 1.6.1 + unhead@2.0.17: + dependencies: + hookable: 5.5.3 + unicorn-magic@0.3.0: {} unimport@5.2.0: @@ -5056,8 +5298,15 @@ snapshots: dependencies: react: 19.1.1 + uuid@11.1.0: {} + validate-html-nesting@1.2.3: {} + vite-plugin-devtools-json@1.0.0(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)): + dependencies: + uuid: 11.1.0 + vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5) + vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@7.1.3(@types/node@22.18.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)): dependencies: '@babel/core': 7.28.3 @@ -5134,6 +5383,11 @@ snapshots: optionalDependencies: vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5) + vue-router@4.5.1(vue@3.5.22(typescript@5.9.2)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.22(typescript@5.9.2) + vue@3.5.20(typescript@5.9.2): dependencies: '@vue/compiler-dom': 3.5.20 @@ -5144,6 +5398,16 @@ snapshots: optionalDependencies: typescript: 5.9.2 + vue@3.5.22(typescript@5.9.2): + dependencies: + '@vue/compiler-dom': 3.5.22 + '@vue/compiler-sfc': 3.5.22 + '@vue/runtime-dom': 3.5.22 + '@vue/server-renderer': 3.5.22(vue@3.5.22(typescript@5.9.2)) + '@vue/shared': 3.5.22 + optionalDependencies: + typescript: 5.9.2 + webidl-conversions@3.0.1: {} webpack-virtual-modules@0.6.2: {} From e3cedadea8aa632ac8ee6b9151273e9622ffcd68 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Thu, 2 Oct 2025 22:36:39 +0900 Subject: [PATCH 02/27] chore: cleanup --- examples/vue-router-ssr/package.json | 1 - pnpm-lock.yaml | 3 --- 2 files changed, 4 deletions(-) diff --git a/examples/vue-router-ssr/package.json b/examples/vue-router-ssr/package.json index e89c78e..fd38994 100644 --- a/examples/vue-router-ssr/package.json +++ b/examples/vue-router-ssr/package.json @@ -13,7 +13,6 @@ "@unhead/vue": "^2.0.17", "@vitejs/plugin-vue": "^6.0.1", "nitro": "npm:nitro-nightly@3.0.0-20251002-102506-5324ee74", - "srvx": "^0.8.7", "vite": "^7", "vite-plugin-devtools-json": "^1.0.0", "vue": "^3.5.22", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3e35a4a..ceed4a0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -172,9 +172,6 @@ importers: nitro: specifier: npm:nitro-nightly@3.0.0-20250827-221052-f5f24698 version: nitro-nightly@3.0.0-20250827-221052-f5f24698(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)) - srvx: - specifier: ^0.8.7 - version: 0.8.7 vite: specifier: ^7.1.0 version: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5) From b38da7499e5d34113d8ba00062bdf1fab39f4c93 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Thu, 2 Oct 2025 22:37:34 +0900 Subject: [PATCH 03/27] chore: cleanup --- examples/vue-router-ssr/src/framework/entry.client.tsx | 8 -------- 1 file changed, 8 deletions(-) diff --git a/examples/vue-router-ssr/src/framework/entry.client.tsx b/examples/vue-router-ssr/src/framework/entry.client.tsx index 829af0c..9acdc26 100644 --- a/examples/vue-router-ssr/src/framework/entry.client.tsx +++ b/examples/vue-router-ssr/src/framework/entry.client.tsx @@ -18,14 +18,6 @@ async function main() { await router.isReady(); app.mount("#root"); - - if (import.meta.hot) { - // TODO - import.meta.hot.on("fullstack:update", (e) => { - console.log("[fullstack:update]", e); - window.location.reload(); - }); - } } main(); From ffd7bf95c91f79651e2b501cc3d2c206e63d4aad Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Thu, 2 Oct 2025 22:38:10 +0900 Subject: [PATCH 04/27] chore: cleanup --- examples/vue-router-ssr/src/routes/index.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/vue-router-ssr/src/routes/index.vue b/examples/vue-router-ssr/src/routes/index.vue index c8bfa5a..4f54f0f 100644 --- a/examples/vue-router-ssr/src/routes/index.vue +++ b/examples/vue-router-ssr/src/routes/index.vue @@ -16,7 +16,6 @@ function increment() {
-

Counter Demo

Count: {{ count }}

+
@@ -31,7 +29,7 @@ function increment() { } .hero h1 { - color: #646cff; + color: rgb(100, 108, 255); } .counter-card { diff --git a/examples/vue-router-ssr/src/routes/not-found.vue b/examples/vue-router-ssr/src/pages/not-found.vue similarity index 100% rename from examples/vue-router-ssr/src/routes/not-found.vue rename to examples/vue-router-ssr/src/pages/not-found.vue diff --git a/examples/vue-router-ssr/src/routes.ts b/examples/vue-router-ssr/src/routes.ts index 36a293e..abcafa6 100644 --- a/examples/vue-router-ssr/src/routes.ts +++ b/examples/vue-router-ssr/src/routes.ts @@ -1,8 +1,3 @@ -import { - type ImportAssetsResult, - mergeAssets, -} from "@hiogawa/vite-plugin-fullstack/runtime"; -import { useHead } from "@unhead/vue"; import type { RouteRecordRaw } from "vue-router"; // custom framework may employ fs router convention and/or transform plugin @@ -10,82 +5,57 @@ import type { RouteRecordRaw } from "vue-router"; export const routes: RouteRecordRaw[] = [ { path: "/", - name: "home", - component: () => import("./routes/index.vue"), - beforeEnter: (_from, _to, next) => { - useAssets( + name: "app", + component: () => import("./app.vue"), + meta: { + assets: [ import.meta.vite.assets({ - import: "./routes/index.vue", - environment: "client", - }), - import.meta.vite.assets({ - import: "./routes/index.vue", - environment: "ssr", + import: "./app.vue", }), - ); - next(); - }, - }, - { - path: "/about", - name: "client", - component: () => import("./routes/about.vue"), - beforeEnter: (_from, _to, next) => { - useAssets( + // include client entry for ssr modulepreload import.meta.vite.assets({ - import: "./routes/about.vue", + import: "./framework/entry.client.ts", environment: "client", }), - import.meta.vite.assets({ - import: "./routes/about.vue", - environment: "ssr", - }), - ); - next(); - }, - }, - { - path: "/:catchAll(.*)", - name: "not-found", - component: () => import("./routes/not-found.vue"), - beforeEnter: (_from, _to, next) => { - useAssets( - import.meta.vite.assets({ - import: "./routes/not-found.vue", - environment: "client", - }), - import.meta.vite.assets({ - import: "./routes/not-found.vue", - environment: "ssr", - }), - ); - next(); + ], }, + children: [ + { + path: "/", + name: "home", + component: () => import("./pages/index.vue"), + meta: { + assets: [ + import.meta.vite.assets({ + import: "./pages/index.vue", + }), + ], + }, + }, + { + path: "/about", + name: "client", + component: () => import("./pages/about.vue"), + meta: { + assets: [ + import.meta.vite.assets({ + import: "./pages/about.vue", + }), + ], + }, + }, + { + path: "/:catchAll(.*)", + name: "not-found", + component: () => import("./pages/not-found.vue"), + meta: { + assets: [ + import.meta.vite.assets({ + import: "./pages/not-found.vue", + }), + ], + }, + }, + ], }, ]; - -const rootAssets = [ - import.meta.vite.assets({ - import: "./root.vue", - environment: "client", - }), - import.meta.vite.assets({ - import: "./root.vue", - environment: "ssr", - }), - import.meta.vite.assets({ - import: "./framework/entry.client.tsx", - environment: "client", - }), -]; - -function useAssets(...args: ImportAssetsResult[]) { - if (!import.meta.env.SSR) return; - const assets = mergeAssets(...args, ...rootAssets); - useHead({ - link: [ - ...assets.css.map((attrs) => ({ rel: "stylesheet", ...attrs })), - ...assets.js.map((attrs) => ({ rel: "modulepreload", ...attrs })), - ], - }); -} diff --git a/examples/vue-router-ssr/src/routes/about.vue b/examples/vue-router-ssr/src/routes/about.vue deleted file mode 100644 index d22a40e..0000000 --- a/examples/vue-router-ssr/src/routes/about.vue +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/examples/vue-router-ssr/src/styles.css b/examples/vue-router-ssr/src/styles.css index 501226a..68314d9 100644 --- a/examples/vue-router-ssr/src/styles.css +++ b/examples/vue-router-ssr/src/styles.css @@ -4,7 +4,7 @@ body { margin: 0; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; background: #f5f5f5; color: #333; } @@ -24,12 +24,12 @@ h1 { background: white; border-radius: 8px; padding: 2rem; - box-shadow: 0 2px 4px rgba(0,0,0,0.1); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); margin: 2rem 0; } button { - background: #646cff; + background: rgb(83, 91, 242); color: white; border: none; padding: 0.5rem 1rem; diff --git a/examples/vue-router-ssr/tsconfig.json b/examples/vue-router-ssr/tsconfig.json index 259517b..cf23bef 100644 --- a/examples/vue-router-ssr/tsconfig.json +++ b/examples/vue-router-ssr/tsconfig.json @@ -1,7 +1,6 @@ { "include": ["src", "*.ts", "src/**/*.vue"], "compilerOptions": { - "jsx": "preserve", "erasableSyntaxOnly": true, "allowImportingTsExtensions": true, "strict": true, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2213b4e..e69f626 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -158,8 +158,8 @@ importers: examples/vue-router-ssr: devDependencies: '@hiogawa/vite-plugin-fullstack': - specifier: 0.0.0-alpha.1 - version: 0.0.0-alpha.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)) + specifier: 0.0.0-alpha.2 + version: 0.0.0-alpha.2(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5)) '@unhead/vue': specifier: ^2.0.17 version: 2.0.17(vue@3.5.22(typescript@5.9.2)) @@ -521,8 +521,8 @@ packages: cpu: [x64] os: [win32] - '@hiogawa/vite-plugin-fullstack@0.0.0-alpha.1': - resolution: {integrity: sha512-C3VDnjMaMjxoCNGDsMqtqim810u2y0XBhoeFhgW8E9YX9ZX/lZrw5ZOHZ79ftgRBImoeSEiPgDpP016y6YWVMA==} + '@hiogawa/vite-plugin-fullstack@0.0.0-alpha.2': + resolution: {integrity: sha512-fJ2050pvAj6sm9+l6N2ElEsyMZqpcbidbputQZaWN46D3J+7yGQdrJZi5kuXoCXcygIzTdNCUjNKb31FDCvMIQ==} peerDependencies: vite: ^7.1.0 @@ -2305,6 +2305,9 @@ packages: strip-literal@3.0.0: resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} + strip-literal@3.1.0: + resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} + supports-color@10.2.0: resolution: {integrity: sha512-5eG9FQjEjDbAlI5+kdpdyPIBMRH4GfTVDGREVupaZHmVoppknhM29b/S9BkQz7cathp85BVgRi/As3Siln7e0Q==} engines: {node: '>=18'} @@ -2980,10 +2983,11 @@ snapshots: '@esbuild/win32-x64@0.25.9': optional: true - '@hiogawa/vite-plugin-fullstack@0.0.0-alpha.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5))': + '@hiogawa/vite-plugin-fullstack@0.0.0-alpha.2(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5))': dependencies: magic-string: 0.30.19 srvx: 0.8.7 + strip-literal: 3.1.0 vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.5) '@ioredis/commands@1.3.0': {} @@ -5076,6 +5080,10 @@ snapshots: dependencies: js-tokens: 9.0.1 + strip-literal@3.1.0: + dependencies: + js-tokens: 9.0.1 + supports-color@10.2.0: {} supports-preserve-symlinks-flag@1.0.0: {} From d1ffc474b592a45d227d2b76cc3c09d18a0a61d5 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Sun, 5 Oct 2025 02:29:00 +0900 Subject: [PATCH 13/27] chore(deps): update to `?assets` query --- examples/vue-router-ssr/package.json | 4 +- examples/vue-router-ssr/src/app.vue | 2 +- .../src/framework/entry.client.ts | 4 -- .../src/framework/entry.server.ts | 52 ++++++++----------- .../vue-router-ssr/src/framework/types.d.ts | 2 +- examples/vue-router-ssr/src/pages/about.vue | 4 +- examples/vue-router-ssr/src/pages/index.vue | 6 ++- examples/vue-router-ssr/src/routes.ts | 34 +++--------- examples/vue-router-ssr/src/styles.css | 4 +- examples/vue-router-ssr/vite.config.ts | 14 ++++- pnpm-lock.yaml | 28 ++++------ 11 files changed, 61 insertions(+), 93 deletions(-) diff --git a/examples/vue-router-ssr/package.json b/examples/vue-router-ssr/package.json index 0bd0e99..e7859de 100644 --- a/examples/vue-router-ssr/package.json +++ b/examples/vue-router-ssr/package.json @@ -8,10 +8,10 @@ "preview": "NITRO_HOST=127.0.0.1 node .output/server/index.mjs" }, "devDependencies": { - "@hiogawa/vite-plugin-fullstack": "0.0.0-alpha.2", - "@unhead/vue": "^2.0.17", + "@hiogawa/vite-plugin-fullstack": "https://pkg.pr.new/hi-ogawa/vite-plugins/@hiogawa/vite-plugin-fullstack@ecab7c8", "@vitejs/plugin-vue": "^6.0.1", "nitro": "npm:nitro-nightly", + "unhead": "^2.0.17", "vite": "^7", "vite-plugin-devtools-json": "^1.0.0", "vue": "^3.5.22", diff --git a/examples/vue-router-ssr/src/app.vue b/examples/vue-router-ssr/src/app.vue index 2363e36..f293830 100644 --- a/examples/vue-router-ssr/src/app.vue +++ b/examples/vue-router-ssr/src/app.vue @@ -20,7 +20,7 @@ import "./styles.css";