{"record":{"id":"29b8929fc92a9558","repo":"actualbudget/actual","slug":"unsupported-font-file-extension-ext-supporte","errorCode":null,"errorMessage":"Unsupported font file extension \"${ext}\". Supported: ${Object.keys(FONT_EXTENSION_MIME).join(', ')}.","messagePattern":"Unsupported font file extension \"(.+?)\"\\. Supported: (.+?)\\.","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/desktop-client/src/style/customThemes.ts","lineNumber":582,"sourceCode":"\n      if (/^https?:\\/\\//i.test(path)) {\n        throw new Error(\n          `Remote font URL \"${path}\" is not allowed. Only relative paths to fonts in the same GitHub repo are supported.`,\n        );\n      }\n\n      const cleanPath = path.replace(/^\\.\\//, '');\n\n      if (cleanPath.startsWith('/') || cleanPath.includes('..')) {\n        throw new Error(\n          `Font path \"${path}\" is not allowed. Only relative paths within the repo are supported (no \"/\" prefix or \"..\" segments).`,\n        );\n      }\n\n      const ext = cleanPath.substring(cleanPath.lastIndexOf('.')).toLowerCase();\n      const mime = FONT_EXTENSION_MIME[ext];\n      if (!mime) {\n        throw new Error(\n          `Unsupported font file extension \"${ext}\". Supported: ${Object.keys(FONT_EXTENSION_MIME).join(', ')}.`,\n        );\n      }\n\n      fontRefs.push({ fullMatch, quote, path, cleanPath, mime });\n    }\n\n    offset = closeBrace + 1;\n    searchCss = searchCss.substring(offset);\n  }\n\n  if (fontRefs.length === 0) return css;\n\n  // Fetch fonts sequentially to enforce a running total size budget\n  const fetched: { ref: FontRef; dataUri: string }[] = [];\n  let totalBytes = 0;\n  for (const ref of fontRefs) {\n    const fontUrl = baseUrl + ref.cleanPath;","sourceCodeStart":564,"sourceCodeEnd":600,"githubUrl":"https://github.com/actualbudget/actual/blob/d4334cb6e6123f4d3bcea1ad6166608884c7e658/packages/desktop-client/src/style/customThemes.ts#L564-L600","documentation":"Error \"Unsupported font file extension \"${ext}\". Supported: ${Object.keys(FONT_EXTENSION_MIME).join(', ')}.\" thrown in actualbudget/actual.","triggerScenarios":"Thrown at packages/desktop-client/src/style/customThemes.ts:582 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"d4334cb6e6123f4d3bcea1ad6166608884c7e658","analyzedAt":"2026-08-29T01:02:11.213Z","schemaVersion":2},"datasetVersion":"2026-08-29T02:17:18.158Z"}