UNPKG

@platformos/pos-cli

Version:

Manage your platformOS application

70 lines 2.88 kB
import { locToRange, offsetToPosition } from 'graphql-language-service-utils'; import invariant from 'assert'; export const LANGUAGE = 'GraphQL'; function getRange(text, node) { const location = node.loc; invariant(location, 'Expected ASTNode to have a location.'); return locToRange(text, location); } function getPosition(text, node) { const location = node.loc; invariant(location, 'Expected ASTNode to have a location.'); return offsetToPosition(text, location.start); } export async function getDefinitionQueryResultForNamedType(text, node, dependencies) { const name = node.name.value; const defNodes = dependencies.filter(({ definition }) => definition.name && definition.name.value === name); if (defNodes.length === 0) { process.stderr.write(`Definition not found for GraphQL type ${name}`); return { queryRange: [], definitions: [] }; } const definitions = defNodes.map(({ filePath, content, definition }) => getDefinitionForNodeDefinition(filePath || '', content, definition)); return { definitions, queryRange: definitions.map(_ => getRange(text, node)), }; } export async function getDefinitionQueryResultForFragmentSpread(text, fragment, dependencies) { const name = fragment.name.value; const defNodes = dependencies.filter(({ definition }) => definition.name.value === name); if (defNodes.length === 0) { process.stderr.write(`Definition not found for GraphQL fragment ${name}`); return { queryRange: [], definitions: [] }; } const definitions = defNodes.map(({ filePath, content, definition }) => getDefinitionForFragmentDefinition(filePath || '', content, definition)); return { definitions, queryRange: definitions.map(_ => getRange(text, fragment)), }; } export function getDefinitionQueryResultForDefinitionNode(path, text, definition) { return { definitions: [getDefinitionForFragmentDefinition(path, text, definition)], queryRange: definition.name ? [getRange(text, definition.name)] : [], }; } function getDefinitionForFragmentDefinition(path, text, definition) { const name = definition.name; invariant(name, 'Expected ASTNode to have a Name.'); return { path, position: getPosition(text, definition), range: getRange(text, definition), name: name.value || '', language: LANGUAGE, projectRoot: path, }; } function getDefinitionForNodeDefinition(path, text, definition) { const name = definition.name; invariant(name, 'Expected ASTNode to have a Name.'); return { path, position: getPosition(text, definition), range: getRange(text, definition), name: name.value || '', language: LANGUAGE, projectRoot: path, }; } //# sourceMappingURL=getDefinition.js.map