Skip to content

Commit 7762a59

Browse files
committed
chore(types): use vuejs reactivity types
1 parent 6fa46ab commit 7762a59

12 files changed

+10492
-9113
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
"pnpm": {
3636
"overrides": {

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 } from 'vue-demi'
3+
import { ref, onScopeDispose, Ref, getCurrentScope, shallowRef, 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,14 +1,15 @@
11
import {
22
ref,
33
Ref,
4-
unref,
54
computed,
65
watch,
76
onServerPrefetch,
87
getCurrentScope,
98
onScopeDispose,
109
nextTick,
1110
shallowRef,
11+
MaybeRefOrGetter,
12+
toRef,
1213
} from 'vue-demi'
1314
import { DocumentNode } from 'graphql'
1415
import type {
@@ -26,9 +27,6 @@ import type {
2627
} from '@apollo/client/core/index.js'
2728
import { throttle, debounce } from 'throttle-debounce'
2829
import { useApolloClient } from './useApolloClient'
29-
import { ReactiveFunction } from './util/ReactiveFunction'
30-
import { paramToRef } from './util/paramToRef'
31-
import { paramToReactive } from './util/paramToReactive'
3230
import { useEventHook } from './util/useEventHook'
3331
import { trackQuery } from './util/loadingTracking'
3432
import { resultErrorsToApolloError, toApolloError } from './util/toApolloError'
@@ -53,9 +51,9 @@ interface SubscribeToMoreItem {
5351
}
5452

5553
// Parameters
56-
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>
57-
export type VariablesParameter<TVariables> = TVariables | Ref<TVariables> | ReactiveFunction<TVariables>
58-
export type OptionsParameter<TResult, TVariables extends OperationVariables> = UseQueryOptions<TResult, TVariables> | Ref<UseQueryOptions<TResult, TVariables>> | ReactiveFunction<UseQueryOptions<TResult, TVariables>>
54+
export type DocumentParameter<TResult, TVariables> = DocumentNode | TypedDocumentNode<TResult, TVariables> | null | undefined
55+
export type VariablesParameter<TVariables> = TVariables
56+
export type OptionsParameter<TResult, TVariables extends OperationVariables> = UseQueryOptions<TResult, TVariables>
5957

6058
export interface OnResultContext {
6159
client: ApolloClient<any>
@@ -77,11 +75,11 @@ export interface UseQueryReturn<TResult, TVariables extends OperationVariables>
7775
forceDisabled: Ref<boolean>
7876
document: Ref<DocumentNode | null | undefined>
7977
variables: Ref<TVariables | undefined>
80-
options: UseQueryOptions<TResult, TVariables> | Ref<UseQueryOptions<TResult, TVariables>>
78+
options: Ref<UseQueryOptions<TResult, TVariables>>
8179
query: Ref<ObservableQuery<TResult, TVariables> | null | undefined>
8280
refetch: (variables?: TVariables) => Promise<ApolloQueryResult<TResult>> | undefined
8381
fetchMore: (options: FetchMoreQueryOptions<TVariables, TResult> & FetchMoreOptions<TResult, TVariables>) => Promise<ApolloQueryResult<TResult>> | undefined
84-
subscribeToMore: <TSubscriptionVariables = OperationVariables, TSubscriptionData = TResult>(options: SubscribeToMoreOptions<TResult, TSubscriptionVariables, TSubscriptionData> | Ref<SubscribeToMoreOptions<TResult, TSubscriptionVariables, TSubscriptionData>> | ReactiveFunction<SubscribeToMoreOptions<TResult, TSubscriptionVariables, TSubscriptionData>>) => void
82+
subscribeToMore: <TSubscriptionVariables = OperationVariables, TSubscriptionData = TResult>(options: MaybeRefOrGetter<SubscribeToMoreOptions<TResult, TSubscriptionVariables, TSubscriptionData>>) => void
8583
onResult: (fn: (param: ApolloQueryResult<TResult>, context: OnResultContext) => void) => {
8684
off: () => void
8785
}
@@ -94,49 +92,49 @@ export interface UseQueryReturn<TResult, TVariables extends OperationVariables>
9492
* Use a query that does not require variables or options.
9593
* */
9694
export function useQuery<TResult = any> (
97-
document: DocumentParameter<TResult, undefined>
95+
document: MaybeRefOrGetter<DocumentParameter<TResult, undefined>>
9896
): UseQueryReturn<TResult, Record<string, never>>
9997

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

107105
/**
108106
* Use a query that has required variables but not options
109107
*/
110108
export function useQuery<TResult = any, TVariables extends OperationVariables = OperationVariables> (
111-
document: DocumentParameter<TResult, TVariables>,
112-
variables: VariablesParameter<TVariables>
109+
document: MaybeRefOrGetter<DocumentParameter<TResult, TVariables>>,
110+
variables: MaybeRefOrGetter<VariablesParameter<TVariables>>
113111
): UseQueryReturn<TResult, TVariables>
114112

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

124122
/**
125123
* Use a query that requires variables and options.
126124
*/
127125
export function useQuery<TResult = any, TVariables extends OperationVariables = OperationVariables> (
128-
document: DocumentParameter<TResult, TVariables>,
129-
variables: VariablesParameter<TVariables>,
130-
options: OptionsParameter<TResult, TVariables>,
126+
document: MaybeRefOrGetter<DocumentParameter<TResult, TVariables>>,
127+
variables: MaybeRefOrGetter<VariablesParameter<TVariables>>,
128+
options: MaybeRefOrGetter<OptionsParameter<TResult, TVariables>>,
131129
): UseQueryReturn<TResult, TVariables>
132130

133131
export function useQuery<
134132
TResult,
135133
TVariables extends OperationVariables
136134
> (
137-
document: DocumentParameter<TResult, TVariables>,
138-
variables?: VariablesParameter<TVariables>,
139-
options?: OptionsParameter<TResult, TVariables>,
135+
document: MaybeRefOrGetter<DocumentParameter<TResult, TVariables>>,
136+
variables?: MaybeRefOrGetter<VariablesParameter<TVariables>>,
137+
options?: MaybeRefOrGetter<OptionsParameter<TResult, TVariables>>,
140138
): UseQueryReturn<TResult, TVariables> {
141139
return useQueryImpl<TResult, TVariables>(document, variables, options)
142140
}
@@ -145,18 +143,18 @@ export function useQueryImpl<
145143
TResult,
146144
TVariables extends OperationVariables
147145
> (
148-
document: DocumentParameter<TResult, TVariables>,
149-
variables?: VariablesParameter<TVariables>,
150-
options: OptionsParameter<TResult, TVariables> = {},
146+
document: MaybeRefOrGetter<DocumentParameter<TResult, TVariables>>,
147+
variables?: MaybeRefOrGetter<VariablesParameter<TVariables>>,
148+
options: MaybeRefOrGetter<OptionsParameter<TResult, TVariables>> = {},
151149
lazy = false,
152150
): UseQueryReturn<TResult, TVariables> {
153151
const currentScope = getCurrentScope()
154152

155153
const currentOptions = ref<UseQueryOptions<TResult, TVariables>>()
156154

157-
const documentRef = paramToRef(document)
158-
const variablesRef = paramToRef(variables)
159-
const optionsRef = paramToReactive(options)
155+
const documentRef = toRef(document)
156+
const variablesRef = toRef(variables) as Ref<TVariables | undefined>
157+
const optionsRef = toRef(options)
160158

161159
// Result
162160
/**
@@ -252,7 +250,7 @@ export function useQueryImpl<
252250
if (isServer) {
253251
applyDocument(documentRef.value)
254252
applyVariables(variablesRef.value)
255-
applyOptions(unref(optionsRef))
253+
applyOptions(optionsRef.value)
256254
}
257255

258256
started = true
@@ -469,7 +467,7 @@ export function useQueryImpl<
469467
const isEnabled = computed(() => enabledOption.value && !forceDisabled.value && !!documentRef.value)
470468

471469
// Applying options first (in case it disables the query)
472-
watch(() => unref(optionsRef), applyOptions, {
470+
watch(optionsRef, applyOptions, {
473471
deep: true,
474472
immediate: true,
475473
})
@@ -557,12 +555,10 @@ export function useQueryImpl<
557555
TSubscriptionVariables = OperationVariables,
558556
TSubscriptionData = TResult
559557
> (
560-
options: SubscribeToMoreOptions<TResult, TSubscriptionVariables, TSubscriptionData> |
561-
Ref<SubscribeToMoreOptions<TResult, TSubscriptionVariables, TSubscriptionData>> |
562-
ReactiveFunction<SubscribeToMoreOptions<TResult, TSubscriptionVariables, TSubscriptionData>>,
558+
options: MaybeRefOrGetter<SubscribeToMoreOptions<TResult, TSubscriptionVariables, TSubscriptionData>>,
563559
) {
564560
if (isServer) return
565-
const optionsRef = paramToRef(options)
561+
const optionsRef = toRef(options)
566562
watch(optionsRef, (value, oldValue, onCleanup) => {
567563
const index = subscribeToMoreItems.findIndex(item => item.options === oldValue)
568564
if (index !== -1) {

0 commit comments

Comments
 (0)