{"version":3,"file":"ngx-dropzone-next-ngx-dropzone.service-DgjHzr4g.mjs","sources":["../../../projects/ngx-dropzone/src/lib/ngx-dropzone/ngx-dropzone.service.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nexport interface FileSelectResult {\n  /** The added files, emitted in the filesAdded event. */\n  addedFiles: File[];\n\n  /** The rejected files, emitted in the filesRejected event. */\n  rejectedFiles: RejectedFile[];\n}\n\nexport interface RejectedFile extends File {\n  /** The reason the file was rejected. */\n  reason?: RejectReason;\n}\n\nexport type RejectReason = 'type' | 'size' | 'no_multiple';\n\n/**\n * This service contains the filtering logic to be applied to\n * any dropped or selected file. If a file matches all criteria\n * like maximum size or accept type, it will be emitted in the\n * addedFiles array, otherwise in the rejectedFiles array.\n */\n@Injectable({ providedIn: 'root' })\nexport class NgxDropzoneService {\n  parseFileList(\n    files: FileList,\n    accept: string,\n    maxFileSize: number | null | undefined,\n    multiple: boolean\n  ): FileSelectResult {\n    const addedFiles: File[] = [];\n    const rejectedFiles: RejectedFile[] = [];\n\n    for (let i = 0; i < files.length; i++) {\n      const file = files.item(i)!;\n\n      if (!this.isAccepted(file, accept)) {\n        this.rejectFile(rejectedFiles, file, 'type');\n        continue;\n      }\n\n      if (maxFileSize && file.size > maxFileSize) {\n        this.rejectFile(rejectedFiles, file, 'size');\n        continue;\n      }\n\n      if (!multiple && addedFiles.length >= 1) {\n        this.rejectFile(rejectedFiles, file, 'no_multiple');\n        continue;\n      }\n\n      addedFiles.push(file);\n    }\n\n    const result: FileSelectResult = {\n      addedFiles,\n      rejectedFiles,\n    };\n\n    return result;\n  }\n\n  private isAccepted(file: File, accept: string): boolean {\n    if (accept === '*') {\n      return true;\n    }\n\n    const acceptFiletypes = accept\n      .split(',')\n      .map((it) => it.toLowerCase().trim());\n    const filetype = file.type.toLowerCase();\n    const filename = file.name.toLowerCase();\n\n    const matchedFileType = acceptFiletypes.find((acceptFiletype) => {\n      // check for wildcard mimetype (e.g. image/*)\n      if (acceptFiletype.endsWith('/*')) {\n        return filetype.split('/')[0] === acceptFiletype.split('/')[0];\n      }\n\n      // check for file extension (e.g. .csv)\n      if (acceptFiletype.startsWith('.')) {\n        return filename.endsWith(acceptFiletype);\n      }\n\n      // check for exact mimetype match (e.g. image/jpeg)\n      return acceptFiletype == filetype;\n    });\n\n    return !!matchedFileType;\n  }\n\n  private rejectFile(\n    rejectedFiles: RejectedFile[],\n    file: File,\n    reason: RejectReason\n  ) {\n    const rejectedFile = file as RejectedFile;\n    rejectedFile.reason = reason;\n\n    rejectedFiles.push(rejectedFile);\n  }\n}\n"],"names":[],"mappings":";;;AAiBA;;;;;AAKG;MAEU,kBAAkB,CAAA;AAC7B,IAAA,aAAa,CACX,KAAe,EACf,MAAc,EACd,WAAsC,EACtC,QAAiB,EAAA;QAEjB,MAAM,UAAU,GAAW,EAAE;QAC7B,MAAM,aAAa,GAAmB,EAAE;AAExC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAE;YAE3B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;gBAClC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC;gBAC5C;;YAGF,IAAI,WAAW,IAAI,IAAI,CAAC,IAAI,GAAG,WAAW,EAAE;gBAC1C,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC;gBAC5C;;YAGF,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;gBACvC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,EAAE,aAAa,CAAC;gBACnD;;AAGF,YAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGvB,QAAA,MAAM,MAAM,GAAqB;YAC/B,UAAU;YACV,aAAa;SACd;AAED,QAAA,OAAO,MAAM;;IAGP,UAAU,CAAC,IAAU,EAAE,MAAc,EAAA;AAC3C,QAAA,IAAI,MAAM,KAAK,GAAG,EAAE;AAClB,YAAA,OAAO,IAAI;;QAGb,MAAM,eAAe,GAAG;aACrB,KAAK,CAAC,GAAG;AACT,aAAA,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;QAExC,MAAM,eAAe,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,cAAc,KAAI;;AAE9D,YAAA,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACjC,gBAAA,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;;AAIhE,YAAA,IAAI,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AAClC,gBAAA,OAAO,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC;;;YAI1C,OAAO,cAAc,IAAI,QAAQ;AACnC,SAAC,CAAC;QAEF,OAAO,CAAC,CAAC,eAAe;;AAGlB,IAAA,UAAU,CAChB,aAA6B,EAC7B,IAAU,EACV,MAAoB,EAAA;QAEpB,MAAM,YAAY,GAAG,IAAoB;AACzC,QAAA,YAAY,CAAC,MAAM,GAAG,MAAM;AAE5B,QAAA,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC;;iIA5EvB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,uBAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADL,MAAM,EAAA,CAAA,CAAA;;2FACnB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}