diff --git a/package.json b/package.json
index 9005657..4448406 100644
--- a/package.json
+++ b/package.json
@@ -38,6 +38,7 @@
"@nuxt/kit": "^3.0.0-rc.3",
"@trpc/client": "^9.23.3",
"@trpc/server": "^9.23.2",
+ "defu": "^6.0.0",
"fs-extra": "^10.1.0",
"h3": "^0.7.8",
"pathe": "^0.3.0",
diff --git a/playground/app.vue b/playground/app.vue
index 79ae2b1..ea60e47 100644
--- a/playground/app.vue
+++ b/playground/app.vue
@@ -1,6 +1,7 @@
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 449cf4f..8c33f8b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -12,6 +12,7 @@ importers:
'@trpc/server': ^9.23.2
'@types/fs-extra': ^9.0.13
bumpp: ^7.1.1
+ defu: ^6.0.0
eslint: ^8.14.0
fs-extra: ^10.1.0
h3: ^0.7.8
@@ -27,6 +28,7 @@ importers:
'@nuxt/kit': 3.0.0-rc.3
'@trpc/client': 9.23.4_@trpc+server@9.23.4
'@trpc/server': 9.23.4
+ defu: 6.0.0
fs-extra: 10.1.0
h3: 0.7.8
pathe: 0.3.0
diff --git a/src/module.ts b/src/module.ts
index da4cca0..a493045 100644
--- a/src/module.ts
+++ b/src/module.ts
@@ -1,5 +1,6 @@
import { fileURLToPath } from 'url'
import { dirname, join } from 'pathe'
+import { defu } from 'defu'
import { addServerHandler, defineNuxtModule } from '@nuxt/kit'
import fs from 'fs-extra'
@@ -25,8 +26,14 @@ export default defineNuxtModule({
const clientPath = join(nuxt.options.buildDir, 'trpc-client.ts')
const handlerPath = join(nuxt.options.buildDir, 'trpc-handler.ts')
+ // Final resolved configuration
+ const finalConfig = nuxt.options.runtimeConfig.public.trpc = defu(nuxt.options.runtimeConfig.public.trpc, {
+ baseURL: options.baseURL,
+ trpcURL: options.trpcURL,
+ })
+
addServerHandler({
- route: `${options.trpcURL}/*`,
+ route: `${finalConfig.trpcURL}/*`,
handler: handlerPath,
})
@@ -44,7 +51,7 @@ export default defineNuxtModule({
import type { router } from '~/server/trpc'
const client = trpc.createTRPCClient({
- url: '${options.baseURL}${options.trpcURL}',
+ url: '${finalConfig.baseURL}${finalConfig.trpcURL}',
})
export const useClient = () => client
@@ -52,9 +59,15 @@ export default defineNuxtModule({
await fs.writeFile(handlerPath, `
import { createTRPCHandler } from 'trpc-nuxt/api'
+ import { useRuntimeConfig } from '#imports'
import * as functions from '~/server/trpc'
- export default createTRPCHandler(functions)
+ const { trpc: { trpcURL } } = useRuntimeConfig().public
+
+ export default createTRPCHandler({
+ ...functions,
+ trpcURL
+ })
`)
},
})
diff --git a/src/runtime/api.ts b/src/runtime/api.ts
index 5101a1a..988859c 100644
--- a/src/runtime/api.ts
+++ b/src/runtime/api.ts
@@ -42,14 +42,14 @@ export function createTRPCHandler({
createContext,
responseMeta,
onError,
+ trpcURL,
}: {
router: Router
createContext?: CreateContextFn
responseMeta?: ResponseMetaFn
onError?: OnErrorFn
+ trpcURL: string
}) {
- const url = '/api/trpc'
-
return defineEventHandler(async (event) => {
const {
req,
@@ -68,7 +68,7 @@ export function createTRPCHandler({
body: isMethod(event, 'GET') ? null : await useBody(event),
query: $url.searchParams,
},
- path: $url.pathname.substring(url.length + 1),
+ path: $url.pathname.substring(trpcURL.length + 1),
createContext: async () => createContext?.(event),
responseMeta,
onError: (o) => {