{"version":3,"file":"index.mjs","sources":["../../src/validators/validatorBase.ts","../../src/validators/fileAmountLimitValidator/index.ts","../../src/validators/fileSizeValidator/index.ts","../../src/validators/imageDimensionsValidator/index.ts","../../src/validators/persistentFileAmountLimitValidator/index.ts","../../src/validators/FileTypeValidator/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { type FileWithPath } from 'file-selector';\nimport type {\n  ExtractContentTypeFromConfig,\n  FileErrors,\n  SelectedFiles,\n  SelectedFilesOrErrors,\n  UseFilePickerConfig,\n} from '../interfaces.js';\n\nexport abstract class Validator<\n  CustomErrors = unknown,\n  ConfigType extends UseFilePickerConfig<CustomErrors> = UseFilePickerConfig<any>,\n> {\n  protected invokerHookId: string | undefined;\n\n  /**\n   * This method is called before parsing the selected files. It is called once per selection.\n   * @param config passed to the useFilePicker hook\n   * @param plainFiles files selected by the user\n   */\n  abstract validateBeforeParsing(config: ConfigType, plainFiles: File[]): Promise<void>;\n  /**\n   * This method is called after parsing the selected files. It is called once per every parsed file.\n   * @param config passed to the useFilePicker hook\n   * @param file parsed file selected by the user\n   * @param reader instance that was used to parse the file\n   */\n  abstract validateAfterParsing(config: ConfigType, file: FileWithPath, reader: FileReader): Promise<void>;\n\n  /**\n   * lifecycle method called after user selection (regardless of validation result)\n   */\n  onFilesSelected(\n    _data: SelectedFilesOrErrors<ExtractContentTypeFromConfig<ConfigType>, CustomErrors>\n  ): Promise<void> | void {}\n  /**\n   * lifecycle method called after successful validation\n   */\n  onFilesSuccessfullySelected(_data: SelectedFiles<ExtractContentTypeFromConfig<ConfigType>>): Promise<void> | void {}\n  /**\n   * lifecycle method called after failed validation\n   */\n  onFilesRejected(_data: FileErrors<CustomErrors>): Promise<void> | void {}\n  /**\n   * lifecycle method called after the selection is cleared\n   */\n  onClear(): Promise<void> | void {}\n\n  /**\n   * This method is called when file is removed from the list of selected files.\n   * Invoked only by the useImperativeFilePicker hook\n   * @param _removedFile removed file\n   * @param _removedIndex index of removed file\n   */\n  onFileRemoved(_removedFile: File, _removedIndex: number): Promise<void> | void {}\n}\n","import type { FileAmountLimitError, FileAmountLimitConfig, UseFilePickerConfig } from '../../interfaces.js';\nimport { Validator } from '../validatorBase.js';\n\nexport default class FileAmountLimitValidator extends Validator {\n  constructor(private limitAmountOfFilesConfig: FileAmountLimitConfig) {\n    super();\n  }\n\n  validateBeforeParsing(_config: UseFilePickerConfig, plainFiles: File[]): Promise<void> {\n    const { min, max } = this.limitAmountOfFilesConfig;\n    if (max && plainFiles.length > max) {\n      return Promise.reject({\n        name: 'FileAmountLimitError',\n        reason: 'MAX_AMOUNT_OF_FILES_EXCEEDED',\n      } as FileAmountLimitError);\n    }\n\n    if (min && plainFiles.length < min) {\n      return Promise.reject({\n        name: 'FileAmountLimitError',\n        reason: 'MIN_AMOUNT_OF_FILES_NOT_REACHED',\n      } as FileAmountLimitError);\n    }\n    return Promise.resolve();\n  }\n  validateAfterParsing(): Promise<void> {\n    return Promise.resolve();\n  }\n}\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { type FileWithPath } from 'file-selector';\nimport type { FileSizeError, FileSizeRestrictions, UseFilePickerConfig } from '../../interfaces.js';\nimport { Validator } from '../validatorBase.js';\n\nexport default class FileSizeValidator extends Validator {\n  constructor(private fileSizeRestrictions: FileSizeRestrictions) {\n    super();\n  }\n\n  async validateBeforeParsing(_config: UseFilePickerConfig, plainFiles: File[]): Promise<void> {\n    const { minFileSize, maxFileSize } = this.fileSizeRestrictions;\n\n    if (!minFileSize && !maxFileSize) {\n      return Promise.resolve();\n    }\n\n    const errors = plainFiles\n      .map(file => getFileSizeError({ minFileSize, maxFileSize, file }))\n      .filter(error => !!error) as FileSizeError[];\n\n    return errors.length > 0 ? Promise.reject(errors) : Promise.resolve();\n  }\n  async validateAfterParsing(_config: UseFilePickerConfig, _file: FileWithPath): Promise<void> {\n    return Promise.resolve();\n  }\n}\n\nconst getFileSizeError = ({\n  file,\n  maxFileSize,\n  minFileSize,\n}: {\n  minFileSize: number | undefined;\n  maxFileSize: number | undefined;\n  file: FileWithPath;\n}): FileSizeError | undefined => {\n  if (minFileSize) {\n    const minBytes = minFileSize;\n    if (file.size < minBytes) {\n      return { name: 'FileSizeError', reason: 'FILE_SIZE_TOO_SMALL', causedByFile: file };\n    }\n  }\n  if (maxFileSize) {\n    const maxBytes = maxFileSize;\n    if (file.size > maxBytes) {\n      return { name: 'FileSizeError', reason: 'FILE_SIZE_TOO_LARGE', causedByFile: file };\n    }\n  }\n};\n","import { type FileWithPath } from 'file-selector';\nimport type { ImageDimensionError, ImageDimensionRestrictionsConfig, UseFilePickerConfig } from '../../interfaces.js';\nimport { Validator } from '../validatorBase.js';\n\nexport default class ImageDimensionsValidator extends Validator {\n  constructor(private imageSizeRestrictions: ImageDimensionRestrictionsConfig) {\n    super();\n  }\n\n  validateBeforeParsing(): Promise<void> {\n    return Promise.resolve();\n  }\n  validateAfterParsing(config: UseFilePickerConfig, file: FileWithPath, reader: FileReader): Promise<void> {\n    const { readAs } = config;\n    if (readAs === 'DataURL' && this.imageSizeRestrictions && isImage(file.type)) {\n      return checkImageDimensions(file, reader.result as string, this.imageSizeRestrictions);\n    }\n    return Promise.resolve();\n  }\n}\n\nconst isImage = (fileType: string) => fileType.startsWith('image');\n\nconst checkImageDimensions = (\n  file: FileWithPath,\n  imgDataURL: string,\n  imageSizeRestrictions: ImageDimensionRestrictionsConfig\n) =>\n  new Promise<void>((resolve, reject) => {\n    const img = new Image();\n    const error: ImageDimensionError = {\n      name: 'ImageDimensionError',\n      causedByFile: file,\n      reasons: [],\n    };\n    img.onload = function () {\n      const { maxHeight, maxWidth, minHeight, minWidth } = imageSizeRestrictions;\n      const { width, height } = this as unknown as typeof img;\n\n      if (maxHeight && maxHeight < height) error.reasons.push('IMAGE_HEIGHT_TOO_BIG');\n      if (minHeight && minHeight > height) error.reasons.push('IMAGE_HEIGHT_TOO_SMALL');\n      if (maxWidth && maxWidth < width) error.reasons.push('IMAGE_WIDTH_TOO_BIG');\n      if (minWidth && minWidth > width) error.reasons.push('IMAGE_WIDTH_TOO_SMALL');\n\n      if (error.reasons.length) {\n        reject(error);\n      } else {\n        resolve();\n      }\n    };\n    img.onerror = function () {\n      error.reasons.push('IMAGE_NOT_LOADED');\n      reject(error);\n    };\n    img.src = imgDataURL;\n  });\n","import type { FileAmountLimitConfig, FileAmountLimitError, UseFilePickerConfig } from '../../interfaces.js';\nimport { Validator } from '../validatorBase.js';\n\nclass PersistentFileAmountLimitValidator extends Validator {\n  private previousPlainFiles: File[] = [];\n\n  constructor(private limitFilesConfig: FileAmountLimitConfig) {\n    super();\n  }\n\n  override onClear(): void {\n    this.previousPlainFiles = [];\n  }\n\n  override onFileRemoved(_removedFile: File, removedIndex: number): void {\n    this.previousPlainFiles.splice(removedIndex, 1);\n  }\n\n  validateBeforeParsing(_config: UseFilePickerConfig, plainFiles: File[]): Promise<void> {\n    const fileAmount = this.previousPlainFiles.length + plainFiles.length;\n    const { min, max } = this.limitFilesConfig;\n    if (max && fileAmount > max) {\n      return Promise.reject({\n        name: 'FileAmountLimitError',\n        reason: 'MAX_AMOUNT_OF_FILES_EXCEEDED',\n      } as FileAmountLimitError);\n    }\n\n    if (min && fileAmount < min) {\n      return Promise.reject({\n        name: 'FileAmountLimitError',\n        reason: 'MIN_AMOUNT_OF_FILES_NOT_REACHED',\n      } as FileAmountLimitError);\n    }\n\n    this.previousPlainFiles = [...this.previousPlainFiles, ...plainFiles];\n\n    return Promise.resolve();\n  }\n\n  validateAfterParsing(): Promise<void> {\n    return Promise.resolve();\n  }\n}\n\nexport default PersistentFileAmountLimitValidator;\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport type { FileWithPath, UseFilePickerConfig } from '../../interfaces.js';\nimport { Validator } from '../validatorBase.js';\n\nexport default class FileTypeValidator extends Validator {\n  constructor(private readonly acceptedFileExtensions: string[]) {\n    super();\n  }\n\n  validateBeforeParsing(_config: UseFilePickerConfig, plainFiles: File[]): Promise<void> {\n    const fileExtensionErrors = plainFiles.reduce<{ name: string; reason: string; causedByFile: File }[]>(\n      (errors, currentFile) => {\n        const fileExtension = currentFile.name.split('.').pop();\n        if (!fileExtension) {\n          return [\n            ...errors,\n            {\n              name: 'FileTypeError',\n              reason: 'FILE_EXTENSION_NOT_FOUND',\n              causedByFile: currentFile,\n            },\n          ];\n        }\n        if (!this.acceptedFileExtensions.includes(fileExtension)) {\n          return [\n            ...errors,\n            {\n              name: 'FileTypeError',\n              reason: 'FILE_TYPE_NOT_ACCEPTED',\n              causedByFile: currentFile,\n            },\n          ];\n        }\n\n        return errors;\n      },\n      []\n    );\n\n    return fileExtensionErrors.length > 0 ? Promise.reject(fileExtensionErrors) : Promise.resolve();\n  }\n\n  validateAfterParsing(_config: UseFilePickerConfig, _file: FileWithPath, _reader: FileReader): Promise<void> {\n    return Promise.resolve();\n  }\n}\n"],"names":["__defProp","__defNormalProp","__publicField"],"mappings":"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"}