forked from adamlaska/ts-graphql-plugin
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvalidator.ts
More file actions
35 lines (34 loc) · 1.4 KB
/
validator.ts
File metadata and controls
35 lines (34 loc) · 1.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import { GraphQLSchema } from 'graphql';
import { getDiagnostics } from 'graphql-language-service-interface';
import { ExtractResult } from './extractor';
import { ErrorWithLocation } from '../errors';
export function validate(extractedResults: ExtractResult[], schema: GraphQLSchema) {
const errors: ErrorWithLocation[] = [];
extractedResults.forEach(r => {
if (!r.resolevedTemplateInfo) return;
const { combinedText, getSourcePosition, convertInnerLocation2InnerPosition } = r.resolevedTemplateInfo;
const diagnostics = getDiagnostics(combinedText, schema);
diagnostics.forEach(diagnositc => {
const { pos: startPositionOfSource, isInOtherExpression } = getSourcePosition(
convertInnerLocation2InnerPosition(diagnositc.range.start),
);
if (isInOtherExpression) return;
let endPositionOfSource: number = 0;
try {
endPositionOfSource = getSourcePosition(convertInnerLocation2InnerPosition(diagnositc.range.end)).pos;
} catch (error) {
endPositionOfSource = startPositionOfSource + 1;
}
errors.push(
new ErrorWithLocation(diagnositc.message, {
fileName: r.fileName,
severity: diagnositc.severity === 2 ? 'Warn' : 'Error',
content: r.templateNode.getSourceFile().getText(),
start: startPositionOfSource,
end: endPositionOfSource,
}),
);
});
});
return errors;
}