// serves source documents carried by the language server at tinyvm:/NAME.zc. function createSourceProvider(request, isReady, delay = ms => new Promise(resolve => setTimeout(resolve, ms))) { return { async provideTextDocumentContent(uri) { for (let waited = 0; !isReady() && waited < 10000; waited += 100) await delay(100); if (!isReady()) return '// the language server is not running\n'; try { const result = await request('zc/source', { path: uri.path }); return typeof result === 'string' ? result : '// no such built-in source\n'; } catch (error) { return '// the language server could not give this source\n'; } } }; } module.exports = { createSourceProvider };