graphql-import
Version:
 # graphql-import
60 lines (57 loc) • 2.11 kB
JavaScript
import { loadSchema, loadTypedefs, OPERATION_KINDS } from '@graphql-toolkit/core';
import { UrlLoader } from '@graphql-toolkit/url-loader';
import { JsonFileLoader } from '@graphql-toolkit/json-file-loader';
import { GraphQLFileLoader } from '@graphql-toolkit/graphql-file-loader';
import { CodeFileLoader } from '@graphql-toolkit/code-file-loader';
import { GitLoader } from '@graphql-toolkit/git-loader';
import { GithubLoader } from '@graphql-toolkit/github-loader';
import { ApolloEngineLoader } from '@graphql-toolkit/apollo-engine-loader';
import { PrismaLoader } from '@graphql-toolkit/prisma-loader';
import { parse, print } from 'graphql';
import { mergeTypeDefs } from '@graphql-toolkit/schema-merging';
const DEFAULT_SCHEMA_LOADERS = [
new UrlLoader(),
new JsonFileLoader(),
new GraphQLFileLoader(),
new CodeFileLoader(),
new GitLoader(),
new GithubLoader(),
new ApolloEngineLoader(),
new PrismaLoader()
];
async function importSchema(pointerOrPointers, options = {}) {
const allOptions = {
loaders: DEFAULT_SCHEMA_LOADERS,
filterKinds: OPERATION_KINDS,
sort: false,
forceGraphQLImport: true,
useSchemaDefinition: false,
...options,
};
const out = options.out;
if (out === 'GraphQLSchema') {
return loadSchema(pointerOrPointers, allOptions);
}
else {
const results = await loadTypedefs(pointerOrPointers, allOptions);
const mergedDocuments = mergeTypeDefs(results.map(r => r.document), allOptions);
if (out === 'DocumentNode') {
if (typeof mergedDocuments === 'string') {
return parse(mergedDocuments);
}
else {
return mergedDocuments;
}
}
else {
if (typeof mergedDocuments === 'string') {
return mergedDocuments;
}
else if (mergedDocuments) {
return print(mergedDocuments);
}
return '';
}
}
}
export { importSchema };