{"version":3,"file":"deleteResource.mjs","names":[],"sources":["../../../src/requester/requests/deleteResource.ts"],"sourcesContent":["import { namedNode } from \"@ldo/rdf-utils\";\nimport { guaranteeFetch } from \"../../util/guaranteeFetch\";\nimport { deleteResourceRdfFromContainer } from \"../../util/rdfUtils\";\nimport type { Resource } from \"@ldo/connected\";\nimport { UnexpectedResourceError } from \"@ldo/connected\";\nimport type { HttpErrorResultType } from \"../results/error/HttpErrorResult\";\nimport { UnexpectedHttpError } from \"../results/error/HttpErrorResult\";\nimport { HttpErrorResult } from \"../results/error/HttpErrorResult\";\nimport { DeleteSuccess } from \"../results/success/DeleteSuccess\";\nimport type { DatasetRequestOptions } from \"./requestOptions\";\nimport type { IBulkEditableDataset } from \"@ldo/subscribable-dataset\";\nimport type { Quad } from \"@rdfjs/types\";\nimport type { SolidContainer } from \"../../resources/SolidContainer\";\nimport type { SolidLeaf } from \"../../resources/SolidLeaf\";\n\n/**\n * All possible return values for deleteResource\n */\nexport type DeleteResult<ResourceType extends Resource> =\n  | DeleteSuccess<ResourceType>\n  | DeleteResultError<ResourceType>;\n\n/**\n * All possible errors that can be returned by deleteResource\n */\nexport type DeleteResultError<ResourceType extends Resource> =\n  | HttpErrorResultType<ResourceType>\n  | UnexpectedResourceError<ResourceType>;\n\n/**\n * @internal\n * Deletes a resource on a Pod at a given URL.\n *\n * @param uri - The URI for the resource that should be deleted\n * @param options - Options to provide a fetch function and a local dataset to\n * update.\n * @returns a DeleteResult\n */\nexport async function deleteResource(\n  resource: SolidContainer,\n  options?: DatasetRequestOptions,\n): Promise<DeleteResult<SolidContainer>>;\nexport async function deleteResource(\n  resource: SolidLeaf,\n  options?: DatasetRequestOptions,\n): Promise<DeleteResult<SolidLeaf>>;\nexport async function deleteResource(\n  resource: SolidContainer | SolidLeaf,\n  options?: DatasetRequestOptions,\n): Promise<DeleteResult<SolidContainer | SolidLeaf>>;\nexport async function deleteResource(\n  resource: SolidContainer | SolidLeaf,\n  options?: DatasetRequestOptions,\n): Promise<DeleteResult<SolidContainer | SolidLeaf>> {\n  try {\n    const fetch = guaranteeFetch(options?.fetch);\n    const response = await fetch(resource.uri, {\n      method: \"delete\",\n    });\n    const errorResult = HttpErrorResult.checkResponse(resource, response);\n    if (errorResult) return errorResult;\n\n    // Specifically check for a 205. Annoyingly, the server will return 200 even\n    // if it hasn't been deleted when you're unauthenticated. 404 happens when\n    // the document never existed\n    if (response.status === 205 || response.status === 404) {\n      if (options?.dataset)\n        updateDatasetOnSuccessfulDelete(resource.uri, options.dataset);\n      return new DeleteSuccess(resource, response.status === 205);\n    }\n    return new UnexpectedHttpError(resource, response);\n  } catch (err) {\n    return UnexpectedResourceError.fromThrown(resource, err);\n  }\n}\n\n/**\n * Assuming a successful delete has just been performed, this function updates\n * datastores to reflect that.\n *\n * @param uri - The uri of the resouce that was removed\n * @param dataset - The dataset that should be updated\n */\nexport function updateDatasetOnSuccessfulDelete(\n  uri: string,\n  dataset: IBulkEditableDataset<Quad>,\n): void {\n  dataset.deleteMatches(undefined, undefined, undefined, namedNode(uri));\n  deleteResourceRdfFromContainer(uri, dataset);\n}\n"],"mappings":";;;;;;;AAkDA,eAAsB,eACpB,UACA,SACmD;AACnD,KAAI;EAEF,MAAM,WAAW,MADH,eAAe,SAAS,MACV,CAAC,SAAS,KAAK,EACzC,QAAQ,UACT,CAAC;EACF,MAAM,cAAc,gBAAgB,cAAc,UAAU,SAAS;AACrE,MAAI,YAAa,QAAO;AAKxB,MAAI,SAAS,WAAW,OAAO,SAAS,WAAW,KAAK;AACtD,OAAI,SAAS,QACX,iCAAgC,SAAS,KAAK,QAAQ,QAAQ;AAChE,UAAO,IAAI,cAAc,UAAU,SAAS,WAAW,IAAI;;AAE7D,SAAO,IAAI,oBAAoB,UAAU,SAAS;UAC3C,KAAK;AACZ,SAAO,wBAAwB,WAAW,UAAU,IAAI;;;;;;;;;;AAW5D,SAAgB,gCACd,KACA,SACM;AACN,SAAQ,cAAc,KAAA,GAAW,KAAA,GAAW,KAAA,GAAW,UAAU,IAAI,CAAC;AACtE,gCAA+B,KAAK,QAAQ"}