import { emptyResponse } from "@/worker/dav/http"; import { maxDavDepthInfinityNodes } from "@/worker/dav/limits"; import type { SubjectRow } from "@/worker/db/d1/schema"; import type { AppContext } from "@/worker/types"; import { enqueueGc } from "@/worker/webdav/gc"; import { fileDavObject, resultError, type NormalizedFilesRequestPath } from "@/worker/webdav/object"; import { readFileDavWriteRequest, validateDeleteDepth } from "@/worker/webdav/request"; export async function handleDelete(c: AppContext, subject: SubjectRow, path: NormalizedFilesRequestPath) { const depthError = validateDeleteDepth(c.req.header("depth") ?? null); if (depthError) return depthError; const writeRequest = readFileDavWriteRequest(c.req.raw); if (writeRequest instanceof Response) return writeRequest; const result = await fileDavObject(c.env, subject.storageId).delete({ subjectId: subject.id, storageId: subject.storageId, path: path.path, ...writeRequest, maxNodes: maxDavDepthInfinityNodes(c.env), }); if (!result.ok) return resultError(result); await enqueueGc(c, subject, result.blobGc); return emptyResponse(204); }