Skip to content

Commit 17ab680

Browse files
committed
chore(types): use vuejs reactivity types
1 parent 8a5f424 commit 17ab680

12 files changed

+895
-863
lines changed

.test-todo/test-ssr/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
"@vue/cli-plugin-e2e-cypress": "^4.0.0",
4040
"@vue/cli-plugin-router": "^4.0.0",
4141
"@vue/cli-service": "^4.0.0",
42-
"@vue/eslint-config-standard": "^4.0.0",
42+
"@vue/eslint-config-standard": "^8.0.1",
4343
"graphql-tag": "^2.9.0",
4444
"start-server-and-test": "^1.10.6",
4545
"vue-cli-plugin-apollo": "^0.21.3",

package.json

+7-7
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,21 @@
1616
},
1717
"devDependencies": {
1818
"@akryum/sheep": "^0.5.1",
19-
"@typescript-eslint/eslint-plugin": "^4.33.0",
20-
"@typescript-eslint/parser": "^4.33.0",
21-
"@vue/eslint-config-standard": "^6.1.0",
22-
"@vue/eslint-config-typescript": "^7.0.0",
19+
"@typescript-eslint/eslint-plugin": "^7.4.0",
20+
"@typescript-eslint/parser": "^7.4.0",
21+
"@vue/eslint-config-standard": "^8.0.1",
22+
"@vue/eslint-config-typescript": "^13.0.0",
2323
"conventional-changelog-cli": "^2.2.2",
2424
"core-js": "^3.23.2",
2525
"esbuild": "^0.8.57",
2626
"esbuild-node-externals": "^1.4.1",
27-
"eslint": "^7.32.0",
27+
"eslint": "^8.57.0",
2828
"eslint-plugin-import": "^2.26.0",
2929
"eslint-plugin-node": "^11.1.0",
3030
"eslint-plugin-promise": "^4.3.1",
3131
"eslint-plugin-standard": "^5.0.0",
32-
"eslint-plugin-vue": "^7.20.0",
33-
"typescript": "^4.7.4"
32+
"eslint-plugin-vue": "^9.24.0",
33+
"typescript": "^5.4.3"
3434
},
3535
"packageManager": "[email protected]",
3636
"pnpm": {

packages/test-e2e/package.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,17 @@
3030
},
3131
"devDependencies": {
3232
"@babel/core": "^7.18.5",
33-
"@typescript-eslint/eslint-plugin": "^4.33.0",
34-
"@typescript-eslint/parser": "^4.33.0",
33+
"@typescript-eslint/eslint-plugin": "^7.4.0",
34+
"@typescript-eslint/parser": "^7.4.0",
3535
"@vue/cli-plugin-babel": "^5.0.6",
3636
"@vue/cli-plugin-e2e-cypress": "^5.0.6",
3737
"@vue/cli-service": "^5.0.6",
3838
"cypress": "^10.2.0",
3939
"esbuild": "^0.8.57",
4040
"esbuild-node-externals": "^1.4.1",
41-
"eslint": "^7.32.0",
41+
"eslint": "^8.57.0",
4242
"eslint-plugin-import": "^2.26.0",
43-
"eslint-plugin-vue": "^7.20.0",
43+
"eslint-plugin-vue": "^9.24.0",
4444
"graphql-tag": "^2.12.6",
4545
"kill-port": "^1.6.1",
4646
"start-server-and-test": "^1.14.0",

packages/vue-apollo-composable/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@
6767
"graphql-tag": "^2.12.6",
6868
"nodemon": "^1.19.4",
6969
"rimraf": "^5.0.1",
70-
"typescript": "^4.9.5",
70+
"typescript": "^5.4.3",
7171
"vue": "^3.3.4"
7272
}
7373
}

packages/vue-apollo-composable/src/useLazyQuery.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { DocumentNode } from 'graphql'
2-
import { isRef } from 'vue-demi'
32
import { useQueryImpl, DocumentParameter, VariablesParameter, OptionsParameter, UseQueryOptions, UseQueryReturn } from './useQuery'
43
import type { OperationVariables } from '@apollo/client/core'
54
import { isServer } from './util/env.js'
5+
import { MaybeRefOrGetter } from 'vue-demi'
66

