1 | var _a;
|
2 | import * as apolloImport from '@apollo/client';
|
3 | const apollo = (_a = apolloImport === null || apolloImport === void 0 ? void 0 : apolloImport.default) !== null && _a !== void 0 ? _a : apolloImport;
|
4 | function getFinalPromise(object) {
|
5 | return Promise.resolve(object).then(resolvedObject => {
|
6 | if (resolvedObject == null) {
|
7 | return resolvedObject;
|
8 | }
|
9 | if (Array.isArray(resolvedObject)) {
|
10 | return Promise.all(resolvedObject.map(o => getFinalPromise(o)));
|
11 | }
|
12 | else if (typeof resolvedObject === 'object') {
|
13 | const keys = Object.keys(resolvedObject);
|
14 | return Promise.all(keys.map(key => getFinalPromise(resolvedObject[key]))).then(awaitedValues => {
|
15 | for (let i = 0; i < keys.length; i++) {
|
16 | resolvedObject[keys[i]] = awaitedValues[i];
|
17 | }
|
18 | return resolvedObject;
|
19 | });
|
20 | }
|
21 | return resolvedObject;
|
22 | });
|
23 | }
|
24 | export class AwaitVariablesLink extends apollo.ApolloLink {
|
25 | request(operation, forward) {
|
26 | return new apollo.Observable(observer => {
|
27 | let subscription;
|
28 | getFinalPromise(operation.variables)
|
29 | .then(resolvedVariables => {
|
30 | operation.variables = resolvedVariables;
|
31 | subscription = forward(operation).subscribe({
|
32 | next: observer.next.bind(observer),
|
33 | error: observer.error.bind(observer),
|
34 | complete: observer.complete.bind(observer),
|
35 | });
|
36 | })
|
37 | .catch(observer.error.bind(observer));
|
38 | return () => {
|
39 | if (subscription != null) {
|
40 | subscription.unsubscribe();
|
41 | }
|
42 | };
|
43 | });
|
44 | }
|
45 | }
|