From 37e0c29788d1eb383cf4d1944b186bb80bd5abc6 Mon Sep 17 00:00:00 2001 From: Ilia Mashkov Date: Fri, 3 Apr 2026 15:42:08 +0300 Subject: [PATCH] refactor: loadFont throws FontParseError instead of re-throwing raw error --- .../utils/loadFont/loadFont.test.ts | 17 +++++++++-------- .../utils/loadFont/loadFont.ts | 5 +++-- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/entities/Font/model/store/appliedFontsStore/utils/loadFont/loadFont.test.ts b/src/entities/Font/model/store/appliedFontsStore/utils/loadFont/loadFont.test.ts index 22dfcbd..4b7a667 100644 --- a/src/entities/Font/model/store/appliedFontsStore/utils/loadFont/loadFont.test.ts +++ b/src/entities/Font/model/store/appliedFontsStore/utils/loadFont/loadFont.test.ts @@ -1,4 +1,5 @@ /** @vitest-environment jsdom */ +import { FontParseError } from '../../errors'; import { loadFont } from './loadFont'; describe('loadFont', () => { @@ -65,8 +66,7 @@ describe('loadFont', () => { expect(result).toBe(mockFontInstance); }); - it('propagates and logs error when font.load() rejects', async () => { - const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {}); + it('throws FontParseError when font.load() rejects', async () => { const loadError = new Error('parse failed'); const MockFontFace = vi.fn( function(this: any, name: string, buffer: BufferSource, options: FontFaceDescriptors) { @@ -75,18 +75,19 @@ describe('loadFont', () => { ); vi.stubGlobal('FontFace', MockFontFace); - await expect(loadFont({ name: 'Broken', weight: 400 }, new ArrayBuffer(8))).rejects.toThrow('parse failed'); - expect(consoleSpy).toHaveBeenCalledWith(loadError); + await expect(loadFont({ name: 'Broken', weight: 400 }, new ArrayBuffer(8))).rejects.toBeInstanceOf( + FontParseError, + ); }); - it('propagates and logs error when document.fonts.add throws', async () => { - const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {}); + it('throws FontParseError when document.fonts.add throws', async () => { const addError = new Error('add failed'); mockFontFaceSet.add.mockImplementation(() => { throw addError; }); - await expect(loadFont({ name: 'Broken', weight: 400 }, new ArrayBuffer(8))).rejects.toThrow('add failed'); - expect(consoleSpy).toHaveBeenCalledWith(addError); + await expect(loadFont({ name: 'Broken', weight: 400 }, new ArrayBuffer(8))).rejects.toBeInstanceOf( + FontParseError, + ); }); }); diff --git a/src/entities/Font/model/store/appliedFontsStore/utils/loadFont/loadFont.ts b/src/entities/Font/model/store/appliedFontsStore/utils/loadFont/loadFont.ts index 71839f6..205c18c 100644 --- a/src/entities/Font/model/store/appliedFontsStore/utils/loadFont/loadFont.ts +++ b/src/entities/Font/model/store/appliedFontsStore/utils/loadFont/loadFont.ts @@ -1,4 +1,5 @@ import type { FontLoadRequestConfig } from '../../../../types'; +import { FontParseError } from '../../errors'; export type PartialConfig = Pick; /** @@ -6,6 +7,7 @@ export type PartialConfig = Pick { try { @@ -20,7 +22,6 @@ export async function loadFont(config: PartialConfig, buffer: BufferSource): Pro return font; } catch (error) { - console.error(error); - throw error; + throw new FontParseError(config.name, error); } }