diff --git a/playground/nuxt.config.ts b/playground/nuxt.config.ts index 3f4a0a0..9b4ff9a 100644 --- a/playground/nuxt.config.ts +++ b/playground/nuxt.config.ts @@ -5,7 +5,7 @@ import Module from '../src/module' export default defineNuxtConfig({ modules: [Module], runtimeConfig: { - baseURL: 'http://localhost:3000', + baseURL: '', }, typescript: { strict: true, diff --git a/src/module.ts b/src/module.ts index f34eb3c..2df4a06 100644 --- a/src/module.ts +++ b/src/module.ts @@ -16,7 +16,7 @@ export default defineNuxtModule({ configKey: 'trpc', }, defaults: { - baseURL: 'http://localhost:3000', + baseURL: '', endpoint: '/trpc', }, async setup(options, nuxt) { diff --git a/src/runtime/plugin.ts b/src/runtime/plugin.ts index 04d43c5..ad17d2c 100644 --- a/src/runtime/plugin.ts +++ b/src/runtime/plugin.ts @@ -1,5 +1,6 @@ import * as trpc from '@trpc/client' import { unref } from 'vue' +import { FetchError } from 'ohmyfetch' import { useClientHeaders } from './client' import { defineNuxtPlugin, useRequestHeaders, useRuntimeConfig } from '#app' import type { router } from '~/server/trpc' @@ -10,14 +11,28 @@ export default defineNuxtPlugin((nuxtApp) => { const config = useRuntimeConfig().public.trpc const headers = useRequestHeaders() const otherHeaders = useClientHeaders() + + const baseURL = process.server ? '' : config.baseURL const client = trpc.createTRPCClient({ - url: `${config.baseURL}${config.endpoint}`, + url: `${baseURL}${config.endpoint}`, headers: () => { return { ...unref(otherHeaders), ...headers, } }, + fetch: (input, options) => + globalThis.$fetch.raw(input.toString(), options) + .catch((e) => { + if (e instanceof FetchError && e.response) + return e.response + + throw e + }) + .then(response => ({ + ...response, + json: () => Promise.resolve(response._data), + })), }) nuxtApp.provide('client', client)