Compare commits

..

19 Commits

Author SHA1 Message Date
wobsoriano
ad85a78350 chore(release): v0.10.5 2023-05-27 06:13:49 -07:00
wobsoriano
892d167ff1 feat: pass input to watched sources if it's a ref 2023-05-27 06:13:45 -07:00
wobsoriano
e15ea6b5a3 chore(release): v0.10.4 2023-05-26 20:41:31 -07:00
wobsoriano
054fad952a feat: add reactive inputs 2023-05-26 20:41:22 -07:00
wobsoriano
e15a62a5b2 chore: remove engines property 2023-05-26 10:55:38 -07:00
wobsoriano
3f399f0c58 downgrade playground and docs nuxt version to 3.4.3 2023-05-26 10:54:59 -07:00
wobsoriano
247a6448cb set pnpm nuxt overrides to 3.5.0 2023-05-20 21:21:12 -07:00
wobsoriano
5301221148 reinstall docs 2023-05-20 21:20:11 -07:00
wobsoriano
7683499953 docs: update local deps 2023-05-20 20:06:48 -07:00
wobsoriano
2c28424ecd chore(release): v0.10.3 2023-05-20 11:11:11 -07:00
wobsoriano
18cd492ffd feat: export createH3ApiHandler for h3 apps 2023-05-20 11:11:07 -07:00
wobsoriano
c2ae94b4a7 chore(deps): bump h3 to 1.6.6 2023-05-20 11:09:04 -07:00
wobsoriano
94eb3c6257 replace bumpp with changelogen 2023-05-20 11:08:44 -07:00
wobsoriano
e55670169e remove unused imports in playground 2023-05-15 09:06:45 -07:00
wobsoriano
4f7fbbe108 chore: release v0.10.2 2023-05-15 09:03:34 -07:00
wobsoriano
c32fdf7893 feat: allow providing a transform output type 2023-05-15 09:00:04 -07:00
wobsoriano
10bc1d3a4d chore: release v0.10.1 2023-05-12 13:09:29 -07:00
wobsoriano
7bd62822d3 remove nuxt from peer deps 2023-05-12 13:09:24 -07:00
wobsoriano
967271089f fix docs build 2023-05-12 11:28:07 -07:00
9 changed files with 1622 additions and 732 deletions

50
CHANGELOG.md Normal file
View File

