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