Slackbot
03/30/2022, 8:35 AMAlucard
03/30/2022, 8:47 AMimport { wrapSchema, introspectSchema, RenameTypes } from '@graphql-tools/wrap';
import { stitchSchemas } from '@graphql-tools/stitch';
import { AsyncExecutor } from '@graphql-tools/utils';
....
type ExecutorGetter = (uri: string) => AsyncExecutor;
const getExecutor: ExecutorGetter =
(uri) =>
async ({ document, variables }) => {
const query = print(document);
const fetchResult = await fetch(uri, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ query, variables }),
});
return fetchResult.json();
};
const getRemoteExecutableSchema = async (uri: string) => {
const remoteSchema = await introspectSchema(getExecutor(uri));
return wrapSchema({ schema: remoteSchema, executor: getExecutor(uri) });
};
const getTransFormedRemoteExecutableSchema = async (uri: string) => {
const remoteSchema = await introspectSchema(getExecutor(uri));
return wrapSchema({
schema: remoteSchema,
executor: getExecutor(uri),
transforms: [new RenameTypes((name) => `my_prefix_${name}`)], // 이 부분에서 type rename 이루어집니다
});
};
export async function createApolloClient(option: Option = {}) {
const executableSchema1 = await getRemoteExecutableSchema(uri1);
const executableSchema2 = await getTransFormedRemoteExecutableSchema(uri2);
const stitchedSchema = stitchSchemas({
subschemas: [executableSchema1, executableSchema2],
});
대략 코드는 이런데 이게 런타임에 ApolloClient 를 셋업할때 실행되는 코드라서 codegen 으로 생성한 타입과는 달라지는게 문제입니다.. 따로 transform 만 진행하는 프록시 GraphQL api 를 파야할까요?