{"version":3,"sources":["../src/data/browser-upload.ts"],"names":["_a"],"mappings":";;;AAIO,IAAM,uBAAN,MAAoD;AAAA,EACxC,IAAA;AAAA,EACA,UAAA;AAAA,EAGA,QAAA;AAAA,EAGT,GAAA;AAAA,EAER,WAAA,CACE,IACA,EAAA,UAAA,EACA,QACA,EAAA;AACA,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA;AACZ,IAAA,IAAA,CAAK,UAAa,GAAA,UAAA;AAClB,IAAA,IAAA,CAAK,QAAW,GAAA,QAAA;AAAA;AAClB,EAEA,MACE,CAAA,GAAA,EACA,EAAE,IAAA,EAC0B,EAAA;AAC5B,IAAM,MAAA,GAAA,GAAM,IAAI,cAAe,EAAA;AAC/B,IAAA,IAAA,CAAK,GAAM,GAAA,GAAA;AAEX,IAAO,OAAA,IAAI,OAA2B,CAAA,CAAC,OAAY,KAAA;AA/BvD,MAAA,IAAA,EAAA,EAAA,EAAA;AAgCM,MAAI,GAAA,CAAA,MAAA,CAAO,UAAa,GAAA,CAAC,GAAQ,KAAA;AAhCvC,QAAAA,IAAAA,GAAAA;AAiCQ,QAAA,IAAI,IAAI,gBAAkB,EAAA;AACxB,UAAAA,CAAAA,GAAAA,GAAA,KAAK,UAAL,KAAA,IAAA,GAAA,MAAA,GAAAA,IAAA,IAAkB,CAAA,IAAA,EAAA,GAAA,CAAI,QAAQ,GAAI,CAAA,KAAA,CAAA;AAAA;AACpC,OACF;AAEA,MAAI,GAAA,CAAA,IAAA,CAAK,MAAQ,EAAA,GAAA,EAAK,IAAI,CAAA;AAE1B,MAAI,IAAA,CAAA,EAAA,GAAA,IAAA,CAAK,QAAL,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,QAAU,EAAA;AAC3B,QAAI,GAAA,CAAA,gBAAA;AAAA,UACF,qBAAA;AAAA,UACA,wBAAA,GAA2B,IAAK,CAAA,QAAA,CAAS,QAAW,GAAA;AAAA,SACtD;AAAA;AAGF,MAAA,IAAI,6BAAM,KAAO,EAAA;AACf,QAAA,GAAA,CAAI,gBAAiB,CAAA,eAAA,EAAiB,QAAW,GAAA,IAAA,CAAK,KAAK,CAAA;AAAA;AAG7D,MAAI,IAAA,CAAA,EAAA,GAAA,IAAA,CAAK,QAAL,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,QAAU,EAAA;AAC3B,QAAA,GAAA,CAAI,gBAAiB,CAAA,cAAA,EAAgB,IAAK,CAAA,QAAA,CAAS,QAAQ,CAAA;AAAA;AAG7D,MAAI,GAAA,CAAA,IAAA,CAAK,KAAK,IAAI,CAAA;AAElB,MAAA,GAAA,CAAI,SAAS,WAAY;AACvB,QAAI,IAAA,GAAA,CAAI,UAAU,GAAK,EAAA;AACrB,UAAQ,OAAA,CAAA;AAAA,YACN,KAAO,EAAA,IAAA;AAAA,YACP,IAAA,EAAM,IAAI,UAAW,CAAA,GAAA,CAAI,cAAc,EAAE,IAAA,EAAM,GAAI,CAAA,MAAA,EAAQ;AAAA,WAC5D,CAAA;AAAA,SACI,MAAA;AACL,UAAA,OAAA,CAAQ,EAAE,KAAO,EAAA,KAAA,EAAO,IAAM,EAAA,GAAA,CAAI,UAAU,CAAA;AAAA;AAC9C,OACF;AAEA,MAAA,GAAA,CAAI,UAAU,WAAY;AACxB,QAAQ,OAAA,CAAA;AAAA,UACN,KAAO,EAAA,IAAA;AAAA,UACP,IAAA,EAAM,IAAI,UAAA,CAAW,8CAA8C;AAAA,SACpE,CAAA;AAAA,OACH;AAAA,KACD,CAAA;AAAA;AACH,EAEA,KAAc,GAAA;AA7EhB,IAAA,IAAA,EAAA;AA8EI,IAAA,CAAA,EAAA,GAAA,IAAA,CAAK,QAAL,IAAU,GAAA,MAAA,GAAA,EAAA,CAAA,KAAA,EAAA;AAAA;AAEd","file":"browser.mjs","sourcesContent":["import { CodexError } from \"../errors/errors\";\nimport type { SafeValue } from \"../values/values\";\nimport type { UploadStategy, UploadStategyOptions } from \"./types\";\n\nexport class BrowserUploadStategy implements UploadStategy {\n  private readonly file: Document | XMLHttpRequestBodyInit;\n  private readonly onProgress:\n    | ((loaded: number, total: number) => void)\n    | undefined;\n  private readonly metadata:\n    | { filename?: string; mimetype?: string }\n    | undefined;\n  private xhr: XMLHttpRequest | undefined;\n\n  constructor(\n    file: Document | XMLHttpRequestBodyInit,\n    onProgress?: (loaded: number, total: number) => void,\n    metadata?: { filename?: string; mimetype?: string }\n  ) {\n    this.file = file;\n    this.onProgress = onProgress;\n    this.metadata = metadata;\n  }\n\n  upload(\n    url: string,\n    { auth }: UploadStategyOptions\n  ): Promise<SafeValue<string>> {\n    const xhr = new XMLHttpRequest();\n    this.xhr = xhr;\n\n    return new Promise<SafeValue<string>>((resolve) => {\n      xhr.upload.onprogress = (evt) => {\n        if (evt.lengthComputable) {\n          this.onProgress?.(evt.loaded, evt.total);\n        }\n      };\n\n      xhr.open(\"POST\", url, true);\n\n      if (this.metadata?.filename) {\n        xhr.setRequestHeader(\n          \"Content-Disposition\",\n          'attachment; filename=\"' + this.metadata.filename + '\"'\n        );\n      }\n\n      if (auth?.basic) {\n        xhr.setRequestHeader(\"Authorization\", \"Basic \" + auth.basic);\n      }\n\n      if (this.metadata?.mimetype) {\n        xhr.setRequestHeader(\"Content-Type\", this.metadata.mimetype);\n      }\n\n      xhr.send(this.file);\n\n      xhr.onload = function () {\n        if (xhr.status != 200) {\n          resolve({\n            error: true,\n            data: new CodexError(xhr.responseText, { code: xhr.status }),\n          });\n        } else {\n          resolve({ error: false, data: xhr.response });\n        }\n      };\n\n      xhr.onerror = function () {\n        resolve({\n          error: true,\n          data: new CodexError(\"Something went wrong during the file upload.\"),\n        });\n      };\n    });\n  }\n\n  abort(): void {\n    this.xhr?.abort();\n  }\n}\n"]}