@@ -0,0 +1,50 @@
# Changelog
## v0.10.5
[compare changes](https://github.com/wobsoriano/trpc-nuxt/compare/v0.10.4...v0.10.5)
### 🚀 Enhancements
- Pass input to watched sources if it's a ref ([892d167](https://github.com/wobsoriano/trpc-nuxt/commit/892d167))
### ❤️ Contributors
- Wobsoriano ([@wobsoriano](http://github.com/wobsoriano))
## v0.10.4
[compare changes](https://github.com/wobsoriano/trpc-nuxt/compare/v0.10.3...v0.10.4)
### 🚀 Enhancements
- Add reactive inputs ([054fad9](https://github.com/wobsoriano/trpc-nuxt/commit/054fad9))
### 📖 Documentation
- Update local deps ([7683499](https://github.com/wobsoriano/trpc-nuxt/commit/7683499))
### 🏡 Chore
- Remove engines property ([e15a62a](https://github.com/wobsoriano/trpc-nuxt/commit/e15a62a))
### ❤️ Contributors
- Wobsoriano ([@wobsoriano](http://github.com/wobsoriano))
## v0.10.3
[compare changes](https://github.com/wobsoriano/trpc-nuxt/compare/v0.10.2...v0.10.3)
### 🚀 Enhancements
- Export createH3ApiHandler for h3 apps ([18cd492](https://github.com/wobsoriano/trpc-nuxt/commit/18cd492))
### ❤️ Contributors
- Wobsoriano ([@wobsoriano](http://github.com/wobsoriano))

View File

@@ -7,11 +7,9 @@
"generate": "nuxi build",
"preview": "nuxi preview"
},
"dependencies": {
"nuxt": "3.4.3"
},
"devDependencies": {
"@nuxt-themes/docus": "^1.11.1",
"@nuxtlabs/github-module": "^1.6.3"
"@nuxt-themes/docus": "^1.12.0",
"@nuxtlabs/github-module": "^1.6.3",
"nuxt": "3.4.3"
}
}

View File

@@ -2,8 +2,8 @@
"name": "trpc-nuxt",
"description": "End-to-end typesafe APIs in Nuxt applications.",
"type": "module",
"packageManager": "pnpm@7.32.4",
"version": "0.10.0",
"packageManager": "pnpm@8.5.1",
"version": "0.10.5",
"license": "MIT",
"sideEffects": false,
"exports": {
@@ -31,26 +31,25 @@
"build": "tsup",
"lint": "eslint .",
"lint:fix": "eslint . --fix",
"release": "bumpp && npm publish",
"release": "changelogen --release && npm publish && git push --follow-tags",
"update-deps": "taze -w && pnpm i"
},
"peerDependencies": {
"@trpc/client": "^10.26.0",
"@trpc/server": "^10.26.0",
"nuxt": "^3.4.0"
"@trpc/server": "^10.26.0"
},
"dependencies": {
"h3": "^1.6.5",
"h3": "^1.6.6",
"ofetch": "^1.0.1",
"ohash": "^1.1.2",
"ufo": "^1.1.2"
},
"devDependencies": {
"@nuxt/eslint-config": "^0.1.1",
"@trpc/client": "^10.26.0",
"@trpc/server": "^10.26.0",
"bumpp": "^9.1.0",
"eslint": "^8.40.0",
"@trpc/client": "^10.28.0",
"@trpc/server": "^10.28.0",
"changelogen": "^0.5.3",
"eslint": "^8.41.0",
"taze": "^0.10.1",
"tsup": "6.7.0",
"typescript": "^5.0.4"
@@ -78,8 +77,5 @@
"overrides": {
"nuxt": "3.4.3"
}
},
"engines": {
"node": "^16.13.0 || ^18.12.0"
}
}
}

View File

@@ -9,14 +9,14 @@
"postinstall": "nuxt prepare"
},
"dependencies": {
"@trpc/client": "^10.26.0",
"@trpc/server": "^10.26.0",
"@trpc/client": "^10.28.0",
"@trpc/server": "^10.28.0",
"superjson": "^1.12.3",
"trpc-nuxt": "workspace:*",
"zod": "^3.21.4"
},
"devDependencies": {
"@types/node": "^18.16.8",
"@types/node": "^18.16.15",
"nuxt": "3.4.3"
}
}

View File

@@ -0,0 +1,27 @@
<script setup lang="ts">
const route = useRoute()
const { $client } = useNuxtApp()
const id = ref(1)
// const { data: todo, pending, error } = await useAsyncData(() => $client.todo.getTodo.query(id.value), {
// watch: [id]
// })
const { data: todo, pending, error, refresh } = await $client.todo.getTodo.useQuery(id)
</script>
<template>
<div v-if="pending">
Loading...
</div>
<div v-else-if="error?.data?.code">
Error: {{ error.data.code }}
</div>
<div v-else>
ID: {{ todo?.id }} <br>
Title: {{ todo?.title }} <br>
Completed: {{ todo?.completed }}
</div>
<button @click="id++">
Next Todo
</button>
</template>

2211
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -4,7 +4,7 @@ import { createFlatProxy, createRecursiveProxy } from '@trpc/server/shared'
import { hash } from 'ohash'
import { type DecoratedProcedureRecord } from './types'
// @ts-expect-error: Nuxt auto-imports
import { getCurrentInstance, onScopeDispose, useAsyncData } from '#imports'
import { getCurrentInstance, onScopeDispose, useAsyncData, unref, isRef } from '#imports'
/**
* Calculates the key used for `useAsyncData` call.
@@ -54,11 +54,14 @@ export function createNuxtProxyDecoration<TRouter extends AnyRouter> (name: stri
controller = typeof AbortController !== 'undefined' ? new AbortController() : {} as AbortController
}
const queryKey = getQueryKey(path, input)
return useAsyncData(queryKey, () => (client as any)[path].query(input, {
const queryKey = getQueryKey(path, unref(input))
return useAsyncData(queryKey, () => (client as any)[path].query(unref(input), {
signal: controller?.signal,
...trpc
}), asyncDataOptions)
}), {
...asyncDataOptions,
watch: isRef(input) ? [...(asyncDataOptions.watch || []), input] : asyncDataOptions.watch
})
}
return (client as any)[path][lastArg](...args)

View File

@@ -19,6 +19,7 @@ import type {
KeysOf,
PickFrom,
} from 'nuxt/dist/app/composables/asyncData'
import type { Ref } from 'vue'
interface TRPCRequestOptions extends _TRPCRequestOptions {
abortOnUnmount?: boolean
@@ -44,18 +45,22 @@ type SubscriptionResolver<
]
) => Unsubscribable
type MaybeRef<T> = T | Ref<T>
type DecorateProcedure<
TProcedure extends AnyProcedure,
TRouter extends AnyRouter,
> = TProcedure extends AnyQueryProcedure
? {
useQuery: <
TData = inferTransformedProcedureOutput<TProcedure>,
PickKeys extends KeysOf<TData> = KeysOf<TData>,
ResT = inferTransformedProcedureOutput<TProcedure>,
DataE = TRPCClientErrorLike<TProcedure>,
DataT = ResT,
PickKeys extends KeysOf<DataT> = KeysOf<DataT>,
>(
input: inferProcedureInput<TProcedure>,
opts?: AsyncDataOptions<TData, TData, PickKeys> & { trpc?: TRPCRequestOptions },
) => AsyncData<PickFrom<TData, PickKeys>, TRPCClientErrorLike<TProcedure>>,
input: MaybeRef<inferProcedureInput<TProcedure>>,
opts?: AsyncDataOptions<ResT, DataT, PickKeys> & { trpc?: TRPCRequestOptions },
) => AsyncData<PickFrom<DataT, PickKeys>, DataE>,
query: Resolver<TProcedure>
} : TProcedure extends AnyMutationProcedure ? {
mutate: Resolver<TProcedure>

View File

@@ -128,3 +128,5 @@ export function createNuxtApiHandler<TRouter extends AnyRouter> ({
return body
})
}
export const createH3ApiHandler = createNuxtApiHandler