(lang: SupportedLang, onLoaded?: () => void)
| 172 | const loadingLangs = new Set<string>(); |
| 173 | |
| 174 | export function ensureLang(lang: SupportedLang, onLoaded?: () => void): boolean { |
| 175 | const loaded = highlighter.getLoadedLanguages(); |
| 176 | if (loaded.includes(lang)) return true; |
| 177 | |
| 178 | const loader = LAZY_LANG_LOADERS[lang]; |
| 179 | if (!loader) return true; // Not a lazy lang, must be already loaded |
| 180 | |
| 181 | if (!loadingLangs.has(lang)) { |
| 182 | loadingLangs.add(lang); |
| 183 | void loader().then((mod: any) => { |
| 184 | const registration = mod.default ?? mod; |
| 185 | highlighter.loadLanguageSync(registration); |
| 186 | loadingLangs.delete(lang); |
| 187 | onLoaded?.(); |
| 188 | }); |
| 189 | } else if (onLoaded) { |
| 190 | const l = loader; |
| 191 | void l().then((mod: any) => { |
| 192 | const registration = mod.default ?? mod; |
| 193 | if (!highlighter.getLoadedLanguages().includes(lang)) { |
| 194 | highlighter.loadLanguageSync(registration); |
| 195 | } |
| 196 | onLoaded(); |
| 197 | }); |
| 198 | } |
| 199 | return false; |
| 200 | } |
| 201 | |
| 202 | // --------------------------------------------------------------------------- |
| 203 | // Streamdown code highlighter plugin |
no test coverage detected