import { invariant } from '../jsutils/invariant.js';
import type { Source } from './source.js';
const LineRegExp = /\r\n|[\n\r]/g;
export interface SourceLocation {
readonly line: number;
readonly column: number;
}
export function getLocation(source: Source, position: number): SourceLocation {
let lastLineStart = 0;
let line = 1;
for (const match of source.body.matchAll(LineRegExp)) {
invariant(typeof match.index === 'number');
if (match.index >= position) {
break;
}
lastLineStart = match.index + match[0].length;
line += 1;
}
return { line, column: position + 1 - lastLineStart };
}