forked from invertase/tanstack-query-firebase
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvalidateReactArgs.ts
68 lines (63 loc) · 2.58 KB
/
validateReactArgs.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
import {
ConnectorConfig,
DataConnect,
getDataConnect,
} from "firebase/data-connect";
import { useDataConnectQueryOptions } from "./useDataConnectQuery";
type DataConnectOptions =
| useDataConnectQueryOptions
| useDataConnectQueryOptions;
interface ParsedReactArgs<Variables> {
dc: DataConnect;
vars: Variables;
options: DataConnectOptions;
}
/**
* The generated React SDK will allow the user to pass in variables, a Data Connect instance, or operation options.
* The only required argument is the variables, which are only required when the operation has at least one required
* variable. Otherwise, all arguments are optional. This function validates the variables and returns back the DataConnect
* instance, variables, and options based on the arguments passed in.
* @param connectorConfig DataConnect connector config
* @param dcOrVarsOrOptions the first argument provided to a generated react function
* @param varsOrOptions the second argument provided to a generated react function
* @param options the third argument provided to a generated react function
* @param hasVars boolean parameter indicating whether the operation has variables
* @param validateVars boolean parameter indicating whether we should expect to find a value for realVars
* @returns parsed DataConnect, Variables, and Options for the operation
* @internal
*/
export function validateReactArgs<Variables extends object>(
connectorConfig: ConnectorConfig,
dcOrVarsOrOptions?: DataConnect | Variables | DataConnectOptions,
varsOrOptions?: Variables | DataConnectOptions,
options?: DataConnectOptions,
hasVars?: boolean,
validateVars?: boolean
): ParsedReactArgs<Variables> {
let dcInstance: DataConnect;
let realVars: Variables;
let realOptions: DataConnectOptions;
if (dcOrVarsOrOptions && "enableEmulator" in dcOrVarsOrOptions) {
dcInstance = dcOrVarsOrOptions as DataConnect;
if (hasVars) {
realVars = varsOrOptions as Variables;
realOptions = options as DataConnectOptions;
} else {
realVars = undefined as unknown as Variables;
realOptions = varsOrOptions as DataConnectOptions;
}
} else {
dcInstance = getDataConnect(connectorConfig);
if (hasVars) {
realVars = dcOrVarsOrOptions as Variables;
realOptions = varsOrOptions as DataConnectOptions;
} else {
realVars = undefined as unknown as Variables;
realOptions = dcOrVarsOrOptions as DataConnectOptions;
}
}
if (!dcInstance || (!realVars && validateVars)) {
throw new Error("invalid-argument: Variables required."); // copied from firebase error codes
}
return { dc: dcInstance, vars: realVars, options: realOptions };
}