/
typedefs.ts
143 lines (121 loc) · 3.46 KB
/
typedefs.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/* eslint-disable @typescript-eslint/no-explicit-any */
import type {
FetchResult,
NextLink,
Observable,
ObservableSubscription,
Operation,
} from '@apollo/client/core'
import type { Laika } from './laika'
interface SubscriptionObserver<T> {
closed: boolean
next: (value: T) => void
error: (errorValue: any) => void
complete: () => void
}
/** @ignore */
export type { FetchResult, NextLink, Operation } from '@apollo/client/core'
/** @ignore */
export type Variables = Operation['variables']
/** @ignore */
export type FetchResultSubscriptionObserver = SubscriptionObserver<FetchResult>
/** @ignore */
export type Subscription = ObservableSubscription
export type OnSubscribeCallback = (options: {
operation: Operation
observer: FetchResultSubscriptionObserver
removeCallback: () => void
}) => (() => void) | void
export type OperationObserverCallback = (
operation: Operation,
observer: FetchResultSubscriptionObserver,
) => void
export interface Result {
result?: FetchResult
error?: Error
}
export type ResultFn = (operation: Operation) => Result
export type ResultOrFn = Result | ResultFn
export interface SubscribeMeta {
operation: Operation
observer: FetchResultSubscriptionObserver
forward: NextLink
enablePassthrough: PassthroughEnableFn
disablePassthrough: PassthroughDisableFn
}
export type InterceptorFn = (
operation: Operation,
forward: NextLink,
) => Observable<FetchResult>
export type ManInTheMiddleFn = (
options: SubscribeMeta,
) => Observable<FetchResult>
export type PassthroughDisableFn = () => boolean
export type PassthroughEnableFn = (mitm?: ManInTheMiddleFn) => boolean
export type OnSubscribe = (options: SubscribeMeta) => () => void
export type MatcherFn = (operation: Operation) => boolean
export interface Behavior {
matcher: MatcherFn
onSubscribe: OnSubscribe
}
export interface MatcherObject {
operationName?: string
clientName?: string
feature?: string
variables?: Variables
}
/** [[include:matcher.md]] */
export type Matcher = MatcherFn | MatcherObject
export type RecordingElement = RecordingMarker | RecordingPoint
export type RecordingElementWithFixtureMeta =
| RecordingMarker
| RecordingPointWithFixtureMeta
export type RecordingElementWithFixtureData =
| RecordingMarker
| RecordingPointWithFixtureData
export interface RecordingPoint {
clientName: string
timeDelta: number
operationName: string | null | undefined
feature?: string
variables: Variables
type: 'push' | 'response:mutation' | 'response:query'
result: FetchResult
action: string
}
export type Replacements = {
key: string
value: unknown
}[]
export interface RecordingPointWithFixtureMeta extends RecordingPoint {
fixtureFnName: string
reuseFixture?: string
valueAsStringToVariableName?: Map<string, string>
replacedVariables?: Map<string, Replacements>
stringifiedResult?: string
}
export interface RecordingPointWithFixtureData
extends RecordingPointWithFixtureMeta {
fixtureFnString?: string
fixtureFnName: string
fixtureCallString: string
}
export interface RecordingMarker {
type: 'marker'
timeDelta: number
action: string
}
export type EventFilterFn = (event: RecordingElement) => boolean
export interface CreateLaikaLinkOptions {
clientName: string
globalPropertyName?: string
startLoggingImmediately?: boolean
onLaikaReady?: (laika: Laika) => void
}
// helpers
/** @ignore */
export type ArgsType<T extends (...args: any) => any> = T extends (
...args: infer R
) => any
? R
: any