UNPKG

4.75 kBSource Map (JSON)View Raw
1{"version":3,"file":"location.js","sourceRoot":"","sources":["../src/location.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n GraphQLSchema,\n printSchema,\n buildSchema,\n isObjectType,\n isDirective,\n isEnumType,\n isInputObjectType,\n Location,\n Source,\n getLocation as graphqlGetLocation,\n} from 'graphql';\n\nfunction normalizeSchema(schema: GraphQLSchema): GraphQLSchema {\n return buildSchema(printSchema(schema));\n}\n\nexport function getLocation({\n path,\n schema,\n}: {\n path: string;\n schema: GraphQLSchema;\n}) {\n const normalizedSchema = normalizeSchema(schema);\n const printed = printSchema(normalizedSchema);\n const loc = getNodeLocation({path, schema: normalizedSchema});\n const source = new Source(printed);\n\n if (!loc) {\n return {\n line: 1,\n column: 1,\n };\n }\n\n return graphqlGetLocation(source, loc.start);\n}\n\nfunction getNodeLocation({\n path,\n schema,\n}: {\n path: string;\n schema: GraphQLSchema;\n}): Location | undefined {\n const [typeName, ...rest] = path.split('.');\n const type = typeName.startsWith('@')\n ? schema.getDirective(typeName.substring(1))!\n : schema.getType(typeName)!;\n\n if (isObjectType(type)) {\n // type.field.arg\n const [fieldName, argName] = rest;\n\n if (fieldName) {\n const field = type.getFields()[fieldName];\n\n if (argName) {\n const arg = field.args.find(a => a.name === argName)!;\n\n // type.field.arg\n return arg.astNode!.loc;\n }\n\n // type.field\n return field.astNode!.loc;\n }\n\n // type\n return type.astNode!.loc;\n } else if (isDirective(type)) {\n // directive.arg\n const [argName] = rest;\n\n if (argName) {\n const arg = type.args.find(a => a.name === argName)!;\n\n // directive.arg\n return arg.astNode!.loc;\n }\n\n // directive\n return type.astNode!.loc;\n } else if (isEnumType(type)) {\n // enum.value\n const [valueName] = rest;\n\n if (valueName) {\n const val = type.getValue(valueName)!;\n\n // enum.value\n return val.astNode!.loc;\n }\n\n // enum\n return type.astNode!.loc;\n } else if (isInputObjectType(type)) {\n // input.field\n const [fieldName] = rest;\n\n if (fieldName) {\n const field = type.getFields()[fieldName]!;\n\n // input.field\n return field.astNode!.loc;\n }\n\n // input\n return type.astNode!.loc;\n } else {\n // name\n return type.astNode!.loc;\n }\n}\n"]}
\No newline at end of file