Spaces:
Build error
Build error
| import { downloadJSON } from "./download-json"; | |
| function isSaveFilePickerSupported(): boolean { | |
| return typeof window !== "undefined" && "showSaveFilePicker" in window; | |
| } | |
| export async function downloadTrajectory( | |
| conversationId: string, | |
| data: unknown[] | null, | |
| ): Promise<void> { | |
| // Ensure data is an object for downloadJSON | |
| const jsonData = data || {}; | |
| if (!isSaveFilePickerSupported()) { | |
| // Fallback for browsers that don't support File System Access API (Safari, Firefox) | |
| // This method dumps the JSON data right into the download folder | |
| downloadJSON(jsonData as object, `trajectory-${conversationId}.json`); | |
| return; | |
| } | |
| try { | |
| const options: SaveFilePickerOptions = { | |
| suggestedName: `trajectory-${conversationId}.json`, | |
| types: [ | |
| { | |
| description: "JSON File", // This is a file type description, not user-facing text | |
| accept: { | |
| "application/json": [".json"], | |
| }, | |
| }, | |
| ], | |
| }; | |
| const fileHandle = await window.showSaveFilePicker(options); | |
| const writable = await fileHandle.createWritable(); | |
| await writable.write(JSON.stringify(data, null, 2)); | |
| await writable.close(); | |
| } catch (error) { | |
| // If an error occurs, fall back to the downloadJSON method | |
| if (error instanceof Error && error.name !== "AbortError") { | |
| downloadJSON(jsonData as object, `trajectory-${conversationId}.json`); | |
| } | |
| } | |
| } | |