@astral/ui 4.55.1 → 4.55.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/components/ConfigProvider/ConfigProvider.d.ts +1 -1
  2. package/components/ConfigProvider/ConfigProvider.js +10 -4
  3. package/components/fileUploading/FileUploaderFile/Actions/useLogic/useLogic.js +4 -3
  4. package/components/fileUploading/PreviewFileUploader/PreviewFileUploader.d.ts +8 -1
  5. package/components/fileUploading/PreviewFileUploaderFile/FilePreview/useLogic/useLogic.js +6 -5
  6. package/components/fileUploading/hooks/useFileUploader/hooks/index.d.ts +1 -0
  7. package/components/fileUploading/hooks/useFileUploader/hooks/index.js +1 -0
  8. package/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/index.d.ts +1 -0
  9. package/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/index.js +1 -0
  10. package/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/usePrepareAccept.d.ts +2 -0
  11. package/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/usePrepareAccept.js +14 -0
  12. package/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/utils/getAcceptMeta/getAcceptMeta.d.ts +5 -0
  13. package/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/utils/getAcceptMeta/getAcceptMeta.js +23 -0
  14. package/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/utils/getAcceptMeta/index.d.ts +1 -0
  15. package/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/utils/getAcceptMeta/index.js +1 -0
  16. package/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/utils/index.d.ts +2 -0
  17. package/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/utils/index.js +2 -0
  18. package/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/utils/validateAcceptMeta/index.d.ts +1 -0
  19. package/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/utils/validateAcceptMeta/index.js +1 -0
  20. package/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/utils/validateAcceptMeta/validateAcceptMeta.d.ts +2 -0
  21. package/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/utils/validateAcceptMeta/validateAcceptMeta.js +10 -0
  22. package/components/fileUploading/hooks/useFileUploader/useFileUploader.js +3 -1
  23. package/components/fileUploading/hooks/usePreviewFileUploader/usePreviewFileUploader.d.ts +34 -120
  24. package/components/fileUploading/hooks/usePreviewFileUploader/usePreviewFileUploader.js +10 -137
  25. package/components/fileUploading/restrictions/restrictFileType/constants.d.ts +4 -0
  26. package/components/fileUploading/restrictions/restrictFileType/constants.js +4 -0
  27. package/components/fileUploading/restrictions/restrictFileType/restrictFileType.d.ts +2 -2
  28. package/components/fileUploading/restrictions/restrictFileType/restrictFileType.js +31 -55
  29. package/components/fileUploading/restrictions/restrictFileType/utils/getFileMeta/getFileMeta.d.ts +5 -0
  30. package/components/fileUploading/restrictions/restrictFileType/utils/getFileMeta/getFileMeta.js +21 -0
  31. package/components/fileUploading/restrictions/restrictFileType/utils/getFileMeta/index.d.ts +1 -0
  32. package/components/fileUploading/restrictions/restrictFileType/utils/getFileMeta/index.js +1 -0
  33. package/components/fileUploading/restrictions/restrictFileType/utils/index.d.ts +1 -2
  34. package/components/fileUploading/restrictions/restrictFileType/utils/index.js +1 -2
  35. package/components/fileUploading/services/MimeTypeRegistry/MimeTypeRegistry.d.ts +9 -0
  36. package/components/fileUploading/services/MimeTypeRegistry/MimeTypeRegistry.js +27 -0
  37. package/components/fileUploading/services/MimeTypeRegistry/constants.d.ts +1 -0
  38. package/components/fileUploading/services/MimeTypeRegistry/constants.js +343 -0
  39. package/components/fileUploading/services/MimeTypeRegistry/index.d.ts +1 -0
  40. package/components/fileUploading/services/MimeTypeRegistry/index.js +1 -0
  41. package/components/fileUploading/types.d.ts +10 -0
  42. package/components/fileUploading/utils/index.d.ts +1 -1
  43. package/components/fileUploading/utils/index.js +1 -1
  44. package/components/services/ErrorService/ErrorService.d.ts +17 -0
  45. package/components/services/ErrorService/ErrorService.js +33 -0
  46. package/components/services/ErrorService/index.d.ts +1 -0
  47. package/components/services/ErrorService/index.js +1 -0
  48. package/node/components/ConfigProvider/ConfigProvider.d.ts +1 -1
  49. package/node/components/ConfigProvider/ConfigProvider.js +9 -3
  50. package/node/components/fileUploading/FileUploaderFile/Actions/useLogic/useLogic.js +4 -3
  51. package/node/components/fileUploading/PreviewFileUploader/PreviewFileUploader.d.ts +8 -1
  52. package/node/components/fileUploading/PreviewFileUploaderFile/FilePreview/useLogic/useLogic.js +6 -5
  53. package/node/components/fileUploading/hooks/useFileUploader/hooks/index.d.ts +1 -0
  54. package/node/components/fileUploading/{restrictions/restrictFileType/utils/getFileTypeFromName → hooks/useFileUploader/hooks}/index.js +1 -1
  55. package/node/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/index.d.ts +1 -0
  56. package/node/components/fileUploading/{restrictions/restrictFileType/utils/getFileTypeFromFile → hooks/useFileUploader/hooks/usePrepareAccept}/index.js +1 -1
  57. package/node/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/usePrepareAccept.d.ts +2 -0
  58. package/node/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/usePrepareAccept.js +18 -0
  59. package/node/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/utils/getAcceptMeta/getAcceptMeta.d.ts +5 -0
  60. package/node/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/utils/getAcceptMeta/getAcceptMeta.js +27 -0
  61. package/node/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/utils/getAcceptMeta/index.d.ts +1 -0
  62. package/node/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/utils/getAcceptMeta/index.js +17 -0
  63. package/node/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/utils/index.d.ts +2 -0
  64. package/node/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/utils/index.js +18 -0
  65. package/node/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/utils/validateAcceptMeta/index.d.ts +1 -0
  66. package/node/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/utils/validateAcceptMeta/index.js +17 -0
  67. package/node/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/utils/validateAcceptMeta/validateAcceptMeta.d.ts +2 -0
  68. package/node/components/fileUploading/hooks/useFileUploader/hooks/usePrepareAccept/utils/validateAcceptMeta/validateAcceptMeta.js +14 -0
  69. package/node/components/fileUploading/hooks/useFileUploader/useFileUploader.js +3 -1
  70. package/node/components/fileUploading/hooks/usePreviewFileUploader/usePreviewFileUploader.d.ts +34 -120
  71. package/node/components/fileUploading/hooks/usePreviewFileUploader/usePreviewFileUploader.js +9 -136
  72. package/node/components/fileUploading/restrictions/restrictFileType/constants.d.ts +4 -0
  73. package/node/components/fileUploading/restrictions/restrictFileType/constants.js +5 -1
  74. package/node/components/fileUploading/restrictions/restrictFileType/restrictFileType.d.ts +2 -2
  75. package/node/components/fileUploading/restrictions/restrictFileType/restrictFileType.js +29 -53
  76. package/node/components/fileUploading/restrictions/restrictFileType/utils/getFileMeta/getFileMeta.d.ts +5 -0
  77. package/node/components/fileUploading/restrictions/restrictFileType/utils/getFileMeta/getFileMeta.js +25 -0
  78. package/node/components/fileUploading/restrictions/restrictFileType/utils/getFileMeta/index.d.ts +1 -0
  79. package/node/components/fileUploading/restrictions/restrictFileType/utils/{prepareType → getFileMeta}/index.js +1 -1
  80. package/node/components/fileUploading/restrictions/restrictFileType/utils/index.d.ts +1 -2
  81. package/node/components/fileUploading/restrictions/restrictFileType/utils/index.js +1 -2
  82. package/node/components/fileUploading/services/MimeTypeRegistry/MimeTypeRegistry.d.ts +9 -0
  83. package/node/components/fileUploading/services/MimeTypeRegistry/MimeTypeRegistry.js +31 -0
  84. package/node/components/fileUploading/services/MimeTypeRegistry/constants.d.ts +1 -0
  85. package/node/components/fileUploading/services/MimeTypeRegistry/constants.js +347 -0
  86. package/node/components/fileUploading/services/MimeTypeRegistry/index.d.ts +1 -0
  87. package/node/components/fileUploading/services/MimeTypeRegistry/index.js +17 -0
  88. package/node/components/fileUploading/types.d.ts +10 -0
  89. package/node/components/fileUploading/utils/index.d.ts +1 -1
  90. package/node/components/fileUploading/utils/index.js +16 -3
  91. package/node/components/services/ErrorService/ErrorService.d.ts +17 -0
  92. package/node/components/services/ErrorService/ErrorService.js +37 -0
  93. package/node/components/services/ErrorService/index.d.ts +1 -0
  94. package/node/components/services/ErrorService/index.js +17 -0
  95. package/package.json +1 -1
  96. package/components/fileUploading/restrictions/restrictFileType/utils/getFileTypeFromFile/getFileTypeFromFile.d.ts +0 -4
  97. package/components/fileUploading/restrictions/restrictFileType/utils/getFileTypeFromFile/getFileTypeFromFile.js +0 -10
  98. package/components/fileUploading/restrictions/restrictFileType/utils/getFileTypeFromFile/index.d.ts +0 -1
  99. package/components/fileUploading/restrictions/restrictFileType/utils/getFileTypeFromFile/index.js +0 -1
  100. package/components/fileUploading/restrictions/restrictFileType/utils/getFileTypeFromName/getFileTypeFromName.d.ts +0 -4
  101. package/components/fileUploading/restrictions/restrictFileType/utils/getFileTypeFromName/getFileTypeFromName.js +0 -13
  102. package/components/fileUploading/restrictions/restrictFileType/utils/getFileTypeFromName/index.d.ts +0 -1
  103. package/components/fileUploading/restrictions/restrictFileType/utils/getFileTypeFromName/index.js +0 -1
  104. package/components/fileUploading/restrictions/restrictFileType/utils/prepareType/index.d.ts +0 -1
  105. package/components/fileUploading/restrictions/restrictFileType/utils/prepareType/index.js +0 -1
  106. package/components/fileUploading/restrictions/restrictFileType/utils/prepareType/prepareType.d.ts +0 -5
  107. package/components/fileUploading/restrictions/restrictFileType/utils/prepareType/prepareType.js +0 -5
  108. package/node/components/fileUploading/restrictions/restrictFileType/utils/getFileTypeFromFile/getFileTypeFromFile.d.ts +0 -4
  109. package/node/components/fileUploading/restrictions/restrictFileType/utils/getFileTypeFromFile/getFileTypeFromFile.js +0 -14
  110. package/node/components/fileUploading/restrictions/restrictFileType/utils/getFileTypeFromFile/index.d.ts +0 -1
  111. package/node/components/fileUploading/restrictions/restrictFileType/utils/getFileTypeFromName/getFileTypeFromName.d.ts +0 -4
  112. package/node/components/fileUploading/restrictions/restrictFileType/utils/getFileTypeFromName/getFileTypeFromName.js +0 -17
  113. package/node/components/fileUploading/restrictions/restrictFileType/utils/getFileTypeFromName/index.d.ts +0 -1
  114. package/node/components/fileUploading/restrictions/restrictFileType/utils/prepareType/index.d.ts +0 -1
  115. package/node/components/fileUploading/restrictions/restrictFileType/utils/prepareType/prepareType.d.ts +0 -5
  116. package/node/components/fileUploading/restrictions/restrictFileType/utils/prepareType/prepareType.js +0 -9
