@graphql-tools/graphql
Version:
Fork of GraphQL.js
32 lines (31 loc) • 1.31 kB
JavaScript
var _a;
import { devAssert } from '../jsutils/devAssert.js';
const isSourceSymbol = Symbol.for('Source');
/**
* A representation of source input to GraphQL. The `name` and `locationOffset` parameters are
* optional, but they are useful for clients who store GraphQL documents in source files.
* For example, if the GraphQL input starts at line 40 in a file named `Foo.graphql`, it might
* be useful for `name` to be `"Foo.graphql"` and location to be `{ line: 40, column: 1 }`.
* The `line` and `column` properties in `locationOffset` are 1-indexed.
*/
export class Source {
constructor(body, name = 'GraphQL request', locationOffset = { line: 1, column: 1 }) {
this[_a] = true;
this.body = body;
this.name = name;
this.locationOffset = locationOffset;
devAssert(this.locationOffset.line > 0, 'line in locationOffset is 1-indexed and must be positive.');
devAssert(this.locationOffset.column > 0, 'column in locationOffset is 1-indexed and must be positive.');
}
get [(_a = isSourceSymbol, Symbol.toStringTag)]() {
return 'Source';
}
}
/**
* Test if the given value is a Source object.
*
* @internal
*/
export function isSource(source) {
return typeof source === 'object' && source != null && isSourceSymbol in source;
}