77
export interface UseLazyQueryReturn<TResult, TVariables extends OperationVariables> extends UseQueryReturn<TResult, TVariables> {
88
/**
@@ -19,9 +19,9 @@ export function useLazyQuery<
1919
TResult = any,
2020
TVariables extends Record<string, unknown> = any,
2121
> (
22-
document: DocumentParameter<TResult, TVariables>,
23-
variables?: VariablesParameter<TVariables>,
24-
options?: OptionsParameter<TResult, TVariables>,
22+
document: MaybeRefOrGetter<DocumentParameter<TResult, TVariables>>,
23+
variables?: MaybeRefOrGetter<VariablesParameter<TVariables>>,
24+
options?: MaybeRefOrGetter<OptionsParameter<TResult, TVariables>>,
2525
): UseLazyQueryReturn<TResult, TVariables> {
2626
const query = useQueryImpl<TResult, TVariables>(document, variables, options, true)
2727

@@ -37,7 +37,7 @@ export function useLazyQuery<
3737
query.variables.value = variables
3838
}
3939
if (options) {
40-
Object.assign(isRef(query.options) ? query.options.value : query.options, options)
40+
Object.assign(query.options.value, options)
4141
}
4242
const isFirstRun = query.forceDisabled.value
4343
if (isFirstRun) {

packages/vue-apollo-composable/src/useMutation.ts

+7-22
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import { DocumentNode } from 'graphql'
22
import { MutationOptions, OperationVariables, FetchResult, TypedDocumentNode, ApolloError, ApolloClient } from '@apollo/client/core/index.js'
3-
import { ref, onScopeDispose, isRef, Ref, getCurrentScope, shallowRef, nextTick } from 'vue-demi'
3+
import { ref, onScopeDispose, Ref, getCurrentScope, shallowRef, nextTick, MaybeRefOrGetter, toValue } from 'vue-demi'
44
import { useApolloClient } from './useApolloClient'
5-
import { ReactiveFunction } from './util/ReactiveFunction'
65
import { useEventHook } from './util/useEventHook'
76
import { trackMutation } from './util/loadingTracking'
87
import { toApolloError } from './util/toApolloError'
@@ -18,8 +17,8 @@ export interface UseMutationOptions<
1817
throws?: 'auto' | 'always' | 'never'
1918
}
2019

21-
type DocumentParameter<TResult, TVariables> = DocumentNode | Ref<DocumentNode> | ReactiveFunction<DocumentNode> | TypedDocumentNode<TResult, TVariables> | Ref<TypedDocumentNode<TResult, TVariables>> | ReactiveFunction<TypedDocumentNode<TResult, TVariables>>
22-
type OptionsParameter<TResult, TVariables> = UseMutationOptions<TResult, TVariables> | Ref<UseMutationOptions<TResult, TVariables>> | ReactiveFunction<UseMutationOptions<TResult, TVariables>>
20+
type DocumentParameter<TResult, TVariables> = DocumentNode | TypedDocumentNode<TResult, TVariables>
21+
type OptionsParameter<TResult, TVariables> = UseMutationOptions<TResult, TVariables>
2322

2423
export type MutateOverrideOptions<TResult> = Pick<UseMutationOptions<TResult, OperationVariables>, 'update' | 'optimisticResponse' | 'context' | 'updateQueries' | 'refetchQueries' | 'awaitRefetchQueries' | 'errorPolicy' | 'fetchPolicy' | 'clientId'>
2524
export type MutateResult<TResult> = Promise<FetchResult<TResult, Record<string, any>, Record<string, any>> | null>
@@ -50,8 +49,8 @@ export function useMutation<
5049
TResult = any,
5150
TVariables extends OperationVariables = OperationVariables
5251
> (
53-
document: DocumentParameter<TResult, TVariables>,
54-
options: OptionsParameter<TResult, TVariables> = {},
52+
document: MaybeRefOrGetter<DocumentParameter<TResult, TVariables>>,
53+
options: MaybeRefOrGetter<OptionsParameter<TResult, TVariables>> = {},
5554
): UseMutationReturn<TResult, TVariables> {
5655
const currentScope = getCurrentScope()
5756
const loading = ref<boolean>(false)
@@ -66,23 +65,9 @@ export function useMutation<
6665
const { resolveClient } = useApolloClient()
6766

6867
async function mutate (variables?: TVariables | null, overrideOptions: Omit<UseMutationOptions<TResult, TVariables>, 'variables'> = {}) {
69-
let currentDocument: DocumentNode
70-
if (typeof document === 'function') {
71-
currentDocument = document()
72-
} else if (isRef(document)) {
73-
currentDocument = document.value
74-
} else {
75-
currentDocument = document
76-
}
68+
const currentDocument: DocumentNode = toValue(document)
69+
const currentOptions: UseMutationOptions<TResult, TVariables> = toValue(options)
7770

78-
let currentOptions: UseMutationOptions<TResult, TVariables>
79-
if (typeof options === 'function') {
80-
currentOptions = options()
81-
} else if (isRef(options)) {
82-
currentOptions = options.value
83-
} else {
84-
currentOptions = options
85-
}
8671
const client = resolveClient(currentOptions.clientId)
8772
error.value = null
8873
loading.value = true

packages/vue-apollo-composable/src/useQuery.ts

+29-33
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import {
22
ref,
33
Ref,
4-
unref,
54
computed,
65
watch,
76
onServerPrefetch,
@@ -10,6 +9,8 @@ import {
109
onScopeDispose,
1110
nextTick,
1211
shallowRef,
12+
MaybeRefOrGetter,
13+
toRef,
1314
} from 'vue-demi'
1415
import { DocumentNode } from 'graphql'
1516
import type {
@@ -27,9 +28,6 @@ import type {
2728
} from '@apollo/client/core/index.js'
2829
import { throttle, debounce } from 'throttle-debounce'
2930
import { useApolloClient } from './useApolloClient'
30-
import { ReactiveFunction } from './util/ReactiveFunction'
31-
import { paramToRef } from './util/paramToRef'
32-
import { paramToReactive } from './util/paramToReactive'
3331
import { useEventHook } from './util/useEventHook'
3432
import { trackQuery } from './util/loadingTracking'
3533
import { resultErrorsToApolloError, toApolloError } from './util/toApolloError'
@@ -54,9 +52,9 @@ interface SubscribeToMoreItem {
5452
}
5553

5654
// Parameters
57-
export type DocumentParameter<TResult, TVariables> = DocumentNode | Ref<DocumentNode | null | undefined> | ReactiveFunction<DocumentNode | null | undefined> | TypedDocumentNode<TResult, TVariables> | Ref<TypedDocumentNode<TResult, TVariables> | null | undefined> | ReactiveFunction<TypedDocumentNode<TResult, TVariables> | null | undefined>
58-
export type VariablesParameter<TVariables> = TVariables | Ref<TVariables> | ReactiveFunction<TVariables>
59-
export type OptionsParameter<TResult, TVariables extends OperationVariables> = UseQueryOptions<TResult, TVariables> | Ref<UseQueryOptions<TResult, TVariables>> | ReactiveFunction<UseQueryOptions<TResult, TVariables>>
55+
export type DocumentParameter<TResult, TVariables> = DocumentNode | TypedDocumentNode<TResult, TVariables> | null | undefined
56+
export type VariablesParameter<TVariables> = TVariables
57+
export type OptionsParameter<TResult, TVariables extends OperationVariables> = UseQueryOptions<TResult, TVariables>
6058

6159
export interface OnResultContext {
6260
client: ApolloClient<any>
@@ -78,12 +76,12 @@ export interface UseQueryReturn<TResult, TVariables extends OperationVariables>
7876
forceDisabled: Ref<boolean>
7977
document: Ref<DocumentNode | null | undefined>
8078
variables: Ref<TVariables | undefined>
81-
options: UseQueryOptions<TResult, TVariables> | Ref<UseQueryOptions<TResult, TVariables>>
79+
options: Ref<UseQueryOptions<TResult, TVariables>>
8280
query: Ref<ObservableQuery<TResult, TVariables> | null | undefined>
8381
refetch: (variables?: TVariables) => Promise<ApolloQueryResult<TResult>> | undefined
8482
fetchMore: (options: FetchMoreQueryOptions<TVariables, TResult> & FetchMoreOptions<TResult, TVariables>) => Promise<ApolloQueryResult<TResult>> | undefined
8583
updateQuery: (mapFn: (previousQueryResult: TResult, options: Pick<WatchQueryOptions<TVariables, TResult>, 'variables'>) => TResult) => void
86-
subscribeToMore: <TSubscriptionVariables = OperationVariables, TSubscriptionData = TResult>(options: SubscribeToMoreOptions<TResult, TSubscriptionVariables, TSubscriptionData> | Ref<SubscribeToMoreOptions<TResult, TSubscriptionVariables, TSubscriptionData>> | ReactiveFunction<SubscribeToMoreOptions<TResult, TSubscriptionVariables, TSubscriptionData>>) => void
84+
subscribeToMore: <TSubscriptionVariables = OperationVariables, TSubscriptionData = TResult>(options: MaybeRefOrGetter<SubscribeToMoreOptions<TResult, TSubscriptionVariables, TSubscriptionData>>) => void
8785
onResult: (fn: (param: ApolloQueryResult<TResult>, context: OnResultContext) => void) => {
8886
off: () => void
8987
}
@@ -96,49 +94,49 @@ export interface UseQueryReturn<TResult, TVariables extends OperationVariables>
9694
* Use a query that does not require variables or options.
9795
* */
9896
export function useQuery<TResult = any> (
99-
document: DocumentParameter<TResult, undefined>
97+
document: MaybeRefOrGetter<DocumentParameter<TResult, undefined>>
10098
): UseQueryReturn<TResult, Record<string, never>>
10199

102100
/**
103101
* Use a query that has optional variables but not options
104102
*/
105103
export function useQuery<TResult = any, TVariables extends OperationVariables = OperationVariables> (
106-
document: DocumentParameter<TResult, TVariables>
104+
document: MaybeRefOrGetter<DocumentParameter<TResult, TVariables>>
107105
): UseQueryReturn<TResult, TVariables>
108106

109107
/**
110108
* Use a query that has required variables but not options
111109
*/
112110
export function useQuery<TResult = any, TVariables extends OperationVariables = OperationVariables> (
113-
document: DocumentParameter<TResult, TVariables>,
114-
variables: VariablesParameter<TVariables>
111+
document: MaybeRefOrGetter<DocumentParameter<TResult, TVariables>>,
112+
variables: MaybeRefOrGetter<VariablesParameter<TVariables>>
115113
): UseQueryReturn<TResult, TVariables>
116114

117115
/**
118116
* Use a query that requires options but not variables.
119117
*/
120118
export function useQuery<TResult = any> (
121-
document: DocumentParameter<TResult, undefined>,
119+
document: MaybeRefOrGetter<DocumentParameter<TResult, undefined>>,
122120
variables: undefined | null,
123-
options: OptionsParameter<TResult, Record<string, never>>,
121+
options: MaybeRefOrGetter<OptionsParameter<TResult, Record<string, never>>>,
124122
): UseQueryReturn<TResult, Record<string, never>>
125123

126124
/**
127125
* Use a query that requires variables and options.
128126
*/
129127
export function useQuery<TResult = any, TVariables extends OperationVariables = OperationVariables> (
130-
document: DocumentParameter<TResult, TVariables>,
131-
variables: VariablesParameter<TVariables>,
132-
options: OptionsParameter<TResult, TVariables>,
128+
document: MaybeRefOrGetter<DocumentParameter<TResult, TVariables>>,
129+
variables: MaybeRefOrGetter<VariablesParameter<TVariables>>,
130+
options: MaybeRefOrGetter<OptionsParameter<TResult, TVariables>>,
133131
): UseQueryReturn<TResult, TVariables>
134132

135133
export function useQuery<
136134
TResult,
137135
TVariables extends OperationVariables
138136
> (
139-
document: DocumentParameter<TResult, TVariables>,
140-
variables?: VariablesParameter<TVariables>,
141-
options?: OptionsParameter<TResult, TVariables>,
137+
document: MaybeRefOrGetter<DocumentParameter<TResult, TVariables>>,
138+
variables?: MaybeRefOrGetter<VariablesParameter<TVariables>>,
139+
options?: MaybeRefOrGetter<OptionsParameter<TResult, TVariables>>,
142140
): UseQueryReturn<TResult, TVariables> {
143141
return useQueryImpl<TResult, TVariables>(document, variables, options)
144142
}
@@ -147,19 +145,19 @@ export function useQueryImpl<
147145
TResult,
148146
TVariables extends OperationVariables
149147
> (
150-
document: DocumentParameter<TResult, TVariables>,
151-
variables?: VariablesParameter<TVariables>,
152-
options: OptionsParameter<TResult, TVariables> = {},
148+
document: MaybeRefOrGetter<DocumentParameter<TResult, TVariables>>,
149+
variables?: MaybeRefOrGetter<VariablesParameter<TVariables>>,
150+
options: MaybeRefOrGetter<OptionsParameter<TResult, TVariables>> = {},
153151
lazy = false,
154152
): UseQueryReturn<TResult, TVariables> {
155153
const currentScope = getCurrentScope()
156154
const currentInstance = getCurrentInstance()
157155

158156
const currentOptions = ref<UseQueryOptions<TResult, TVariables>>()
159157

160-
const documentRef = paramToRef(document)
161-
const variablesRef = paramToRef(variables)
162-
const optionsRef = paramToReactive(options)
158+
const documentRef = toRef(document)
159+
const variablesRef = toRef(variables) as Ref<TVariables | undefined>
160+
const optionsRef = toRef(options)
163161

164162
// Result
165163
/**
@@ -255,7 +253,7 @@ export function useQueryImpl<
255253
if (isServer) {
256254
applyDocument(documentRef.value)
257255
applyVariables(variablesRef.value)
258-
applyOptions(unref(optionsRef))
256+
applyOptions(optionsRef.value)
259257
}
260258

261259
started = true
@@ -478,7 +476,7 @@ export function useQueryImpl<
478476
const isEnabled = computed(() => enabledOption.value && !forceDisabled.value && !!documentRef.value)
479477

480478
// Applying options first (in case it disables the query)
481-
watch(() => unref(optionsRef), applyOptions, {
479+
watch(optionsRef, applyOptions, {
482480
deep: true,
483481
immediate: true,
484482
})
@@ -574,12 +572,10 @@ export function useQueryImpl<
574572
TSubscriptionVariables = OperationVariables,
575573
TSubscriptionData = TResult
576574
> (
577-
options: SubscribeToMoreOptions<TResult, TSubscriptionVariables, TSubscriptionData> |
578-
Ref<SubscribeToMoreOptions<TResult, TSubscriptionVariables, TSubscriptionData>> |
579-
ReactiveFunction<SubscribeToMoreOptions<TResult, TSubscriptionVariables, TSubscriptionData>>,
575+
options: MaybeRefOrGetter<SubscribeToMoreOptions<TResult, TSubscriptionVariables, TSubscriptionData>>,
580576
) {
581577
if (isServer) return
582-
const optionsRef = paramToRef(options)
578+
const optionsRef = toRef(options)
583579
watch(optionsRef, (value, oldValue, onCleanup) => {
584580
const index = subscribeToMoreItems.findIndex(item => item.options === oldValue)
585581
if (index !== -1) {

0 commit comments

Comments
 (0)