(root: string, deleted: DeletedAsset)
| 3333 | } |
| 3334 | |
| 3335 | export async function restoreDeletedAsset(root: string, deleted: DeletedAsset): Promise<AssetMeta> { |
| 3336 | const targetRel = cleanDeletedAssetPath(deleted.path) |
| 3337 | const name = cleanAssetFilename(deleted.name) |
| 3338 | const undoToken = cleanDeletedAssetToken(deleted.undoToken) |
| 3339 | const trashDir = resolveSafe(root, `${INTERNAL_VAULT_DIR}/${DELETED_ASSETS_DIR}/${undoToken}`) |
| 3340 | const sourceAbs = path.join(trashDir, name) |
| 3341 | const targetAbs = resolveSafe(root, targetRel) |
| 3342 | const targetDir = path.dirname(targetAbs) |
| 3343 | await fs.mkdir(targetDir, { recursive: true }) |
| 3344 | const finalName = await uniqueFilename(targetDir, path.basename(targetAbs)) |
| 3345 | const finalAbs = path.join(targetDir, finalName) |
| 3346 | await fs.rename(sourceAbs, finalAbs) |
| 3347 | await fs.rm(trashDir, { recursive: true, force: true }) |
| 3348 | return await assetMetaForPath(root, finalAbs) |
| 3349 | } |
| 3350 | |
| 3351 | /* ---------- Folder operations ---------------------------------------- */ |
| 3352 |
no test coverage detected