Skip to content

Commit

Permalink
First implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
Jontem committed Aug 20, 2018
1 parent 0298abf commit 7a4a059
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 8 deletions.
18 changes: 13 additions & 5 deletions packages/graphql-codegen-cli/src/codegen.ts
Expand Up @@ -2,7 +2,7 @@ import * as commander from 'commander';
import * as path from 'path';
import * as fs from 'fs';
import * as mkdirp from 'mkdirp';
import { GraphQLSchema } from 'graphql';
import { GraphQLSchema, DocumentNode, GraphQLError } from 'graphql';

import { documentsFromGlobs } from './utils/documents-glob';
import { loadDocumentsSources } from './loaders/documents/document-loader';
Expand Down Expand Up @@ -259,10 +259,18 @@ export const executeWithOptions = async (options: CLIOptions): Promise<FileOutpu
}
});

const transformedDocuments = transformDocument(
graphQlSchema,
loadDocumentsSources(await documentsFromGlobs(documents))
);
const documentSourcesResult = loadDocumentsSources(graphQlSchema, await documentsFromGlobs(documents));

if (Array.isArray(documentSourcesResult) && documentSourcesResult.length > 0) {
const graphQLErrors = documentSourcesResult as ReadonlyArray<GraphQLError>;
for (const graphQLError of graphQLErrors) {
logger.error(`${graphQLError.path}: ${graphQLError.message}`);
}
cliError('Found errors when validating queries against schema');
}

const transformedDocuments = transformDocument(graphQlSchema, documentSourcesResult as DocumentNode);

return compileTemplate(templateConfig, context, [transformedDocuments], {
generateSchema,
generateDocuments
Expand Down
@@ -1,4 +1,5 @@
import { DocumentNode, Source, parse, concatAST } from 'graphql-codegen-core';
import { validate, GraphQLSchema, GraphQLError } from 'graphql';
import { DocumentNode, Source, parse, concatAST, logger } from 'graphql-codegen-core';
import * as fs from 'fs';
import * as path from 'path';
import { extractDocumentStringFromCodeFile } from '../../utils/document-finder';
Expand All @@ -24,6 +25,21 @@ export const loadFileContent = (filePath: string): DocumentNode | null => {
}
};

export const loadDocumentsSources = (filePaths: string[]): DocumentNode => {
return concatAST(filePaths.map<DocumentNode>(loadFileContent).filter(content => content));
export const loadDocumentsSources = (
schema: GraphQLSchema,
filePaths: string[]
): DocumentNode | ReadonlyArray<GraphQLError> => {
const loadResults = filePaths
.map(filePath => {
const fileContent = loadFileContent(filePath);
const errors = validate(schema, fileContent);
return {
fileContent,
errors
};
})
.filter(content => content);

const errors = loadResults.map(r => r.errors).reduce((soFar, current) => soFar.concat(current), []);
return errors.length > 0 ? errors : concatAST(loadResults.map(r => r.fileContent));
};

0 comments on commit 7a4a059

Please sign in to comment.