{"version":3,"file":"file_form.js","sources":["../../../frontend/src/auto_init_file_forms.ts","../../../frontend/src/accepted_file_types.ts","../../../frontend/src/drop_area.ts","../../../frontend/src/util.ts","../../../frontend/src/render_upload_file.ts","../../../frontend/src/uploads/base_upload.ts","../../../frontend/src/uploads/s3_utils.ts","../../../frontend/src/uploads/s3_upload.ts","../../../frontend/node_modules/tus-js-client/lib/error.js","../../../frontend/node_modules/tus-js-client/lib/logger.js","../../../frontend/node_modules/tus-js-client/lib/noopUrlStorage.js","../../../frontend/node_modules/js-base64/base64.mjs","../../../frontend/node_modules/requires-port/index.js","../../../frontend/node_modules/querystringify/index.js","../../../frontend/node_modules/url-parse/index.js","../../../frontend/node_modules/tus-js-client/lib/uuid.js","../../../frontend/node_modules/tus-js-client/lib/upload.js","../../../frontend/node_modules/tus-js-client/lib/browser/isReactNative.js","../../../frontend/node_modules/tus-js-client/lib/browser/uriToBlob.js","../../../frontend/node_modules/tus-js-client/lib/browser/sources/isCordova.js","../../../frontend/node_modules/tus-js-client/lib/browser/sources/readAsByteArray.js","../../../frontend/node_modules/tus-js-client/lib/browser/sources/FileSource.js","../../../frontend/node_modules/tus-js-client/lib/browser/sources/StreamSource.js","../../../frontend/node_modules/tus-js-client/lib/browser/fileReader.js","../../../frontend/node_modules/tus-js-client/lib/browser/fileSignature.js","../../../frontend/node_modules/tus-js-client/lib/browser/httpStack.js","../../../frontend/node_modules/tus-js-client/lib/browser/urlStorage.js","../../../frontend/node_modules/tus-js-client/lib/browser/index.js","../../../frontend/src/uploads/tus_utils.ts","../../../frontend/src/uploads/tus_upload.ts","../../../frontend/src/uploads/uploaded_file.ts","../../../frontend/src/file_field.ts","../../../frontend/src/init_upload_fields.ts","../../../frontend/src/init_form_set.ts","../../../frontend/src/file_form.ts"],"sourcesContent":["const findForm = (element: Element): HTMLElement | null => {\n  const parent = element.parentElement;\n\n  if (!parent) {\n    return null;\n  }\n\n  if (parent.tagName === \"FORM\") {\n    return parent;\n  }\n\n  return findForm(parent);\n};\n\nconst unique = <T>(values: T[]): T[] => Array.from(new Set(values));\n\nconst autoInitFileForms = (): void => {\n  const forms = unique(\n    Array.from(document.querySelectorAll(\".dff-uploader\")).map(findForm)\n  );\n  for (const form of forms) {\n    if (form) {\n      window.initUploadFields(form);\n    }\n  }\n};\n\nexport default autoInitFileForms;\n","const parseInputAccept = (inputAccept: string): [string[], string[]] => {\n  const extensions: string[] = [];\n  const mimeTypes: string[] = [];\n\n  const fileTypes = inputAccept\n    .split(\",\")\n    .map(fileType => fileType.trim().toLowerCase())\n    .filter(Boolean);\n\n  for (const fileType of fileTypes) {\n    if (fileType.startsWith(\".\")) {\n      extensions.push(fileType);\n    } else {\n      mimeTypes.push(fileType);\n    }\n  }\n\n  return [extensions, mimeTypes];\n};\n\n// Matches a mime type against a pattern from the accept attribute.\n// The pattern is a full mime type ('text/plain') or uses a wildcard for the\n// type or subtype ('image/*', '*/*').\nconst matchesMimeType = (mimeType: string, pattern: string): boolean => {\n  const [type, subtype] = mimeType.split(\"/\");\n  const [patternType, patternSubtype] = pattern.split(\"/\");\n\n  const matchesPart = (\n    part: string | undefined,\n    patternPart: string | undefined\n  ): boolean =>\n    patternPart === \"*\" || (part !== undefined && part === patternPart);\n\n  return matchesPart(type, patternType) && matchesPart(subtype, patternSubtype);\n};\n\nclass AcceptedFileTypes {\n  private extensions: string[];\n  private mimeTypes: string[];\n\n  constructor(inputAccept: string) {\n    const [extensions, mimeTypes] = parseInputAccept(inputAccept);\n\n    this.extensions = extensions;\n    this.mimeTypes = mimeTypes;\n  }\n\n  public isAccepted(file: File): boolean {\n    if (this.extensions.length === 0 && this.mimeTypes.length === 0) {\n      return true;\n    }\n    return (\n      this.isMimeTypeAccepted(file.type) ||\n      this.isExtensionAccepted(file.name)\n    );\n  }\n\n  private isExtensionAccepted(fileName: string): boolean {\n    const lowerCaseFileName = fileName.toLowerCase();\n\n    return this.extensions.some(extension =>\n      lowerCaseFileName.endsWith(extension)\n    );\n  }\n\n  private isMimeTypeAccepted(mimeType: string): boolean {\n    if (!mimeType) {\n      return false;\n    }\n\n    const lowerCaseMimeType = mimeType.toLowerCase();\n\n    return this.mimeTypes.some(pattern =>\n      matchesMimeType(lowerCaseMimeType, pattern)\n    );\n  }\n}\n\nexport default AcceptedFileTypes;\n","import type RenderUploadFile from \"./render_upload_file.ts\";\n\nimport AcceptedFileTypes from \"./accepted_file_types.ts\";\n\nconst getEntriesFromDirectory = async (\n  directoryEntry: FileSystemDirectoryEntry\n): Promise<FileSystemEntry[]> =>\n  new Promise((resolve, reject) => {\n    directoryEntry.createReader().readEntries(resolve, reject);\n  });\n\nconst getFileFromFileSystemFileEntry = async (\n  fileEntry: FileSystemFileEntry\n): Promise<File> =>\n  new Promise((resolve, reject) => {\n    fileEntry.file(resolve, reject);\n  });\n\nconst getFilesFromFileSystemEntries = async (\n  entries: FileSystemEntry[]\n): Promise<File[]> => {\n  const result: File[] = [];\n\n  for (const entry of entries) {\n    const filesFromEntry = await getFilesFromFileSystemEntry(entry);\n    result.push(...filesFromEntry);\n  }\n\n  return result;\n};\n\nconst getFilesFromFileSystemEntry = async (\n  entry: FileSystemEntry\n): Promise<File[]> => {\n  const result: File[] = [];\n\n  if (entry.isFile) {\n    const file = await getFileFromFileSystemFileEntry(\n      entry as FileSystemFileEntry\n    );\n    result.push(file);\n  } else if (entry.isDirectory) {\n    const entriesFromDirectory = await getEntriesFromDirectory(\n      entry as FileSystemDirectoryEntry\n    );\n    const files = await getFilesFromFileSystemEntries(entriesFromDirectory);\n    result.push(...files);\n  }\n\n  return result;\n};\n\nconst getFilesFromDataTransfer = async (\n  dataTransfer: DataTransfer\n): Promise<File[]> => {\n  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- items is missing in older browsers\n  if (dataTransfer.items) {\n    const files: File[] = [];\n\n    for (const item of dataTransfer.items) {\n      const fileSystemEntry = item.webkitGetAsEntry();\n      if (fileSystemEntry) {\n        const filesFromEntry = await getFilesFromFileSystemEntry(\n          fileSystemEntry\n        );\n        files.push(...filesFromEntry);\n      } else {\n        const file = item.getAsFile();\n\n        if (file) {\n          files.push(file);\n        }\n      }\n    }\n\n    return files;\n  } else {\n    // backwards compatibility\n    return [...dataTransfer.files];\n  }\n};\n\nclass DropArea {\n  acceptedFileTypes: AcceptedFileTypes;\n  container: Element;\n  onUploadFiles: (files: File[]) => Promise<void>;\n  renderer: RenderUploadFile;\n\n  constructor({\n    container,\n    inputAccept,\n    onUploadFiles,\n    renderer\n  }: {\n    container: Element;\n    inputAccept: string;\n    onUploadFiles: (files: File[]) => Promise<void>;\n    renderer: RenderUploadFile;\n  }) {\n    this.container = container;\n    this.onUploadFiles = onUploadFiles;\n    this.acceptedFileTypes = new AcceptedFileTypes(inputAccept);\n    this.renderer = renderer;\n\n    container.addEventListener(\"dragenter\", () => {\n      container.classList.add(\"dff-dropping\");\n    });\n    container.addEventListener(\"dragleave\", () => {\n      container.classList.remove(\"dff-dropping\");\n    });\n    container.addEventListener(\"dragover\", e => {\n      container.classList.add(\"dff-dropping\");\n      e.preventDefault();\n    });\n    container.addEventListener(\"drop\", this.onDrop);\n  }\n\n  onDrop = (e: Event): void => {\n    const dragEvent = e as DragEvent;\n    this.container.classList.remove(\"dff-dropping\");\n    dragEvent.preventDefault();\n    dragEvent.stopPropagation();\n\n    const uploadFiles = async (): Promise<void> => {\n      try {\n        if (dragEvent.dataTransfer) {\n          const files = await getFilesFromDataTransfer(dragEvent.dataTransfer);\n          const acceptedFiles: File[] = [];\n          const invalidFiles: File[] = [];\n\n          for (const file of files) {\n            if (this.acceptedFileTypes.isAccepted(file)) {\n              acceptedFiles.push(file);\n            } else {\n              invalidFiles.push(file);\n            }\n          }\n\n          this.renderer.setErrorInvalidFiles(invalidFiles);\n          void this.onUploadFiles(acceptedFiles);\n        }\n      } catch (error) {\n        console.error(error);\n      }\n    };\n\n    void uploadFiles();\n  };\n}\n\nexport default DropArea;\n","export const formatBytes = (bytes: number, decimals: number): string => {\n  if (bytes === 0) {\n    return \"0 Bytes\";\n  }\n\n  const k = 1024;\n  const dm = decimals <= 0 ? 0 : decimals || 2;\n  const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"];\n  const i = Math.floor(Math.log(bytes) / Math.log(k));\n  const n = Number.parseFloat((bytes / k ** i).toFixed(dm));\n  const size = sizes[i];\n\n  if (size == null) {\n    return \"\";\n  } else {\n    return `${n.toString()} ${size}`;\n  }\n};\n\nexport const getInputNameWithPrefix = (\n  fieldName: string,\n  prefix: null | string\n): string => (prefix ? `${prefix}-${fieldName}` : fieldName);\n\nconst getInputNameWithoutPrefix = (\n  fieldName: string,\n  prefix: null | string\n): string => (prefix ? fieldName.slice(prefix.length + 1) : fieldName);\n\nexport const findInput = (\n  form: Element,\n  fieldName: string,\n  prefix: null | string\n): HTMLInputElement | null => {\n  const inputNameWithPrefix = getInputNameWithPrefix(fieldName, prefix);\n  const input = form.querySelector(\n    `[name=\"${CSS.escape(inputNameWithPrefix)}\"]`\n  );\n\n  if (!input) {\n    return null;\n  }\n\n  return input as HTMLInputElement;\n};\n\nexport const getUploadsFieldName = (\n  fieldName: string,\n  prefix: null | string\n): string => `${getInputNameWithoutPrefix(fieldName, prefix)}-uploads`;\n\nexport const getInputValueForFormAndPrefix = (\n  form: Element,\n  fieldName: string,\n  prefix: null | string\n): string | undefined => findInput(form, fieldName, prefix)?.value;\n\nexport const getMetadataFieldName = (\n  fieldName: string,\n  prefix: null | string\n): string => `${getInputNameWithoutPrefix(fieldName, prefix)}-metadata`;\n","import { formatBytes } from \"./util.ts\";\n\nlet nextId = 0;\n\nconst createId = (prefix: string): string => {\n  nextId += 1;\n  return `${prefix}-${nextId.toString()}`;\n};\n\nclass RenderUploadFile {\n  public container: Element;\n\n  private clickableFilenames: boolean;\n  private errors: Element;\n  private input: HTMLInputElement;\n  // Whether this code set aria-invalid on the input, and not the server\n  private isInvalidSetHere = false;\n  private status: Element;\n  private translations: Record<string, string>;\n\n  constructor({\n    clickableFilenames = false,\n    input,\n    parent,\n    skipRequired,\n    translations\n  }: {\n    clickableFilenames?: boolean;\n    input: HTMLInputElement;\n    parent: Element;\n    skipRequired: boolean;\n    translations: Record<string, string>;\n  }) {\n    this.clickableFilenames = clickableFilenames;\n    this.container = this.createFilesContainer(parent);\n    this.labelFilesContainer(input);\n    this.errors = this.createErrorContainer(parent);\n    this.describeInputWithErrors(input);\n    this.status = this.createStatusContainer(parent);\n    this.input = input;\n    this.translations = translations;\n\n    if (skipRequired) {\n      this.input.required = false;\n    }\n  }\n\n  public addNewUpload(filename: string, uploadIndex: number): HTMLElement {\n    const div = this.addFile(filename, uploadIndex);\n\n    const progressSpan = document.createElement(\"span\");\n    progressSpan.className = \"dff-progress\";\n    progressSpan.setAttribute(\"role\", \"progressbar\");\n    progressSpan.setAttribute(\n      \"aria-label\",\n      this.formatTranslation(\"Upload progress for {filename}\", filename)\n    );\n    progressSpan.setAttribute(\"aria-valuemin\", \"0\");\n    progressSpan.setAttribute(\"aria-valuemax\", \"100\");\n    progressSpan.setAttribute(\"aria-valuenow\", \"0\");\n\n    const innerSpan = document.createElement(\"span\");\n    innerSpan.className = \"dff-progress-inner\";\n\n    progressSpan.append(innerSpan);\n    div.append(progressSpan);\n\n    div.append(\n      this.createButton(\n        \"dff-cancel\",\n        this.getTranslation(\"Cancel\"),\n        uploadIndex\n      )\n    );\n\n    return div;\n  }\n\n  public addUploadedFile(\n    filename: string,\n    uploadIndex: number,\n    filesize?: number\n  ): HTMLElement {\n    const element = this.addFile(filename, uploadIndex);\n    this.setSuccess(uploadIndex, filesize);\n    return element;\n  }\n\n  // Tells screen reader users what happened to a file: the status element is a\n  // live region, which is read out when its text changes.\n  public announce(key: string, filename: string): void {\n    this.status.replaceChildren(\n      document.createTextNode(this.formatTranslation(key, filename))\n    );\n  }\n\n  public clearInput(): void {\n    this.input.value = \"\";\n  }\n\n  // With moveFocus, the focus goes to the next file, the previous file or the\n  // input, instead of being lost when the element that has it is removed.\n  public deleteFile(index: number, moveFocus = false): void {\n    const div = this.findFileDiv(index);\n\n    if (!div) {\n      return;\n    }\n\n    const focusTarget =\n      moveFocus && this.mayMoveFocus(div) ? this.findFocusTarget(div) : null;\n\n    div.remove();\n    focusTarget?.focus();\n  }\n\n  public disableCancel(index: number): void {\n    const cancelButton = this.findCancelButton(index);\n\n    if (cancelButton) {\n      this.setButtonDisabled(cancelButton, true);\n    }\n  }\n\n  public disableDelete(index: number): void {\n    const deleteButton = this.findDeleteButton(index);\n\n    if (deleteButton) {\n      this.setButtonDisabled(deleteButton, true);\n    }\n  }\n\n  public findFileDiv(index: number): HTMLElement | null {\n    return this.container.querySelector(`.dff-file-id-${index.toString()}`);\n  }\n\n  public removeDropHint(): void {\n    const dropHint = this.container.querySelector(\".dff-drop-hint\");\n\n    if (dropHint) {\n      dropHint.remove();\n    }\n  }\n\n  public renderDropHint(): void {\n    if (this.container.querySelector(\".dff-drop-hint\")) {\n      return;\n    }\n\n    const dropHint = document.createElement(\"div\");\n    dropHint.className = \"dff-drop-hint\";\n    // Dropping only works with a mouse, and the files container is a list,\n    // which may only contain list items\n    dropHint.setAttribute(\"aria-hidden\", \"true\");\n    this.setTextContent(dropHint, this.getTranslation(\"Drop your files here\"));\n\n    this.container.append(dropHint);\n  }\n\n  public setDeleteFailed(index: number, moveFocus = false): void {\n    this.setErrorMessage(index, this.getTranslation(\"Delete failed\"));\n\n    this.enableDelete(index);\n\n    const div = this.findFileDiv(index);\n\n    // Disabling the delete button may have taken the focus away from it\n    if (moveFocus && div && this.mayMoveFocus(div)) {\n      this.findDeleteButton(index)?.focus();\n    }\n  }\n\n  public setError(index: number): void {\n    this.setErrorMessage(index, this.getTranslation(\"Upload failed\"));\n\n    const el = this.findFileDiv(index);\n    if (el) {\n      el.classList.add(\"dff-upload-fail\");\n    }\n\n    this.removeProgress(index);\n    this.removeCancel(index);\n  }\n\n  public setErrorInvalidFiles(files: File[]): void {\n    this.clearInput();\n\n    if (files.length === 0) {\n      this.errors.replaceChildren();\n      this.setInputInvalid(false);\n      return;\n    }\n\n    const errorsMessages = document.createElement(\"ul\");\n\n    for (const file of files) {\n      const msg = document.createElement(\"li\");\n      const invalidFileTypeMessage = this.getTranslation(\"Invalid file type\");\n      this.setTextContent(msg, `${file.name}: ${invalidFileTypeMessage}`);\n      msg.className = \"dff-error\";\n      errorsMessages.append(msg);\n    }\n\n    this.errors.replaceChildren(errorsMessages);\n    this.setInputInvalid(true);\n  }\n\n  public setSuccess(index: number, size?: number): void {\n    const el = this.findFileDiv(index);\n    if (el) {\n      el.classList.add(\"dff-upload-success\");\n\n      if (this.clickableFilenames) {\n        this.makeFilenameClickable(el, index);\n      }\n\n      if (size != null) {\n        const fileSizeInfo = document.createElement(\"span\");\n        this.setTextContent(fileSizeInfo, formatBytes(size, 2));\n        fileSizeInfo.className = \"dff-filesize\";\n\n        el.append(fileSizeInfo);\n      }\n\n      el.append(\n        this.createButton(\"dff-delete\", this.getTranslation(\"Delete\"), index)\n      );\n    }\n\n    this.removeProgress(index);\n    this.removeCancel(index);\n  }\n\n  public updateProgress(index: number, percentage: string): void {\n    const el = this.container.querySelector(`.dff-file-id-${index.toString()}`);\n    const progressSpan = el?.querySelector(\".dff-progress\");\n\n    if (!progressSpan) {\n      return;\n    }\n\n    progressSpan.setAttribute(\"aria-valuenow\", percentage);\n\n    const innerProgressSpan = progressSpan.querySelector<HTMLElement>(\n      \".dff-progress-inner\"\n    );\n\n    if (innerProgressSpan) {\n      innerProgressSpan.style.width = `${percentage}%`;\n    }\n  }\n\n  private addFile(filename: string, uploadIndex: number): HTMLElement {\n    const div = document.createElement(\"div\");\n    div.className = `dff-file dff-file-id-${uploadIndex.toString()}`;\n    div.setAttribute(\"role\", \"listitem\");\n\n    const nameSpan = document.createElement(\"span\");\n    nameSpan.textContent = filename;\n    nameSpan.className = \"dff-filename\";\n    nameSpan.dataset.index = uploadIndex.toString();\n\n    div.append(nameSpan);\n    this.container.append(div);\n\n    this.input.required = false;\n    return div;\n  }\n\n  private createButton(\n    className: string,\n    text: string,\n    uploadIndex: number\n  ): HTMLButtonElement {\n    const button = document.createElement(\"button\");\n    button.type = \"button\";\n    button.className = className;\n    button.dataset.index = uploadIndex.toString();\n    this.setTextContent(button, text);\n\n    return button;\n  }\n\n  private createErrorContainer = (parent: Element): Element => {\n    const div = document.createElement(\"div\");\n    div.className = \"dff-invalid-files\";\n    div.setAttribute(\"role\", \"alert\");\n    parent.append(div);\n    return div;\n  };\n\n  private createFilesContainer = (parent: Element): Element => {\n    const div = document.createElement(\"div\");\n    div.className = \"dff-files\";\n    div.setAttribute(\"role\", \"list\");\n    parent.append(div);\n\n    return div;\n  };\n\n  private createStatusContainer = (parent: Element): Element => {\n    const div = document.createElement(\"div\");\n    div.className = \"dff-status\";\n    div.setAttribute(\"role\", \"status\");\n    parent.append(div);\n\n    return div;\n  };\n\n  // A screen reader reads the errors when the input has the focus. Django may\n  // have set aria-describedby already, for the help text.\n  private describeInputWithErrors(input: HTMLInputElement): void {\n    this.errors.id = createId(\"dff-errors\");\n\n    const describedBy = input.getAttribute(\"aria-describedby\");\n\n    input.setAttribute(\n      \"aria-describedby\",\n      describedBy ? `${describedBy} ${this.errors.id}` : this.errors.id\n    );\n  }\n\n  private enableDelete(index: number): void {\n    const deleteButton = this.findDeleteButton(index);\n\n    if (deleteButton) {\n      this.setButtonDisabled(deleteButton, false);\n    }\n  }\n\n  private findCancelButton(index: number): HTMLButtonElement | null {\n    const el = this.findFileDiv(index);\n\n    if (!el) {\n      return null;\n    }\n\n    return el.querySelector<HTMLButtonElement>(\".dff-cancel\");\n  }\n\n  private findDeleteButton(index: number): HTMLButtonElement | null {\n    const div = this.findFileDiv(index);\n    if (!div) {\n      return div;\n    }\n\n    return div.querySelector<HTMLButtonElement>(\".dff-delete\");\n  }\n\n  // The delete or cancel button of the next file, or else of the previous file,\n  // or else the input. Landing on the same kind of button makes it easy to\n  // remove several files in a row.\n  private findFocusTarget(div: Element): HTMLElement {\n    const siblings = Array.from(\n      this.container.querySelectorAll<HTMLElement>(\".dff-file\")\n    );\n    const index = siblings.indexOf(div as HTMLElement);\n    const candidates = [\n      ...siblings.slice(index + 1),\n      ...siblings.slice(0, index).reverse()\n    ];\n\n    for (const candidate of candidates) {\n      const button =\n        candidate.querySelector<HTMLElement>(\n          \".dff-delete:enabled, .dff-cancel:enabled\"\n        ) ?? candidate.querySelector<HTMLElement>(\"button:enabled\");\n\n      if (button) {\n        return button;\n      }\n    }\n\n    return this.input;\n  }\n\n  private formatTranslation(key: string, filename: string): string {\n    // A replacer function, so that \"$&\" in the filename is not a pattern\n    return this.getTranslation(key).replace(\"{filename}\", () => filename);\n  }\n\n  private getTranslation(key: string) {\n    return this.translations[key] ?? key;\n  }\n\n  // Names the list of files after the label of the field, so that the lists\n  // of several fields can be told apart. A label that wraps the input is\n  // skipped: its name would include the text of the input itself.\n  private labelFilesContainer(input: HTMLInputElement): void {\n    const label = input.labels?.[0];\n\n    if (!label || label.contains(input)) {\n      return;\n    }\n\n    if (!label.id) {\n      label.id = createId(\"dff-label\");\n    }\n\n    this.container.setAttribute(\"aria-labelledby\", label.id);\n  }\n\n  // A filename that can be clicked is a button, so that it can be reached and\n  // pressed with the keyboard\n  private makeFilenameClickable(el: Element, index: number): void {\n    const nameSpan = el.querySelector(\"span.dff-filename\");\n\n    if (nameSpan) {\n      nameSpan.replaceWith(\n        this.createButton(\"dff-filename\", nameSpan.textContent, index)\n      );\n    }\n  }\n\n  // Only when the focus is still in the file, or was lost because a button in\n  // it was disabled: the focus is not taken away from somewhere else.\n  private mayMoveFocus(div: Element): boolean {\n    const active = document.activeElement;\n\n    return active == null || active === document.body || div.contains(active);\n  }\n\n  private removeCancel(index: number): void {\n    const cancelButton = this.findCancelButton(index);\n\n    if (cancelButton) {\n      cancelButton.remove();\n    }\n  }\n\n  private removeProgress(index: number): void {\n    const el = this.findFileDiv(index);\n\n    if (el) {\n      const progressSpan = el.querySelector(\".dff-progress\");\n\n      if (progressSpan) {\n        progressSpan.remove();\n      }\n    }\n  }\n\n  private setButtonDisabled(button: HTMLButtonElement, disabled: boolean) {\n    button.disabled = disabled;\n    // Keep the class for existing stylesheets\n    button.classList.toggle(\"dff-disabled\", disabled);\n  }\n\n  private setErrorMessage(index: number, message: string): void {\n    const el = this.findFileDiv(index);\n    if (!el) {\n      return;\n    }\n\n    const originalMessageSpan = el.querySelector(\".dff-error\");\n    if (originalMessageSpan) {\n      originalMessageSpan.remove();\n    }\n\n    const span = document.createElement(\"span\");\n    span.classList.add(\"dff-error\");\n    this.setTextContent(span, message);\n\n    el.append(span);\n  }\n\n  // Django sets aria-invalid when the server rejected the field; that is left\n  // alone\n  private setInputInvalid(invalid: boolean): void {\n    if (invalid) {\n      if (this.input.getAttribute(\"aria-invalid\") !== \"true\") {\n        this.input.setAttribute(\"aria-invalid\", \"true\");\n        this.isInvalidSetHere = true;\n      }\n    } else if (this.isInvalidSetHere) {\n      this.input.removeAttribute(\"aria-invalid\");\n      this.isInvalidSetHere = false;\n    }\n  }\n\n  private setTextContent(element: HTMLElement, text: string) {\n    element.append(document.createTextNode(text));\n  }\n}\n\nexport default RenderUploadFile;\n","export interface InitialExistingFile {\n  name: string;\n  size: number;\n  type: \"existing\";\n}\nexport type InitialFile =\n  | InitialExistingFile\n  | InitialPlaceholderFile\n  | InitialS3File\n  | InitialTusFile;\n\nexport interface InitialPlaceholderFile {\n  id: string;\n  name: string;\n  size: number;\n  type: \"placeholder\";\n}\n\nexport interface InitialS3File {\n  id: string;\n  name: string;\n  original_name: string;\n  size: number;\n  type: \"s3\";\n}\n\nexport interface InitialTusFile {\n  id: string;\n  name: string;\n  size: number;\n  type: \"tus\";\n  url: string;\n}\n\nexport type UploadType =\n  | \"existing\"\n  | \"placeholder\"\n  | \"s3\"\n  | \"tus\"\n  | \"uploadedS3\"\n  | \"uploadedTus\";\n\ninterface UploadParameters {\n  name: string;\n  status: UploadStatus;\n  type: UploadType;\n  uploadIndex: number;\n}\n\ntype UploadStatus = \"done\" | \"error\" | \"uploading\";\n\n// Wait times in ms before retrying a failed request; there is one retry for each value\nexport const DEFAULT_RETRY_DELAYS = [0, 1000, 3000, 5000];\n\nabstract class BaseUpload {\n  name: string;\n  status: UploadStatus;\n  type: UploadType;\n  uploadIndex: number;\n\n  constructor({ name, status, type, uploadIndex }: UploadParameters) {\n    this.name = name;\n    this.status = status;\n    this.type = type;\n    this.uploadIndex = uploadIndex;\n  }\n\n  public async abort(): Promise<void> {\n    //\n  }\n  public async delete(): Promise<void> {\n    //\n  }\n\n  public abstract getId(): string | undefined;\n  public abstract getInitialFile(): InitialFile;\n  public abstract getSize(): number | undefined;\n}\n\nexport default BaseUpload;\n","export interface LocationInfo {\n  location: string;\n}\n\nexport interface MultipartUpload {\n  endpoint: string;\n  key: string;\n  uploadId: string;\n}\n\nexport interface Part {\n  ETag: string;\n  PartNumber: number;\n}\n\nexport interface UrlInfo {\n  url: string;\n}\n\nexport const MB = 1024 * 1024;\n\n// A response with an error status from the S3 views of django-file-form\nexport class RequestError extends Error {\n  public readonly status: number;\n\n  constructor(status: number) {\n    super(`S3 upload request failed with status ${status.toString()}`);\n    this.status = status;\n  }\n}\n\n// Server errors, timeouts and rate limiting are temporary, so the request can be retried\nexport const isRetryableStatus = (status: number): boolean =>\n  status === 408 || status === 429 || status >= 500;\n\n// Can a failed request to the S3 views be retried?\n// - fetch rejects with a TypeError on a network error\nexport const isRetryableRequestError = (error: unknown): boolean =>\n  error instanceof RequestError\n    ? isRetryableStatus(error.status)\n    : error instanceof TypeError;\n\n// Reject if the response has an error status; otherwise return the json data\nconst getJsonData = async <T>(response: Response): Promise<T> => {\n  if (!response.ok) {\n    throw new RequestError(response.status);\n  }\n\n  return (await response.json()) as T;\n};\n\ninterface AbortMultipartUploadParameters {\n  csrfToken: string;\n  endpoint: string;\n  key: string;\n  uploadId: string;\n}\n\nexport const abortMultipartUpload = ({\n  csrfToken,\n  endpoint,\n  key,\n  uploadId\n}: AbortMultipartUploadParameters): Promise<unknown> => {\n  const filename = encodeURIComponent(key);\n  const uploadIdEnc = encodeURIComponent(uploadId);\n  const headers = new Headers({\n    \"X-CSRFToken\": csrfToken\n  });\n  const url = `${endpoint}${uploadIdEnc}/?key=${filename}`;\n  return fetch(url, {\n    headers: headers,\n    method: \"delete\"\n  }).then(getJsonData);\n};\n\ninterface CompleteMultipartUploadParameters {\n  csrfToken: string;\n  endpoint: string;\n  key: string;\n  parts: Part[];\n  uploadId: string;\n}\n\nexport const completeMultipartUpload = ({\n  csrfToken,\n  endpoint,\n  key,\n  parts,\n  uploadId\n}: CompleteMultipartUploadParameters): Promise<LocationInfo> => {\n  const filename = encodeURIComponent(key);\n  const uploadIdEnc = encodeURIComponent(uploadId);\n  const headers = new Headers({\n    \"X-CSRFToken\": csrfToken\n  });\n  const url = `${endpoint}${uploadIdEnc}/complete?key=${filename}`;\n  return fetch(url, {\n    body: JSON.stringify({\n      parts: parts\n    }),\n    headers: headers,\n    method: \"post\"\n  })\n    .then(getJsonData<LocationInfo>);\n};\n\ninterface CreateMultipartUploadParameters {\n  csrfToken: string;\n  endpoint: string;\n  file: File;\n  s3UploadDir: string;\n}\n\nexport const createMultipartUpload = ({\n  csrfToken,\n  endpoint,\n  file,\n  s3UploadDir\n}: CreateMultipartUploadParameters): Promise<MultipartUpload> => {\n  const headers = new Headers({\n    accept: \"application/json\",\n    \"content-type\": \"application/json\",\n    \"X-CSRFToken\": csrfToken\n  });\n  return fetch(endpoint, {\n    body: JSON.stringify({\n      contentType: file.type,\n      filename: file.name,\n      s3UploadDir: s3UploadDir\n    }),\n    headers: headers,\n    method: \"post\"\n  })\n    .then(getJsonData<MultipartUpload>);\n};\n\nexport const getChunkSize = (file: File): number =>\n  Math.ceil(file.size / 10000);\n\ninterface PrepareUploadPartParameters {\n  csrfToken: string;\n  endpoint: string;\n  key: string;\n  number: number;\n  uploadId: string;\n}\n\nexport const prepareUploadPart = ({\n  csrfToken,\n  endpoint,\n  key,\n  number,\n  uploadId\n}: PrepareUploadPartParameters): Promise<UrlInfo> => {\n  const filename = encodeURIComponent(key);\n  const uploadIdEnc = encodeURIComponent(uploadId);\n  const headers = new Headers({ \"X-CSRFToken\": csrfToken });\n  const url = `${endpoint}${uploadIdEnc}/${number.toString()}?key=${filename}`;\n  return fetch(url, {\n    headers: headers\n  })\n    .then(getJsonData<UrlInfo>);\n};\n\nexport const remove = (arr: unknown[], el: unknown): void => {\n  const i = arr.indexOf(el);\n  if (i !== -1) {\n    arr.splice(i, 1);\n  }\n};\n","// The following code is adapted from https://github.com/transloadit/uppy/blob/master/packages/%40uppy/aws-s3-multipart/src/MultipartUploader.js\n// which is released under a MIT License (https://github.com/transloadit/uppy/blob/master/LICENSE)\n\nimport BaseUpload, {\n  DEFAULT_RETRY_DELAYS,\n  type InitialFile\n} from \"./base_upload.ts\";\nimport {\n  abortMultipartUpload,\n  completeMultipartUpload,\n  createMultipartUpload,\n  getChunkSize,\n  isRetryableRequestError,\n  isRetryableStatus,\n  MB,\n  type MultipartUpload,\n  type Part,\n  prepareUploadPart,\n  remove,\n  type UrlInfo\n} from \"./s3_utils.ts\";\n\ninterface Chunk {\n  blob: Blob;\n  done: boolean;\n  partNumber: number;\n  uploaded: number;\n}\n\n// The multipart upload after it is created\ninterface CreatedUpload {\n  key: string;\n  uploadId: string;\n}\n\ninterface S3UploadParameters {\n  csrfToken: string;\n  endpoint: string;\n  file: File;\n  retryDelays: null | number[];\n  s3UploadDir: string;\n  uploadIndex: number;\n}\n\nclass S3Upload extends BaseUpload {\n  public onError?: (error: unknown) => void;\n  public onProgress?: (bytesUploaded: number, bytesTotal: number) => void;\n  public onSuccess?: () => void;\n\n  // Ends the wait for a retry early\n  private cancelRetryWait?: () => void;\n  private chunks: Chunk[];\n  private createdPromise: Promise<MultipartUpload>;\n  private csrfToken: string;\n  private endpoint: string;\n  private file: File;\n  private key: null | string;\n  private parts: Part[];\n  private retryDelays: number[];\n  private retryTimeout?: ReturnType<typeof setTimeout>;\n  private s3UploadDir: string;\n  // Set when the upload is aborted or has failed; no more requests are started\n  private stopped: boolean;\n  private uploadId: null | string;\n  private uploading: XMLHttpRequest[];\n\n  constructor({\n    csrfToken,\n    endpoint,\n    file,\n    retryDelays,\n    s3UploadDir,\n    uploadIndex\n  }: S3UploadParameters) {\n    super({ name: file.name, status: \"uploading\", type: \"s3\", uploadIndex });\n\n    this.csrfToken = csrfToken;\n    this.endpoint = endpoint;\n    this.file = file;\n    this.retryDelays = retryDelays ?? DEFAULT_RETRY_DELAYS;\n    this.s3UploadDir = s3UploadDir;\n    this.stopped = false;\n\n    this.key = null;\n    this.uploadId = null;\n    this.parts = [];\n\n    // Do `this.createdPromise.then(OP)` to execute an operation `OP` _only_ if the\n    // upload was created already. That also ensures that the sequencing is right\n    // (so the `OP` definitely happens if the upload is created).\n    //\n    // This mostly exists to make `abortUpload` work well: only sending the abort request if\n    // the upload was already created, and if the createMultipartUpload request is still in flight,\n    // aborting it immediately after it finishes.\n    this.createdPromise = Promise.reject(new Error(\"Upload not created\"));\n    this.chunks = [];\n    this.uploading = [];\n    this.onError = undefined;\n    this.onProgress = undefined;\n    this.onSuccess = undefined;\n\n    this.initChunks();\n\n    this.createdPromise.catch(() => ({})); // silence uncaught rejection warning\n  }\n\n  public async abort(): Promise<void> {\n    this.stopped = true;\n    clearTimeout(this.retryTimeout);\n    this.cancelRetryWait?.();\n\n    for (const xhr of this.uploading.slice()) {\n      xhr.abort();\n    }\n    this.uploading = [];\n\n    // If creating the upload failed, there is nothing to abort\n    await this.createdPromise.catch(() => undefined);\n    await this.abortMultipartUpload();\n  }\n\n  public delete(): Promise<void> {\n    return Promise.resolve();\n  }\n\n  public getId(): string | undefined {\n    return this.uploadId ?? undefined;\n  }\n\n  public getInitialFile(): InitialFile {\n    return {\n      id: this.uploadId ?? \"\",\n      name: this.key ?? \"\",\n      original_name: this.file.name,\n      size: this.file.size,\n      type: \"s3\"\n    };\n  }\n\n  public getSize(): number {\n    return this.file.size;\n  }\n\n  public start(): void {\n    void this.createUpload();\n  }\n\n  private async abortMultipartUpload(): Promise<void> {\n    if (this.key && this.uploadId) {\n      await abortMultipartUpload({\n        csrfToken: this.csrfToken,\n        endpoint: this.endpoint,\n        key: this.key,\n        uploadId: this.uploadId\n      });\n    }\n  }\n\n  private completeUpload(upload: CreatedUpload): Promise<void> {\n    // Parts may not have completed uploading in sorted order, if limit > 1.\n    this.parts.sort((a, b) => a.PartNumber - b.PartNumber);\n\n    return this.requestWithRetries(() =>\n      completeMultipartUpload({\n        csrfToken: this.csrfToken,\n        endpoint: this.endpoint,\n        key: upload.key,\n        parts: this.parts,\n        uploadId: upload.uploadId\n      })\n    ).then(\n      () => {\n        if (this.onSuccess) {\n          this.onSuccess();\n        }\n      },\n      (err: unknown) => {\n        this.handleError(err);\n      }\n    );\n  }\n\n  private createUpload(): Promise<void> {\n    this.createdPromise = this.requestWithRetries(() =>\n      createMultipartUpload({\n        csrfToken: this.csrfToken,\n        endpoint: this.endpoint,\n        file: this.file,\n        s3UploadDir: this.s3UploadDir\n      })\n    );\n    return this.createdPromise\n      .then((result: MultipartUpload | null) => {\n        const valid =\n          typeof result === \"object\" &&\n          result &&\n          typeof result.uploadId === \"string\" &&\n          typeof result.key === \"string\";\n        if (!valid) {\n          throw new TypeError(\n            \"AwsS3/Multipart: Got incorrect result from `createMultipartUpload()`, expected an object `{ uploadId, key }`.\"\n          );\n        }\n\n        this.key = result.key;\n        this.uploadId = result.uploadId;\n\n        this.uploadParts({ key: result.key, uploadId: result.uploadId });\n      })\n      .catch((err: unknown) => {\n        this.handleError(err);\n      });\n  }\n\n  // The upload has failed and can't be continued.\n  // An error after the upload is aborted or has already failed is ignored.\n  private handleError(error: unknown): void {\n    if (this.stopped) {\n      return;\n    }\n\n    this.stopped = true;\n\n    // Remove the parts that are already uploaded from S3. This is cleanup, so a\n    // failure is ignored; the upload has already failed.\n    this.abortMultipartUpload().catch(() => undefined);\n\n    if (this.onError) {\n      this.onError(error);\n    } else {\n      throw error;\n    }\n  }\n\n  private initChunks(): void {\n    const chunks: Chunk[] = [];\n    const desiredChunkSize = getChunkSize(this.file);\n    // at least 5MB per request, at most 10k requests\n    const minChunkSize = Math.max(5 * MB, Math.ceil(this.file.size / 10000));\n    const chunkSize = Math.max(desiredChunkSize, minChunkSize);\n\n    for (let i = 0; i < this.file.size; i += chunkSize) {\n      const end = Math.min(this.file.size, i + chunkSize);\n      chunks.push({\n        blob: this.file.slice(i, end),\n        done: false,\n        partNumber: chunks.length + 1,\n        uploaded: 0\n      });\n    }\n\n    this.chunks = chunks;\n  }\n\n  private onPartComplete(\n    upload: CreatedUpload,\n    chunk: Chunk,\n    etag: string\n  ): void {\n    chunk.done = true;\n\n    this.parts.push({\n      ETag: etag,\n      PartNumber: chunk.partNumber\n    });\n\n    this.uploadParts(upload);\n  }\n\n  private onPartProgress(chunk: Chunk, sent: number): void {\n    chunk.uploaded = sent;\n\n    if (this.onProgress) {\n      const totalUploaded = this.chunks.reduce((n, c) => n + c.uploaded, 0);\n      this.onProgress(totalUploaded, this.file.size);\n    }\n  }\n\n  // Send a request to the S3 views; retry it after a temporary error\n  private async requestWithRetries<T>(request: () => Promise<T>): Promise<T> {\n    for (let attempt = 0; ; attempt += 1) {\n      try {\n        return await request();\n      } catch (error) {\n        const delay = this.retryDelays[attempt];\n\n        if (\n          this.stopped ||\n          delay === undefined ||\n          !isRetryableRequestError(error)\n        ) {\n          throw error;\n        }\n\n        const waited = await this.waitForRetry(delay);\n\n        if (!waited) {\n          throw error;\n        }\n      }\n    }\n  }\n\n  // Retry uploading a part after a temporary error, or fail the upload.\n  // A retry requests a new url for the part, because the previous one may have expired.\n  private retryPartOrFail(\n    upload: CreatedUpload,\n    chunk: Chunk,\n    attempt: number,\n    error: unknown,\n    retryable: boolean\n  ): void {\n    if (this.stopped) {\n      return;\n    }\n\n    const delay = this.retryDelays[attempt];\n\n    if (!retryable || delay === undefined) {\n      this.handleError(error);\n      return;\n    }\n\n    // The data of the failed attempt is sent again\n    this.onPartProgress(chunk, 0);\n\n    void this.waitForRetry(delay).then(waited => {\n      if (waited) {\n        void this.uploadPart(upload, chunk, attempt + 1);\n      }\n    });\n  }\n\n  // attempt: 0 for the first attempt, 1 for the first retry, etc.\n  private async uploadPart(\n    upload: CreatedUpload,\n    chunk: Chunk,\n    attempt: number\n  ): Promise<void> {\n    let result: UrlInfo;\n\n    try {\n      result = await prepareUploadPart({\n        csrfToken: this.csrfToken,\n        endpoint: this.endpoint,\n        key: upload.key,\n        number: chunk.partNumber,\n        uploadId: upload.uploadId\n      });\n    } catch (error) {\n      this.retryPartOrFail(\n        upload,\n        chunk,\n        attempt,\n        error,\n        isRetryableRequestError(error)\n      );\n      return;\n    }\n\n    if (this.stopped) {\n      return;\n    }\n\n    const valid = typeof result === \"object\" && typeof result.url === \"string\";\n    if (!valid) {\n      this.handleError(\n        new TypeError(\n          \"AwsS3/Multipart: Got incorrect result from `prepareUploadPart()`, expected an object `{ url }`.\"\n        )\n      );\n      return;\n    }\n\n    this.uploadPartBytes(upload, chunk, result.url, attempt);\n  }\n\n  private uploadPartBytes(\n    upload: CreatedUpload,\n    chunk: Chunk,\n    url: string,\n    attempt: number\n  ): void {\n    const xhr = new XMLHttpRequest();\n    xhr.open(\"PUT\", url, true);\n    xhr.responseType = \"text\";\n\n    this.uploading.push(xhr);\n\n    xhr.upload.addEventListener(\"progress\", ev => {\n      this.onPartProgress(chunk, ev.loaded);\n    });\n\n    xhr.addEventListener(\"abort\", () => {\n      remove(this.uploading, xhr);\n    });\n\n    xhr.addEventListener(\"load\", () => {\n      remove(this.uploading, xhr);\n\n      if (xhr.status < 200 || xhr.status >= 300) {\n        this.retryPartOrFail(\n          upload,\n          chunk,\n          attempt,\n          new Error(\"Non 2xx\"),\n          isRetryableStatus(xhr.status)\n        );\n        return;\n      }\n\n      this.onPartProgress(chunk, chunk.blob.size);\n\n      // NOTE This must be allowed by CORS.\n      const etag = xhr.getResponseHeader(\"ETag\");\n      if (etag === null) {\n        this.handleError(\n          new Error(\n            \"AwsS3/Multipart: Could not read the ETag header. This likely means CORS is not configured correctly on the S3 Bucket. See https://uppy.io/docs/aws-s3-multipart#S3-Bucket-Configuration for instructions.\"\n          )\n        );\n        return;\n      }\n\n      this.onPartComplete(upload, chunk, etag);\n    });\n\n    xhr.addEventListener(\"error\", () => {\n      remove(this.uploading, xhr);\n\n      // A network error\n      this.retryPartOrFail(\n        upload,\n        chunk,\n        attempt,\n        new Error(\"Unknown error\"),\n        true\n      );\n    });\n    xhr.send(chunk.blob);\n  }\n\n  // Upload the parts one at a time; this is called when the upload is created and after each part is uploaded\n  private uploadParts(upload: CreatedUpload): void {\n    if (this.stopped) {\n      return;\n    }\n\n    const chunk = this.chunks.find(c => !c.done);\n\n    if (chunk) {\n      void this.uploadPart(upload, chunk, 0);\n    } else {\n      void this.completeUpload(upload);\n    }\n  }\n\n  // Wait before a retry. Resolves with true after the delay, or early with false\n  // when the upload is aborted.\n  private waitForRetry(delay: number): Promise<boolean> {\n    return new Promise(resolve => {\n      this.cancelRetryWait = () => {\n        resolve(false);\n      };\n      this.retryTimeout = setTimeout(() => {\n        resolve(true);\n      }, delay);\n    });\n  }\n}\n\nexport default S3Upload;\n","class DetailedError extends Error {\n  constructor(message, causingErr = null, req = null, res = null) {\n    super(message)\n\n    this.originalRequest = req\n    this.originalResponse = res\n    this.causingError = causingErr\n\n    if (causingErr != null) {\n      message += `, caused by ${causingErr.toString()}`\n    }\n\n    if (req != null) {\n      const requestId = req.getHeader('X-Request-ID') || 'n/a'\n      const method = req.getMethod()\n      const url = req.getURL()\n      const status = res ? res.getStatus() : 'n/a'\n      const body = res ? res.getBody() || '' : 'n/a'\n      message += `, originated from request (method: ${method}, url: ${url}, response code: ${status}, response text: ${body}, request id: ${requestId})`\n    }\n    this.message = message\n  }\n}\n\nexport default DetailedError\n","let isEnabled = false\n\nexport function enableDebugLog() {\n  isEnabled = true\n}\n\nexport function log(msg) {\n  if (!isEnabled) return\n  console.log(msg)\n}\n","export default class NoopUrlStorage {\n  listAllUploads() {\n    return Promise.resolve([])\n  }\n\n  findUploadsByFingerprint(_fingerprint) {\n    return Promise.resolve([])\n  }\n\n  removeUpload(_urlStorageKey) {\n    return Promise.resolve()\n  }\n\n  addUpload(_fingerprint, _upload) {\n    return Promise.resolve(null)\n  }\n}\n","/**\n *  base64.ts\n *\n *  Licensed under the BSD 3-Clause License.\n *    http://opensource.org/licenses/BSD-3-Clause\n *\n *  References:\n *    http://en.wikipedia.org/wiki/Base64\n *\n * @author Dan Kogai (https://github.com/dankogai)\n */\nconst version = '3.9.6';\n/**\n * @deprecated use lowercase `version`.\n */\nconst VERSION = version;\nconst _TD = typeof TextDecoder === 'function' ? new TextDecoder('utf-8', { ignoreBOM: true }) : undefined;\nconst _TE = typeof TextEncoder === 'function' ? new TextEncoder() : undefined;\nconst b64ch = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nconst b64chs = Array.prototype.slice.call(b64ch);\nconst b64tab = ((a) => {\n    let tab = {};\n    a.forEach((c, i) => tab[c] = i);\n    return tab;\n})(b64chs);\nconst b64re = /^(?:[A-Za-z\\d+\\/]{4})*?(?:[A-Za-z\\d+\\/]{2}(?:==)?|[A-Za-z\\d+\\/]{3}=?)?$/;\nconst _fromCC = String.fromCharCode.bind(String);\nconst _U8Afrom = typeof Uint8Array.from === 'function'\n    ? Uint8Array.from.bind(Uint8Array)\n    : (it) => new Uint8Array(Array.prototype.slice.call(it, 0));\nconst _mkUriSafe = (src) => src\n    .replace(/=/g, '').replace(/[+\\/]/g, (m0) => m0 == '+' ? '-' : '_');\nconst _tidyB64 = (s) => s.replace(/[^A-Za-z0-9\\+\\/]/g, '');\n/**\n * polyfill version of `btoa`\n */\nconst btoaPolyfill = (bin) => {\n    // console.log('polyfilled');\n    let u32, c0, c1, c2, asc = '';\n    const pad = bin.length % 3;\n    for (let i = 0; i < bin.length;) {\n        if ((c0 = bin.charCodeAt(i++)) > 255 ||\n            (c1 = bin.charCodeAt(i++)) > 255 ||\n            (c2 = bin.charCodeAt(i++)) > 255)\n            throw new TypeError('invalid character found');\n        u32 = (c0 << 16) | (c1 << 8) | c2;\n        asc += b64chs[u32 >> 18 & 63]\n            + b64chs[u32 >> 12 & 63]\n            + b64chs[u32 >> 6 & 63]\n            + b64chs[u32 & 63];\n    }\n    return pad ? asc.slice(0, pad - 3) + \"===\".substring(pad) : asc;\n};\n/**\n * does what `window.btoa` of web browsers do.\n * @param {String} bin binary string\n * @returns {string} Base64-encoded string\n */\nconst _btoa = typeof btoa === 'function' ? (bin) => btoa(bin)\n    : btoaPolyfill;\nconst _fromUint8Array = typeof Uint8Array.prototype.toBase64 === 'function' ? Function.prototype.call.bind(Uint8Array.prototype.toBase64)\n    : (u8a) => {\n        // cf. https://stackoverflow.com/questions/12710001/how-to-convert-uint8-array-to-base64-encoded-string/12713326#12713326\n        const maxargs = 0x1000;\n        let strs = [];\n        for (let i = 0, l = u8a.length; i < l; i += maxargs) {\n            strs.push(_fromCC.apply(null, u8a.subarray(i, i + maxargs)));\n        }\n        return _btoa(strs.join(''));\n    };\n/**\n * converts a Uint8Array to a Base64 string.\n * @param {boolean} [urlsafe] URL-and-filename-safe a la RFC4648 §5\n * @returns {string} Base64 string\n */\nconst fromUint8Array = (u8a, urlsafe = false) => urlsafe ? _mkUriSafe(_fromUint8Array(u8a)) : _fromUint8Array(u8a);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const utob = (src: string) => unescape(encodeURIComponent(src));\n// reverting good old fationed regexp\nconst cb_utob = (c) => {\n    if (c.length < 2) {\n        var cc = c.charCodeAt(0);\n        return cc < 0x80 ? c\n            : cc < 0x800 ? (_fromCC(0xc0 | (cc >>> 6))\n                + _fromCC(0x80 | (cc & 0x3f)))\n                : (_fromCC(0xe0 | ((cc >>> 12) & 0x0f))\n                    + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n                    + _fromCC(0x80 | (cc & 0x3f)));\n    }\n    else {\n        var cc = 0x10000\n            + (c.charCodeAt(0) - 0xD800) * 0x400\n            + (c.charCodeAt(1) - 0xDC00);\n        return (_fromCC(0xf0 | ((cc >>> 18) & 0x07))\n            + _fromCC(0x80 | ((cc >>> 12) & 0x3f))\n            + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n            + _fromCC(0x80 | (cc & 0x3f)));\n    }\n};\nconst re_utob = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[^\\x00-\\x7F]/g;\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-8 string\n * @returns {string} UTF-16 string\n */\nconst utob = (u) => u.replace(re_utob, cb_utob);\n//\nconst _encode = _TE\n    ? (s) => _fromUint8Array(_TE.encode(s))\n    : (s) => _btoa(utob(s));\n/**\n * converts a UTF-8-encoded string to a Base64 string.\n * @param {boolean} [urlsafe] if `true` make the result URL-safe\n * @returns {string} Base64 string\n */\nconst encode = (src, urlsafe = false) => urlsafe\n    ? _mkUriSafe(_encode(src))\n    : _encode(src);\n/**\n * converts a UTF-8-encoded string to URL-safe Base64 RFC4648 §5.\n * @returns {string} Base64 string\n */\nconst encodeURI = (src) => encode(src, true);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const btou = (src: string) => decodeURIComponent(escape(src));\n// reverting good old fationed regexp\nconst re_btou = /[\\xC0-\\xDF][\\x80-\\xBF]|[\\xE0-\\xEF][\\x80-\\xBF]{2}|[\\xF0-\\xF7][\\x80-\\xBF]{3}/g;\nconst cb_btou = (cccc) => {\n    switch (cccc.length) {\n        case 4:\n            var cp = ((0x07 & cccc.charCodeAt(0)) << 18)\n                | ((0x3f & cccc.charCodeAt(1)) << 12)\n                | ((0x3f & cccc.charCodeAt(2)) << 6)\n                | (0x3f & cccc.charCodeAt(3)), offset = cp - 0x10000;\n            return (_fromCC((offset >>> 10) + 0xD800)\n                + _fromCC((offset & 0x3FF) + 0xDC00));\n        case 3:\n            return _fromCC(((0x0f & cccc.charCodeAt(0)) << 12)\n                | ((0x3f & cccc.charCodeAt(1)) << 6)\n                | (0x3f & cccc.charCodeAt(2)));\n        default:\n            return _fromCC(((0x1f & cccc.charCodeAt(0)) << 6)\n                | (0x3f & cccc.charCodeAt(1)));\n    }\n};\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-16 string\n * @returns {string} UTF-8 string\n */\nconst btou = (b) => b.replace(re_btou, cb_btou);\n/**\n * polyfill version of `atob`\n */\nconst atobPolyfill = (asc) => {\n    // console.log('polyfilled');\n    asc = asc.replace(/\\s+/g, '');\n    if (!b64re.test(asc))\n        throw new TypeError('malformed base64.');\n    asc += '=='.slice(2 - (asc.length & 3));\n    let u24, r1, r2;\n    let binArray = []; // use array to avoid minor gc in loop\n    for (let i = 0; i < asc.length;) {\n        u24 = b64tab[asc.charAt(i++)] << 18\n            | b64tab[asc.charAt(i++)] << 12\n            | (r1 = b64tab[asc.charAt(i++)]) << 6\n            | (r2 = b64tab[asc.charAt(i++)]);\n        if (r1 === 64) {\n            binArray.push(_fromCC(u24 >> 16 & 255));\n        }\n        else if (r2 === 64) {\n            binArray.push(_fromCC(u24 >> 16 & 255, u24 >> 8 & 255));\n        }\n        else {\n            binArray.push(_fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255));\n        }\n    }\n    return binArray.join('');\n};\n/**\n * does what `window.atob` of web browsers do.\n * @param {String} asc Base64-encoded string\n * @returns {string} binary string\n */\nconst _atob = typeof atob === 'function' ? (asc) => atob(_tidyB64(asc))\n    : atobPolyfill;\n//\nconst _toUint8Array = typeof Uint8Array.fromBase64 === 'function'\n    ? (a) => Uint8Array.fromBase64(a) : (a) => _U8Afrom(_atob(a).split('').map(c => c.charCodeAt(0)));\n/**\n * converts a Base64 string to a Uint8Array.\n */\nconst toUint8Array = (a) => _toUint8Array(_unURI(a));\n//\nconst _decode = _TD\n    ? (a) => _TD.decode(_toUint8Array(a))\n    : (a) => btou(_atob(a));\nconst _unURI = (a) => _tidyB64(a.replace(/[-_]/g, (m0) => m0 == '-' ? '+' : '/'));\n/**\n * converts a Base64 string to a UTF-8 string.\n * @param {String} src Base64 string.  Both normal and URL-safe are supported\n * @returns {string} UTF-8 string\n */\nconst decode = (src) => _decode(_unURI(src));\n/**\n * check if a value is a valid Base64 string\n * @param {String} src a value to check\n  */\nconst isValid = (src) => {\n    if (typeof src !== 'string')\n        return false;\n    const s = src.replace(/\\s+/g, '').replace(/={0,2}$/, '');\n    // a data length of 4n+1 cannot encode a whole number of bytes (#197)\n    if (s.length % 4 === 1)\n        return false;\n    return !/[^\\s0-9a-zA-Z\\+/]/.test(s) || !/[^\\s0-9a-zA-Z\\-_]/.test(s);\n};\n//\nconst _noEnum = (v) => {\n    return {\n        value: v, enumerable: false, writable: true, configurable: true\n    };\n};\n/**\n * extend String.prototype with relevant methods\n */\nconst extendString = function () {\n    const _add = (name, body) => Object.defineProperty(String.prototype, name, _noEnum(body));\n    _add('fromBase64', function () { return decode(this); });\n    _add('toBase64', function (urlsafe) { return encode(this, urlsafe); });\n    _add('toBase64URI', function () { return encode(this, true); });\n    _add('toBase64URL', function () { return encode(this, true); });\n    _add('toUint8Array', function () { return toUint8Array(this); });\n};\n/**\n * extend Uint8Array.prototype with relevant methods\n */\nconst extendUint8Array = function () {\n    const _add = (name, body) => Object.defineProperty(Uint8Array.prototype, name, _noEnum(body));\n    _add('toBase64', function (urlsafe) { return fromUint8Array(this, urlsafe); });\n    _add('toBase64URI', function () { return fromUint8Array(this, true); });\n    _add('toBase64URL', function () { return fromUint8Array(this, true); });\n};\n/**\n * extend Builtin prototypes with relevant methods\n */\nconst extendBuiltins = () => {\n    extendString();\n    extendUint8Array();\n};\nconst gBase64 = {\n    version: version,\n    VERSION: VERSION,\n    atob: _atob,\n    atobPolyfill: atobPolyfill,\n    btoa: _btoa,\n    btoaPolyfill: btoaPolyfill,\n    fromBase64: decode,\n    toBase64: encode,\n    encode: encode,\n    encodeURI: encodeURI,\n    encodeURL: encodeURI,\n    utob: utob,\n    btou: btou,\n    decode: decode,\n    isValid: isValid,\n    fromUint8Array: fromUint8Array,\n    toUint8Array: toUint8Array,\n    extendString: extendString,\n    extendUint8Array: extendUint8Array,\n    extendBuiltins: extendBuiltins\n};\n\nexport { gBase64 as Base64, VERSION, _atob as atob, atobPolyfill, _btoa as btoa, btoaPolyfill, btou, decode, encode, encodeURI, encodeURI as encodeURL, extendBuiltins, extendString, extendUint8Array, decode as fromBase64, fromUint8Array, isValid, encode as toBase64, toUint8Array, utob, version };\n","'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n  protocol = protocol.split(':')[0];\n  port = +port;\n\n  if (!port) return false;\n\n  switch (protocol) {\n    case 'http':\n    case 'ws':\n    return port !== 80;\n\n    case 'https':\n    case 'wss':\n    return port !== 443;\n\n    case 'ftp':\n    return port !== 21;\n\n    case 'gopher':\n    return port !== 70;\n\n    case 'file':\n    return false;\n  }\n\n  return port !== 0;\n};\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n  try {\n    return decodeURIComponent(input.replace(/\\+/g, ' '));\n  } catch (e) {\n    return null;\n  }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n  try {\n    return encodeURIComponent(input);\n  } catch (e) {\n    return null;\n  }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n  var parser = /([^=?#&]+)=?([^&]*)/g\n    , result = {}\n    , part;\n\n  while (part = parser.exec(query)) {\n    var key = decode(part[1])\n      , value = decode(part[2]);\n\n    //\n    // Prevent overriding of existing properties. This ensures that build-in\n    // methods like `toString` or __proto__ are not overriden by malicious\n    // querystrings.\n    //\n    // In the case if failed decoding, we want to omit the key/value pairs\n    // from the result.\n    //\n    if (key === null || value === null || key in result) continue;\n    result[key] = value;\n  }\n\n  return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n  prefix = prefix || '';\n\n  var pairs = []\n    , value\n    , key;\n\n  //\n  // Optionally prefix with a '?' if needed\n  //\n  if ('string' !== typeof prefix) prefix = '?';\n\n  for (key in obj) {\n    if (has.call(obj, key)) {\n      value = obj[key];\n\n      //\n      // Edge cases where we actually want to encode the value to an empty\n      // string instead of the stringified value.\n      //\n      if (!value && (value === null || value === undef || isNaN(value))) {\n        value = '';\n      }\n\n      key = encode(key);\n      value = encode(value);\n\n      //\n      // If we failed to encode the strings, we should bail out as we don't\n      // want to add invalid strings to the query.\n      //\n      if (key === null || value === null) continue;\n      pairs.push(key +'='+ value);\n    }\n  }\n\n  return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n","'use strict';\n\nvar required = require('requires-port')\n  , qs = require('querystringify')\n  , controlOrWhitespace = /^[\\x00-\\x20\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]+/\n  , CRHTLF = /[\\n\\r\\t]/g\n  , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n  , port = /:\\d+$/\n  , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\\\/]+)?([\\S\\s]*)/i\n  , windowsDriveLetter = /^[a-zA-Z]:/;\n\n/**\n * Remove control characters and whitespace from the beginning of a string.\n *\n * @param {Object|String} str String to trim.\n * @returns {String} A new string representing `str` stripped of control\n *     characters and whitespace from its beginning.\n * @public\n */\nfunction trimLeft(str) {\n  return (str ? str : '').toString().replace(controlOrWhitespace, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n *    indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n *    the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n  ['#', 'hash'],                        // Extract from the back.\n  ['?', 'query'],                       // Extract from the back.\n  function sanitize(address, url) {     // Sanitize what is left of the address\n    return isSpecial(url.protocol) ? address.replace(/\\\\/g, '/') : address;\n  },\n  ['/', 'pathname'],                    // Extract from the back.\n  ['@', 'auth', 1],                     // Extract from the front.\n  [NaN, 'host', undefined, 1, 1],       // Set left over value.\n  [/:(\\d*)$/, 'port', undefined, 1],    // RegExp the back.\n  [NaN, 'hostname', undefined, 1, 1]    // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n  var globalVar;\n\n  if (typeof window !== 'undefined') globalVar = window;\n  else if (typeof global !== 'undefined') globalVar = global;\n  else if (typeof self !== 'undefined') globalVar = self;\n  else globalVar = {};\n\n  var location = globalVar.location || {};\n  loc = loc || location;\n\n  var finaldestination = {}\n    , type = typeof loc\n    , key;\n\n  if ('blob:' === loc.protocol) {\n    finaldestination = new Url(unescape(loc.pathname), {});\n  } else if ('string' === type) {\n    finaldestination = new Url(loc, {});\n    for (key in ignore) delete finaldestination[key];\n  } else if ('object' === type) {\n    for (key in loc) {\n      if (key in ignore) continue;\n      finaldestination[key] = loc[key];\n    }\n\n    if (finaldestination.slashes === undefined) {\n      finaldestination.slashes = slashes.test(loc.href);\n    }\n  }\n\n  return finaldestination;\n}\n\n/**\n * Check whether a protocol scheme is special.\n *\n * @param {String} The protocol scheme of the URL\n * @return {Boolean} `true` if the protocol scheme is special, else `false`\n * @private\n */\nfunction isSpecial(scheme) {\n  return (\n    scheme === 'file:' ||\n    scheme === 'ftp:' ||\n    scheme === 'http:' ||\n    scheme === 'https:' ||\n    scheme === 'ws:' ||\n    scheme === 'wss:'\n  );\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @param {Object} location\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address, location) {\n  address = trimLeft(address);\n  address = address.replace(CRHTLF, '');\n  location = location || {};\n\n  var match = protocolre.exec(address);\n  var protocol = match[1] ? match[1].toLowerCase() : '';\n  var forwardSlashes = !!match[2];\n  var otherSlashes = !!match[3];\n  var slashesCount = 0;\n  var rest;\n\n  if (forwardSlashes) {\n    if (otherSlashes) {\n      rest = match[2] + match[3] + match[4];\n      slashesCount = match[2].length + match[3].length;\n    } else {\n      rest = match[2] + match[4];\n      slashesCount = match[2].length;\n    }\n  } else {\n    if (otherSlashes) {\n      rest = match[3] + match[4];\n      slashesCount = match[3].length;\n    } else {\n      rest = match[4]\n    }\n  }\n\n  if (protocol === 'file:') {\n    if (slashesCount >= 2) {\n      rest = rest.slice(2);\n    }\n  } else if (isSpecial(protocol)) {\n    rest = match[4];\n  } else if (protocol) {\n    if (forwardSlashes) {\n      rest = rest.slice(2);\n    }\n  } else if (slashesCount >= 2 && isSpecial(location.protocol)) {\n    rest = match[4];\n  }\n\n  return {\n    protocol: protocol,\n    slashes: forwardSlashes || isSpecial(protocol),\n    slashesCount: slashesCount,\n    rest: rest\n  };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n  if (relative === '') return base;\n\n  var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n    , i = path.length\n    , last = path[i - 1]\n    , unshift = false\n    , up = 0;\n\n  while (i--) {\n    if (path[i] === '.') {\n      path.splice(i, 1);\n    } else if (path[i] === '..') {\n      path.splice(i, 1);\n      up++;\n    } else if (up) {\n      if (i === 0) unshift = true;\n      path.splice(i, 1);\n      up--;\n    }\n  }\n\n  if (unshift) path.unshift('');\n  if (last === '.' || last === '..') path.push('');\n\n  return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n  address = trimLeft(address);\n  address = address.replace(CRHTLF, '');\n\n  if (!(this instanceof Url)) {\n    return new Url(address, location, parser);\n  }\n\n  var relative, extracted, parse, instruction, index, key\n    , instructions = rules.slice()\n    , type = typeof location\n    , url = this\n    , i = 0;\n\n  //\n  // The following if statements allows this module two have compatibility with\n  // 2 different API:\n  //\n  // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n  //    where the boolean indicates that the query string should also be parsed.\n  //\n  // 2. The `URL` interface of the browser which accepts a URL, object as\n  //    arguments. The supplied object will be used as default values / fall-back\n  //    for relative paths.\n  //\n  if ('object' !== type && 'string' !== type) {\n    parser = location;\n    location = null;\n  }\n\n  if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n  location = lolcation(location);\n\n  //\n  // Extract protocol information before running the instructions.\n  //\n  extracted = extractProtocol(address || '', location);\n  relative = !extracted.protocol && !extracted.slashes;\n  url.slashes = extracted.slashes || relative && location.slashes;\n  url.protocol = extracted.protocol || location.protocol || '';\n  address = extracted.rest;\n\n  //\n  // When the authority component is absent the URL starts with a path\n  // component.\n  //\n  if (\n    extracted.protocol === 'file:' && (\n      extracted.slashesCount !== 2 || windowsDriveLetter.test(address)) ||\n    (!extracted.slashes &&\n      (extracted.protocol ||\n        extracted.slashesCount < 2 ||\n        !isSpecial(url.protocol)))\n  ) {\n    instructions[3] = [/(.*)/, 'pathname'];\n  }\n\n  for (; i < instructions.length; i++) {\n    instruction = instructions[i];\n\n    if (typeof instruction === 'function') {\n      address = instruction(address, url);\n      continue;\n    }\n\n    parse = instruction[0];\n    key = instruction[1];\n\n    if (parse !== parse) {\n      url[key] = address;\n    } else if ('string' === typeof parse) {\n      index = parse === '@'\n        ? address.lastIndexOf(parse)\n        : address.indexOf(parse);\n\n      if (~index) {\n        if ('number' === typeof instruction[2]) {\n          url[key] = address.slice(0, index);\n          address = address.slice(index + instruction[2]);\n        } else {\n          url[key] = address.slice(index);\n          address = address.slice(0, index);\n        }\n      }\n    } else if ((index = parse.exec(address))) {\n      url[key] = index[1];\n      address = address.slice(0, index.index);\n    }\n\n    url[key] = url[key] || (\n      relative && instruction[3] ? location[key] || '' : ''\n    );\n\n    //\n    // Hostname, host and protocol should be lowercased so they can be used to\n    // create a proper `origin`.\n    //\n    if (instruction[4]) url[key] = url[key].toLowerCase();\n  }\n\n  //\n  // Also parse the supplied query string in to an object. If we're supplied\n  // with a custom parser as function use that instead of the default build-in\n  // parser.\n  //\n  if (parser) url.query = parser(url.query);\n\n  //\n  // If the URL is relative, resolve the pathname against the base URL.\n  //\n  if (\n      relative\n    && location.slashes\n    && url.pathname.charAt(0) !== '/'\n    && (url.pathname !== '' || location.pathname !== '')\n  ) {\n    url.pathname = resolve(url.pathname, location.pathname);\n  }\n\n  //\n  // Default to a / for pathname if none exists. This normalizes the URL\n  // to always have a /\n  //\n  if (url.pathname.charAt(0) !== '/' && isSpecial(url.protocol)) {\n    url.pathname = '/' + url.pathname;\n  }\n\n  //\n  // We should not add port numbers if they are already the default port number\n  // for a given protocol. As the host also contains the port number we're going\n  // override it with the hostname which contains no port number.\n  //\n  if (!required(url.port, url.protocol)) {\n    url.host = url.hostname;\n    url.port = '';\n  }\n\n  //\n  // Parse down the `auth` for the username and password.\n  //\n  url.username = url.password = '';\n\n  if (url.auth) {\n    index = url.auth.indexOf(':');\n\n    if (~index) {\n      url.username = url.auth.slice(0, index);\n      url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n      url.password = url.auth.slice(index + 1);\n      url.password = encodeURIComponent(decodeURIComponent(url.password))\n    } else {\n      url.username = encodeURIComponent(decodeURIComponent(url.auth));\n    }\n\n    url.auth = url.password ? url.username +':'+ url.password : url.username;\n  }\n\n  url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n    ? url.protocol +'//'+ url.host\n    : 'null';\n\n  //\n  // The href is just the compiled result.\n  //\n  url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part          Property we need to adjust.\n * @param {Mixed} value          The newly assigned value.\n * @param {Boolean|Function} fn  When setting the query, it will be the function\n *                               used to parse the query.\n *                               When setting the protocol, double slash will be\n *                               removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n  var url = this;\n\n  switch (part) {\n    case 'query':\n      if ('string' === typeof value && value.length) {\n        value = (fn || qs.parse)(value);\n      }\n\n      url[part] = value;\n      break;\n\n    case 'port':\n      url[part] = value;\n\n      if (!required(value, url.protocol)) {\n        url.host = url.hostname;\n        url[part] = '';\n      } else if (value) {\n        url.host = url.hostname +':'+ value;\n      }\n\n      break;\n\n    case 'hostname':\n      url[part] = value;\n\n      if (url.port) value += ':'+ url.port;\n      url.host = value;\n      break;\n\n    case 'host':\n      url[part] = value;\n\n      if (port.test(value)) {\n        value = value.split(':');\n        url.port = value.pop();\n        url.hostname = value.join(':');\n      } else {\n        url.hostname = value;\n        url.port = '';\n      }\n\n      break;\n\n    case 'protocol':\n      url.protocol = value.toLowerCase();\n      url.slashes = !fn;\n      break;\n\n    case 'pathname':\n    case 'hash':\n      if (value) {\n        var char = part === 'pathname' ? '/' : '#';\n        url[part] = value.charAt(0) !== char ? char + value : value;\n      } else {\n        url[part] = value;\n      }\n      break;\n\n    case 'username':\n    case 'password':\n      url[part] = encodeURIComponent(value);\n      break;\n\n    case 'auth':\n      var index = value.indexOf(':');\n\n      if (~index) {\n        url.username = value.slice(0, index);\n        url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n        url.password = value.slice(index + 1);\n        url.password = encodeURIComponent(decodeURIComponent(url.password));\n      } else {\n        url.username = encodeURIComponent(decodeURIComponent(value));\n      }\n  }\n\n  for (var i = 0; i < rules.length; i++) {\n    var ins = rules[i];\n\n    if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n  }\n\n  url.auth = url.password ? url.username +':'+ url.password : url.username;\n\n  url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n    ? url.protocol +'//'+ url.host\n    : 'null';\n\n  url.href = url.toString();\n\n  return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n  if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n  var query\n    , url = this\n    , host = url.host\n    , protocol = url.protocol;\n\n  if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n  var result =\n    protocol +\n    ((url.protocol && url.slashes) || isSpecial(url.protocol) ? '//' : '');\n\n  if (url.username) {\n    result += url.username;\n    if (url.password) result += ':'+ url.password;\n    result += '@';\n  } else if (url.password) {\n    result += ':'+ url.password;\n    result += '@';\n  } else if (\n    url.protocol !== 'file:' &&\n    isSpecial(url.protocol) &&\n    !host &&\n    url.pathname !== '/'\n  ) {\n    //\n    // Add back the empty userinfo, otherwise the original invalid URL\n    // might be transformed into a valid one with `url.pathname` as host.\n    //\n    result += '@';\n  }\n\n  //\n  // Trailing colon is removed from `url.host` when it is parsed. If it still\n  // ends with a colon, then add back the trailing colon that was removed. This\n  // prevents an invalid URL from being transformed into a valid one.\n  //\n  if (host[host.length - 1] === ':' || (port.test(url.hostname) && !url.port)) {\n    host += ':';\n  }\n\n  result += host + url.pathname;\n\n  query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n  if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n  if (url.hash) result += url.hash;\n\n  return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\n","/**\n * Generate a UUID v4 based on random numbers. We intentioanlly use the less\n * secure Math.random function here since the more secure crypto.getRandomNumbers\n * is not available on all platforms.\n * This is not a problem for us since we use the UUID only for generating a\n * request ID, so we can correlate server logs to client errors.\n *\n * This function is taken from following site:\n * https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\n *\n * @return {string} The generate UUID\n */\nexport default function uuid() {\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n    const r = (Math.random() * 16) | 0\n    const v = c === 'x' ? r : (r & 0x3) | 0x8\n    return v.toString(16)\n  })\n}\n","import { Base64 } from 'js-base64'\nimport URL from 'url-parse'\nimport DetailedError from './error.js'\nimport { log } from './logger.js'\nimport uuid from './uuid.js'\n\nconst PROTOCOL_TUS_V1 = 'tus-v1'\nconst PROTOCOL_IETF_DRAFT_03 = 'ietf-draft-03'\nconst PROTOCOL_IETF_DRAFT_05 = 'ietf-draft-05'\n\nconst defaultOptions = {\n  endpoint: null,\n\n  uploadUrl: null,\n  metadata: {},\n  metadataForPartialUploads: {},\n  fingerprint: null,\n  uploadSize: null,\n\n  onProgress: null,\n  onChunkComplete: null,\n  onSuccess: null,\n  onError: null,\n  onUploadUrlAvailable: null,\n\n  overridePatchMethod: false,\n  headers: {},\n  addRequestId: false,\n  onBeforeRequest: null,\n  onAfterResponse: null,\n  onShouldRetry: defaultOnShouldRetry,\n\n  chunkSize: Number.POSITIVE_INFINITY,\n  retryDelays: [0, 1000, 3000, 5000],\n  parallelUploads: 1,\n  parallelUploadBoundaries: null,\n  storeFingerprintForResuming: true,\n  removeFingerprintOnSuccess: false,\n  uploadLengthDeferred: false,\n  uploadDataDuringCreation: false,\n\n  urlStorage: null,\n  fileReader: null,\n  httpStack: null,\n\n  protocol: PROTOCOL_TUS_V1,\n}\n\nclass BaseUpload {\n  constructor(file, options) {\n    // Warn about removed options from previous versions\n    if ('resume' in options) {\n      console.log(\n        'tus: The `resume` option has been removed in tus-js-client v2. Please use the URL storage API instead.',\n      )\n    }\n\n    // The default options will already be added from the wrapper classes.\n    this.options = options\n\n    // Cast chunkSize to integer\n    this.options.chunkSize = Number(this.options.chunkSize)\n\n    // The storage module used to store URLs\n    this._urlStorage = this.options.urlStorage\n\n    // The underlying File/Blob object\n    this.file = file\n\n    // The URL against which the file will be uploaded\n    this.url = null\n\n    // The underlying request object for the current PATCH request\n    this._req = null\n\n    // The fingerpinrt for the current file (set after start())\n    this._fingerprint = null\n\n    // The key that the URL storage returned when saving an URL with a fingerprint,\n    this._urlStorageKey = null\n\n    // The offset used in the current PATCH request\n    this._offset = null\n\n    // True if the current PATCH request has been aborted\n    this._aborted = false\n\n    // The file's size in bytes\n    this._size = null\n\n    // The Source object which will wrap around the given file and provides us\n    // with a unified interface for getting its size and slice chunks from its\n    // content allowing us to easily handle Files, Blobs, Buffers and Streams.\n    this._source = null\n\n    // The current count of attempts which have been made. Zero indicates none.\n    this._retryAttempt = 0\n\n    // The timeout's ID which is used to delay the next retry\n    this._retryTimeout = null\n\n    // The offset of the remote upload before the latest attempt was started.\n    this._offsetBeforeRetry = 0\n\n    // An array of BaseUpload instances which are used for uploading the different\n    // parts, if the parallelUploads option is used.\n    this._parallelUploads = null\n\n    // An array of upload URLs which are used for uploading the different\n    // parts, if the parallelUploads option is used.\n    this._parallelUploadUrls = null\n  }\n\n  /**\n   * Use the Termination extension to delete an upload from the server by sending a DELETE\n   * request to the specified upload URL. This is only possible if the server supports the\n   * Termination extension. If the `options.retryDelays` property is set, the method will\n   * also retry if an error ocurrs.\n   *\n   * @param {String} url The upload's URL which will be terminated.\n   * @param {object} options Optional options for influencing HTTP requests.\n   * @return {Promise} The Promise will be resolved/rejected when the requests finish.\n   */\n  static terminate(url, options = {}) {\n    const req = openRequest('DELETE', url, options)\n\n    return sendRequest(req, null, options)\n      .then((res) => {\n        // A 204 response indicates a successfull request\n        if (res.getStatus() === 204) {\n          return\n        }\n\n        throw new DetailedError('tus: unexpected response while terminating upload', null, req, res)\n      })\n      .catch((err) => {\n        if (!(err instanceof DetailedError)) {\n          err = new DetailedError('tus: failed to terminate upload', err, req, null)\n        }\n\n        if (!shouldRetry(err, 0, options)) {\n          throw err\n        }\n\n        // Instead of keeping track of the retry attempts, we remove the first element from the delays\n        // array. If the array is empty, all retry attempts are used up and we will bubble up the error.\n        // We recursively call the terminate function will removing elements from the retryDelays array.\n        const delay = options.retryDelays[0]\n        const remainingDelays = options.retryDelays.slice(1)\n        const newOptions = {\n          ...options,\n          retryDelays: remainingDelays,\n        }\n        return new Promise((resolve) => setTimeout(resolve, delay)).then(() =>\n          BaseUpload.terminate(url, newOptions),\n        )\n      })\n  }\n\n  findPreviousUploads() {\n    return this.options\n      .fingerprint(this.file, this.options)\n      .then((fingerprint) => this._urlStorage.findUploadsByFingerprint(fingerprint))\n  }\n\n  resumeFromPreviousUpload(previousUpload) {\n    this.url = previousUpload.uploadUrl || null\n    this._parallelUploadUrls = previousUpload.parallelUploadUrls || null\n    this._urlStorageKey = previousUpload.urlStorageKey\n  }\n\n  start() {\n    const { file } = this\n\n    if (!file) {\n      this._emitError(new Error('tus: no file or stream to upload provided'))\n      return\n    }\n\n    if (\n      ![PROTOCOL_TUS_V1, PROTOCOL_IETF_DRAFT_03, PROTOCOL_IETF_DRAFT_05].includes(\n        this.options.protocol,\n      )\n    ) {\n      this._emitError(new Error(`tus: unsupported protocol ${this.options.protocol}`))\n      return\n    }\n\n    if (!this.options.endpoint && !this.options.uploadUrl && !this.url) {\n      this._emitError(new Error('tus: neither an endpoint or an upload URL is provided'))\n      return\n    }\n\n    const { retryDelays } = this.options\n    if (retryDelays != null && Object.prototype.toString.call(retryDelays) !== '[object Array]') {\n      this._emitError(new Error('tus: the `retryDelays` option must either be an array or null'))\n      return\n    }\n\n    if (this.options.parallelUploads > 1) {\n      // Test which options are incompatible with parallel uploads.\n      for (const optionName of ['uploadUrl', 'uploadSize', 'uploadLengthDeferred']) {\n        if (this.options[optionName]) {\n          this._emitError(\n            new Error(`tus: cannot use the ${optionName} option when parallelUploads is enabled`),\n          )\n          return\n        }\n      }\n    }\n\n    if (this.options.parallelUploadBoundaries) {\n      if (this.options.parallelUploads <= 1) {\n        this._emitError(\n          new Error(\n            'tus: cannot use the `parallelUploadBoundaries` option when `parallelUploads` is disabled',\n          ),\n        )\n        return\n      }\n      if (this.options.parallelUploads !== this.options.parallelUploadBoundaries.length) {\n        this._emitError(\n          new Error(\n            'tus: the `parallelUploadBoundaries` must have the same length as the value of `parallelUploads`',\n          ),\n        )\n        return\n      }\n    }\n\n    this.options\n      .fingerprint(file, this.options)\n      .then((fingerprint) => {\n        if (fingerprint == null) {\n          log(\n            'No fingerprint was calculated meaning that the upload cannot be stored in the URL storage.',\n          )\n        } else {\n          log(`Calculated fingerprint: ${fingerprint}`)\n        }\n\n        this._fingerprint = fingerprint\n\n        if (this._source) {\n          return this._source\n        }\n        return this.options.fileReader.openFile(file, this.options.chunkSize)\n      })\n      .then((source) => {\n        this._source = source\n\n        // First, we look at the uploadLengthDeferred option.\n        // Next, we check if the caller has supplied a manual upload size.\n        // Finally, we try to use the calculated size from the source object.\n        if (this.options.uploadLengthDeferred) {\n          this._size = null\n        } else if (this.options.uploadSize != null) {\n          this._size = Number(this.options.uploadSize)\n          if (Number.isNaN(this._size)) {\n            this._emitError(new Error('tus: cannot convert `uploadSize` option into a number'))\n            return\n          }\n        } else {\n          this._size = this._source.size\n          if (this._size == null) {\n            this._emitError(\n              new Error(\n                \"tus: cannot automatically derive upload's size from input. Specify it manually using the `uploadSize` option or use the `uploadLengthDeferred` option\",\n              ),\n            )\n            return\n          }\n        }\n\n        // If the upload was configured to use multiple requests or if we resume from\n        // an upload which used multiple requests, we start a parallel upload.\n        if (this.options.parallelUploads > 1 || this._parallelUploadUrls != null) {\n          this._startParallelUpload()\n        } else {\n          this._startSingleUpload()\n        }\n      })\n      .catch((err) => {\n        this._emitError(err)\n      })\n  }\n\n  /**\n   * Initiate the uploading procedure for a parallelized upload, where one file is split into\n   * multiple request which are run in parallel.\n   *\n   * @api private\n   */\n  _startParallelUpload() {\n    const totalSize = this._size\n    let totalProgress = 0\n    this._parallelUploads = []\n\n    const partCount =\n      this._parallelUploadUrls != null\n        ? this._parallelUploadUrls.length\n        : this.options.parallelUploads\n\n    // The input file will be split into multiple slices which are uploaded in separate\n    // requests. Here we get the start and end position for the slices.\n    const parts =\n      this.options.parallelUploadBoundaries ?? splitSizeIntoParts(this._source.size, partCount)\n\n    // Attach URLs from previous uploads, if available.\n    if (this._parallelUploadUrls) {\n      parts.forEach((part, index) => {\n        part.uploadUrl = this._parallelUploadUrls[index] || null\n      })\n    }\n\n    // Create an empty list for storing the upload URLs\n    this._parallelUploadUrls = new Array(parts.length)\n\n    // Generate a promise for each slice that will be resolve if the respective\n    // upload is completed.\n    const uploads = parts.map((part, index) => {\n      let lastPartProgress = 0\n\n      return this._source.slice(part.start, part.end).then(\n        ({ value }) =>\n          new Promise((resolve, reject) => {\n            // Merge with the user supplied options but overwrite some values.\n            const options = {\n              ...this.options,\n              // If available, the partial upload should be resumed from a previous URL.\n              uploadUrl: part.uploadUrl || null,\n              // We take manually care of resuming for partial uploads, so they should\n              // not be stored in the URL storage.\n              storeFingerprintForResuming: false,\n              removeFingerprintOnSuccess: false,\n              // Reset the parallelUploads option to not cause recursion.\n              parallelUploads: 1,\n              // Reset this option as we are not doing a parallel upload.\n              parallelUploadBoundaries: null,\n              metadata: this.options.metadataForPartialUploads,\n              // Add the header to indicate the this is a partial upload.\n              headers: {\n                ...this.options.headers,\n                'Upload-Concat': 'partial',\n              },\n              // Reject or resolve the promise if the upload errors or completes.\n              onSuccess: resolve,\n              onError: reject,\n              // Based in the progress for this partial upload, calculate the progress\n              // for the entire final upload.\n              onProgress: (newPartProgress) => {\n                totalProgress = totalProgress - lastPartProgress + newPartProgress\n                lastPartProgress = newPartProgress\n                this._emitProgress(totalProgress, totalSize)\n              },\n              // Wait until every partial upload has an upload URL, so we can add\n              // them to the URL storage.\n              onUploadUrlAvailable: () => {\n                this._parallelUploadUrls[index] = upload.url\n                // Test if all uploads have received an URL\n                if (this._parallelUploadUrls.filter((u) => Boolean(u)).length === parts.length) {\n                  this._saveUploadInUrlStorage()\n                }\n              },\n            }\n\n            const upload = new BaseUpload(value, options)\n            upload.start()\n\n            // Store the upload in an array, so we can later abort them if necessary.\n            this._parallelUploads.push(upload)\n          }),\n      )\n    })\n\n    let req\n    // Wait until all partial uploads are finished and we can send the POST request for\n    // creating the final upload.\n    Promise.all(uploads)\n      .then(() => {\n        req = this._openRequest('POST', this.options.endpoint)\n        req.setHeader('Upload-Concat', `final;${this._parallelUploadUrls.join(' ')}`)\n\n        // Add metadata if values have been added\n        const metadata = encodeMetadata(this.options.metadata)\n        if (metadata !== '') {\n          req.setHeader('Upload-Metadata', metadata)\n        }\n\n        return this._sendRequest(req, null)\n      })\n      .then((res) => {\n        if (!inStatusCategory(res.getStatus(), 200)) {\n          this._emitHttpError(req, res, 'tus: unexpected response while creating upload')\n          return\n        }\n\n        const location = res.getHeader('Location')\n        if (location == null) {\n          this._emitHttpError(req, res, 'tus: invalid or missing Location header')\n          return\n        }\n\n        this.url = resolveUrl(this.options.endpoint, location)\n        log(`Created upload at ${this.url}`)\n\n        this._emitSuccess(res)\n      })\n      .catch((err) => {\n        this._emitError(err)\n      })\n  }\n\n  /**\n   * Initiate the uploading procedure for a non-parallel upload. Here the entire file is\n   * uploaded in a sequential matter.\n   *\n   * @api private\n   */\n  _startSingleUpload() {\n    // Reset the aborted flag when the upload is started or else the\n    // _performUpload will stop before sending a request if the upload has been\n    // aborted previously.\n    this._aborted = false\n\n    // The upload had been started previously and we should reuse this URL.\n    if (this.url != null) {\n      log(`Resuming upload from previous URL: ${this.url}`)\n      this._resumeUpload()\n      return\n    }\n\n    // A URL has manually been specified, so we try to resume\n    if (this.options.uploadUrl != null) {\n      log(`Resuming upload from provided URL: ${this.options.uploadUrl}`)\n      this.url = this.options.uploadUrl\n      this._resumeUpload()\n      return\n    }\n\n    // An upload has not started for the file yet, so we start a new one\n    log('Creating a new upload')\n    this._createUpload()\n  }\n\n  /**\n   * Abort any running request and stop the current upload. After abort is called, no event\n   * handler will be invoked anymore. You can use the `start` method to resume the upload\n   * again.\n   * If `shouldTerminate` is true, the `terminate` function will be called to remove the\n   * current upload from the server.\n   *\n   * @param {boolean} shouldTerminate True if the upload should be deleted from the server.\n   * @return {Promise} The Promise will be resolved/rejected when the requests finish.\n   */\n  abort(shouldTerminate) {\n    // Stop any parallel partial uploads, that have been started in _startParallelUploads.\n    if (this._parallelUploads != null) {\n      for (const upload of this._parallelUploads) {\n        upload.abort(shouldTerminate)\n      }\n    }\n\n    // Stop any current running request.\n    if (this._req !== null) {\n      this._req.abort()\n      // Note: We do not close the file source here, so the user can resume in the future.\n    }\n    this._aborted = true\n\n    // Stop any timeout used for initiating a retry.\n    if (this._retryTimeout != null) {\n      clearTimeout(this._retryTimeout)\n      this._retryTimeout = null\n    }\n\n    if (!shouldTerminate || this.url == null) {\n      return Promise.resolve()\n    }\n\n    return (\n      BaseUpload.terminate(this.url, this.options)\n        // Remove entry from the URL storage since the upload URL is no longer valid.\n        .then(() => this._removeFromUrlStorage())\n    )\n  }\n\n  _emitHttpError(req, res, message, causingErr) {\n    this._emitError(new DetailedError(message, causingErr, req, res))\n  }\n\n  _emitError(err) {\n    // Do not emit errors, e.g. from aborted HTTP requests, if the upload has been stopped.\n    if (this._aborted) return\n\n    // Check if we should retry, when enabled, before sending the error to the user.\n    if (this.options.retryDelays != null) {\n      // We will reset the attempt counter if\n      // - we were already able to connect to the server (offset != null) and\n      // - we were able to upload a small chunk of data to the server\n      const shouldResetDelays = this._offset != null && this._offset > this._offsetBeforeRetry\n      if (shouldResetDelays) {\n        this._retryAttempt = 0\n      }\n\n      if (shouldRetry(err, this._retryAttempt, this.options)) {\n        const delay = this.options.retryDelays[this._retryAttempt++]\n\n        this._offsetBeforeRetry = this._offset\n\n        this._retryTimeout = setTimeout(() => {\n          this.start()\n        }, delay)\n        return\n      }\n    }\n\n    if (typeof this.options.onError === 'function') {\n      this.options.onError(err)\n    } else {\n      throw err\n    }\n  }\n\n  /**\n   * Publishes notification if the upload has been successfully completed.\n   *\n   * @param {object} lastResponse Last HTTP response.\n   * @api private\n   */\n  _emitSuccess(lastResponse) {\n    if (this.options.removeFingerprintOnSuccess) {\n      // Remove stored fingerprint and corresponding endpoint. This causes\n      // new uploads of the same file to be treated as a different file.\n      this._removeFromUrlStorage()\n    }\n\n    if (typeof this.options.onSuccess === 'function') {\n      this.options.onSuccess({ lastResponse })\n    }\n  }\n\n  /**\n   * Publishes notification when data has been sent to the server. This\n   * data may not have been accepted by the server yet.\n   *\n   * @param {number} bytesSent  Number of bytes sent to the server.\n   * @param {number} bytesTotal Total number of bytes to be sent to the server.\n   * @api private\n   */\n  _emitProgress(bytesSent, bytesTotal) {\n    if (typeof this.options.onProgress === 'function') {\n      this.options.onProgress(bytesSent, bytesTotal)\n    }\n  }\n\n  /**\n   * Publishes notification when a chunk of data has been sent to the server\n   * and accepted by the server.\n   * @param {number} chunkSize  Size of the chunk that was accepted by the server.\n   * @param {number} bytesAccepted Total number of bytes that have been\n   *                                accepted by the server.\n   * @param {number} bytesTotal Total number of bytes to be sent to the server.\n   * @api private\n   */\n  _emitChunkComplete(chunkSize, bytesAccepted, bytesTotal) {\n    if (typeof this.options.onChunkComplete === 'function') {\n      this.options.onChunkComplete(chunkSize, bytesAccepted, bytesTotal)\n    }\n  }\n\n  /**\n   * Create a new upload using the creation extension by sending a POST\n   * request to the endpoint. After successful creation the file will be\n   * uploaded\n   *\n   * @api private\n   */\n  _createUpload() {\n    if (!this.options.endpoint) {\n      this._emitError(new Error('tus: unable to create upload because no endpoint is provided'))\n      return\n    }\n\n    const req = this._openRequest('POST', this.options.endpoint)\n\n    if (this.options.uploadLengthDeferred) {\n      req.setHeader('Upload-Defer-Length', '1')\n    } else {\n      req.setHeader('Upload-Length', `${this._size}`)\n    }\n\n    // Add metadata if values have been added\n    const metadata = encodeMetadata(this.options.metadata)\n    if (metadata !== '') {\n      req.setHeader('Upload-Metadata', metadata)\n    }\n\n    let promise\n    if (this.options.uploadDataDuringCreation && !this.options.uploadLengthDeferred) {\n      this._offset = 0\n      promise = this._addChunkToRequest(req)\n    } else {\n      if (\n        this.options.protocol === PROTOCOL_IETF_DRAFT_03 ||\n        this.options.protocol === PROTOCOL_IETF_DRAFT_05\n      ) {\n        req.setHeader('Upload-Complete', '?0')\n      }\n      promise = this._sendRequest(req, null)\n    }\n\n    promise\n      .then((res) => {\n        if (!inStatusCategory(res.getStatus(), 200)) {\n          this._emitHttpError(req, res, 'tus: unexpected response while creating upload')\n          return\n        }\n\n        const location = res.getHeader('Location')\n        if (location == null) {\n          this._emitHttpError(req, res, 'tus: invalid or missing Location header')\n          return\n        }\n\n        this.url = resolveUrl(this.options.endpoint, location)\n        log(`Created upload at ${this.url}`)\n\n        if (typeof this.options.onUploadUrlAvailable === 'function') {\n          this.options.onUploadUrlAvailable()\n        }\n\n        if (this._size === 0) {\n          // Nothing to upload and file was successfully created\n          this._emitSuccess(res)\n          this._source.close()\n          return\n        }\n\n        this._saveUploadInUrlStorage().then(() => {\n          if (this.options.uploadDataDuringCreation) {\n            this._handleUploadResponse(req, res)\n          } else {\n            this._offset = 0\n            this._performUpload()\n          }\n        })\n      })\n      .catch((err) => {\n        this._emitHttpError(req, null, 'tus: failed to create upload', err)\n      })\n  }\n\n  /*\n   * Try to resume an existing upload. First a HEAD request will be sent\n   * to retrieve the offset. If the request fails a new upload will be\n   * created. In the case of a successful response the file will be uploaded.\n   *\n   * @api private\n   */\n  _resumeUpload() {\n    const req = this._openRequest('HEAD', this.url)\n    const promise = this._sendRequest(req, null)\n\n    promise\n      .then((res) => {\n        const status = res.getStatus()\n        if (!inStatusCategory(status, 200)) {\n          // If the upload is locked (indicated by the 423 Locked status code), we\n          // emit an error instead of directly starting a new upload. This way the\n          // retry logic can catch the error and will retry the upload. An upload\n          // is usually locked for a short period of time and will be available\n          // afterwards.\n          if (status === 423) {\n            this._emitHttpError(req, res, 'tus: upload is currently locked; retry later')\n            return\n          }\n\n          if (inStatusCategory(status, 400)) {\n            // Remove stored fingerprint and corresponding endpoint,\n            // on client errors since the file can not be found\n            this._removeFromUrlStorage()\n          }\n\n          if (!this.options.endpoint) {\n            // Don't attempt to create a new upload if no endpoint is provided.\n            this._emitHttpError(\n              req,\n              res,\n              'tus: unable to resume upload (new upload cannot be created without an endpoint)',\n            )\n            return\n          }\n\n          // Try to create a new upload\n          this.url = null\n          this._createUpload()\n          return\n        }\n\n        const offset = Number.parseInt(res.getHeader('Upload-Offset'), 10)\n        if (Number.isNaN(offset)) {\n          this._emitHttpError(req, res, 'tus: invalid or missing offset value')\n          return\n        }\n\n        const length = Number.parseInt(res.getHeader('Upload-Length'), 10)\n        if (\n          Number.isNaN(length) &&\n          !this.options.uploadLengthDeferred &&\n          this.options.protocol === PROTOCOL_TUS_V1\n        ) {\n          this._emitHttpError(req, res, 'tus: invalid or missing length value')\n          return\n        }\n\n        if (typeof this.options.onUploadUrlAvailable === 'function') {\n          this.options.onUploadUrlAvailable()\n        }\n\n        this._saveUploadInUrlStorage().then(() => {\n          // Upload has already been completed and we do not need to send additional\n          // data to the server\n          if (offset === length) {\n            this._emitProgress(length, length)\n            this._emitSuccess(res)\n            return\n          }\n\n          this._offset = offset\n          this._performUpload()\n        })\n      })\n      .catch((err) => {\n        this._emitHttpError(req, null, 'tus: failed to resume upload', err)\n      })\n  }\n\n  /**\n   * Start uploading the file using PATCH requests. The file will be divided\n   * into chunks as specified in the chunkSize option. During the upload\n   * the onProgress event handler may be invoked multiple times.\n   *\n   * @api private\n   */\n  _performUpload() {\n    // If the upload has been aborted, we will not send the next PATCH request.\n    // This is important if the abort method was called during a callback, such\n    // as onChunkComplete or onProgress.\n    if (this._aborted) {\n      return\n    }\n\n    let req\n\n    // Some browser and servers may not support the PATCH method. For those\n    // cases, you can tell tus-js-client to use a POST request with the\n    // X-HTTP-Method-Override header for simulating a PATCH request.\n    if (this.options.overridePatchMethod) {\n      req = this._openRequest('POST', this.url)\n      req.setHeader('X-HTTP-Method-Override', 'PATCH')\n    } else {\n      req = this._openRequest('PATCH', this.url)\n    }\n\n    req.setHeader('Upload-Offset', `${this._offset}`)\n    const promise = this._addChunkToRequest(req)\n\n    promise\n      .then((res) => {\n        if (!inStatusCategory(res.getStatus(), 200)) {\n          this._emitHttpError(req, res, 'tus: unexpected response while uploading chunk')\n          return\n        }\n\n        this._handleUploadResponse(req, res)\n      })\n      .catch((err) => {\n        // Don't emit an error if the upload was aborted manually\n        if (this._aborted) {\n          return\n        }\n\n        this._emitHttpError(req, null, `tus: failed to upload chunk at offset ${this._offset}`, err)\n      })\n  }\n\n  /**\n   * _addChunktoRequest reads a chunk from the source and sends it using the\n   * supplied request object. It will not handle the response.\n   *\n   * @api private\n   */\n  _addChunkToRequest(req) {\n    const start = this._offset\n    let end = this._offset + this.options.chunkSize\n\n    req.setProgressHandler((bytesSent) => {\n      this._emitProgress(start + bytesSent, this._size)\n    })\n\n    if (this.options.protocol === PROTOCOL_TUS_V1) {\n      req.setHeader('Content-Type', 'application/offset+octet-stream')\n    } else if (this.options.protocol === PROTOCOL_IETF_DRAFT_05) {\n      req.setHeader('Content-Type', 'application/partial-upload')\n    }\n\n    // The specified chunkSize may be Infinity or the calcluated end position\n    // may exceed the file's size. In both cases, we limit the end position to\n    // the input's total size for simpler calculations and correctness.\n    if (\n      (end === Number.POSITIVE_INFINITY || end > this._size) &&\n      !this.options.uploadLengthDeferred\n    ) {\n      end = this._size\n    }\n\n    return this._source.slice(start, end).then(({ value, done }) => {\n      const valueSize = value?.size ? value.size : 0\n\n      // If the upload length is deferred, the upload size was not specified during\n      // upload creation. So, if the file reader is done reading, we know the total\n      // upload size and can tell the tus server.\n      if (this.options.uploadLengthDeferred && done) {\n        this._size = this._offset + valueSize\n        req.setHeader('Upload-Length', `${this._size}`)\n      }\n\n      // The specified uploadSize might not match the actual amount of data that a source\n      // provides. In these cases, we cannot successfully complete the upload, so we\n      // rather error out and let the user know. If not, tus-js-client will be stuck\n      // in a loop of repeating empty PATCH requests.\n      // See https://community.transloadit.com/t/how-to-abort-hanging-companion-uploads/16488/13\n      const newSize = this._offset + valueSize\n      if (!this.options.uploadLengthDeferred && done && newSize !== this._size) {\n        return Promise.reject(\n          new Error(\n            `upload was configured with a size of ${this._size} bytes, but the source is done after ${newSize} bytes`,\n          ),\n        )\n      }\n\n      if (value === null) {\n        return this._sendRequest(req)\n      }\n\n      if (\n        this.options.protocol === PROTOCOL_IETF_DRAFT_03 ||\n        this.options.protocol === PROTOCOL_IETF_DRAFT_05\n      ) {\n        req.setHeader('Upload-Complete', done ? '?1' : '?0')\n      }\n      this._emitProgress(this._offset, this._size)\n      return this._sendRequest(req, value)\n    })\n  }\n\n  /**\n   * _handleUploadResponse is used by requests that haven been sent using _addChunkToRequest\n   * and already have received a response.\n   *\n   * @api private\n   */\n  _handleUploadResponse(req, res) {\n    const offset = Number.parseInt(res.getHeader('Upload-Offset'), 10)\n    if (Number.isNaN(offset)) {\n      this._emitHttpError(req, res, 'tus: invalid or missing offset value')\n      return\n    }\n\n    this._emitProgress(offset, this._size)\n    this._emitChunkComplete(offset - this._offset, offset, this._size)\n\n    this._offset = offset\n\n    if (offset === this._size) {\n      // Yay, finally done :)\n      this._emitSuccess(res)\n      this._source.close()\n      return\n    }\n\n    this._performUpload()\n  }\n\n  /**\n   * Create a new HTTP request object with the given method and URL.\n   *\n   * @api private\n   */\n  _openRequest(method, url) {\n    const req = openRequest(method, url, this.options)\n    this._req = req\n    return req\n  }\n\n  /**\n   * Remove the entry in the URL storage, if it has been saved before.\n   *\n   * @api private\n   */\n  _removeFromUrlStorage() {\n    if (!this._urlStorageKey) return\n\n    this._urlStorage.removeUpload(this._urlStorageKey).catch((err) => {\n      this._emitError(err)\n    })\n    this._urlStorageKey = null\n  }\n\n  /**\n   * Add the upload URL to the URL storage, if possible.\n   *\n   * @api private\n   */\n  _saveUploadInUrlStorage() {\n    // We do not store the upload URL\n    // - if it was disabled in the option, or\n    // - if no fingerprint was calculated for the input (i.e. a stream), or\n    // - if the URL is already stored (i.e. key is set alread).\n    if (\n      !this.options.storeFingerprintForResuming ||\n      !this._fingerprint ||\n      this._urlStorageKey !== null\n    ) {\n      return Promise.resolve()\n    }\n\n    const storedUpload = {\n      size: this._size,\n      metadata: this.options.metadata,\n      creationTime: new Date().toString(),\n    }\n\n    if (this._parallelUploads) {\n      // Save multiple URLs if the parallelUploads option is used ...\n      storedUpload.parallelUploadUrls = this._parallelUploadUrls\n    } else {\n      // ... otherwise we just save the one available URL.\n      storedUpload.uploadUrl = this.url\n    }\n\n    return this._urlStorage.addUpload(this._fingerprint, storedUpload).then((urlStorageKey) => {\n      this._urlStorageKey = urlStorageKey\n    })\n  }\n\n  /**\n   * Send a request with the provided body.\n   *\n   * @api private\n   */\n  _sendRequest(req, body = null) {\n    return sendRequest(req, body, this.options)\n  }\n}\n\nfunction encodeMetadata(metadata) {\n  return Object.entries(metadata)\n    .map(([key, value]) => `${key} ${Base64.encode(String(value))}`)\n    .join(',')\n}\n\n/**\n * Checks whether a given status is in the range of the expected category.\n * For example, only a status between 200 and 299 will satisfy the category 200.\n *\n * @api private\n */\nfunction inStatusCategory(status, category) {\n  return status >= category && status < category + 100\n}\n\n/**\n * Create a new HTTP request with the specified method and URL.\n * The necessary headers that are included in every request\n * will be added, including the request ID.\n *\n * @api private\n */\nfunction openRequest(method, url, options) {\n  const req = options.httpStack.createRequest(method, url)\n\n  if (options.protocol === PROTOCOL_IETF_DRAFT_03) {\n    req.setHeader('Upload-Draft-Interop-Version', '5')\n  } else if (options.protocol === PROTOCOL_IETF_DRAFT_05) {\n    req.setHeader('Upload-Draft-Interop-Version', '6')\n  } else {\n    req.setHeader('Tus-Resumable', '1.0.0')\n  }\n  const headers = options.headers || {}\n\n  for (const [name, value] of Object.entries(headers)) {\n    req.setHeader(name, value)\n  }\n\n  if (options.addRequestId) {\n    const requestId = uuid()\n    req.setHeader('X-Request-ID', requestId)\n  }\n\n  return req\n}\n\n/**\n * Send a request with the provided body while invoking the onBeforeRequest\n * and onAfterResponse callbacks.\n *\n * @api private\n */\nasync function sendRequest(req, body, options) {\n  if (typeof options.onBeforeRequest === 'function') {\n    await options.onBeforeRequest(req)\n  }\n\n  const res = await req.send(body)\n\n  if (typeof options.onAfterResponse === 'function') {\n    await options.onAfterResponse(req, res)\n  }\n\n  return res\n}\n\n/**\n * Checks whether the browser running this code has internet access.\n * This function will always return true in the node.js environment\n *\n * @api private\n */\nfunction isOnline() {\n  let online = true\n  // Note: We don't reference `window` here because the navigator object also exists\n  // in a Web Worker's context.\n  if (typeof navigator !== 'undefined' && navigator.onLine === false) {\n    online = false\n  }\n\n  return online\n}\n\n/**\n * Checks whether or not it is ok to retry a request.\n * @param {Error|DetailedError} err the error returned from the last request\n * @param {number} retryAttempt the number of times the request has already been retried\n * @param {object} options tus Upload options\n *\n * @api private\n */\nfunction shouldRetry(err, retryAttempt, options) {\n  // We only attempt a retry if\n  // - retryDelays option is set\n  // - we didn't exceed the maxium number of retries, yet, and\n  // - this error was caused by a request or it's response and\n  // - the error is server error (i.e. not a status 4xx except a 409 or 423) or\n  // a onShouldRetry is specified and returns true\n  // - the browser does not indicate that we are offline\n  if (\n    options.retryDelays == null ||\n    retryAttempt >= options.retryDelays.length ||\n    err.originalRequest == null\n  ) {\n    return false\n  }\n\n  if (options && typeof options.onShouldRetry === 'function') {\n    return options.onShouldRetry(err, retryAttempt, options)\n  }\n\n  return defaultOnShouldRetry(err)\n}\n\n/**\n * determines if the request should be retried. Will only retry if not a status 4xx except a 409 or 423\n * @param {DetailedError} err\n * @returns {boolean}\n */\nfunction defaultOnShouldRetry(err) {\n  const status = err.originalResponse ? err.originalResponse.getStatus() : 0\n  return (!inStatusCategory(status, 400) || status === 409 || status === 423) && isOnline()\n}\n\n/**\n * Resolve a relative link given the origin as source. For example,\n * if a HTTP request to http://example.com/files/ returns a Location\n * header with the value /upload/abc, the resolved URL will be:\n * http://example.com/upload/abc\n */\nfunction resolveUrl(origin, link) {\n  return new URL(link, origin).toString()\n}\n\n/**\n * Calculate the start and end positions for the parts if an upload\n * is split into multiple parallel requests.\n *\n * @param {number} totalSize The byte size of the upload, which will be split.\n * @param {number} partCount The number in how many parts the upload will be split.\n * @return {object[]}\n * @api private\n */\nfunction splitSizeIntoParts(totalSize, partCount) {\n  const partSize = Math.floor(totalSize / partCount)\n  const parts = []\n\n  for (let i = 0; i < partCount; i++) {\n    parts.push({\n      start: partSize * i,\n      end: partSize * (i + 1),\n    })\n  }\n\n  parts[partCount - 1].end = totalSize\n\n  return parts\n}\n\nBaseUpload.defaultOptions = defaultOptions\n\nexport default BaseUpload\n","const isReactNative = () =>\n  typeof navigator !== 'undefined' &&\n  typeof navigator.product === 'string' &&\n  navigator.product.toLowerCase() === 'reactnative'\n\nexport default isReactNative\n","/**\n * uriToBlob resolves a URI to a Blob object. This is used for\n * React Native to retrieve a file (identified by a file://\n * URI) as a blob.\n */\nexport default function uriToBlob(uri) {\n  return new Promise((resolve, reject) => {\n    const xhr = new XMLHttpRequest()\n    xhr.responseType = 'blob'\n    xhr.onload = () => {\n      const blob = xhr.response\n      resolve(blob)\n    }\n    xhr.onerror = (err) => {\n      reject(err)\n    }\n    xhr.open('GET', uri)\n    xhr.send()\n  })\n}\n","const isCordova = () =>\n  typeof window !== 'undefined' &&\n  (typeof window.PhoneGap !== 'undefined' ||\n    typeof window.Cordova !== 'undefined' ||\n    typeof window.cordova !== 'undefined')\n\nexport default isCordova\n","/**\n * readAsByteArray converts a File object to a Uint8Array.\n * This function is only used on the Apache Cordova platform.\n * See https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file/index.html#read-a-file\n */\nexport default function readAsByteArray(chunk) {\n  return new Promise((resolve, reject) => {\n    const reader = new FileReader()\n    reader.onload = () => {\n      const value = new Uint8Array(reader.result)\n      resolve({ value })\n    }\n    reader.onerror = (err) => {\n      reject(err)\n    }\n    reader.readAsArrayBuffer(chunk)\n  })\n}\n","import isCordova from './isCordova.js'\nimport readAsByteArray from './readAsByteArray.js'\n\nexport default class FileSource {\n  // Make this.size a method\n  constructor(file) {\n    this._file = file\n    this.size = file.size\n  }\n\n  slice(start, end) {\n    // In Apache Cordova applications, a File must be resolved using\n    // FileReader instances, see\n    // https://cordova.apache.org/docs/en/8.x/reference/cordova-plugin-file/index.html#read-a-file\n    if (isCordova()) {\n      return readAsByteArray(this._file.slice(start, end))\n    }\n\n    const value = this._file.slice(start, end)\n    const done = end >= this.size\n    return Promise.resolve({ value, done })\n  }\n\n  close() {\n    // Nothing to do here since we don't need to release any resources.\n  }\n}\n","function len(blobOrArray) {\n  if (blobOrArray === undefined) return 0\n  if (blobOrArray.size !== undefined) return blobOrArray.size\n  return blobOrArray.length\n}\n\n/*\n  Typed arrays and blobs don't have a concat method.\n  This function helps StreamSource accumulate data to reach chunkSize.\n*/\nfunction concat(a, b) {\n  if (a.concat) {\n    // Is `a` an Array?\n    return a.concat(b)\n  }\n  if (a instanceof Blob) {\n    return new Blob([a, b], { type: a.type })\n  }\n  if (a.set) {\n    // Is `a` a typed array?\n    const c = new a.constructor(a.length + b.length)\n    c.set(a)\n    c.set(b, a.length)\n    return c\n  }\n  throw new Error('Unknown data type')\n}\n\nexport default class StreamSource {\n  constructor(reader) {\n    this._buffer = undefined\n    this._bufferOffset = 0\n    this._reader = reader\n    this._done = false\n  }\n\n  slice(start, end) {\n    if (start < this._bufferOffset) {\n      return Promise.reject(new Error(\"Requested data is before the reader's current offset\"))\n    }\n\n    return this._readUntilEnoughDataOrDone(start, end)\n  }\n\n  _readUntilEnoughDataOrDone(start, end) {\n    const hasEnoughData = end <= this._bufferOffset + len(this._buffer)\n    if (this._done || hasEnoughData) {\n      const value = this._getDataFromBuffer(start, end)\n      const done = value == null ? this._done : false\n      return Promise.resolve({ value, done })\n    }\n\n    return this._reader.read().then(({ value, done }) => {\n      if (done) {\n        this._done = true\n      } else if (this._buffer === undefined) {\n        this._buffer = value\n      } else {\n        this._buffer = concat(this._buffer, value)\n      }\n\n      return this._readUntilEnoughDataOrDone(start, end)\n    })\n  }\n\n  _getDataFromBuffer(start, end) {\n    // Remove data from buffer before `start`.\n    // Data might be reread from the buffer if an upload fails, so we can only\n    // safely delete data when it comes *before* what is currently being read.\n    if (start > this._bufferOffset) {\n      this._buffer = this._buffer.slice(start - this._bufferOffset)\n      this._bufferOffset = start\n    }\n    // If the buffer is empty after removing old data, all data has been read.\n    const hasAllDataBeenRead = len(this._buffer) === 0\n    if (this._done && hasAllDataBeenRead) {\n      return null\n    }\n    // We already removed data before `start`, so we just return the first\n    // chunk from the buffer.\n    return this._buffer.slice(0, end - start)\n  }\n\n  close() {\n    if (this._reader.cancel) {\n      this._reader.cancel()\n    }\n  }\n}\n","import isReactNative from './isReactNative.js'\nimport uriToBlob from './uriToBlob.js'\n\nimport FileSource from './sources/FileSource.js'\nimport StreamSource from './sources/StreamSource.js'\n\nexport default class FileReader {\n  async openFile(input, chunkSize) {\n    // In React Native, when user selects a file, instead of a File or Blob,\n    // you usually get a file object {} with a uri property that contains\n    // a local path to the file. We use XMLHttpRequest to fetch\n    // the file blob, before uploading with tus.\n    if (isReactNative() && input && typeof input.uri !== 'undefined') {\n      try {\n        const blob = await uriToBlob(input.uri)\n        return new FileSource(blob)\n      } catch (err) {\n        throw new Error(\n          `tus: cannot fetch \\`file.uri\\` as Blob, make sure the uri is correct and accessible. ${err}`,\n        )\n      }\n    }\n\n    // Since we emulate the Blob type in our tests (not all target browsers\n    // support it), we cannot use `instanceof` for testing whether the input value\n    // can be handled. Instead, we simply check is the slice() function and the\n    // size property are available.\n    if (typeof input.slice === 'function' && typeof input.size !== 'undefined') {\n      return Promise.resolve(new FileSource(input))\n    }\n\n    if (typeof input.read === 'function') {\n      chunkSize = Number(chunkSize)\n      if (!Number.isFinite(chunkSize)) {\n        return Promise.reject(\n          new Error(\n            'cannot create source for stream without a finite value for the `chunkSize` option',\n          ),\n        )\n      }\n\n      return Promise.resolve(new StreamSource(input, chunkSize))\n    }\n\n    return Promise.reject(\n      new Error(\n        'source object may only be an instance of File, Blob, or Reader in this environment',\n      ),\n    )\n  }\n}\n","import isReactNative from './isReactNative.js'\n\n// TODO: Differenciate between input types\n\n/**\n * Generate a fingerprint for a file which will be used the store the endpoint\n *\n * @param {File} file\n * @param {Object} options\n * @param {Function} callback\n */\nexport default function fingerprint(file, options) {\n  if (isReactNative()) {\n    return Promise.resolve(reactNativeFingerprint(file, options))\n  }\n\n  return Promise.resolve(\n    ['tus-br', file.name, file.type, file.size, file.lastModified, options.endpoint].join('-'),\n  )\n}\n\nfunction reactNativeFingerprint(file, options) {\n  const exifHash = file.exif ? hashCode(JSON.stringify(file.exif)) : 'noexif'\n  return ['tus-rn', file.name || 'noname', file.size || 'nosize', exifHash, options.endpoint].join(\n    '/',\n  )\n}\n\nfunction hashCode(str) {\n  // from https://stackoverflow.com/a/8831937/151666\n  let hash = 0\n  if (str.length === 0) {\n    return hash\n  }\n  for (let i = 0; i < str.length; i++) {\n    const char = str.charCodeAt(i)\n    hash = (hash << 5) - hash + char\n    hash &= hash // Convert to 32bit integer\n  }\n  return hash\n}\n","export default class XHRHttpStack {\n  createRequest(method, url) {\n    return new Request(method, url)\n  }\n\n  getName() {\n    return 'XHRHttpStack'\n  }\n}\n\nclass Request {\n  constructor(method, url) {\n    this._xhr = new XMLHttpRequest()\n    this._xhr.open(method, url, true)\n\n    this._method = method\n    this._url = url\n    this._headers = {}\n  }\n\n  getMethod() {\n    return this._method\n  }\n\n  getURL() {\n    return this._url\n  }\n\n  setHeader(header, value) {\n    this._xhr.setRequestHeader(header, value)\n    this._headers[header] = value\n  }\n\n  getHeader(header) {\n    return this._headers[header]\n  }\n\n  setProgressHandler(progressHandler) {\n    // Test support for progress events before attaching an event listener\n    if (!('upload' in this._xhr)) {\n      return\n    }\n\n    this._xhr.upload.onprogress = (e) => {\n      if (!e.lengthComputable) {\n        return\n      }\n\n      progressHandler(e.loaded)\n    }\n  }\n\n  send(body = null) {\n    return new Promise((resolve, reject) => {\n      this._xhr.onload = () => {\n        resolve(new Response(this._xhr))\n      }\n\n      this._xhr.onerror = (err) => {\n        reject(err)\n      }\n\n      this._xhr.send(body)\n    })\n  }\n\n  abort() {\n    this._xhr.abort()\n    return Promise.resolve()\n  }\n\n  getUnderlyingObject() {\n    return this._xhr\n  }\n}\n\nclass Response {\n  constructor(xhr) {\n    this._xhr = xhr\n  }\n\n  getStatus() {\n    return this._xhr.status\n  }\n\n  getHeader(header) {\n    return this._xhr.getResponseHeader(header)\n  }\n\n  getBody() {\n    return this._xhr.responseText\n  }\n\n  getUnderlyingObject() {\n    return this._xhr\n  }\n}\n","let hasStorage = false\ntry {\n  // Note: localStorage does not exist in the Web Worker's context, so we must use window here.\n  hasStorage = 'localStorage' in window\n\n  // Attempt to store and read entries from the local storage to detect Private\n  // Mode on Safari on iOS (see #49)\n  // If the key was not used before, we remove it from local storage again to\n  // not cause confusion where the entry came from.\n  const key = 'tusSupport'\n  const originalValue = localStorage.getItem(key)\n  localStorage.setItem(key, originalValue)\n  if (originalValue === null) localStorage.removeItem(key)\n} catch (e) {\n  // If we try to access localStorage inside a sandboxed iframe, a SecurityError\n  // is thrown. When in private mode on iOS Safari, a QuotaExceededError is\n  // thrown (see #49)\n  if (e.code === e.SECURITY_ERR || e.code === e.QUOTA_EXCEEDED_ERR) {\n    hasStorage = false\n  } else {\n    throw e\n  }\n}\n\nexport const canStoreURLs = hasStorage\n\nexport class WebStorageUrlStorage {\n  findAllUploads() {\n    const results = this._findEntries('tus::')\n    return Promise.resolve(results)\n  }\n\n  findUploadsByFingerprint(fingerprint) {\n    const results = this._findEntries(`tus::${fingerprint}::`)\n    return Promise.resolve(results)\n  }\n\n  removeUpload(urlStorageKey) {\n    localStorage.removeItem(urlStorageKey)\n    return Promise.resolve()\n  }\n\n  addUpload(fingerprint, upload) {\n    const id = Math.round(Math.random() * 1e12)\n    const key = `tus::${fingerprint}::${id}`\n\n    localStorage.setItem(key, JSON.stringify(upload))\n    return Promise.resolve(key)\n  }\n\n  _findEntries(prefix) {\n    const results = []\n\n    for (let i = 0; i < localStorage.length; i++) {\n      const key = localStorage.key(i)\n      if (key.indexOf(prefix) !== 0) continue\n\n      try {\n        const upload = JSON.parse(localStorage.getItem(key))\n        upload.urlStorageKey = key\n\n        results.push(upload)\n      } catch (_e) {\n        // The JSON parse error is intentionally ignored here, so a malformed\n        // entry in the storage cannot prevent an upload.\n      }\n    }\n\n    return results\n  }\n}\n","import DetailedError from '../error.js'\nimport { enableDebugLog } from '../logger.js'\nimport NoopUrlStorage from '../noopUrlStorage.js'\nimport BaseUpload from '../upload.js'\n\nimport FileReader from './fileReader.js'\nimport fingerprint from './fileSignature.js'\nimport DefaultHttpStack from './httpStack.js'\nimport { WebStorageUrlStorage, canStoreURLs } from './urlStorage.js'\n\nconst defaultOptions = {\n  ...BaseUpload.defaultOptions,\n  httpStack: new DefaultHttpStack(),\n  fileReader: new FileReader(),\n  urlStorage: canStoreURLs ? new WebStorageUrlStorage() : new NoopUrlStorage(),\n  fingerprint,\n}\n\nclass Upload extends BaseUpload {\n  constructor(file = null, options = {}) {\n    options = { ...defaultOptions, ...options }\n    super(file, options)\n  }\n\n  static terminate(url, options = {}) {\n    options = { ...defaultOptions, ...options }\n    return BaseUpload.terminate(url, options)\n  }\n}\n\n// Note: We don't reference `window` here because these classes also exist in a Web Worker's context.\nconst isSupported =\n  typeof XMLHttpRequest === 'function' &&\n  typeof Blob === 'function' &&\n  typeof Blob.prototype.slice === 'function'\n\nexport {\n  Upload,\n  canStoreURLs,\n  defaultOptions,\n  isSupported,\n  enableDebugLog,\n  DefaultHttpStack,\n  DetailedError,\n}\n","export const deleteUpload = async (\n  url: string,\n  csrfToken: string\n): Promise<void> =>\n  new Promise((resolve, reject) => {\n    const xhr = new XMLHttpRequest();\n    xhr.open(\"DELETE\", url);\n\n    xhr.addEventListener(\"load\", (): void => {\n      if (xhr.status === 204) {\n        resolve();\n      } else {\n        reject(new Error(\"Delete failed\"));\n      }\n    });\n    xhr.setRequestHeader(\"Tus-Resumable\", \"1.0.0\");\n    xhr.setRequestHeader(\"X-CSRFToken\", csrfToken);\n    xhr.send(null);\n  });\n","import { type HttpRequest, type HttpResponse, Upload } from \"tus-js-client\";\n\nimport BaseUpload, {\n  DEFAULT_RETRY_DELAYS,\n  type InitialFile\n} from \"./base_upload.ts\";\nimport { deleteUpload } from \"./tus_utils.ts\";\n\ninterface Parameters {\n  chunkSize: number;\n  csrfToken: string;\n  fieldName: string;\n  file: File;\n  formId: string;\n  retryDelays: null | number[];\n  uploadIndex: number;\n  uploadUrl: string;\n}\n\nexport default class TusUpload extends BaseUpload {\n  public onError?: (error: Error) => void;\n  public onProgress?: (bytesUploaded: number, bytesTotal: number) => void;\n  public onSuccess?: () => void;\n  private csrfToken: string;\n  private id: string;\n  private upload: Upload;\n\n  constructor({\n    chunkSize,\n    csrfToken,\n    fieldName,\n    file,\n    formId,\n    retryDelays,\n    uploadIndex,\n    uploadUrl\n  }: Parameters) {\n    super({ name: file.name, status: \"uploading\", type: \"tus\", uploadIndex });\n\n    this.csrfToken = csrfToken;\n\n    this.upload = new Upload(file, {\n      chunkSize,\n      endpoint: uploadUrl,\n      metadata: {\n        fieldName: fieldName,\n        filename: file.name,\n        formId: formId\n      },\n      onAfterResponse: this.handleAfterResponse,\n      onBeforeRequest: this.addCsrTokenToRequest,\n      onError: this.handleError,\n      onProgress: this.handleProgress,\n      onSuccess: this.handleSuccess,\n      retryDelays: retryDelays ?? DEFAULT_RETRY_DELAYS\n    });\n\n    this.onError = undefined;\n    this.onProgress = undefined;\n    this.onSuccess = undefined;\n  }\n\n  public async abort(): Promise<void> {\n    await this.upload.abort(true);\n  }\n\n  public async delete(): Promise<void> {\n    if (!this.upload.url) {\n      return;\n    }\n\n    await deleteUpload(this.upload.url, this.csrfToken);\n  }\n\n  public getId(): string | undefined {\n    return this.id;\n  }\n\n  getInitialFile(): InitialFile {\n    return {\n      id: this.id,\n      name: this.name,\n      size: this.getSize(),\n      type: \"tus\",\n      url: \"\"\n    };\n  }\n\n  public getSize(): number {\n    return (this.upload.file as File).size;\n  }\n\n  public start(): void {\n    this.upload.start();\n  }\n\n  private addCsrTokenToRequest = (request: HttpRequest) => {\n    request.setHeader(\"X-CSRFToken\", this.csrfToken);\n  };\n\n  private handleAfterResponse = (\n    _request: HttpRequest,\n    response: HttpResponse\n  ) => {\n    const resourceId = response.getHeader(\"ResourceId\");\n\n    if (resourceId) {\n      this.id = resourceId;\n    }\n  };\n\n  private handleError = (error: Error) => {\n    if (this.onError) {\n      this.onError(error);\n    } else {\n      throw error;\n    }\n  };\n\n  private handleProgress = (bytesUploaded: number, bytesTotal: number) => {\n    if (this.onProgress) {\n      this.onProgress(bytesUploaded, bytesTotal);\n    }\n  };\n\n  private handleSuccess = () => {\n    if (this.onSuccess) {\n      this.onSuccess();\n    }\n  };\n}\n","import BaseUpload, {\n  type InitialExistingFile,\n  type InitialFile,\n  type InitialPlaceholderFile,\n  type InitialS3File,\n  type InitialTusFile,\n  type UploadType\n} from \"./base_upload.ts\";\nimport { deleteUpload } from \"./tus_utils.ts\";\n\ninterface BaseUploadedFileParameters {\n  name: string;\n  size: number;\n  type: UploadType;\n  uploadIndex: number;\n}\n\ninterface UploadedFileParameters {\n  csrfToken: string;\n  initialFile: InitialFile;\n  uploadIndex: number;\n  uploadUrl: string;\n}\n\ninterface UploadedTusFileParameters {\n  csrfToken: string;\n  initialFile: InitialTusFile;\n  uploadIndex: number;\n  uploadUrl: string;\n}\n\nexport abstract class BaseUploadedFile extends BaseUpload {\n  size: number;\n\n  constructor({ name, size, type, uploadIndex }: BaseUploadedFileParameters) {\n    super({ name, status: \"done\", type, uploadIndex });\n\n    this.size = size;\n  }\n\n  public abort(): Promise<void> {\n    return Promise.resolve();\n  }\n\n  public delete(): Promise<void> {\n    return Promise.resolve();\n  }\n\n  public getSize(): number | undefined {\n    return this.size;\n  }\n}\n\nclass PlaceholderFile extends BaseUploadedFile {\n  id: string;\n\n  constructor(initialFile: InitialPlaceholderFile, uploadIndex: number) {\n    super({\n      name: initialFile.name,\n      size: initialFile.size,\n      type: \"placeholder\",\n      uploadIndex\n    });\n\n    this.id = initialFile.id;\n  }\n\n  public getId(): string | undefined {\n    return undefined;\n  }\n\n  public getInitialFile(): InitialPlaceholderFile {\n    return {\n      id: this.id,\n      name: this.name,\n      size: this.size,\n      type: \"placeholder\"\n    };\n  }\n}\n\nexport class ExistingFile extends BaseUploadedFile {\n  constructor(initialFile: InitialExistingFile, uploadIndex: number) {\n    super({\n      name: initialFile.name,\n      size: initialFile.size,\n      type: \"existing\",\n      uploadIndex\n    });\n  }\n\n  public getId(): string | undefined {\n    return undefined;\n  }\n\n  public getInitialFile(): InitialExistingFile {\n    return {\n      name: this.name,\n      size: this.size,\n      type: \"existing\"\n    };\n  }\n}\n\nexport class UploadedS3File extends BaseUploadedFile {\n  id: string;\n  key: string;\n\n  constructor(initialFile: InitialS3File, uploadIndex: number) {\n    super({\n      name: initialFile.original_name || initialFile.name,\n      size: initialFile.size,\n      type: \"uploadedS3\",\n      uploadIndex\n    });\n\n    this.id = initialFile.id;\n    this.key = initialFile.name;\n  }\n\n  public getId(): string | undefined {\n    return this.id;\n  }\n\n  getInitialFile(): InitialS3File {\n    return {\n      id: this.id,\n      name: this.key,\n      original_name: this.name,\n      size: this.size,\n      type: \"s3\"\n    };\n  }\n}\n\nexport class UploadedTusFile extends BaseUploadedFile {\n  csrfToken: string;\n  id: string;\n  url: string;\n\n  constructor({\n    csrfToken,\n    initialFile,\n    uploadIndex,\n    uploadUrl\n  }: UploadedTusFileParameters) {\n    super({\n      name: initialFile.name,\n      size: initialFile.size,\n      type: \"uploadedTus\",\n      uploadIndex\n    });\n\n    this.csrfToken = csrfToken;\n    this.id = initialFile.id;\n    this.url = `${uploadUrl}${initialFile.id}`;\n  }\n\n  public async delete(): Promise<void> {\n    await deleteUpload(this.url, this.csrfToken);\n  }\n\n  public getId(): string | undefined {\n    return this.id;\n  }\n\n  getInitialFile(): InitialTusFile {\n    return {\n      id: this.id,\n      name: this.name,\n      size: this.size,\n      type: \"tus\",\n      url: \"\"\n    };\n  }\n}\n\nexport const createUploadedFile = ({\n  csrfToken,\n  initialFile,\n  uploadIndex,\n  uploadUrl\n}: UploadedFileParameters): BaseUploadedFile => {\n  switch (initialFile.type) {\n    case \"existing\":\n      return new ExistingFile(initialFile, uploadIndex);\n\n    case \"placeholder\":\n      return new PlaceholderFile(initialFile, uploadIndex);\n\n    case \"s3\":\n      return new UploadedS3File(initialFile, uploadIndex);\n\n    case \"tus\":\n      return new UploadedTusFile({\n        csrfToken,\n        initialFile,\n        uploadIndex,\n        uploadUrl\n      });\n  }\n};\n","import type BaseUpload from \"./uploads/base_upload.ts\";\nimport type { InitialFile, UploadType } from \"./uploads/base_upload.ts\";\n\nimport AcceptedFileTypes from \"./accepted_file_types.ts\";\nimport DropArea from \"./drop_area.ts\";\nimport RenderUploadFile from \"./render_upload_file.ts\";\nimport S3Upload from \"./uploads/s3_upload.ts\";\nimport TusUpload from \"./uploads/tus_upload.ts\";\nimport { createUploadedFile } from \"./uploads/uploaded_file.ts\";\nimport {\n  findInput,\n  getMetadataFieldName,\n  getUploadsFieldName\n} from \"./util.ts\";\n\nexport interface Callbacks {\n  onClick?: ({ fieldName, fileName, type }: ClickEvent) => void;\n  onDelete?: (upload: BaseUpload) => void;\n  onError?: (error: unknown, upload: BaseUpload) => void;\n  onProgress?: (\n    bytesUploaded: number,\n    bytesTotal: number,\n    upload: BaseUpload\n  ) => void;\n  onSuccess?: (upload: BaseUpload) => void;\n}\n\nexport type Translations = Record<string, string>;\n\nexport type UploadEvent = CustomEvent<UploadEventDetail>;\n\nexport interface UploadEventDetail {\n  element: HTMLElement;\n  fieldName: string;\n  fileName: string;\n  metaDataField: HTMLElement | null;\n  upload: BaseUpload;\n}\n\nexport type UploadEventName = \"addUpload\" | \"removeUpload\" | \"uploadComplete\";\n\ninterface ClickEvent {\n  fieldName: string;\n  fileName: string;\n  id?: string;\n  type: UploadType;\n}\n\ninterface ConstructorParams {\n  callbacks: Callbacks;\n  chunkSize: number;\n  csrfToken: string;\n  fieldName: string;\n  form: Element;\n  formId: string;\n  initial: InitialFile[];\n  input: HTMLInputElement;\n  multiple: boolean;\n  parent: Element;\n  prefix: null | string;\n  retryDelays: null | number[];\n  s3UploadDir: null | string;\n  skipRequired: boolean;\n  supportDropArea: boolean;\n  translations: Translations;\n  uploadUrl: string;\n}\n\nclass FileField {\n  acceptedFileTypes: AcceptedFileTypes;\n  callbacks: Callbacks;\n  chunkSize: number;\n  csrfToken: string;\n  fieldName: string;\n  form: Element;\n  formId: string;\n  multiple: boolean;\n  nextUploadIndex: number;\n  prefix: null | string;\n  renderer: RenderUploadFile;\n  retryDelays: null | number[];\n  s3UploadDir: null | string;\n  supportDropArea: boolean;\n  uploads: BaseUpload[];\n  uploadUrl: string;\n\n  constructor({\n    callbacks,\n    chunkSize,\n    csrfToken,\n    fieldName,\n    form,\n    formId,\n    initial,\n    input,\n    multiple,\n    parent,\n    prefix,\n    retryDelays,\n    s3UploadDir,\n    skipRequired,\n    supportDropArea,\n    translations,\n    uploadUrl\n  }: ConstructorParams) {\n    this.callbacks = callbacks;\n    this.chunkSize = chunkSize;\n    this.csrfToken = csrfToken;\n    this.fieldName = fieldName;\n    this.form = form;\n    this.formId = formId;\n    this.multiple = multiple;\n    this.prefix = prefix;\n    this.retryDelays = retryDelays;\n    this.s3UploadDir = s3UploadDir;\n    this.supportDropArea = supportDropArea && !input.disabled;\n    this.uploadUrl = uploadUrl;\n    this.acceptedFileTypes = new AcceptedFileTypes(input.accept);\n\n    this.uploads = [];\n    this.nextUploadIndex = 0;\n\n    this.renderer = new RenderUploadFile({\n      clickableFilenames: callbacks.onClick != null,\n      input,\n      parent,\n      skipRequired,\n      translations\n    });\n    const filesContainer = this.renderer.container;\n\n    // No drop area for a disabled input\n    if (this.supportDropArea) {\n      this.initDropArea(filesContainer, input.accept);\n    }\n\n    this.addInitialFiles(initial);\n\n    this.checkDropHint();\n\n    input.addEventListener(\"change\", this.onChange);\n    filesContainer.addEventListener(\"click\", this.handleClick);\n  }\n\n  addInitialFiles(initialFiles: InitialFile[]): void {\n    if (initialFiles.length === 0) {\n      return;\n    }\n\n    const { multiple, renderer } = this;\n\n    const addInitialFile = (initialFile: InitialFile): void => {\n      const { size } = initialFile;\n      const name =\n        initialFile.type === \"s3\" && initialFile.original_name\n          ? initialFile.original_name\n          : initialFile.name;\n\n      const element = renderer.addUploadedFile(\n        name,\n        this.nextUploadIndex,\n        size\n      );\n\n      const upload = createUploadedFile({\n        csrfToken: this.csrfToken,\n        initialFile,\n        uploadIndex: this.nextUploadIndex,\n        uploadUrl: this.uploadUrl\n      });\n      this.uploads.push(upload);\n\n      this.emitEvent(\"addUpload\", element, upload);\n    };\n\n    if (multiple) {\n      for (const file of initialFiles) {\n        addInitialFile(file);\n        this.nextUploadIndex += 1;\n      }\n    } else {\n      const initialFile = initialFiles[0];\n\n      if (initialFile) {\n        addInitialFile(initialFile);\n      }\n    }\n  }\n\n  checkDropHint(): void {\n    if (!this.supportDropArea) {\n      return;\n    }\n\n    const nonEmptyUploads = this.uploads.filter(e => Boolean(e));\n\n    if (nonEmptyUploads.length === 0) {\n      this.renderer.renderDropHint();\n    } else {\n      this.renderer.removeDropHint();\n    }\n  }\n\n  emitEvent(\n    eventName: UploadEventName,\n    element: HTMLElement,\n    upload: BaseUpload\n  ): void {\n    const detail: UploadEventDetail = {\n      element,\n      fieldName: this.fieldName,\n      fileName: upload.name,\n      metaDataField: this.getMetaDataField(),\n      upload\n    };\n\n    this.form.dispatchEvent(\n      new CustomEvent<UploadEventDetail>(eventName, { bubbles: true, detail })\n    );\n  }\n\n  findUploadByName(fileName: string): BaseUpload | undefined {\n    return this.uploads.find(upload => upload.name === fileName);\n  }\n\n  getMetaDataField(): HTMLElement | null {\n    return findInput(\n      this.form,\n      getMetadataFieldName(this.fieldName, this.prefix),\n      this.prefix\n    );\n  }\n\n  getUploadByIndex(uploadIndex: number): BaseUpload | undefined {\n    return this.uploads.find(upload => upload.uploadIndex === uploadIndex);\n  }\n\n  async handleCancel(upload: BaseUpload, moveFocus = false): Promise<void> {\n    this.renderer.disableCancel(upload.uploadIndex);\n    await upload.abort();\n    this.removeUploadFromList(upload, moveFocus);\n    this.renderer.announce(\"{filename} removed\", upload.name);\n  }\n\n  handleClick = (e: Event): void => {\n    const target = e.target as HTMLElement;\n\n    const getUpload = (): BaseUpload | undefined => {\n      const dataIndex = target.dataset.index;\n\n      if (!dataIndex) {\n        return undefined;\n      }\n\n      const uploadIndex = parseInt(dataIndex, 10);\n      return this.getUploadByIndex(uploadIndex);\n    };\n\n    if (target.classList.contains(\"dff-delete\")) {\n      const upload = getUpload();\n\n      if (upload) {\n        void this.removeExistingUpload(upload, true);\n      }\n    } else if (target.classList.contains(\"dff-cancel\")) {\n      const upload = getUpload();\n\n      if (upload) {\n        void this.handleCancel(upload, true);\n      }\n    } else if (target.classList.contains(\"dff-filename\")) {\n      e.preventDefault();\n\n      const upload = getUpload();\n\n      if (upload?.status === \"done\" && this.callbacks.onClick) {\n        this.callbacks.onClick({\n          fieldName: this.fieldName,\n          fileName: upload.name,\n          id: upload.getId(),\n          type: upload.type\n        });\n      }\n    }\n  };\n\n  handleError = (upload: BaseUpload, error: unknown): void => {\n    this.renderer.setError(upload.uploadIndex);\n    this.renderer.announce(\"Upload failed: {filename}\", upload.name);\n    upload.status = \"error\";\n\n    const { onError } = this.callbacks;\n\n    if (onError) {\n      onError(error, upload);\n    }\n  };\n\n  handleInvalidFiles = (files: File[]): void => {\n    this.renderer.setErrorInvalidFiles(files);\n  };\n\n  handleProgress = (\n    upload: BaseUpload,\n    bytesUploaded: number,\n    bytesTotal: number\n  ): void => {\n    const percentage =\n      bytesTotal === 0 ? \"0\" : ((bytesUploaded / bytesTotal) * 100).toFixed(2);\n\n    this.renderer.updateProgress(upload.uploadIndex, percentage);\n\n    const { onProgress } = this.callbacks;\n\n    if (onProgress) {\n      onProgress(bytesUploaded, bytesTotal, upload);\n    }\n  };\n\n  handleSuccess = (upload: BaseUpload): void => {\n    const { renderer } = this;\n\n    this.updatePlaceholderInput();\n\n    renderer.clearInput();\n    renderer.setSuccess(upload.uploadIndex, upload.getSize());\n    renderer.announce(\"{filename} uploaded\", upload.name);\n    upload.status = \"done\";\n\n    const { onSuccess } = this.callbacks;\n\n    const element = this.renderer.findFileDiv(upload.uploadIndex);\n\n    if (element) {\n      this.emitEvent(\"uploadComplete\", element, upload);\n    }\n\n    if (onSuccess) {\n      onSuccess(upload);\n    }\n  };\n\n  initDropArea(container: Element, inputAccept: string): void {\n    new DropArea({\n      container,\n      inputAccept,\n      onUploadFiles: this.uploadFiles,\n      renderer: this.renderer\n    });\n  }\n\n  onChange = (e: Event): void => {\n    const files = (e.target as HTMLInputElement).files ?? ([] as File[]);\n    const acceptedFiles: File[] = [];\n    const invalidFiles: File[] = [];\n\n    for (const file of files) {\n      if (this.acceptedFileTypes.isAccepted(file)) {\n        acceptedFiles.push(file);\n      } else {\n        invalidFiles.push(file);\n      }\n    }\n\n    this.handleInvalidFiles([...invalidFiles]);\n    void this.uploadFiles([...acceptedFiles]);\n\n    this.renderer.clearInput();\n  };\n\n  // moveFocus: whether the user removed the file, with the delete or cancel\n  // button, and the focus should not be lost\n  async removeExistingUpload(\n    upload: BaseUpload,\n    moveFocus = false\n  ): Promise<void> {\n    const element = this.renderer.findFileDiv(upload.uploadIndex);\n\n    if (element) {\n      this.emitEvent(\"removeUpload\", element, upload);\n    }\n\n    if (upload.status === \"uploading\") {\n      this.renderer.disableCancel(upload.uploadIndex);\n      await upload.abort();\n    } else if (upload.status === \"done\") {\n      this.renderer.disableDelete(upload.uploadIndex);\n\n      try {\n        await upload.delete();\n      } catch {\n        this.renderer.setDeleteFailed(upload.uploadIndex, moveFocus);\n        this.renderer.announce(\"Delete failed: {filename}\", upload.name);\n        return;\n      }\n    }\n\n    this.removeUploadFromList(upload, moveFocus);\n    this.updatePlaceholderInput();\n    this.renderer.announce(\"{filename} removed\", upload.name);\n  }\n\n  removeUploadFromList(upload: BaseUpload, moveFocus = false): void {\n    this.renderer.deleteFile(upload.uploadIndex, moveFocus);\n\n    const index = this.uploads.indexOf(upload);\n\n    if (index >= 0) {\n      this.uploads.splice(index, 1);\n    }\n\n    this.checkDropHint();\n\n    const { onDelete } = this.callbacks;\n\n    if (onDelete) {\n      onDelete(upload);\n    }\n  }\n\n  updatePlaceholderInput(): void {\n    const input = findInput(\n      this.form,\n      getUploadsFieldName(this.fieldName, this.prefix),\n      this.prefix\n    );\n    if (!input) {\n      return;\n    }\n\n    const placeholdersInfo: InitialFile[] = this.uploads.map(upload =>\n      upload.getInitialFile()\n    );\n\n    input.value = JSON.stringify(placeholdersInfo);\n  }\n\n  async uploadFile(file: File): Promise<void> {\n    const createUpload = (): S3Upload | TusUpload => {\n      const { csrfToken, s3UploadDir } = this;\n\n      if (s3UploadDir != null) {\n        return new S3Upload({\n          csrfToken,\n          endpoint: uploadUrl,\n          file,\n          retryDelays: this.retryDelays,\n          s3UploadDir,\n          uploadIndex: newUploadIndex\n        });\n      } else {\n        return new TusUpload({\n          chunkSize: this.chunkSize,\n          csrfToken: this.csrfToken,\n          fieldName,\n          file,\n          formId,\n          retryDelays: this.retryDelays,\n          uploadIndex: newUploadIndex,\n          uploadUrl\n        });\n      }\n    };\n\n    const { fieldName, formId, renderer, uploadUrl } = this;\n    const fileName = file.name;\n    const existingUpload = this.findUploadByName(fileName);\n    const newUploadIndex = existingUpload\n      ? existingUpload.uploadIndex\n      : this.nextUploadIndex;\n\n    if (!existingUpload) {\n      this.nextUploadIndex += 1;\n    }\n\n    if (existingUpload) {\n      await this.removeExistingUpload(existingUpload);\n    }\n\n    const upload = createUpload();\n\n    upload.onError = (error: unknown) => {\n      this.handleError(upload, error);\n    };\n    upload.onProgress = (bytesUploaded, bytesTotal) => {\n      this.handleProgress(upload, bytesUploaded, bytesTotal);\n    };\n    upload.onSuccess = () => {\n      this.handleSuccess(upload);\n    };\n    upload.start();\n\n    this.uploads.push(upload);\n\n    const element = renderer.addNewUpload(fileName, newUploadIndex);\n    this.emitEvent(\"addUpload\", element, upload);\n  }\n\n  uploadFiles = async (files: File[]): Promise<void> => {\n    if (files.length === 0) {\n      return;\n    }\n\n    if (!this.multiple) {\n      // Remove the current file like the delete button does: abort an upload that\n      // is still running, and delete an uploaded file from the server.\n      // Iterate over a copy, because removing an upload changes this.uploads.\n      for (const upload of this.uploads.slice()) {\n        await this.removeExistingUpload(upload);\n      }\n\n      const file = files[0];\n\n      if (file) {\n        await this.uploadFile(file);\n      }\n    } else {\n      for (const file of files) {\n        await this.uploadFile(file);\n      }\n    }\n\n    this.checkDropHint();\n  };\n}\n\nexport default FileField;\n","import type { InitialFile } from \"./uploads/base_upload.ts\";\n\nimport FileField, { type Callbacks, type Translations } from \"./file_field.ts\";\nimport {\n  findInput,\n  getInputValueForFormAndPrefix,\n  getUploadsFieldName\n} from \"./util.ts\";\n\nexport interface Options {\n  callbacks?: Callbacks;\n  chunkSize?: number;\n  prefix?: string;\n  retryDelays?: number[];\n  skipRequired?: boolean;\n  supportDropArea?: boolean;\n}\n\nconst initUploadFields = (form: Element, options: Options = {}): void => {\n  const matchesPrefix = (fieldName: string): boolean => {\n    if (!options.prefix) {\n      return true;\n    }\n\n    return fieldName.startsWith(`${options.prefix}-`);\n  };\n\n  const getPrefix = (): null | string => options.prefix ?? null;\n\n  const getInputValue = (fieldName: string): string | undefined =>\n    getInputValueForFormAndPrefix(form, fieldName, getPrefix());\n\n  const getInitialFiles = (fieldName: string): InitialFile[] => {\n    const data = getInputValue(getUploadsFieldName(fieldName, getPrefix()));\n\n    if (!data) {\n      return [];\n    }\n\n    return (JSON.parse(data) as Record<string, unknown>[]).filter(\n      file => file.type\n    ) as unknown as InitialFile[];\n  };\n\n  const uploadUrl = getInputValue(\"upload_url\");\n  const formId = getInputValue(\"form_id\");\n  const s3UploadDir = getInputValue(\"s3_upload_dir\");\n  const skipRequired = options.skipRequired ?? false;\n  const prefix = getPrefix();\n  const csrfToken = findInput(form, \"csrfmiddlewaretoken\", null)?.value;\n\n  if (!csrfToken) {\n    throw new Error(\"Csrf token not found\");\n  }\n\n  if (!formId || !uploadUrl) {\n    return;\n  }\n\n  form.querySelectorAll(\".dff-uploader\").forEach(uploaderDiv => {\n    const container = uploaderDiv.querySelector<HTMLElement>(\".dff-container\");\n\n    if (!container) {\n      return;\n    }\n\n    const input = container.querySelector<HTMLInputElement>(\"input[type=file]\");\n\n    if (!(input && matchesPrefix(input.name))) {\n      return;\n    }\n\n    const fieldName = input.name;\n    const { multiple } = input;\n    const initial = getInitialFiles(fieldName);\n    const dataTranslations = container.dataset.translations;\n    const translations: Translations = dataTranslations\n      ? (JSON.parse(dataTranslations) as Translations)\n      : {};\n    const supportDropArea = !(options.supportDropArea === false);\n\n    new FileField({\n      callbacks: options.callbacks ?? {},\n      chunkSize: options.chunkSize ?? 2621440,\n      csrfToken,\n      fieldName,\n      form,\n      formId,\n      initial,\n      input,\n      multiple,\n      parent: container,\n      prefix,\n      retryDelays: options.retryDelays ?? null,\n      s3UploadDir: s3UploadDir ?? null,\n      skipRequired,\n      supportDropArea,\n      translations,\n      uploadUrl\n    });\n  });\n};\n\nexport default initUploadFields;\n","import initUploadFields, { type Options } from \"./init_upload_fields.ts\";\nimport {\n  getInputNameWithPrefix,\n  getInputValueForFormAndPrefix\n} from \"./util.ts\";\n\nconst initFormSet = (\n  form: HTMLFormElement,\n  optionsParam: Options | string\n): void => {\n  let options: Options;\n\n  if (typeof optionsParam === \"string\") {\n    options = { prefix: optionsParam };\n  } else {\n    options = optionsParam;\n  }\n\n  const prefix = options.prefix ?? \"form\";\n\n  const totalFormsValue = getInputValueForFormAndPrefix(\n    form,\n    \"TOTAL_FORMS\",\n    prefix\n  );\n\n  if (!totalFormsValue) {\n    return;\n  }\n\n  const formCount = parseInt(totalFormsValue, 10);\n\n  for (let i = 0; i < formCount; i += 1) {\n    const subFormPrefix = getInputNameWithPrefix(i.toString(), null);\n    initUploadFields(form, {\n      ...options,\n      prefix: `${prefix}-${subFormPrefix}`\n    });\n  }\n};\n\nexport default initFormSet;\n","import autoInitFileForms from \"./auto_init_file_forms.ts\";\nimport initFormSet from \"./init_form_set.ts\";\nimport initUploadFields from \"./init_upload_fields.ts\";\n\ndeclare global {\n  interface Window {\n    autoInitFileForms: typeof autoInitFileForms;\n    initFormSet: typeof initFormSet;\n    initUploadFields: typeof initUploadFields;\n  }\n}\n\nwindow.autoInitFileForms = autoInitFileForms;\nwindow.initFormSet = initFormSet;\nwindow.initUploadFields = initUploadFields;\n"],"names":["extensions","mimeTypes","isAccepted","isMimeTypeAccepted","isExtensionAccepted","acceptedFileTypes","container","onUploadFiles","renderer","onDrop","setErrorInvalidFiles","clickableFilenames","errors","input","isInvalidSetHere","status","translations","createFilesContainer","labelFilesContainer","createErrorContainer","describeInputWithErrors","createStatusContainer","addNewUpload","addFile","formatTranslation","createButton","getTranslation","addUploadedFile","setSuccess","announce","clearInput","deleteFile","findFileDiv","mayMoveFocus","findFocusTarget","disableCancel","findCancelButton","setButtonDisabled","disableDelete","findDeleteButton","removeDropHint","renderDropHint","setTextContent","setDeleteFailed","setErrorMessage","enableDelete","setError","removeProgress","removeCancel","setInputInvalid","makeFilenameClickable","updateProgress","BaseUpload","cancelRetryWait","chunks","createdPromise","csrfToken","endpoint","file","key","parts","retryDelays","retryTimeout","s3UploadDir","stopped","uploadId","uploading","initChunks","abortMultipartUpload","createUpload","completeUpload","requestWithRetries","handleError","uploadParts","onPartComplete","onPartProgress","waitForRetry","retryPartOrFail","uploadPart","uploadPartBytes","querystringify","querystringify_1","require$$0","require$$1","global","defaultOptions","Base64","DefaultHttpStack","FileReader","id","upload","handleAfterResponse","addCsrTokenToRequest","handleProgress","handleSuccess","callbacks","chunkSize","fieldName","form","formId","multiple","nextUploadIndex","prefix","supportDropArea","uploads","uploadUrl","initDropArea","addInitialFiles","checkDropHint","onChange","handleClick","emitEvent","getMetaDataField","findUploadByName","getUploadByIndex","handleCancel","removeUploadFromList","removeExistingUpload","handleInvalidFiles","updatePlaceholderInput","uploadFiles","uploadFile"],"mappings":"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","x_google_ignoreList":[8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]}