1import Parser from 'web-tree-sitter'; 2 3let base = '/'; 4export function setBase(path) { 5 base = path; 6} 7 8let isReady = false, 9 parser; 10async function _loadParser() { 11 await Parser.init({ 12 locateFile(scriptName, scriptDirectory) { 13 return `${base}${scriptName}`; 14 }, 15 }); 16 parser = new Parser(); 17 const Lang = await Parser.Language.load(`${base}tree-sitter-haskell.wasm`); 18 parser.setLanguage(Lang); 19 isReady = true; 20 return parser; 21} 22 23let parserLoaded; 24export function loadParser() { 25 if (!parserLoaded) { 26 parserLoaded = _loadParser(); 27 } 28 return parserLoaded; 29} 30 31export function parse(code) { 32 if (!isReady) { 33 throw new Error('hs2js not ready. await loadParser before calling evaluate or parse functions'); 34 } 35 // for some reason, the parser doesn't like new lines.. 36 return parser.parse(code.replaceAll('\n\n', '~~~~').replaceAll('\n', ' ').replaceAll('~~~~', ' \n')); 37}