Download packages/session-ui/src/components/apply-patch-file.ts from SaylorTwift/opencode: direct link, hf CLI and curl.
- Browser
- Download file 2.19 kB
-
https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/session-ui/src/components/apply-patch-file.ts
- Command line
-
hf download hf://SaylorTwift/opencode/packages/session-ui/src/components/apply-patch-file.ts
-
curl -L -o apply-patch-file.ts https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/session-ui/src/components/apply-patch-file.ts
2.19 kB
| import { normalize, type ViewDiff } from "./session-diff" | |
| type Kind = "add" | "update" | "delete" | "move" | |
| type Raw = { | |
| filePath?: string | |
| relativePath?: string | |
| type?: Kind | |
| patch?: string | |
| diff?: string | |
| before?: string | |
| after?: string | |
| additions?: number | |
| deletions?: number | |
| movePath?: string | |
| } | |
| export type ApplyPatchFile = { | |
| filePath: string | |
| relativePath: string | |
| type: Kind | |
| additions: number | |
| deletions: number | |
| movePath?: string | |
| view: ViewDiff | |
| } | |
| function kind(value: unknown) { | |
| if (value === "add" || value === "update" || value === "delete" || value === "move") return value | |
| } | |
| function status(type: Kind): "added" | "deleted" | "modified" { | |
| if (type === "add") return "added" | |
| if (type === "delete") return "deleted" | |
| return "modified" | |
| } | |
| export function patchFile(raw: unknown): ApplyPatchFile | undefined { | |
| if (!raw || typeof raw !== "object") return | |
| const value = raw as Raw | |
| const type = kind(value.type) | |
| const filePath = typeof value.filePath === "string" ? value.filePath : undefined | |
| const relativePath = typeof value.relativePath === "string" ? value.relativePath : filePath | |
| const patch = typeof value.patch === "string" ? value.patch : typeof value.diff === "string" ? value.diff : undefined | |
| const before = typeof value.before === "string" ? value.before : undefined | |
| const after = typeof value.after === "string" ? value.after : undefined | |
| if (!type || !filePath || !relativePath) return | |
| if (!patch && before === undefined && after === undefined) return | |
| const additions = typeof value.additions === "number" ? value.additions : 0 | |
| const deletions = typeof value.deletions === "number" ? value.deletions : 0 | |
| const movePath = typeof value.movePath === "string" ? value.movePath : undefined | |
| return { | |
| filePath, | |
| relativePath, | |
| type, | |
| additions, | |
| deletions, | |
| movePath, | |
| view: normalize({ | |
| file: relativePath, | |
| patch, | |
| before, | |
| after, | |
| additions, | |
| deletions, | |
| status: status(type), | |
| }), | |
| } | |
| } | |
| export function patchFiles(raw: unknown) { | |
| if (!Array.isArray(raw)) return [] | |
| return raw.map(patchFile).filter((file): file is ApplyPatchFile => !!file) | |
| } | |