graphql#Source TypeScript Examples
The following examples show how to use
graphql#Source.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: utils.ts From graphql-eslint with MIT License | 7 votes |
function getLexer(source: Source): Lexer {
// GraphQL v14
const gqlLanguage = require('graphql/language');
if (gqlLanguage && gqlLanguage.createLexer) {
return gqlLanguage.createLexer(source, {});
}
// GraphQL v15
const { Lexer: LexerCls } = require('graphql');
if (LexerCls && typeof LexerCls === 'function') {
return new LexerCls(source);
}
throw new Error('Unsupported GraphQL version! Please make sure to use GraphQL v14 or newer!');
}
Example #2
Source File: utils.ts From graphql-eslint with MIT License | 7 votes |
export function extractTokens(filePath: string, code: string): AST.Token[] {
const source = new Source(code, filePath);
const lexer = getLexer(source);
const tokens: AST.Token[] = [];
let token = lexer.advance();
while (token && token.kind !== TokenKind.EOF) {
const result = convertToken(token, token.kind) as AST.Token;
tokens.push(result);
token = lexer.advance();
}
return tokens;
}
Example #3
Source File: loading.ts From amplify-codegen with Apache License 2.0 | 6 votes |
export function loadAndMergeQueryDocuments(inputPaths: string[], tagName: string = 'gql'): DocumentNode {
const sources = inputPaths
.map(inputPath => {
const body = fs.readFileSync(inputPath, 'utf8');
if (!body) {
return null;
}
return new Source(body, inputPath);
})
.filter(source => source);
return concatAST((sources as Source[]).map(source => parse(source)));
}
Example #4
Source File: loading.ts From amplify-codegen with Apache License 2.0 | 6 votes |
export function loadAndMergeQueryDocuments(inputPaths: string[], tagName: string = 'gql'): DocumentNode {
const sources = inputPaths
.map(inputPath => {
const body = fs.readFileSync(inputPath, 'utf8');
if (!body) {
return null;
}
if (inputPath.endsWith('.jsx') || inputPath.endsWith('.js') || inputPath.endsWith('.tsx') || inputPath.endsWith('.ts')) {
const doc = extractDocumentFromJavascript(body.toString(), tagName);
return doc ? new Source(doc, inputPath) : null;
}
return new Source(body, inputPath);
})
.filter((source): source is Source => Boolean(source));
const parsedSources = sources.map(source => {
try {
return parse(source);
} catch (err) {
const relativePathToInput = relative(process.cwd(), source.name);
throw new ToolError(`Could not parse graphql operations in ${relativePathToInput}\n Failed on : ${source.body}`);
}
});
return concatAST(parsedSources);
}
Example #5
Source File: tools.ts From squid with GNU General Public License v3.0 | 6 votes |
export function loadModel(schemaFile: string): Model {
let files: string[] = []
if (fs.statSync(schemaFile).isDirectory()) {
fs.readdirSync(schemaFile, {withFileTypes: true}).forEach(item => {
if (item.isFile() && (item.name.endsWith('.graphql') || item.name.endsWith('.gql'))) {
files.push(path.join(schemaFile, item.name))
}
})
} else {
files.push(schemaFile)
}
let docs = files.map(f => {
let src = new Source(
fs.readFileSync(f, 'utf-8'),
f
)
return parse(src)
})
if (docs.length == 0) return {}
let doc = docs.length == 1 ? docs[0] : mergeTypeDefs(docs)
let schema = buildSchema(doc)
return buildModel(schema)
}
Example #6
Source File: Schema.ts From graphql-ts-client with MIT License | 5 votes |
export function createSchema(schema: string): Schema {
return (create as CreateFunc)(new Source(schema), undefined, schemaExtensions);
}
Example #7
Source File: index.ts From hono with MIT License | 4 votes |
graphqlServer = (options: Options) => {
const schema = options.schema
const rootValue = options.rootValue
const pretty = options.pretty ?? false
const validationRules = options.validationRules ?? []
// const showGraphiQL = options.graphiql ?? false
return async (c: Context, next: Next) => {
// GraphQL HTTP only supports GET and POST methods.
if (c.req.method !== 'GET' && c.req.method !== 'POST') {
return c.json(errorMessages(['GraphQL only supports GET and POST requests.']), 405, {
Allow: 'GET, POST',
})
}
let params: GraphQLParams
try {
params = await getGraphQLParams(c.req)
} catch (e) {
if (e instanceof Error) {
console.error(`${e.stack || e.message}`)
return c.json(errorMessages([e.message], [e]), 400)
}
throw e
}
const { query, variables, operationName } = params
if (query == null) {
return c.json(errorMessages(['Must provide query string.']), 400)
}
const schemaValidationErrors = validateSchema(schema)
if (schemaValidationErrors.length > 0) {
// Return 500: Internal Server Error if invalid schema.
return c.json(
errorMessages(['GraphQL schema validation error.'], schemaValidationErrors),
500
)
}
let documentAST: DocumentNode
try {
documentAST = parse(new Source(query, 'GraphQL request'))
} catch (syntaxError: unknown) {
// Return 400: Bad Request if any syntax errors errors exist.
if (syntaxError instanceof Error) {
console.error(`${syntaxError.stack || syntaxError.message}`)
const e = new GraphQLError(syntaxError.message, {
originalError: syntaxError,
})
return c.json(errorMessages(['GraphQL syntax error.'], [e]), 400)
}
throw syntaxError
}
// Validate AST, reporting any errors.
const validationErrors = validate(schema, documentAST, [...specifiedRules, ...validationRules])
if (validationErrors.length > 0) {
// Return 400: Bad Request if any validation errors exist.
return c.json(errorMessages(['GraphQL validation error.'], validationErrors), 400)
}
if (c.req.method === 'GET') {
// Determine if this GET request will perform a non-query.
const operationAST = getOperationAST(documentAST, operationName)
if (operationAST && operationAST.operation !== 'query') {
/*
Now , does not support GraphiQL
if (showGraphiQL) {
//return respondWithGraphiQL(response, graphiqlOptions, params)
}
*/
// Otherwise, report a 405: Method Not Allowed error.
return c.json(
errorMessages([
`Can only perform a ${operationAST.operation} operation from a POST request.`,
]),
405,
{ Allow: 'POST' }
)
}
}
let result: FormattedExecutionResult
try {
result = await execute({
schema,
document: documentAST,
rootValue,
variableValues: variables,
operationName: operationName,
})
} catch (contextError: unknown) {
if (contextError instanceof Error) {
console.error(`${contextError.stack || contextError.message}`)
const e = new GraphQLError(contextError.message, {
originalError: contextError,
nodes: documentAST,
})
// Return 400: Bad Request if any execution context errors exist.
return c.json(errorMessages(['GraphQL execution context error.'], [e]), 400)
}
throw contextError
}
if (!result.data) {
if (result.errors) {
return c.json(errorMessages([result.errors.toString()], result.errors), 500)
}
}
/*
Now, does not support GraphiQL
if (showGraphiQL) {
}
*/
if (pretty) {
const payload = JSON.stringify(result, null, pretty ? 2 : 0)
return c.text(payload, 200, {
'Content-Type': 'application/json',
})
} else {
return c.json(result)
}
await next() // XXX
}
}