@@ -1,154 +1,27 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.usePreviewFileUploader = void 0;
4
- const declensionOfWords_1 = require("@astral/utils/declension/declensionOfWords");
5
- const formatFileSizeToView_1 = require("@astral/utils/file/formatFileSizeToView");
6
- const react_1 = require("react");
7
- const useGenerateLocalId_1 = require("../../../useGenerateLocalId");
8
- const useId_1 = require("../../../useId");
9
4
  const constants_1 = require("../../constants");
10
- const restrictions_1 = require("../../restrictions");
11
- const compareFile_1 = require("../../utils/compareFile");
12
- const rulePipe_1 = require("../../utils/rulePipe");
13
- const toArray_1 = require("../../utils/toArray");
14
- const useDnD_1 = require("../useDnD");
15
- const useUploadFiles_1 = require("../useUploadFiles");
16
- const usePreviewFileUploader = ({ value, isDisabled, accept, restrictions = [], maxFileSize, inputRef, notify, onChange, onUploadFile, onDeleteFile, label, isError, generateDownloadLink, onView, getErrorMessage, name, helperText, className, placeholder, placeholderImgSrc, isHidePersonalData, PdfViewer, }) => {
17
- const inputId = (0, useId_1.useId)();
18
- const [deletingFileId, setDeletingFileId] = (0, react_1.useState)(null);
19
- const { generateId } = (0, useGenerateLocalId_1.useGenerateLocalId)();
20
- // Преобразуем value к массиву
21
- const files = (0, react_1.useMemo)(() => (0, toArray_1.toArray)(value), [value]);
22
- const isVisibleAddFile = !files.length;
23
- const isVisibleFileList = Boolean(files.length);
24
- const restrict = (file) => {
25
- return (0, rulePipe_1.rulePipe)((0, restrictions_1.restrictFileMaxSize)(formatFileSizeToView_1.formatFileSizeToView, maxFileSize), ...(accept ? [(0, restrictions_1.restrictFileType)(accept)] : []), ...restrictions)(file);
26
- };
27
- const declensionFile = (0, declensionOfWords_1.declensionOfWords)(['файл', 'файла', 'файлов']);
28
- const declensionAdded = (0, declensionOfWords_1.declensionOfWords)([
29
- 'Добавлен',
30
- 'Добавлено',
31
- 'Добавлено',
32
- ]);
33
- const notifyWarning = (addedFilesLength, droppedFilesLength) => {
34
- notify?.warning(`${declensionAdded(addedFilesLength)} ${addedFilesLength} ${declensionFile(addedFilesLength)} из ${droppedFilesLength}`, {
35
- content: 'Вы превысили максимально допустимое количество файлов для загрузки',
36
- });
37
- };
38
- const getInitialStatusUploadFile = (error) => {
39
- if (error) {
40
- return {
41
- ...constants_1.DEFAULT_FILE_STATUS,
42
- isRestrictionError: Boolean(error),
43
- errorMsg: error.message,
44
- };
45
- }
46
- return constants_1.DEFAULT_FILE_STATUS;
47
- };
48
- const { enqueueFiles, refetchFile, setErrorStatusFile, selfFiles } = (0, useUploadFiles_1.useUploadFiles)({
49
- files,
50
- onChange,
51
- onUploadFile,
52
- getErrorMessage,
53
- });
54
- const handleChange = (event) => {
55
- // Преобразуем к массиву и удаляем дубликаты
56
- const droppedFiles = Array.from(event.target.files || []).filter((droppedFile) => !files.find((file) => (0, compareFile_1.compareFile)(droppedFile, file)));
57
- const addedFiles = droppedFiles
58
- .slice(0, 1 - files.length)
59
- .reduce((acc, droppedFile) => {
60
- const error = restrict(droppedFile);
61
- return [
62
- // biome-ignore lint/performance/noAccumulatingSpread: <>
63
- ...acc,
64
- {
65
- id: `${inputId}${generateId()}`,
66
- name: droppedFile.name,
67
- type: droppedFile.type,
68
- size: droppedFile.size,
69
- file: droppedFile,
70
- status: getInitialStatusUploadFile(error),
71
- },
72
- ];
73
- }, []);
74
- onChange(addedFiles[0]);
75
- if (addedFiles.length < droppedFiles.length) {
76
- notifyWarning(addedFiles.length, droppedFiles.length);
77
- }
78
- enqueueFiles(addedFiles);
79
- };
80
- const { isDragActive, ...dropZoneActions } = (0, useDnD_1.useDnD)({
81
- isDisabled,
82
- onChange: (droppedFiles) => {
83
- handleChange({
84
- target: { files: droppedFiles },
85
- });
86
- },
5
+ const useFileUploader_1 = require("../useFileUploader");
6
+ const usePreviewFileUploader = ({ placeholderImgSrc, isHidePersonalData, PdfViewer, accept = [], ...props }) => {
7
+ const { dropZoneProps, fileListProps } = (0, useFileUploader_1.useFileUploader)({
8
+ ...props,
9
+ accept,
10
+ isMultiple: false,
87
11
  });
88
- const handleDelete = (fileId) => {
89
- const deleteFile = () => onChange(null);
90
- if (!onDeleteFile) {
91
- return deleteFile();
92
- }
93
- setDeletingFileId(fileId);
94
- onDeleteFile(fileId)
95
- .then(deleteFile)
96
- .catch(() => notify.error('Ошибка удаления файла'))
97
- .finally(() => setDeletingFileId(null));
98
- };
99
- const getHandlerOnRetry = () => {
100
- if (onUploadFile) {
101
- return (fileId, file) => refetchFile({ id: fileId, file });
102
- }
103
- return undefined;
104
- };
105
12
  return {
106
13
  dropZoneProps: {
107
- isActive: !isDisabled && isDragActive,
108
- htmlFor: inputId,
14
+ ...dropZoneProps,
109
15
  className: constants_1.previewFileUploaderClassnames.dropzone,
110
- isDisabled,
111
- isError,
112
- ...dropZoneActions,
113
- isVisibleAddFile,
114
- isVisibleFileList,
115
- fileInputProps: {
116
- id: inputId,
117
- accept: accept?.join() ?? '',
118
- ref: inputRef,
119
- value: '',
120
- onChange: handleChange,
121
- name,
122
- isDisabled,
123
- },
124
16
  hintPlaceholderProps: {
125
- accept,
126
- placeholder,
17
+ ...dropZoneProps.hintPlaceholderProps,
127
18
  placeholderImgSrc,
128
- maxFileSize,
129
- },
130
- uploadButtonProps: {
131
- isDisabled,
132
- htmlFor: inputId,
133
- },
134
- containerProps: {
135
- className,
136
- label,
137
- isError,
138
- helperText,
139
19
  },
140
20
  },
141
21
  fileListProps: {
142
- onDelete: handleDelete,
143
- onRetry: getHandlerOnRetry(),
144
- setErrorStatusFile,
145
- selfFiles,
146
- generateDownloadLink,
147
- onView,
148
- files,
22
+ ...fileListProps,
149
23
  isHidePersonalData,
150
24
  PdfViewer,
151
- deletingFileId,
152
25
  },
153
26
  };
154
27
  };
@@ -2,3 +2,7 @@ export declare const FILE_TYPE_ERROR_INFO: {
2
2
  code: string;
3
3
  message: string;
4
4
  };
5
+ export declare const INCONSISTENCY_EXTENSION_AND_MIME_TYPE_ERROR_INFO: {
6
+ code: string;
7
+ message: string;
8
+ };
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FILE_TYPE_ERROR_INFO = void 0;
3
+ exports.INCONSISTENCY_EXTENSION_AND_MIME_TYPE_ERROR_INFO = exports.FILE_TYPE_ERROR_INFO = void 0;
4
4
  exports.FILE_TYPE_ERROR_INFO = {
5
5
  code: 'file-type',
6
6
  message: 'Тип файла недопустим',
7
7
  };
8
+ exports.INCONSISTENCY_EXTENSION_AND_MIME_TYPE_ERROR_INFO = {
9
+ code: 'inconsistency-file-type',
10
+ message: 'Содержимое файла не соответствует его расширению',
11
+ };
@@ -1,2 +1,2 @@
1
- import type { RestrictionFn } from '../../types';
2
- export declare const restrictFileType: (accept: string[]) => RestrictionFn;
1
+ import type { AcceptMeta, RestrictionFn } from '../../types';
2
+ export declare const restrictFileType: (acceptMeta: AcceptMeta) => RestrictionFn;
@@ -1,66 +1,42 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.restrictFileType = void 0;
4
- const getFileType_1 = require("@astral/utils/file/getFileType");
4
+ const MimeTypeRegistry_1 = require("../../services/MimeTypeRegistry");
5
5
  const constants_1 = require("./constants");
6
6
  const utils_1 = require("./utils");
7
- const getGeneralType = (type) => type.split('/')[0];
8
- const compareFileType = (fileTypeA, fileTypeB) => {
9
- if (Object.is((0, utils_1.prepareType)(fileTypeA), (0, utils_1.prepareType)(fileTypeB))) {
10
- return true;
11
- }
12
- const isGeneralType = /^[\w.-]+\/\*$/.test(fileTypeA);
13
- // Если переданный тип заканчивается на '/*'
14
- if (isGeneralType) {
15
- return Object.is(getGeneralType(fileTypeA), getGeneralType(fileTypeB));
16
- }
17
- return false;
18
- };
19
- const restrictFileType = (accept) => (file) => {
20
- if (!file || !accept.length) {
7
+ const getAcceptMimeTypes = (acceptMeta) => acceptMeta.mimeTypes.concat(...acceptMeta.extensions
8
+ .map((extension) => MimeTypeRegistry_1.MimeTypeRegistry.getInstance().getMimeTypeByExtension(extension))
9
+ .filter((value) => typeof value === 'string'));
10
+ const checkEmptyAccept = (acceptMeta) => !acceptMeta.extensions.length &&
11
+ !acceptMeta.mimeTypes.length &&
12
+ !acceptMeta.generalMimeTypes.length;
13
+ const restrictFileType = (acceptMeta) => (file) => {
14
+ if (!file || checkEmptyAccept(acceptMeta)) {
21
15
  return undefined;
22
16
  }
23
- const acceptInput = [...accept];
24
- const addMimeTypes = (mimeType) => {
25
- mimeType.forEach((type) => {
26
- if (!accept.includes(type)) {
27
- acceptInput.push(type);
28
- }
29
- });
30
- };
31
- if (accept.includes('.xml')) {
32
- addMimeTypes(['text/xml']);
17
+ const fileMeta = (0, utils_1.getFileMeta)(file);
18
+ const acceptMimeTypes = getAcceptMimeTypes(acceptMeta);
19
+ if (acceptMeta.generalMimeTypes.length) {
20
+ const isValid = acceptMeta.generalMimeTypes.some((mimeType) => mimeType.split('/')[0] === fileMeta.mimeType.split('/')[0]);
21
+ if (!isValid) {
22
+ return constants_1.FILE_TYPE_ERROR_INFO;
23
+ }
24
+ return undefined;
33
25
  }
34
- if (accept.includes('.zip')) {
35
- addMimeTypes([
36
- 'application/zip',
37
- 'application/zip-compressed',
38
- 'application/x-zip-compressed',
39
- ]);
26
+ const isInconsistencyExtensionAndMimeType = !MimeTypeRegistry_1.MimeTypeRegistry.getInstance()
27
+ .getExtensionsByMimeType(fileMeta.mimeType)
28
+ ?.includes(fileMeta.extension);
29
+ if (isInconsistencyExtensionAndMimeType) {
30
+ return constants_1.INCONSISTENCY_EXTENSION_AND_MIME_TYPE_ERROR_INFO;
40
31
  }
41
- if (accept.includes('.rar')) {
42
- addMimeTypes([
43
- 'application/x-rar-compressed',
44
- 'application/vnd.rar',
45
- 'application/x-compressed',
46
- ]);
32
+ if (!acceptMimeTypes.includes(fileMeta.mimeType)) {
33
+ return constants_1.FILE_TYPE_ERROR_INFO;
47
34
  }
48
- // Приводим к MIME-Type
49
- const acceptedTypes = acceptInput.map((acceptType) => {
50
- if (acceptType.includes('/')) {
51
- return acceptType;
52
- }
53
- return (0, getFileType_1.getFileType)(acceptType) || acceptType;
54
- });
55
- const fileType = (0, utils_1.getFileTypeFromFile)(file);
56
- const isValid = acceptedTypes.some((acceptedType) => {
57
- return compareFileType(acceptedType, fileType);
58
- });
59
- if (!isValid) {
60
- return {
61
- code: constants_1.FILE_TYPE_ERROR_INFO.code,
62
- message: constants_1.FILE_TYPE_ERROR_INFO.message,
63
- };
35
+ // Если в accept указаны только расширения, то нужно проверить соотносится ли расширение с разрешенным
36
+ // Ибо mime type может подойти (например, image/jpeg может быть jpg, jpeg, jpe)
37
+ if (acceptMeta.isOnlyExtensions &&
38
+ !acceptMeta.extensions.includes(fileMeta.extension)) {
39
+ return constants_1.FILE_TYPE_ERROR_INFO;
64
40
  }
65
41
  return undefined;
66
42
  };
@@ -0,0 +1,5 @@
1
+ export type FileMeta = {
2
+ mimeType: string;
3
+ extension: string;
4
+ };
5
+ export declare const getFileMeta: (file: File) => FileMeta;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getFileMeta = void 0;
4
+ const MimeTypeRegistry_1 = require("../../../../services/MimeTypeRegistry");
5
+ const getExtensionFromName = (filename) => {
6
+ const lastDotIndex = filename.lastIndexOf('.');
7
+ if (lastDotIndex < 0) {
8
+ return '';
9
+ }
10
+ return filename.slice(lastDotIndex + 1);
11
+ };
12
+ const getFileMeta = (file) => {
13
+ const extension = getExtensionFromName(file.name);
14
+ if (file.type) {
15
+ return {
16
+ mimeType: file.type,
17
+ extension,
18
+ };
19
+ }
20
+ return {
21
+ mimeType: MimeTypeRegistry_1.MimeTypeRegistry.getInstance().getMimeTypeByExtension(extension) || '',
22
+ extension,
23
+ };
24
+ };
25
+ exports.getFileMeta = getFileMeta;
@@ -14,4 +14,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./prepareType"), exports);
17
+ __exportStar(require("./getFileMeta"), exports);
@@ -1,2 +1 @@
1
- export * from './getFileTypeFromFile';
2
- export * from './prepareType';
1
+ export * from './getFileMeta';
@@ -14,5 +14,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./getFileTypeFromFile"), exports);
18
- __exportStar(require("./prepareType"), exports);
17
+ __exportStar(require("./getFileMeta"), exports);
@@ -0,0 +1,9 @@
1
+ export declare class MimeTypeRegistry {
2
+ private static instanceRef?;
3
+ private readonly extensionsMap;
4
+ private readonly mimeTypesMap;
5
+ private constructor();
6
+ getMimeTypeByExtension(extension: string): string | null;
7
+ getExtensionsByMimeType(mimeType: string): string[] | null;
8
+ static getInstance(): MimeTypeRegistry;
9
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MimeTypeRegistry = void 0;
4
+ const constants_1 = require("./constants");
5
+ class MimeTypeRegistry {
6
+ constructor() {
7
+ this.mimeTypesMap = (0, constants_1.getMimeTypesMap)();
8
+ this.extensionsMap = new Map();
9
+ for (const [mimeType, extensions] of Object.entries(this.mimeTypesMap)) {
10
+ for (const extension of extensions) {
11
+ this.extensionsMap.set(extension, mimeType);
12
+ }
13
+ }
14
+ }
15
+ getMimeTypeByExtension(extension) {
16
+ return (this.extensionsMap.get(extension.toLowerCase().replace('.', '')) || null);
17
+ }
18
+ getExtensionsByMimeType(mimeType) {
19
+ return this.mimeTypesMap[mimeType] || null;
20
+ }
21
+ static getInstance() {
22
+ const instance = this.instanceRef?.deref();
23
+ if (instance) {
24
+ return instance;
25
+ }
26
+ const newInstance = new MimeTypeRegistry();
27
+ this.instanceRef = new WeakRef(newInstance);
28
+ return newInstance;
29
+ }
30
+ }
31
+ exports.MimeTypeRegistry = MimeTypeRegistry;
@@ -0,0 +1 @@
1
+ export declare const getMimeTypesMap: () => Record<string, string[]>;