|
15 | 15 | * limitations under the License. |
16 | 16 | */ |
17 | 17 |
|
| 18 | +import { ExecuteQueryOptions } from '../api'; |
18 | 19 | import { |
19 | 20 | ConnectorConfig, |
20 | 21 | DataConnect, |
21 | 22 | getDataConnect |
22 | 23 | } from '../api/DataConnect'; |
23 | 24 | import { Code, DataConnectError } from '../core/error'; |
| 25 | + |
24 | 26 | interface ParsedArgs<Variables> { |
25 | 27 | dc: DataConnect; |
26 | 28 | vars: Variables; |
| 29 | + options?: ExecuteQueryOptions; |
27 | 30 | } |
28 | 31 |
|
29 | 32 | /** |
30 | | - * The generated SDK will allow the user to pass in either the variable or the data connect instance with the variable, |
31 | | - * and this function validates the variables and returns back the DataConnect instance and variables based on the arguments passed in. |
| 33 | + * The generated SDK will allow the user to pass in either the variables or the data connect instance |
| 34 | + * with the variables. This function validates the variables and returns back the DataConnect instance |
| 35 | + * and variables based on the arguments passed in. |
| 36 | + * |
| 37 | + * Generated SDKs generated from versions 3.2.0 and lower of the Data Connect emulator binary are |
| 38 | + * NOT concerned with options, and will use this function to validate arguments. |
| 39 | + * |
32 | 40 | * @param connectorConfig |
33 | 41 | * @param dcOrVars |
34 | 42 | * @param vars |
35 | | - * @param validateVars |
| 43 | + * @param variablesRequired |
36 | 44 | * @returns {DataConnect} and {Variables} instance |
37 | 45 | * @internal |
38 | 46 | */ |
39 | 47 | export function validateArgs<Variables extends object>( |
40 | 48 | connectorConfig: ConnectorConfig, |
41 | 49 | dcOrVars?: DataConnect | Variables, |
42 | 50 | vars?: Variables, |
43 | | - validateVars?: boolean |
| 51 | + variablesRequired?: boolean |
44 | 52 | ): ParsedArgs<Variables> { |
45 | 53 | let dcInstance: DataConnect; |
46 | 54 | let realVars: Variables; |
47 | | - if (dcOrVars && 'enableEmulator' in dcOrVars) { |
| 55 | + |
| 56 | + const dcFirstArg = dcOrVars && 'enableEmulator' in dcOrVars; |
| 57 | + |
| 58 | + if (dcFirstArg) { |
48 | 59 | dcInstance = dcOrVars as DataConnect; |
49 | 60 | realVars = vars as Variables; |
50 | 61 | } else { |
51 | 62 | dcInstance = getDataConnect(connectorConfig); |
52 | 63 | realVars = dcOrVars as Variables; |
53 | 64 | } |
54 | | - if (!dcInstance || (!realVars && validateVars)) { |
| 65 | + |
| 66 | + if (!dcInstance || (!realVars && variablesRequired)) { |
55 | 67 | throw new DataConnectError(Code.INVALID_ARGUMENT, 'Variables required.'); |
56 | 68 | } |
| 69 | + |
57 | 70 | return { dc: dcInstance, vars: realVars }; |
58 | 71 | } |
| 72 | + |
| 73 | +/** |
| 74 | + * The generated SDK will allow the user to pass in either the variables or the data connect instance |
| 75 | + * with the variables, and/or options. This function validates the variables and returns back the |
| 76 | + * DataConnect instance and variables, and potentially options, based on the arguments passed in. |
| 77 | + * |
| 78 | + * Generated SDKs generated from versions 3.2.0 and higher of the Data Connect emulator binary are |
| 79 | + * in fact concerned with options, and will use this function to validate arguments. |
| 80 | + * |
| 81 | + * @param connectorConfig |
| 82 | + * @param dcOrVarsOrOptions |
| 83 | + * @param varsOrOptions |
| 84 | + * @param variablesRequired |
| 85 | + * @param options |
| 86 | + * @returns {DataConnect} and {Variables} instance, and optionally {ExecuteQueryOptions} |
| 87 | + * @internal |
| 88 | + */ |
| 89 | +export function validateArgsWithOptions<Variables extends object>( |
| 90 | + connectorConfig: ConnectorConfig, |
| 91 | + dcOrVarsOrOptions?: DataConnect | Variables | ExecuteQueryOptions, |
| 92 | + varsOrOptions?: Variables | ExecuteQueryOptions, |
| 93 | + options?: ExecuteQueryOptions, |
| 94 | + hasVars?: boolean, |
| 95 | + variablesRequired?: boolean |
| 96 | +): ParsedArgs<Variables> { |
| 97 | + let dcInstance: DataConnect; |
| 98 | + let realVars: Variables; |
| 99 | + let realOptions: ExecuteQueryOptions; |
| 100 | + |
| 101 | + const dcFirstArg = dcOrVarsOrOptions && 'enableEmulator' in dcOrVarsOrOptions; |
| 102 | + |
| 103 | + if (dcFirstArg) { |
| 104 | + dcInstance = dcOrVarsOrOptions as DataConnect; |
| 105 | + if (hasVars) { |
| 106 | + realVars = varsOrOptions as Variables; |
| 107 | + realOptions = options as ExecuteQueryOptions; |
| 108 | + } else { |
| 109 | + realVars = undefined as unknown as Variables; |
| 110 | + realOptions = varsOrOptions as ExecuteQueryOptions; |
| 111 | + } |
| 112 | + } else { |
| 113 | + dcInstance = getDataConnect(connectorConfig); |
| 114 | + if (hasVars) { |
| 115 | + realVars = dcOrVarsOrOptions as Variables; |
| 116 | + realOptions = varsOrOptions as ExecuteQueryOptions; |
| 117 | + } else { |
| 118 | + realVars = undefined as unknown as Variables; |
| 119 | + realOptions = dcOrVarsOrOptions as ExecuteQueryOptions; |
| 120 | + } |
| 121 | + } |
| 122 | + |
| 123 | + if (!dcInstance || (!realVars && variablesRequired)) { |
| 124 | + throw new DataConnectError(Code.INVALID_ARGUMENT, 'Variables required.'); |
| 125 | + } |
| 126 | + |
| 127 | + return { dc: dcInstance, vars: realVars, options: realOptions }; |
| 128 | +} |
0 commit comments