Buckets:
| 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) | |
| } | |
Xet Storage Details
- Size:
- 2.19 kB
- Xet hash:
- 9ad5022d2afeac5291d52895bc83c6bb8103ce0ae5576588aaff00aabf4fabcb
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.