{"record":{"id":"3a35484a4eda57a8","repo":"toeverything/AFFiNE","slug":"electron-preview-handler-string-name-is-unav","errorCode":null,"errorMessage":"Electron preview handler \"${String(name)}\" is unavailable.","messagePattern":"Electron preview handler \"(.+?)\" is unavailable\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/frontend/core/src/modules/code-block-preview-renderer/platform-backend.desktop.ts","lineNumber":31,"sourceCode":"  ) => Promise<PreviewRenderResultMap['typst']>;\n};\n\ntype DesktopPreviewApis = {\n  preview?: DesktopPreviewHandlers;\n};\n\nfunction getDesktopPreviewHandlers() {\n  const previewApis = apis as unknown as DesktopPreviewApis;\n  return previewApis.preview ?? null;\n}\n\nfunction getRequiredDesktopHandler<Name extends keyof DesktopPreviewHandlers>(\n  name: Name\n): NonNullable<DesktopPreviewHandlers[Name]> {\n  const handlers = getDesktopPreviewHandlers();\n  const handler = handlers?.[name];\n  if (!handler) {\n    throw new Error(\n      `Electron preview handler \"${String(name)}\" is unavailable.`\n    );\n  }\n  return handler as NonNullable<DesktopPreviewHandlers[Name]>;\n}\n\nexport async function renderMermaidSvgBackend(\n  request: PreviewRenderRequestMap['mermaid']\n): Promise<PreviewRenderResultMap['mermaid']> {\n  if (!isMermaidWasmNativeRendererEnabled()) {\n    return renderClassicMermaidSvg(request);\n  }\n\n  return getRequiredDesktopHandler('renderMermaidSvg')(request);\n}\n\nexport async function renderTypstSvgBackend(\n  request: PreviewRenderRequestMap['typst']","sourceCodeStart":13,"sourceCodeEnd":49,"githubUrl":"https://github.com/toeverything/AFFiNE/blob/b4c8548c09da21b2898443559a5b846f0ccf5dd8/packages/frontend/core/src/modules/code-block-preview-renderer/platform-backend.desktop.ts#L13-L49","documentation":"getRequiredDesktopHandler throws when the Electron preload API exposes no preview handlers object or lacks the requested handler (e.g. mermaid/typst), meaning the desktop bridge is missing or outdated relative to the renderer's expectations.","triggerScenarios":"Thrown when a code block preview render request (mermaid or typst) is executed in the Electron desktop app but the corresponding handler is missing from the exposed preview APIs on the desktop bridge.","commonSituations":"Occurs in the desktop client when the preload/IPC preview API is not injected or the app version lacks the requested handler; check that the desktop bridge exposes preview handlers and that app and frontend versions match.","solutions":["Ensure the Electron preview handler is registered before rendering.","Update the desktop app if the handler is missing in this version."],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"b4c8548c09da21b2898443559a5b846f0ccf5dd8","analyzedAt":"2026-08-18T21:16:52.546Z","contentChangedAt":"2026-08-18T21:16:52.546Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}