import Parser from 'web-tree-sitter'; let base = '/'; export function setBase(path) { base = path; } let isReady = false, parser; async function _loadParser() { await Parser.init({ locateFile(scriptName, scriptDirectory) { return `${base}${scriptName}`; }, }); parser = new Parser(); const Lang = await Parser.Language.load(`${base}tree-sitter-haskell.wasm`); parser.setLanguage(Lang); isReady = true; return parser; } let parserLoaded; export function loadParser() { if (!parserLoaded) { parserLoaded = _loadParser(); } return parserLoaded; } export function parse(code) { if (!isReady) { throw new Error('hs2js not ready. await loadParser before calling evaluate or parse functions'); } // for some reason, the parser doesn't like new lines.. return parser.parse(code.replaceAll('\n\n', '~~~~').replaceAll('\n', ' ').replaceAll('~~~~', ' \n')); }