diff --git a/bun.lock b/bun.lock index 3beb8e1..d157996 100644 --- a/bun.lock +++ b/bun.lock @@ -11,7 +11,6 @@ "@hiogawa/tiny-rpc": "^0.2.3-pre.18", "@hiogawa/utils": "^1.7.0", "@hono-di/cli": "^0.0.15", - "@hono-di/core": "^0.0.15", "@nestjs/common": "^11.1.11", "@nestjs/core": "^11.1.11", "@primeuix/themes": "^2.0.2", @@ -21,6 +20,7 @@ "clsx": "^2.1.1", "hono": "^4.11.3", "is-mobile": "^5.0.0", + "nestjs-zod": "^5.1.1", "pinia": "^3.0.4", "primevue": "^4.5.4", "reflect-metadata": "^0.2.2", @@ -640,6 +640,8 @@ "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], + "defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], "destr": ["destr@2.0.5", "", {}, "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA=="], @@ -762,6 +764,8 @@ "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + "nestjs-zod": ["nestjs-zod@5.1.1", "", { "dependencies": { "deepmerge": "^4.3.1" }, "peerDependencies": { "@nestjs/common": "^10.0.0 || ^11.0.0", "@nestjs/swagger": "^7.4.2 || ^8.0.0 || ^11.0.0", "rxjs": "^7.0.0", "zod": "^3.25.0 || ^4.0.0" }, "optionalPeers": ["@nestjs/swagger"] }, "sha512-pXa9Jrdip7iedKvGxJTvvCFVRCoIcNENPCsHjpCefPH3PcFejRgkZkUcr3TYITRyxnUk7Zy5OsLpirZGLYBfBQ=="], + "node-fetch-native": ["node-fetch-native@1.6.7", "", {}, "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="], "node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="], diff --git a/components.d.ts b/components.d.ts index 50cbcb9..3dfeaf3 100644 --- a/components.d.ts +++ b/components.d.ts @@ -12,47 +12,47 @@ export {} /* prettier-ignore */ declare module 'vue' { export interface GlobalComponents { - Add: typeof import('./src/components/icons/Add.vue')['default'] - Bell: typeof import('./src/components/icons/Bell.vue')['default'] + Add: typeof import('./src/client/components/icons/Add.vue')['default'] + Bell: typeof import('./src/client/components/icons/Bell.vue')['default'] Button: typeof import('primevue/button')['default'] Checkbox: typeof import('primevue/checkbox')['default'] - CheckIcon: typeof import('./src/components/icons/CheckIcon.vue')['default'] - Credit: typeof import('./src/components/icons/Credit.vue')['default'] - DashboardLayout: typeof import('./src/components/DashboardLayout.vue')['default'] - Home: typeof import('./src/components/icons/Home.vue')['default'] + CheckIcon: typeof import('./src/client/components/icons/CheckIcon.vue')['default'] + Credit: typeof import('./src/client/components/icons/Credit.vue')['default'] + DashboardLayout: typeof import('./src/client/components/DashboardLayout.vue')['default'] + Home: typeof import('./src/client/components/icons/Home.vue')['default'] InputText: typeof import('primevue/inputtext')['default'] - Layout: typeof import('./src/components/icons/Layout.vue')['default'] + Layout: typeof import('./src/client/components/icons/Layout.vue')['default'] Message: typeof import('primevue/message')['default'] Password: typeof import('primevue/password')['default'] - RootLayout: typeof import('./src/components/RootLayout.vue')['default'] + RootLayout: typeof import('./src/client/components/RootLayout.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] - TestIcon: typeof import('./src/components/icons/TestIcon.vue')['default'] - Upload: typeof import('./src/components/icons/Upload.vue')['default'] - Video: typeof import('./src/components/icons/Video.vue')['default'] - VueHead: typeof import('./src/components/VueHead.tsx')['default'] + TestIcon: typeof import('./src/client/components/icons/TestIcon.vue')['default'] + Upload: typeof import('./src/client/components/icons/Upload.vue')['default'] + Video: typeof import('./src/client/components/icons/Video.vue')['default'] + VueHead: typeof import('./src/client/components/VueHead.tsx')['default'] } } // For TSX support declare global { - const Add: typeof import('./src/components/icons/Add.vue')['default'] - const Bell: typeof import('./src/components/icons/Bell.vue')['default'] + const Add: typeof import('./src/client/components/icons/Add.vue')['default'] + const Bell: typeof import('./src/client/components/icons/Bell.vue')['default'] const Button: typeof import('primevue/button')['default'] const Checkbox: typeof import('primevue/checkbox')['default'] - const CheckIcon: typeof import('./src/components/icons/CheckIcon.vue')['default'] - const Credit: typeof import('./src/components/icons/Credit.vue')['default'] - const DashboardLayout: typeof import('./src/components/DashboardLayout.vue')['default'] - const Home: typeof import('./src/components/icons/Home.vue')['default'] + const CheckIcon: typeof import('./src/client/components/icons/CheckIcon.vue')['default'] + const Credit: typeof import('./src/client/components/icons/Credit.vue')['default'] + const DashboardLayout: typeof import('./src/client/components/DashboardLayout.vue')['default'] + const Home: typeof import('./src/client/components/icons/Home.vue')['default'] const InputText: typeof import('primevue/inputtext')['default'] - const Layout: typeof import('./src/components/icons/Layout.vue')['default'] + const Layout: typeof import('./src/client/components/icons/Layout.vue')['default'] const Message: typeof import('primevue/message')['default'] const Password: typeof import('primevue/password')['default'] - const RootLayout: typeof import('./src/components/RootLayout.vue')['default'] + const RootLayout: typeof import('./src/client/components/RootLayout.vue')['default'] const RouterLink: typeof import('vue-router')['RouterLink'] const RouterView: typeof import('vue-router')['RouterView'] - const TestIcon: typeof import('./src/components/icons/TestIcon.vue')['default'] - const Upload: typeof import('./src/components/icons/Upload.vue')['default'] - const Video: typeof import('./src/components/icons/Video.vue')['default'] - const VueHead: typeof import('./src/components/VueHead.tsx')['default'] + const TestIcon: typeof import('./src/client/components/icons/TestIcon.vue')['default'] + const Upload: typeof import('./src/client/components/icons/Upload.vue')['default'] + const Video: typeof import('./src/client/components/icons/Video.vue')['default'] + const VueHead: typeof import('./src/client/components/VueHead.tsx')['default'] } \ No newline at end of file diff --git a/package.json b/package.json index 01bedd0..89a91d9 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,6 @@ "@hiogawa/tiny-rpc": "^0.2.3-pre.18", "@hiogawa/utils": "^1.7.0", "@hono-di/cli": "^0.0.15", - "@hono-di/core": "^0.0.15", "@nestjs/common": "^11.1.11", "@nestjs/core": "^11.1.11", "@primeuix/themes": "^2.0.2", @@ -23,6 +22,7 @@ "clsx": "^2.1.1", "hono": "^4.11.3", "is-mobile": "^5.0.0", + "nestjs-zod": "^5.1.1", "pinia": "^3.0.4", "primevue": "^4.5.4", "reflect-metadata": "^0.2.2", diff --git a/plugins/ssrPlugin.ts b/plugins/ssrPlugin.ts index 860b016..eab88bc 100644 --- a/plugins/ssrPlugin.ts +++ b/plugins/ssrPlugin.ts @@ -115,8 +115,8 @@ export default function ssrPlugin(): Plugin[] { return path.resolve( __dirname, options?.ssr - ? pwd+"/src/api/httpClientAdapter.server.ts" - : pwd+"/src/api/httpClientAdapter.client.ts" + ? pwd+"/src/client/api/httpClientAdapter.server.ts" + : pwd+"/src/client/api/httpClientAdapter.client.ts" ); }, async configResolved(config) { diff --git a/src/api/httpClientAdapter.client.ts b/src/client/api/httpClientAdapter.client.ts similarity index 100% rename from src/api/httpClientAdapter.client.ts rename to src/client/api/httpClientAdapter.client.ts diff --git a/src/api/httpClientAdapter.server.ts b/src/client/api/httpClientAdapter.server.ts similarity index 100% rename from src/api/httpClientAdapter.server.ts rename to src/client/api/httpClientAdapter.server.ts diff --git a/src/api/rpc/auth.ts b/src/client/api/rpc/auth.ts similarity index 100% rename from src/api/rpc/auth.ts rename to src/client/api/rpc/auth.ts diff --git a/src/api/rpc/commom.ts b/src/client/api/rpc/commom.ts similarity index 100% rename from src/api/rpc/commom.ts rename to src/client/api/rpc/commom.ts diff --git a/src/api/rpc/index.ts b/src/client/api/rpc/index.ts similarity index 100% rename from src/api/rpc/index.ts rename to src/client/api/rpc/index.ts diff --git a/src/api/rpc/s3_handle.ts b/src/client/api/rpc/s3_handle.ts similarity index 100% rename from src/api/rpc/s3_handle.ts rename to src/client/api/rpc/s3_handle.ts diff --git a/src/api/rpcclient.ts b/src/client/api/rpcclient.ts similarity index 100% rename from src/api/rpcclient.ts rename to src/client/api/rpcclient.ts diff --git a/src/components/DashboardLayout.vue b/src/client/components/DashboardLayout.vue similarity index 88% rename from src/components/DashboardLayout.vue rename to src/client/components/DashboardLayout.vue index 8e494b7..54c1a35 100644 --- a/src/components/DashboardLayout.vue +++ b/src/client/components/DashboardLayout.vue @@ -1,12 +1,10 @@ \ No newline at end of file diff --git a/src/routes/add/Add.vue b/src/client/routes/add/Add.vue similarity index 100% rename from src/routes/add/Add.vue rename to src/client/routes/add/Add.vue diff --git a/src/routes/auth/forgot.vue b/src/client/routes/auth/forgot.vue similarity index 100% rename from src/routes/auth/forgot.vue rename to src/client/routes/auth/forgot.vue diff --git a/src/routes/auth/layout.vue b/src/client/routes/auth/layout.vue similarity index 100% rename from src/routes/auth/layout.vue rename to src/client/routes/auth/layout.vue diff --git a/src/routes/auth/login.vue b/src/client/routes/auth/login.vue similarity index 98% rename from src/routes/auth/login.vue rename to src/client/routes/auth/login.vue index 8a0cd9a..b18cf9e 100644 --- a/src/routes/auth/login.vue +++ b/src/client/routes/auth/login.vue @@ -74,7 +74,7 @@ import { reactive } from 'vue'; import { Form, type FormSubmitEvent } from '@primevue/forms'; import { zodResolver } from '@primevue/forms/resolvers/zod'; import { z } from 'zod'; -import { useAuthStore } from '@/stores/auth'; +import { useAuthStore } from '@/client/stores/auth'; const auth = useAuthStore(); // const $form = Form.useFormContext(); diff --git a/src/routes/auth/signup.vue b/src/client/routes/auth/signup.vue similarity index 100% rename from src/routes/auth/signup.vue rename to src/client/routes/auth/signup.vue diff --git a/src/routes/index.ts b/src/client/routes/index.ts similarity index 96% rename from src/routes/index.ts rename to src/client/routes/index.ts index adc39c0..140394f 100644 --- a/src/routes/index.ts +++ b/src/client/routes/index.ts @@ -6,7 +6,7 @@ import { createWebHistory, type RouteRecordRaw, } from "vue-router"; -import { useAuthStore } from "@/stores/auth"; +import { useAuthStore } from "@/client/stores/auth"; type RouteData = RouteRecordRaw & { meta?: ResolvableValue & { requiresAuth?: boolean }; @@ -15,7 +15,7 @@ type RouteData = RouteRecordRaw & { const routes: RouteData[] = [ { path: "/", - component: () => import("@/components/RootLayout.vue"), + component: () => import("@/client/components/RootLayout.vue"), children: [ { path: "", @@ -76,7 +76,7 @@ const routes: RouteData[] = [ }, { path: "", - component: () => import("@/components/DashboardLayout.vue"), + component: () => import("@/client/components/DashboardLayout.vue"), meta: { requiresAuth: true }, children: [ { diff --git a/src/routes/public-routes/Home.vue b/src/client/routes/public-routes/Home.vue similarity index 99% rename from src/routes/public-routes/Home.vue rename to src/client/routes/public-routes/Home.vue index 8f13353..20a4749 100644 --- a/src/routes/public-routes/Home.vue +++ b/src/client/routes/public-routes/Home.vue @@ -184,7 +184,7 @@