UNPKG

apollo-codegen

Version:

Generate API code or type annotations based on a GraphQL schema and query documents

67 lines (57 loc) 2.1 kB
import { join, wrap, } from '../utilities/printing'; export function comment(generator, comment) { const split = comment ? comment.split('\n') : []; if (split.length > 0) { generator.printOnNewline('/**') split.forEach(line => { generator.printOnNewline(` * ${line.trim()}`); }); generator.printOnNewline(' */'); } } export function packageDeclaration(generator, pkg) { generator.printNewlineIfNeeded(); generator.printOnNewline(`package ${pkg}`); generator.popScope(); } export function objectDeclaration(generator, { objectName, superclass, properties }, closure) { generator.printNewlineIfNeeded(); generator.printOnNewline(`object ${objectName}` + (superclass ? ` extends ${superclass}` : '')); generator.pushScope({ typeName: objectName }); generator.withinBlock(closure); generator.popScope(); } export function caseClassDeclaration(generator, { caseClassName, description, superclass, params }, closure) { generator.printNewlineIfNeeded(); comment(generator, description); generator.printOnNewline(`case class ${caseClassName}(${(params || []).map(v => v.name + ": " + v.type).join(', ')})` + (superclass ? ` extends ${superclass}` : '')); generator.pushScope({ typeName: caseClassName }); generator.withinBlock(closure); generator.popScope(); } export function propertyDeclaration(generator, { propertyName, typeName, description}, closure) { comment(generator, description); generator.printOnNewline(`val ${propertyName}: ${typeName} =`); generator.withinBlock(closure); } export function propertyDeclarations(generator, declarations) { declarations.forEach(o => { propertyDeclaration(generator, o); }); } const reservedKeywords = new Set( 'case', 'catch', 'class', 'def', 'do', 'else', 'extends', 'false', 'final', 'for', 'if', 'match', 'new', 'null', 'throw', 'trait', 'true', 'try', 'until', 'val', 'var', 'while', 'with' ); export function escapeIdentifierIfNeeded(identifier) { if (reservedKeywords.has(identifier)) { return '`' + identifier + '`'; } else { return identifier; } }