async loadMissingFonts () { let fontNames: FontName[]; if (FigmaUtils.isMixedValue(this.baseNode.fontName)) { fontNames = Array.from(this.baseNode.characters).reduce( (p, _, i) => { // as FontName - for single character the is no possibility to have multiple font families set const characterFontName = this.baseNode.getRangeFontName(i, i+1) as FontName; const fontAlreadyInArray = p.find( fontName => fontName.family === characterFontName.family && fontName.style === characterFontName.style ); if (!fontAlreadyInArray) { p.push(characterFontName); } return p; }, [] as FontName[] ); } else { fontNames = [this.baseNode.fontName]; } const loadFontResults = await Promise.all(fontNames.map( fontName => figma.loadFontAsync(fontName) .catch(e => { figma.notify(e); return false; }) )); return !loadFontResults.includes(false); // return false if any font loading have failed }