{"version":3,"file":"ngx-uploader.mjs","sources":["../../../projects/ngx-uploader/src/lib/interfaces.ts","../../../projects/ngx-uploader/src/lib/ngx-uploader.class.ts","../../../projects/ngx-uploader/src/lib/ng-file-drop.directive.ts","../../../projects/ngx-uploader/src/lib/ng-file-select.directive.ts","../../../projects/ngx-uploader/src/lib/ngx-uploader.module.ts","../../../projects/ngx-uploader/src/public_api.ts","../../../projects/ngx-uploader/src/ngx-uploader.ts"],"sourcesContent":["import { Subscription } from 'rxjs';\n\nexport interface UploaderOptions {\n  concurrency: number;\n  allowedContentTypes?: string[];\n  maxUploads?: number;\n  maxFileSize?: number;\n}\n\nexport interface BlobFile extends Blob {\n  name: string;\n}\n\nexport enum UploadStatus {\n  Queue,\n  Uploading,\n  Done,\n  Cancelled\n}\n\nexport interface UploadProgress {\n  status: UploadStatus;\n  data?: {\n    percentage: number;\n    speed: number;\n    speedHuman: string;\n    startTime: number | null;\n    endTime: number | null;\n    eta: number | null;\n    etaHuman: string | null;\n  };\n}\n\nexport interface UploadFile {\n  id: string;\n  fileIndex: number;\n  lastModifiedDate: Date;\n  name: string;\n  size: number;\n  type: string;\n  form: FormData;\n  progress: UploadProgress;\n  response?: any;\n  responseStatus?: number;\n  sub?: Subscription | any;\n  nativeFile?: File;\n  responseHeaders?: { [key: string]: string };\n}\n\nexport interface UploadOutput {\n  type:\n    | 'addedToQueue'\n    | 'allAddedToQueue'\n    | 'uploading'\n    | 'done'\n    | 'start'\n    | 'cancelled'\n    | 'dragOver'\n    | 'dragOut'\n    | 'drop'\n    | 'removed'\n    | 'removedAll'\n    | 'rejected';\n  file?: UploadFile;\n  nativeFile?: File;\n}\n\nexport interface UploadInput {\n  type: 'uploadAll' | 'uploadFile' | 'cancel' | 'cancelAll' | 'remove' | 'removeAll';\n  url?: string;\n  method?: string;\n  id?: string;\n  fieldName?: string;\n  fileIndex?: number;\n  file?: UploadFile;\n  data?: { [key: string]: string | Blob };\n  headers?: { [key: string]: string };\n  includeWebKitFormBoundary?: boolean; // If false, only the file is send trough xhr.send (WebKitFormBoundary is omit)\n  withCredentials?: boolean;\n}\n","import { EventEmitter } from '@angular/core';\nimport { Observable, Subject, Subscription, finalize, mergeMap } from 'rxjs';\nimport { BlobFile, UploadFile, UploadInput, UploadOutput, UploadStatus } from './interfaces';\n\nexport function humanizeBytes(bytes: number): string {\n  if (bytes === 0) {\n    return '0 Byte';\n  }\n\n  const k = 1024;\n  const sizes: string[] = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\n  const i: number = Math.floor(Math.log(bytes) / Math.log(k));\n\n  return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n}\n\nexport class NgUploaderService {\n  queue: UploadFile[];\n  serviceEvents: EventEmitter<UploadOutput>;\n  uploadScheduler: Subject<{ file: UploadFile; event: UploadInput }>;\n  subs: { id: string; sub: Subscription }[];\n  contentTypes: string[];\n  maxUploads: number;\n  maxFileSize: number;\n\n  constructor(\n    concurrency: number = Number.POSITIVE_INFINITY,\n    contentTypes: string[] = ['*'],\n    maxUploads: number = Number.POSITIVE_INFINITY,\n    maxFileSize: number = Number.POSITIVE_INFINITY\n  ) {\n    this.queue = [];\n    this.serviceEvents = new EventEmitter<UploadOutput>();\n    this.uploadScheduler = new Subject();\n    this.subs = [];\n    this.contentTypes = contentTypes;\n    this.maxUploads = maxUploads;\n    this.maxFileSize = maxFileSize;\n\n    this.uploadScheduler\n      .pipe(mergeMap(upload => this.startUpload(upload), concurrency))\n      .subscribe(uploadOutput => this.serviceEvents.emit(uploadOutput));\n  }\n\n  handleFiles(incomingFiles: FileList): void {\n    const allowedIncomingFiles = [].reduce.call(\n      incomingFiles,\n      (acc: unknown, checkFile: File, i: number) => {\n        const futureQueueLength = (acc as File[]).length + this.queue.length + 1;\n        if (\n          this.isContentTypeAllowed(checkFile.type) &&\n          futureQueueLength <= this.maxUploads &&\n          this.isFileSizeAllowed(checkFile.size)\n        ) {\n          acc = (acc as File[]).concat(checkFile);\n        } else {\n          const rejectedFile: UploadFile = this.makeUploadFile(checkFile, i);\n          this.serviceEvents.emit({ type: 'rejected', file: rejectedFile });\n        }\n\n        return acc as File[];\n      },\n      [] as File[]\n    ) as File[];\n\n    this.queue.push(\n      ...allowedIncomingFiles.map((file: File, i: number) => {\n        const uploadFile: UploadFile = this.makeUploadFile(file, i);\n        this.serviceEvents.emit({ type: 'addedToQueue', file: uploadFile });\n        return uploadFile;\n      })\n    );\n\n    this.serviceEvents.emit({ type: 'allAddedToQueue' });\n  }\n\n  initInputEvents(input: EventEmitter<UploadInput>): Subscription {\n    return input.subscribe((event: UploadInput) => {\n      switch (event.type) {\n        case 'uploadFile':\n          const uploadFileIndex = this.queue.findIndex(file => file === event.file);\n          if (uploadFileIndex !== -1 && event.file) {\n            this.uploadScheduler.next({ file: this.queue[uploadFileIndex], event: event });\n          }\n          break;\n        case 'uploadAll':\n          const files = this.queue.filter(file => file.progress.status === UploadStatus.Queue);\n          files.forEach(file => this.uploadScheduler.next({ file: file, event: event }));\n          break;\n        case 'cancel':\n          const id = event.id || null;\n          if (!id) {\n            return;\n          }\n          const subs = this.subs.filter(sub => sub.id === id);\n          subs.forEach(sub => {\n            if (sub.sub) {\n              sub.sub.unsubscribe();\n              const fileIndex = this.queue.findIndex(file => file.id === id);\n              if (fileIndex !== -1) {\n                this.queue[fileIndex].progress.status = UploadStatus.Cancelled;\n                this.serviceEvents.emit({ type: 'cancelled', file: this.queue[fileIndex] });\n              }\n            }\n          });\n          break;\n        case 'cancelAll':\n          this.subs.forEach(sub => {\n            if (sub.sub) {\n              sub.sub.unsubscribe();\n            }\n\n            const file = this.queue.find(uploadFile => uploadFile.id === sub.id);\n            if (file) {\n              file.progress.status = UploadStatus.Cancelled;\n              this.serviceEvents.emit({ type: 'cancelled', file: file });\n            }\n          });\n          break;\n        case 'remove':\n          if (!event.id) {\n            return;\n          }\n\n          const i = this.queue.findIndex(file => file.id === event.id);\n          if (i !== -1) {\n            const file = this.queue[i];\n            this.queue.splice(i, 1);\n            this.serviceEvents.emit({ type: 'removed', file: file });\n          }\n          break;\n        case 'removeAll':\n          if (this.queue.length) {\n            this.queue = [];\n            this.serviceEvents.emit({ type: 'removedAll' });\n          }\n          break;\n      }\n    });\n  }\n\n  startUpload(upload: { file: UploadFile; event: UploadInput }): Observable<UploadOutput> {\n    return new Observable(observer => {\n      const sub = this.uploadFile(upload.file, upload.event)\n        .pipe(\n          finalize(() => {\n            if (!observer.closed) {\n              observer.complete();\n            }\n          })\n        )\n        .subscribe({\n          next: (output: UploadOutput) => {\n            observer.next(output);\n          },\n          error: (err: any) => {\n            observer.error(err);\n            observer.complete();\n          },\n          complete: () => {\n            observer.complete();\n          }\n        });\n\n      this.subs.push({ id: upload.file.id, sub: sub });\n    });\n  }\n\n  uploadFile(file: UploadFile, event: UploadInput): Observable<UploadOutput> {\n    return new Observable(observer => {\n      const url = event.url || '';\n      const method = event.method || 'POST';\n      const data = event.data || {};\n      const headers = event.headers || {};\n\n      const xhr = new XMLHttpRequest();\n      const time: number = new Date().getTime();\n      let progressStartTime: number = (file.progress.data && file.progress.data.startTime) || time;\n      let speed = 0;\n      let eta: number | null = null;\n\n      xhr.open(method, url, true);\n      xhr.withCredentials = event.withCredentials ? true : false;\n\n      xhr.upload.onprogress = (e: ProgressEvent) => {\n        if (e.lengthComputable) {\n          const percentage = Math.round((e.loaded * 100) / e.total);\n          const diff = new Date().getTime() - time;\n          speed = Math.round((e.loaded / diff) * 1000);\n          progressStartTime = (file.progress.data && file.progress.data.startTime) || new Date().getTime();\n          eta = Math.ceil((e.total - e.loaded) / speed);\n\n          file.progress = {\n            status: UploadStatus.Uploading,\n            data: {\n              percentage: percentage,\n              speed: speed,\n              speedHuman: `${humanizeBytes(speed)}/s`,\n              startTime: progressStartTime,\n              endTime: null,\n              eta: eta,\n              etaHuman: this.secondsToHuman(eta)\n            }\n          };\n\n          observer.next({ type: 'uploading', file: file });\n        }\n      };\n\n      xhr.upload.ontimeout = (e: ProgressEvent<EventTarget>) => {\n        observer.error(e);\n        observer.complete();\n      };\n\n      xhr.upload.onerror = (e: ProgressEvent<EventTarget>) => {\n        observer.error(e);\n        observer.complete();\n      };\n\n      xhr.upload.onabort = () => {\n        observer.complete();\n      };\n\n      xhr.onreadystatechange = () => {\n        if (xhr.readyState === XMLHttpRequest.DONE) {\n          const speedAverage = Math.round((file.size / (new Date().getTime() - progressStartTime)) * 1000);\n          file.progress = {\n            status: UploadStatus.Done,\n            data: {\n              percentage: 100,\n              speed: speedAverage,\n              speedHuman: `${humanizeBytes(speedAverage)}/s`,\n              startTime: progressStartTime,\n              endTime: new Date().getTime(),\n              eta: eta,\n              etaHuman: this.secondsToHuman(eta || 0)\n            }\n          };\n\n          file.responseStatus = xhr.status;\n\n          try {\n            file.response = JSON.parse(xhr.response);\n          } catch (e) {\n            file.response = xhr.response;\n          }\n\n          file.responseHeaders = this.parseResponseHeaders(xhr.getAllResponseHeaders());\n\n          observer.next({ type: 'done', file: file });\n          observer.complete();\n        }\n      };\n\n      try {\n        const uploadFile = <BlobFile>file.nativeFile;\n        const uploadIndex = this.queue.findIndex(outFile => outFile.nativeFile === uploadFile);\n\n        if (this.queue[uploadIndex].progress.status === UploadStatus.Cancelled) {\n          observer.complete();\n        }\n\n        Object.keys(headers).forEach(key => xhr.setRequestHeader(key, headers[key]));\n\n        let bodyToSend: FormData | BlobFile;\n\n        if (event.includeWebKitFormBoundary !== false) {\n          Object.keys(data).forEach(key => file.form.append(key, data[key]));\n          file.form.append(event.fieldName || 'file', uploadFile, uploadFile.name);\n          bodyToSend = file.form;\n        } else {\n          bodyToSend = uploadFile;\n        }\n\n        this.serviceEvents.emit({ type: 'start', file: file });\n        xhr.send(bodyToSend);\n      } catch (e) {\n        observer.complete();\n      }\n\n      return () => {\n        xhr.abort();\n      };\n    });\n  }\n\n  secondsToHuman(sec: number): string {\n    return new Date(sec * 1000).toISOString().substr(11, 8);\n  }\n\n  generateId(): string {\n    return Math.random().toString(36).substring(7);\n  }\n\n  setContentTypes(contentTypes: string[]): void {\n    if (typeof contentTypes !== 'undefined' && contentTypes instanceof Array) {\n      if (contentTypes.find((type: string) => type === '*') !== undefined) {\n        this.contentTypes = ['*'];\n      } else {\n        this.contentTypes = contentTypes;\n      }\n      return;\n    }\n    this.contentTypes = ['*'];\n  }\n\n  allContentTypesAllowed(): boolean {\n    return this.contentTypes.find((type: string) => type === '*') !== undefined;\n  }\n\n  isContentTypeAllowed(mimetype: string): boolean {\n    if (this.allContentTypesAllowed()) {\n      return true;\n    }\n    return this.contentTypes.find((type: string) => type === mimetype) !== undefined;\n  }\n\n  isFileSizeAllowed(fileSize: number): boolean {\n    if (!this.maxFileSize) {\n      return true;\n    }\n    return fileSize <= this.maxFileSize;\n  }\n\n  makeUploadFile(file: File, index: number): UploadFile {\n    return {\n      fileIndex: index,\n      id: this.generateId(),\n      name: file.name,\n      size: file.size,\n      type: file.type,\n      form: new FormData(),\n      progress: {\n        status: UploadStatus.Queue,\n        data: {\n          percentage: 0,\n          speed: 0,\n          speedHuman: `${humanizeBytes(0)}/s`,\n          startTime: null,\n          endTime: null,\n          eta: null,\n          etaHuman: null\n        }\n      },\n      lastModifiedDate: new Date(file.lastModified),\n      sub: undefined,\n      nativeFile: file\n    };\n  }\n\n  private parseResponseHeaders(httpHeaders: string): { [key: string]: string } {\n    if (!httpHeaders) {\n      return {};\n    }\n\n    return httpHeaders\n      .split('\\n')\n      .map((x: string) => x.split(/: */, 2))\n      .filter((x: string[]) => x[0])\n      .reduce((acc: { [key: string]: string }, x: string[]) => {\n        acc[x[0]] = x[1];\n        return acc;\n      }, {});\n  }\n}\n","import { Directive, ElementRef, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { UploadInput, UploadOutput, UploaderOptions } from './interfaces';\nimport { NgUploaderService } from './ngx-uploader.class';\n\n@Directive({\n  selector: '[ngFileDrop]'\n})\nexport class NgFileDropDirective implements OnInit, OnDestroy {\n  @Input() options!: UploaderOptions;\n  @Input() uploadInput!: EventEmitter<UploadInput>;\n  @Output() uploadOutput: EventEmitter<UploadOutput>;\n\n  upload!: NgUploaderService;\n  el!: HTMLInputElement;\n\n  _sub!: Subscription[];\n\n  constructor(public elementRef: ElementRef) {\n    this.uploadOutput = new EventEmitter<UploadOutput>();\n  }\n\n  ngOnInit() {\n    this._sub = [];\n    const concurrency = (this.options && this.options.concurrency) || Number.POSITIVE_INFINITY;\n    const allowedContentTypes = (this.options && this.options.allowedContentTypes) || ['*'];\n    const maxUploads = (this.options && this.options.maxUploads) || Number.POSITIVE_INFINITY;\n    const maxFileSize = (this.options && this.options.maxFileSize) || Number.POSITIVE_INFINITY;\n    this.upload = new NgUploaderService(concurrency, allowedContentTypes, maxUploads, maxFileSize);\n\n    this.el = this.elementRef.nativeElement;\n\n    this._sub.push(\n      this.upload.serviceEvents.subscribe((event: UploadOutput) => {\n        this.uploadOutput.emit(event);\n      })\n    );\n\n    if (this.uploadInput instanceof EventEmitter) {\n      this._sub.push(this.upload.initInputEvents(this.uploadInput));\n    }\n\n    this.el.addEventListener('drop', this.stopEvent, false);\n    this.el.addEventListener('dragenter', this.stopEvent, false);\n    this.el.addEventListener('dragover', this.stopEvent, false);\n  }\n\n  ngOnDestroy() {\n    if (this._sub) {\n      this._sub.forEach(sub => sub.unsubscribe());\n    }\n  }\n\n  stopEvent = (e: Event) => {\n    e.stopPropagation();\n    e.preventDefault();\n  };\n\n  @HostListener('drop', ['$event'])\n  public onDrop(e: any) {\n    e.stopPropagation();\n    e.preventDefault();\n\n    const event: UploadOutput = { type: 'drop' };\n    this.uploadOutput.emit(event);\n    this.upload.handleFiles(e.dataTransfer.files);\n  }\n\n  @HostListener('dragover', ['$event'])\n  public onDragOver(e: Event) {\n    if (!e) {\n      return;\n    }\n\n    const event: UploadOutput = { type: 'dragOver' };\n    this.uploadOutput.emit(event);\n  }\n\n  @HostListener('dragleave', ['$event'])\n  public onDragLeave(e: Event) {\n    if (!e) {\n      return;\n    }\n\n    const event: UploadOutput = { type: 'dragOut' };\n    this.uploadOutput.emit(event);\n  }\n}\n","import { Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { UploadOutput, UploaderOptions } from './interfaces';\nimport { NgUploaderService } from './ngx-uploader.class';\n\n@Directive({\n  selector: '[ngFileSelect]'\n})\nexport class NgFileSelectDirective implements OnInit, OnDestroy {\n  @Input() options!: UploaderOptions;\n  @Input() uploadInput!: EventEmitter<any>;\n  @Output() uploadOutput: EventEmitter<UploadOutput>;\n\n  upload!: NgUploaderService;\n  el!: HTMLInputElement;\n\n  _sub!: Subscription[];\n\n  constructor(public elementRef: ElementRef) {\n    this.uploadOutput = new EventEmitter<UploadOutput>();\n  }\n\n  ngOnInit() {\n    this._sub = [];\n    const concurrency = (this.options && this.options.concurrency) || Number.POSITIVE_INFINITY;\n    const allowedContentTypes = (this.options && this.options.allowedContentTypes) || ['*'];\n    const maxUploads = (this.options && this.options.maxUploads) || Number.POSITIVE_INFINITY;\n    const maxFileSize = (this.options && this.options.maxFileSize) || Number.POSITIVE_INFINITY;\n    this.upload = new NgUploaderService(concurrency, allowedContentTypes, maxUploads, maxFileSize);\n\n    this.el = this.elementRef.nativeElement;\n    this.el.addEventListener('change', this.fileListener, false);\n\n    this._sub.push(\n      this.upload.serviceEvents.subscribe((event: UploadOutput) => {\n        this.uploadOutput.emit(event);\n      })\n    );\n\n    if (this.uploadInput instanceof EventEmitter) {\n      this._sub.push(this.upload.initInputEvents(this.uploadInput));\n    }\n  }\n\n  ngOnDestroy() {\n    if (this.el) {\n      this.el.removeEventListener('change', this.fileListener, false);\n      this._sub.forEach(sub => sub.unsubscribe());\n    }\n  }\n\n  fileListener = () => {\n    if (this.el.files) {\n      this.upload.handleFiles(this.el.files);\n    }\n  };\n}\n","import { NgModule } from '@angular/core';\nimport { NgFileDropDirective } from './ng-file-drop.directive';\nimport { NgFileSelectDirective } from './ng-file-select.directive';\n\n@NgModule({\n  declarations: [NgFileDropDirective, NgFileSelectDirective],\n  exports: [NgFileDropDirective, NgFileSelectDirective]\n})\nexport class NgxUploaderModule {}\n","/*\n * Public API Surface of ngx-uploader\n */\n\nexport * from './lib/interfaces';\nexport * from './lib/ng-file-drop.directive';\nexport * from './lib/ng-file-select.directive';\nexport * from './lib/ngx-uploader.class';\nexport * from './lib/ngx-uploader.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}