Fix graphql instrospection

This commit is contained in:
Gregory Schier
2023-05-29 12:31:34 -07:00
parent 6decba8a4a
commit 465ccdd2b2
10 changed files with 228 additions and 117 deletions

View File

@@ -3,6 +3,7 @@ import type { GraphQLSchema } from 'graphql';
import { buildClientSchema, getIntrospectionQuery } from '../components/core/Editor';
import { minPromiseMillis } from '../lib/minPromiseMillis';
import type { HttpRequest } from '../lib/models';
import { getResponseBodyText } from '../lib/responseBody';
import { sendEphemeralRequest } from '../lib/sendEphemeralRequest';
import { useDebouncedValue } from './useDebouncedValue';
@@ -35,11 +36,12 @@ export function useIntrospectGraphQL(baseRequest: HttpRequest) {
);
}
if (response.body === null) {
const body = await getResponseBodyText(response);
if (body === null) {
return Promise.reject(new Error('Empty body returned in response'));
}
const { data } = JSON.parse(response.body);
const { data } = JSON.parse(body);
return buildClientSchema(data);
},
});

View File

@@ -1,20 +1,12 @@
import { useQuery } from '@tanstack/react-query';
import { readBinaryFile } from '@tauri-apps/api/fs';
import type { HttpResponse } from '../lib/models';
import { getResponseBodyBlob } from '../lib/responseBody';
export function useResponseBodyBlob(response: HttpResponse) {
return useQuery<Uint8Array | null>({
enabled: response != null,
queryKey: ['response-body-binary', response?.updatedAt],
initialData: null,
queryFn: async () => {
if (response.body) {
return Uint8Array.of(...response.body);
}
if (response.bodyPath) {
return readBinaryFile(response.bodyPath);
}
return null;
},
queryFn: () => getResponseBodyBlob(response),
}).data;
}

View File

@@ -1,22 +1,11 @@
import { useQuery } from '@tanstack/react-query';
import { readTextFile } from '@tauri-apps/api/fs';
import type { HttpResponse } from '../lib/models';
import { getResponseBodyText } from '../lib/responseBody';
export function useResponseBodyText(response: HttpResponse) {
return useQuery<string | null>({
queryKey: ['response-body-text', response?.updatedAt],
initialData: null,
queryFn: async () => {
if (response.body) {
const uint8Array = Uint8Array.of(...response.body);
return new TextDecoder().decode(uint8Array);
}
if (response.bodyPath) {
return await readTextFile(response.bodyPath);
}
return null;
},
queryFn: () => getResponseBodyText(response),
}).data;
}