From 02df1e59d8158c424b9eaed87671a45c3c829858 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Thu, 12 Jun 2025 20:29:55 -0500 Subject: [PATCH] feat: code diff --- bun.lockb | Bin 322512 -> 322848 bytes packages/website-ue/package.json | 1 + .../src/pages/internal/differ/_index.tsx | 174 +++++++++++++----- 3 files changed, 124 insertions(+), 51 deletions(-) diff --git a/bun.lockb b/bun.lockb index 85b4fad8f7db30fdd94c7e1b92d328f9fe690cbf..04430777d9854dcc1b2e4a078e91594a0edf6bb8 100644 GIT binary patch delta 54409 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 diff --git a/packages/website-ue/package.json b/packages/website-ue/package.json index d1dd4b8f1..d93c754b9 100644 --- a/packages/website-ue/package.json +++ b/packages/website-ue/package.json @@ -29,6 +29,7 @@ "@types/semver": "^7.7.0", "@types/three": "^0.160.0", "astro": "^5.8.0", + "diff": "^8.0.2", "ffi-napi": "^4.0.3", "fuzzysort": "^3.1.0", "immer": "^10.1.1", diff --git a/packages/website-ue/src/pages/internal/differ/_index.tsx b/packages/website-ue/src/pages/internal/differ/_index.tsx index d28f4ef61..a015d7ce8 100644 --- a/packages/website-ue/src/pages/internal/differ/_index.tsx +++ b/packages/website-ue/src/pages/internal/differ/_index.tsx @@ -1,7 +1,7 @@ import type { MessageFns } from '@protos/blitz_static_profile_avatar_component'; import type { Any } from '@protos/google/protobuf/any'; import * as protos from '@protos/index'; -import { CommitIcon, ReaderIcon } from '@radix-ui/react-icons'; +import { ArrowBottomRightIcon, CommitIcon } from '@radix-ui/react-icons'; import { Badge, Box, @@ -12,6 +12,7 @@ import { Spinner, Text, } from '@radix-ui/themes'; +import { diffLines, type ChangeObject } from 'diff'; import { MetadataAccessor } from 'packages/core/src'; import type { CatalogItemAccessor } from 'packages/core/src/blitz/catalogItemAccessor'; import { PageWrapper } from 'packages/website-ue/src/components/PageWrapper'; @@ -25,6 +26,7 @@ export function Page({ servers }: { servers: DiscoveryServer[] }) { const [serverB, setSeverB] = useState(undefined); const [loading, setLoading] = useState(false); const [diff, setDiff] = useState(null); + const [isError, setIsError] = useState(false); return ( @@ -52,12 +54,18 @@ export function Page({ servers }: { servers: DiscoveryServer[] }) { size="3" disabled={!serverA || !serverB} onClick={async () => { + setDiff(null); setLoading(true); - const diff = await diffServers(serverA!.addr, serverB!.addr); + try { + const diff = await diffServers(serverA!.addr, serverB!.addr); + setDiff(diff); + } catch (error) { + console.error(error); + setIsError(true); + } setLoading(false); - setDiff(diff); }} > {loading ? : } @@ -83,12 +91,25 @@ export function Page({ servers }: { servers: DiscoveryServer[] }) { + {isError && ( + + There was an error generating the diff, check console + + )} {diff !== null && ( - entry.type !== CatalogItemDiffType.Unmodified, + <> + {diff.length === 0 ? ( + + Branches are identical + + ) : ( + entry.type !== CatalogItemDiffType.Unmodified, + )} + /> )} - /> + )} ); @@ -97,43 +118,33 @@ export function Page({ servers }: { servers: DiscoveryServer[] }) { function DiffDisplay({ diff }: { diff: CatalogDiffEntry[] }) { return ( - {diff.length === 0 && ( - - Branches are identical - - )} - {diff.map((entry) => ( - + {diffEmojis[entry.type]} {entry.name} - + - - {(entry.type === CatalogItemDiffType.Removed || - entry.type === CatalogItemDiffType.Unmodified) && ( - - )} - {entry.type === CatalogItemDiffType.Modified && ( - - )} + {(entry.type === CatalogItemDiffType.Added || entry.type === CatalogItemDiffType.Unmodified) && ( - + )} {entry.type === CatalogItemDiffType.Modified && ( - + <> + + + )} @@ -142,71 +153,132 @@ function DiffDisplay({ diff }: { diff: CatalogDiffEntry[] }) { ); } -function ItemDisplay({ item }: { item: CatalogItemAccessor }) { +function ItemDisplay({ + item, + full, + diff, +}: { + item: CatalogItemAccessor; + full?: boolean; + diff?: CatalogItemAccessor; +}) { const entries = Object.entries(item.components); - protos; - return ( {entries.length === 0 && No components} {entries.map(([key, value]) => ( - + ))} ); } -function ComponentDisplay({ name, value }: { name: string; value: Any }) { - const [code, setCode] = useState(null); +function ComponentDisplay({ + name, + value, + diff, +}: { + name: string; + value: Any; + diff?: Any; +}) { + const [code, setCode] = useState[] | null>( + null, + ); return ( - - + + { + if (code !== null) return setCode(null); + const messageName = value.type_url .slice(2) .split('.') .slice(1) .join('.'); - const json = ( - protos[messageName as keyof typeof protos] as MessageFns - ).decode(value.value); + const Message = protos[ + messageName as keyof typeof protos + ] as MessageFns; + const json = Message.decode(value.value); - setCode(JSON.stringify(json, null, 2)); + if (diff === undefined) { + setCode(JSON.stringify(json, null, 2)); + } else { + const b = JSON.stringify(json, null, 2); + const a = JSON.stringify(Message.decode(diff.value), null, 2); + + setCode(diffLines(a, b)); + } }} > - + - + {name} - {value.value.length.toLocaleString()}B + + {value.value.length.toLocaleString()}B + {code !== null && ( - - {code} - + {typeof code === 'string' ? ( + + ) : ( + code.map((line) => { + const modified = line.added || line.removed; + + return ( + + ); + }) + )} + )} );