Skip to content

Commit 4d3da79

Browse files
committed
fix(files): replace instanceof Error checks with toError() and fix skeleton tokens
- Use toError() from @sim/utils/errors across all catch blocks in file-viewer.tsx, preview-panel.tsx, and route.ts instead of the prohibited `err instanceof Error ? err.message : fallback` pattern - Fix loading skeleton in files.tsx: bg-white → bg-[var(--surface-2)] and shadow-[var(--shadow-medium)] → shadow-medium
1 parent 3250264 commit 4d3da79

4 files changed

Lines changed: 14 additions & 11 deletions

File tree

apps/sim/app/api/workspaces/[id]/files/[fileId]/content/route.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { AuditAction, AuditResourceType, recordAudit } from '@sim/audit'
22
import { createLogger } from '@sim/logger'
3+
import { toError } from '@sim/utils/errors'
34
import { type NextRequest, NextResponse } from 'next/server'
45
import { getSession } from '@/lib/auth'
56
import { withRouteHandler } from '@/lib/core/utils/with-route-handler'
@@ -80,7 +81,7 @@ export const PUT = withRouteHandler(
8081
file: updatedFile,
8182
})
8283
} catch (error) {
83-
const errorMessage = error instanceof Error ? error.message : 'Failed to update file content'
84+
const errorMessage = toError(error).message || 'Failed to update file content'
8485
const isNotFound = errorMessage.includes('File not found')
8586
const isQuotaExceeded = errorMessage.includes('Storage limit exceeded')
8687
const status = isNotFound ? 404 : isQuotaExceeded ? 402 : 500

apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/file-viewer.tsx

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import { memo, useCallback, useEffect, useMemo, useReducer, useRef, useState } from 'react'
44
import type { OnMount } from '@monaco-editor/react'
55
import { createLogger } from '@sim/logger'
6+
import { toError } from '@sim/utils/errors'
67
import { ZoomIn, ZoomOut } from 'lucide-react'
78
import dynamic from 'next/dynamic'
89
import { Button, Skeleton } from '@/components/emcn'
@@ -1024,7 +1025,7 @@ const IframePreview = memo(function IframePreview({
10241025
setStreamingBuffer(buf)
10251026
} catch (err) {
10261027
if (!cancelled && !(err instanceof DOMException && err.name === 'AbortError')) {
1027-
const msg = err instanceof Error ? err.message : 'Failed to render PDF'
1028+
const msg = toError(err).message || 'Failed to render PDF'
10281029
if (streamingBufferRef.current || shouldSuppressStreamingDocumentError(msg)) {
10291030
logger.info('Suppressing transient PDF streaming preview error', { error: msg })
10301031
} else {
@@ -1473,7 +1474,7 @@ const DocxPreview = memo(function DocxPreview({
14731474
}
14741475
} catch (err) {
14751476
if (!cancelled) {
1476-
const msg = err instanceof Error ? err.message : 'Failed to render document'
1477+
const msg = toError(err).message || 'Failed to render document'
14771478
logger.error('DOCX render failed', { error: msg })
14781479
setRenderError(msg)
14791480
}
@@ -1545,7 +1546,7 @@ const DocxPreview = memo(function DocxPreview({
15451546
containerRef.current.innerHTML = previousHtml
15461547
setHasRenderedPreview(true)
15471548
}
1548-
const msg = err instanceof Error ? err.message : 'Failed to render document'
1549+
const msg = toError(err).message || 'Failed to render document'
15491550
if (previousHtml || shouldSuppressStreamingDocumentError(msg)) {
15501551
logger.info('Suppressing transient DOCX streaming preview error', { error: msg })
15511552
} else {
@@ -1749,7 +1750,7 @@ function PptxPreview({
17491750
)
17501751
} catch (err) {
17511752
if (!cancelled && !(err instanceof DOMException && err.name === 'AbortError')) {
1752-
const msg = err instanceof Error ? err.message : 'Failed to render presentation'
1753+
const msg = toError(err).message || 'Failed to render presentation'
17531754
if (shouldSuppressStreamingPptxError(msg)) {
17541755
logger.info('Suppressing transient PPTX streaming preview error', { error: msg })
17551756
} else {
@@ -1801,7 +1802,7 @@ function PptxPreview({
18011802
}
18021803
} catch (err) {
18031804
if (!cancelled) {
1804-
const msg = err instanceof Error ? err.message : 'Failed to render presentation'
1805+
const msg = toError(err).message || 'Failed to render presentation'
18051806
logger.error('PPTX render failed', { error: msg })
18061807
setRenderError(msg)
18071808
}
@@ -1911,7 +1912,7 @@ const XlsxPreview = memo(function XlsxPreview({
19111912
}
19121913
} catch (err) {
19131914
if (!cancelled) {
1914-
const msg = err instanceof Error ? err.message : 'Failed to parse spreadsheet'
1915+
const msg = toError(err).message || 'Failed to parse spreadsheet'
19151916
logger.error('XLSX parse failed', { error: msg })
19161917
setRenderError(msg)
19171918
}
@@ -1949,7 +1950,7 @@ const XlsxPreview = memo(function XlsxPreview({
19491950
}
19501951
} catch (err) {
19511952
if (!cancelled) {
1952-
const msg = err instanceof Error ? err.message : 'Failed to parse sheet'
1953+
const msg = toError(err).message || 'Failed to parse sheet'
19531954
logger.error('XLSX sheet parse failed', { error: msg })
19541955
setRenderError(msg)
19551956
}
@@ -2042,7 +2043,7 @@ const XlsxPreview = memo(function XlsxPreview({
20422043
setIsDirty(false)
20432044
onSaveStatusChangeRef.current?.('saved')
20442045
} catch (err) {
2045-
logger.error('XLSX save failed', { error: err instanceof Error ? err.message : String(err) })
2046+
logger.error('XLSX save failed', { error: toError(err).message })
20462047
onSaveStatusChangeRef.current?.('error')
20472048
} finally {
20482049
isSavingRef.current = false

apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/preview-panel.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import remarkBreaks from 'remark-breaks'
88
import remarkGfm from 'remark-gfm'
99
import { Streamdown } from 'streamdown'
1010
import 'streamdown/styles.css'
11+
import { toError } from '@sim/utils/errors'
1112
import { generateShortId } from '@sim/utils/id'
1213
import { Checkbox, CopyCodeButton, highlight, languages } from '@/components/emcn'
1314
import '@/components/emcn/components/code/code.css'
@@ -270,7 +271,7 @@ const MermaidDiagram = memo(function MermaidDiagram({ definition }: { definition
270271
}
271272
} catch (err) {
272273
if (!cancelled) {
273-
setError(err instanceof Error ? err.message : 'Failed to render diagram')
274+
setError(toError(err).message || 'Failed to render diagram')
274275
setSvg(null)
275276
}
276277
}

apps/sim/app/workspace/[workspaceId]/files/files.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1041,7 +1041,7 @@ export function Files() {
10411041
{[0, 1].map((i) => (
10421042
<div
10431043
key={i}
1044-
className='w-full max-w-[640px] shrink-0 rounded-md bg-white p-8 shadow-[var(--shadow-medium)]'
1044+
className='w-full max-w-[640px] shrink-0 rounded-md bg-[var(--surface-2)] p-8 shadow-medium'
10451045
style={{ aspectRatio: '1 / 1.414' }}
10461046
>
10471047
<div className='flex flex-col gap-3'>

0 commit comments

Comments
 (0)