All files / src/languages index.js

85% Statements 17/20
85.71% Branches 12/14
75% Functions 3/4
85% Lines 17/20

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 421x     22x 22x     22x 1x   21x 1x   20x 1x   19x 19x 1x         18x 18x       8761x     8761x       25x            
export const LANGUAGES = {};
 
export function addLanguage(languageDefinition) {
  var id = languageDefinition.id;
  Iif (!id) {
    throw new Error(`language definition missing an 'id' attribute`);
  }
  if (LANGUAGES[id]) {
    throw new Error(`language ${id} has already been added.`);
  }
  if (!languageDefinition.name) {
    throw new Error(`language definition for ${id} is missing a 'name' attribute.`);
  }
  if (!languageDefinition.getParser) {
    throw new Error(`language definition for ${id} is missing a 'getParser' function.`);
  }
  let parser = languageDefinition.getParser();
  if (!(parser && typeof parser.parse == 'function')) {
    throw new Error(
      `getParser() function for language ${id} must return an object with a 'parse' function.`
    );
  }
 
  LANGUAGES[id] = languageDefinition;
  return languageDefinition;
}
 
export function getLanguage(languageId) {
  Iif (!LANGUAGES[languageId]) {
    console.warn('Trying to get language', languageId, 'but it hasn\'t been added yet');
  }
  return LANGUAGES[languageId];
}
 
export function removeLanguage(languageId) {
  delete LANGUAGES[languageId];
}
 
export function getLanguages() {
  return Object.values(LANGUAGES);
}