61 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import State from "../tokenizer/state";
 | 
						|
import {charCodes} from "../util/charcodes";
 | 
						|
 | 
						|
export let isJSXEnabled;
 | 
						|
export let isTypeScriptEnabled;
 | 
						|
export let isFlowEnabled;
 | 
						|
export let state;
 | 
						|
export let input;
 | 
						|
export let nextContextId;
 | 
						|
 | 
						|
export function getNextContextId() {
 | 
						|
  return nextContextId++;
 | 
						|
}
 | 
						|
 | 
						|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
 | 
						|
export function augmentError(error) {
 | 
						|
  if ("pos" in error) {
 | 
						|
    const loc = locationForIndex(error.pos);
 | 
						|
    error.message += ` (${loc.line}:${loc.column})`;
 | 
						|
    error.loc = loc;
 | 
						|
  }
 | 
						|
  return error;
 | 
						|
}
 | 
						|
 | 
						|
export class Loc {
 | 
						|
  
 | 
						|
  
 | 
						|
  constructor(line, column) {
 | 
						|
    this.line = line;
 | 
						|
    this.column = column;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
export function locationForIndex(pos) {
 | 
						|
  let line = 1;
 | 
						|
  let column = 1;
 | 
						|
  for (let i = 0; i < pos; i++) {
 | 
						|
    if (input.charCodeAt(i) === charCodes.lineFeed) {
 | 
						|
      line++;
 | 
						|
      column = 1;
 | 
						|
    } else {
 | 
						|
      column++;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return new Loc(line, column);
 | 
						|
}
 | 
						|
 | 
						|
export function initParser(
 | 
						|
  inputCode,
 | 
						|
  isJSXEnabledArg,
 | 
						|
  isTypeScriptEnabledArg,
 | 
						|
  isFlowEnabledArg,
 | 
						|
) {
 | 
						|
  input = inputCode;
 | 
						|
  state = new State();
 | 
						|
  nextContextId = 1;
 | 
						|
  isJSXEnabled = isJSXEnabledArg;
 | 
						|
  isTypeScriptEnabled = isTypeScriptEnabledArg;
 | 
						|
  isFlowEnabled = isFlowEnabledArg;
 | 
						|
}
 |