1
1
import { hash } from 'ohash'
2
2
import { print } from 'graphql'
3
3
import type { OperationVariables , QueryOptions , DefaultContext } from '@apollo/client'
4
- import type { AsyncData , NuxtError } from 'nuxt/app'
4
+ import type { AsyncData , AsyncDataOptions , NuxtError } from 'nuxt/app'
5
5
import type { NuxtAppApollo } from '../types'
6
6
import { ref , useCookie , useNuxtApp , useAsyncData } from '#imports'
7
7
import NuxtApollo from '#build/apollo'
@@ -26,19 +26,19 @@ export function useAsyncQuery <
26
26
PickKeys extends KeysOf < DataT > = KeysOf < DataT > ,
27
27
DefaultT = null ,
28
28
NuxtErrorDataT = unknown
29
- > ( opts : TAsyncQuery < T > ) : AsyncData < PickFrom < DataT , PickKeys > | DefaultT , ( NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError < NuxtErrorDataT > ) | null >
29
+ > ( opts : TAsyncQuery < T > , options ?: AsyncDataOptions < T , DataT , PickKeys , DefaultT > ) : AsyncData < PickFrom < DataT , PickKeys > | DefaultT , ( NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError < NuxtErrorDataT > ) | null >
30
30
31
31
export function useAsyncQuery <
32
32
T ,
33
33
DataT = T ,
34
34
PickKeys extends KeysOf < DataT > = KeysOf < DataT > ,
35
35
DefaultT = null ,
36
36
NuxtErrorDataT = unknown
37
- > ( query : TQuery < T > , variables ?: TVariables < T > , clientId ?: string , context ?: DefaultContext ) : AsyncData < PickFrom < DataT , PickKeys > | DefaultT , ( NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError < NuxtErrorDataT > ) | null >
37
+ > ( query : TQuery < T > , variables ?: TVariables < T > , clientId ?: string , context ?: DefaultContext , options ?: AsyncDataOptions < T , DataT , PickKeys , DefaultT > ) : AsyncData < PickFrom < DataT , PickKeys > | DefaultT , ( NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError < NuxtErrorDataT > ) | null >
38
38
39
39
export function useAsyncQuery < T > ( ...args : any [ ] ) {
40
- const { key, fn } = prep < T > ( ...args )
41
- return useAsyncData < T > ( key , fn )
40
+ const { key, fn, options } = prep < T > ( ...args )
41
+ return useAsyncData < T > ( key , fn , options )
42
42
}
43
43
44
44
export function useLazyAsyncQuery <
@@ -47,19 +47,19 @@ export function useLazyAsyncQuery <
47
47
PickKeys extends KeysOf < DataT > = KeysOf < DataT > ,
48
48
DefaultT = null ,
49
49
NuxtErrorDataT = unknown
50
- > ( opts : TAsyncQuery < T > ) : AsyncData < PickFrom < DataT , PickKeys > | DefaultT , ( NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError < NuxtErrorDataT > ) | null >
50
+ > ( opts : TAsyncQuery < T > , options ?: AsyncDataOptions < T , DataT , PickKeys , DefaultT > ) : AsyncData < PickFrom < DataT , PickKeys > | DefaultT , ( NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError < NuxtErrorDataT > ) | null >
51
51
52
52
export function useLazyAsyncQuery <
53
53
T ,
54
54
DataT = T ,
55
55
PickKeys extends KeysOf < DataT > = KeysOf < DataT > ,
56
56
DefaultT = null ,
57
57
NuxtErrorDataT = unknown
58
- > ( query : TQuery < T > , variables ?: TVariables < T > , clientId ?: string , context ?: DefaultContext ) : AsyncData < PickFrom < DataT , PickKeys > | DefaultT , ( NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError < NuxtErrorDataT > ) | null >
58
+ > ( query : TQuery < T > , variables ?: TVariables < T > , clientId ?: string , context ?: DefaultContext , options ?: AsyncDataOptions < T , DataT , PickKeys , DefaultT > ) : AsyncData < PickFrom < DataT , PickKeys > | DefaultT , ( NuxtErrorDataT extends Error | NuxtError ? NuxtErrorDataT : NuxtError < NuxtErrorDataT > ) | null >
59
59
60
60
export function useLazyAsyncQuery < T > ( ...args : any ) {
61
- const { key, fn } = prep < T > ( ...args )
62
- return useAsyncData < T > ( key , fn , { lazy : true } )
61
+ const { key, fn, options } = prep < T > ( ...args )
62
+ return useAsyncData < T > ( key , fn , { ... options , lazy : true } )
63
63
}
64
64
65
65
const prep = < T > ( ...args : any [ ] ) => {
@@ -72,19 +72,29 @@ const prep = <T> (...args: any[]) => {
72
72
let clientId : string | undefined
73
73
let context : DefaultContext
74
74
75
+ let options : AsyncDataOptions < T , T , KeysOf < T > , null > = { }
76
+
75
77
if ( ( typeof args ?. [ 0 ] === 'object' && 'query' in args [ 0 ] ) ) {
76
78
query = args ?. [ 0 ] ?. query
77
79
variables = args ?. [ 0 ] ?. variables
78
80
79
81
cache = args ?. [ 0 ] ?. cache ?? true
80
82
context = args ?. [ 0 ] ?. context
81
83
clientId = args ?. [ 0 ] ?. clientId
84
+
85
+ if ( typeof args ?. [ 1 ] === 'object' ) {
86
+ options = args ?. [ 1 ]
87
+ }
82
88
} else {
83
89
query = args ?. [ 0 ]
84
90
variables = args ?. [ 1 ]
85
91
86
92
clientId = args ?. [ 2 ]
87
93
context = args ?. [ 3 ]
94
+
95
+ if ( typeof args ?. [ 4 ] === 'object' ) {
96
+ options = args ?. [ 4 ]
97
+ }
88
98
}
89
99
90
100
if ( ! query ) { throw new Error ( '@nuxtjs/apollo: no query provided' ) }
@@ -104,7 +114,7 @@ const prep = <T> (...args: any[]) => {
104
114
context
105
115
} ) . then ( r => r . data )
106
116
107
- return { key, query, clientId, variables, fn }
117
+ return { key, query, clientId, variables, fn, options }
108
118
}
109
119
110
120
export const useApollo = ( ) => {
0 commit comments