@minto-ai/tools 1.0.3 → 1.0.33

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.
package/README.md CHANGED
@@ -806,37 +806,8 @@ console.log(uuid) // 输出类似于 "1gann4cq9b6r"
806
806
  | `XLS` | `xls` | Excel 工作簿 |
807
807
  | `XLSX` | `xlsx` | Excel 工作簿 (XML 格式) |
808
808
 
809
- #### `FileItemFeedTypeEnum`
810
-
811
- 一个枚举类型,用于表示文件喂养类型
812
-
813
- | 枚举键名 | 值 | 描述 |
814
- | ------------- | ---- | ----------------------------- |
815
- | `ALL` | ` ` | 所有类型内容 |
816
- | `DOCUMENT` | `0` | 文档类型内容 |
817
- | `TEXT` | `1` | 纯文本内容 |
818
- | `IMG` | `2` | 图片类型内容 |
819
- | `VIDEO` | `3` | 视频类型内容 |
820
- | `PPT` | `4` | 幻灯片(PPT)类型内容 |
821
- | `QA` | `5` | 问答(QA)类型内容 |
822
- | `AUDIO` | `6` | 音频类型内容 |
823
- | `MUSIC` | `7` | 音乐类型内容 |
824
- | `AUTOHTML` | `8` | 自动生成的 HTML 内容 |
825
- | `TWEET` | `9` | 社交媒体推文(Tweet)类型内容 |
826
- | `COMIC_STRIP` | `10` | 漫画(Comic Strip)类型内容 |
827
-
828
809
  ### 类型
829
810
 
830
- #### `IFileItem`
831
-
832
- `IFileItem` 是一个用于描述文件信息的接口,包含文件的基本信息和相关 URL。
833
- | 属性名 | 类型 | 描述 |
834
- |----------|-----------|---------------------|
835
- | `title` | `string` | 文件的标题或名称,用于显示。 |
836
- | `viewUrl` | `string` | 文件在Obs服务器上原始地址 |
837
- |`createTime`|`string`|文件创建时间|
838
- |`feedType`|`FileItemFeedType`|文件喂养类型|
839
-
840
811
  #### `FileSuffix`
841
812
 
842
813
  `FileSuffix` 是一个基于 `FileSuffixEnum` 枚举的类型别名,用于表示文件后缀。
@@ -857,10 +828,6 @@ console.log(uuid) // 输出类似于 "1gann4cq9b6r"
857
828
 
858
829
  `DocumentFileSuffix` 是一个基于 `DocumentFileSuffixEnum` 枚举的类型别名,用于表示文档文件后缀。
859
830
 
860
- #### `FileItemFeedType`
861
-
862
- `FileItemFeedType` 是一个基于 `FileItemFeedTypeEnum` 枚举的类型别名,用于表示文件类型。
863
-
864
831
  ### `getFileSuffix`
865
832
 
866
833
  > `function getFileSuffix(filePath: string): FileSuffix`
@@ -1099,90 +1066,6 @@ console.log(getFileIcon('/path/to/file.pdf')) // 返回 pdfIcon 的路径
1099
1066
  console.log(getFileIcon('/path/to/file.txt')) // 返回 txtIcon 的路径
1100
1067
  ```
1101
1068
 
1102
- ### `getFileItemSuffix`
1103
-
1104
- > `function getFileItemSuffix(fileItem: IFileItem): FileSuffix`
1105
-
1106
- 从文件实例中提取文件类型后缀。该函数内部包含多种逻辑,可以直接调用或根据需求进行修改。
1107
-
1108
- #### 参数
1109
-
1110
- - `fileItem(IFileItem)`: 文件实例,包含文件的基本信息和路径。
1111
-
1112
- #### 返回
1113
-
1114
- `(FileSuffix)`: 文件类型后缀。如果无法提取有效后缀,则返回空字符串。
1115
-
1116
- #### 示例
1117
-
1118
- ```typescript
1119
- import { getFileItemSuffix } from '@minto-ai/tools'
1120
-
1121
- console.log(
1122
- getFileItemSuffix({
1123
- title: 'pdf文件',
1124
- viewUrl: '/path/to/file.pdf',
1125
- createTime: '2024-03-19 20:37:30'
1126
- })
1127
- ) // 返回 "pdf"
1128
- ```
1129
-
1130
- ### `getFileItemIcon`
1131
-
1132
- > `function getFileItemIcon(fileItem: IFileItem): string`
1133
-
1134
- 从文件实例中提取文件类型图标。该函数通过文件实例的后缀获取对应的图标。
1135
-
1136
- #### 参数
1137
-
1138
- - `fileItem (IFileItem)`: 文件实例,包含文件的基本信息和路径。
1139
-
1140
- #### 返回
1141
-
1142
- `(string)`: 文件类型的图标路径。如果无法提取有效后缀,则返回默认图标路径。
1143
-
1144
- #### 示例
1145
-
1146
- ```typescript
1147
- import { getFileItemIcon } from '@minto-ai/tools'
1148
-
1149
- console.log(
1150
- getFileItemIcon({
1151
- title: 'image文件',
1152
- viewUrl: '/path/to/image.jpg',
1153
- createTime: '2024-03-19 20:37:30'
1154
- })
1155
- ) // image图标
1156
- ```
1157
-
1158
- ### `getFileFeedType`
1159
-
1160
- > `function getFileFeedType(filePath: string): FileItemFeedType | undefined`
1161
-
1162
- 根据文件路径获取`feedType`。该函数通过文件路径提取文件后缀,并根据预定义的映射关系返回对应的`feedType`(`FileItemFeedTypeEnum`)。
1163
-
1164
- #### 参数
1165
-
1166
- - `filePath (string)`: 文件路径,例如 `/path/to/file.txt`。
1167
-
1168
- #### 返回
1169
-
1170
- `(FileItemFeedType | undefined)`: 如果文件后缀无法识别,则返回 `undefined`。
1171
-
1172
- #### 例子
1173
-
1174
- ```typescript
1175
- import { getFileFeedType } from '@minto-ai/tools'
1176
-
1177
- const filePath1 = 'https://example.com/image.jpg'
1178
- const filePath2 = 'https://example.com/document.pdf'
1179
- const filePath3 = 'https://example.com/unknown.file'
1180
-
1181
- console.log(getFileFeedType(filePath1)) // 输出: FileItemFeedTypeEnum.IMG
1182
- console.log(getFileFeedType(filePath2)) // 输出: FileItemFeedTypeEnum.TEXT
1183
- console.log(getFileFeedType(filePath3)) // 输出: undefined
1184
- ```
1185
-
1186
1069
  ### `singleDownloadFile`
1187
1070
 
1188
1071
  > `function singleDownloadFile(filePath: string, fileName?: string): Promise<void>`
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -22,7 +22,6 @@ declare const FileSuffixEnum: {
22
22
  readonly WAV: "wav";
23
23
  readonly TXT: "txt";
24
24
  readonly HTML: "html";
25
- readonly NULL: "";
26
25
  };
27
26
  /**
28
27
  * 图片后缀类型枚举
@@ -61,21 +60,4 @@ declare const DocumentFileSuffixEnum: {
61
60
  readonly XLS: "xls";
62
61
  readonly XLSX: "xlsx";
63
62
  };
64
- /**
65
- * feedType类型枚举
66
- */
67
- declare const FileItemFeedTypeEnum: {
68
- readonly ALL: "";
69
- readonly DOCUMENT: 0;
70
- readonly TEXT: 1;
71
- readonly IMG: 2;
72
- readonly VIDEO: 3;
73
- readonly PPT: 4;
74
- readonly QA: 5;
75
- readonly AUDIO: 6;
76
- readonly MUSIC: 7;
77
- readonly AUTOHTML: 8;
78
- readonly TWEET: 9;
79
- readonly COMIC_STRIP: 10;
80
- };
81
- export { DocumentFileSuffixEnum, FileItemFeedTypeEnum, FileSuffixEnum, ImageFileSuffixEnum, PptFileSuffixEnum, VideoFileSuffixEnum, };
63
+ export { DocumentFileSuffixEnum, FileSuffixEnum, ImageFileSuffixEnum, PptFileSuffixEnum, VideoFileSuffixEnum, };
@@ -1,3 +1,2 @@
1
- declare const fileSuffixRegex: RegExp;
2
- declare const fileNameRegex: RegExp;
3
- export { fileNameRegex, fileSuffixRegex };
1
+ declare const filePathRegex: RegExp;
2
+ export { filePathRegex };
@@ -1,10 +1,7 @@
1
- import { DocumentFileSuffix, FileItemFeedType, FileSuffix, IFileItem, ImageFileSuffix, PptFileSuffix, VideoFileSuffix } from './types';
1
+ import { DocumentFileSuffix, FileSuffix, ImageFileSuffix, PptFileSuffix, VideoFileSuffix } from './types';
2
2
  import { default as batchDownloadFile } from './batch-download-file';
3
- import { FileItemFeedTypeEnum, FileSuffixEnum, ImageFileSuffixEnum } from './extends/enum';
4
- import { default as getFileFeedType } from './get-file-feed-type';
3
+ import { FileSuffixEnum, ImageFileSuffixEnum } from './extends/enum';
5
4
  import { default as getFileIcon } from './get-file-icon';
6
- import { default as getFileItemIcon } from './get-file-item-icon';
7
- import { default as getFileItemSuffix } from './get-file-item-suffix';
8
5
  import { default as getFileName } from './get-file-name';
9
6
  import { default as getFileSuffix } from './get-file-suffix';
10
7
  import { default as getFileSuffixIcon } from './get-file-suffix-icon';
@@ -15,5 +12,5 @@ import { default as isImageFilePath } from './is-image-file-path';
15
12
  import { default as isPptFilePath } from './is-ppt-file-path';
16
13
  import { default as isVideoFilePath } from './is-video-file-path';
17
14
  import { default as singleDownloadFile } from './single-download-file';
18
- export type { DocumentFileSuffix, FileItemFeedType, FileSuffix, IFileItem, ImageFileSuffix, PptFileSuffix, VideoFileSuffix, };
19
- export { batchDownloadFile, FileItemFeedTypeEnum, FileSuffixEnum, getFileFeedType, getFileIcon, getFileItemIcon, getFileItemSuffix, getFileName, getFileSuffix, getFileSuffixIcon, getFileTitle, ImageFileSuffixEnum, isDocumentFilePath, isFilePath, isImageFilePath, isPptFilePath, isVideoFilePath, singleDownloadFile, };
15
+ export type { DocumentFileSuffix, FileSuffix, ImageFileSuffix, PptFileSuffix, VideoFileSuffix, };
16
+ export { batchDownloadFile, FileSuffixEnum, getFileIcon, getFileName, getFileSuffix, getFileSuffixIcon, getFileTitle, ImageFileSuffixEnum, isDocumentFilePath, isFilePath, isImageFilePath, isPptFilePath, isVideoFilePath, singleDownloadFile, };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * 判断是否是有效的文档文件路径(包含doc、docx、pdf、txt、xls、xlsx)
3
+ *
4
+ * @param filePath 文件路径
5
+ * @returns 是否是有效的文档文件路径
6
+ */
7
+ declare function isMusicFilePath(filePath: string): boolean;
8
+ export default isMusicFilePath;
@@ -1,18 +1,7 @@
1
- import { DocumentFileSuffixEnum, FileItemFeedTypeEnum, FileSuffixEnum, ImageFileSuffixEnum, PptFileSuffixEnum, VideoFileSuffixEnum } from '../extends/enum';
1
+ import { DocumentFileSuffixEnum, FileSuffixEnum, ImageFileSuffixEnum, PptFileSuffixEnum, VideoFileSuffixEnum } from '../extends/enum';
2
2
  type FileSuffix = (typeof FileSuffixEnum)[keyof typeof FileSuffixEnum];
3
3
  type ImageFileSuffix = (typeof ImageFileSuffixEnum)[keyof typeof ImageFileSuffixEnum];
4
4
  type VideoFileSuffix = (typeof VideoFileSuffixEnum)[keyof typeof VideoFileSuffixEnum];
5
5
  type PptFileSuffix = (typeof PptFileSuffixEnum)[keyof typeof PptFileSuffixEnum];
6
6
  type DocumentFileSuffix = (typeof DocumentFileSuffixEnum)[keyof typeof DocumentFileSuffixEnum];
7
- type FileItemFeedType = (typeof FileItemFeedTypeEnum)[keyof typeof FileItemFeedTypeEnum];
8
- /**
9
- * 明塗内部文件对象
10
- */
11
- interface IFileItem {
12
- title: string;
13
- viewUrl?: string;
14
- previewUrl?: string;
15
- createTime?: string;
16
- feedType?: FileItemFeedType;
17
- }
18
- export type { DocumentFileSuffix, FileItemFeedType, FileSuffix, IFileItem, ImageFileSuffix, PptFileSuffix, VideoFileSuffix, };
7
+ export type { DocumentFileSuffix, FileSuffix, ImageFileSuffix, PptFileSuffix, VideoFileSuffix, };
package/dist/index.js CHANGED
@@ -67,7 +67,7 @@ function beParsedAsNumber(value) {
67
67
  return Number.NaN;
68
68
  }
69
69
  function canBeParsedAsNumber(value) {
70
- return /^-?\d+\.\d+$/.test(String(value));
70
+ return !Number.isNaN(Number.parseFloat(String(value))) && Number.isFinite(Number(value));
71
71
  }
72
72
  function isArray(value) {
73
73
  return Array.isArray(value);
@@ -120,8 +120,7 @@ const FileSuffixEnum = {
120
120
  MP3: "mp3",
121
121
  WAV: "wav",
122
122
  TXT: "txt",
123
- HTML: "html",
124
- NULL: ""
123
+ HTML: "html"
125
124
  };
126
125
  const ImageFileSuffixEnum = {
127
126
  JPG: FileSuffixEnum.JPG,
@@ -148,29 +147,15 @@ const DocumentFileSuffixEnum = {
148
147
  XLS: FileSuffixEnum.XLS,
149
148
  XLSX: FileSuffixEnum.XLSX
150
149
  };
151
- const FileItemFeedTypeEnum = {
152
- ALL: "",
153
- DOCUMENT: 0,
154
- TEXT: 1,
155
- IMG: 2,
156
- VIDEO: 3,
157
- PPT: 4,
158
- QA: 5,
159
- AUDIO: 6,
160
- MUSIC: 7,
161
- AUTOHTML: 8,
162
- TWEET: 9,
163
- COMIC_STRIP: 10
164
- };
165
- const fileSuffixRegex = new RegExp(`\\.(${Object.values(FileSuffixEnum).join("|")})$`, "i");
166
- const fileNameRegex = /([^/]*)$/;
150
+ const filePathRegex = new RegExp(`(.*?)([^/.]*?)(\\.(${Object.values(FileSuffixEnum).join("|")}))?$`, "i");
167
151
  function getFileSuffix(filePath) {
168
- const matchResult = filePath.match(fileSuffixRegex);
169
- return matchResult ? matchResult[1].toLowerCase() : "";
152
+ var _a, _b;
153
+ const matchResult = filePath.match(filePathRegex);
154
+ return ((_b = (_a = matchResult == null ? void 0 : matchResult[4]) == null ? void 0 : _a.toLowerCase) == null ? void 0 : _b.call(_a)) ?? "";
170
155
  }
171
156
  function getFileTitle(filePath) {
172
- const matchResult = filePath.match(fileNameRegex);
173
- return matchResult ? matchResult[1].replace(fileSuffixRegex, "") : "";
157
+ const matchResult = filePath.match(filePathRegex);
158
+ return matchResult ? matchResult[3] : "";
174
159
  }
175
160
  function getFileName(filePath) {
176
161
  const fileTitle = getFileTitle(filePath);
@@ -221,29 +206,6 @@ async function batchDownloadFile(fileList, zipName) {
221
206
  const hasZip = zipName.lastIndexOf(".zip") === zipName.length - 4;
222
207
  FileSaver.saveAs(zipData, `${hasZip ? zipName : `${zipName}.zip`}`);
223
208
  }
224
- const FILE_SUFFIX_TO_FEED_TYPE_MAPPING = [
225
- {
226
- suffixes: Object.values(ImageFileSuffixEnum),
227
- feedType: FileItemFeedTypeEnum.IMG
228
- },
229
- {
230
- suffixes: Object.values(VideoFileSuffixEnum),
231
- feedType: FileItemFeedTypeEnum.VIDEO
232
- },
233
- {
234
- suffixes: Object.values(PptFileSuffixEnum),
235
- feedType: FileItemFeedTypeEnum.PPT
236
- },
237
- {
238
- suffixes: Object.values(DocumentFileSuffixEnum),
239
- feedType: FileItemFeedTypeEnum.TEXT
240
- }
241
- ];
242
- function getFileFeedType(filePath) {
243
- var _a;
244
- const fileSuffix = getFileSuffix(filePath);
245
- return (_a = FILE_SUFFIX_TO_FEED_TYPE_MAPPING.find(({ suffixes }) => suffixes.includes(fileSuffix))) == null ? void 0 : _a.feedType;
246
- }
247
209
  const defaultIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAaMSURBVHgB5VvdbhQ3FP6O9ydLICWbQEqpWlJaUamVKrioRNWL9g3gDdqoDwB9Asgb8AJVeAR4A7gqKkWkalWpqG0iAQ0EwSZpSDbZ3TG2Z2dsz3gm4w0TJZtPTMbj3/P5nOM5NjuEHMw9bI2jiyvg+FZc0yJrGvsRHCtgmEeAWyJ9e+ar5mJWVXJlzv3cmkYFc4roQQThJnqYdRFnyYy5X1pXRIOHB5asBMf3ksNP915eTRZZGp6737omzOI6hgkM12e+bM5GjzFhpVmOGxhCBDz48YeLk4qbIqx8VpoxYRzDCLmocVyQPs3C5+D60JKVkNzkIiyTSrsMCzgMqKNZFfZ9maUX67eKE6M1fDg+grGRCmoVAudhfrsXoLXRxb+v2mh3A5SNoB1crbIquwSOUlBlhC9OHUXzSDXO48ZYjQrDe2N1dUnSC602ygSrsG+q4jV03h1+7B6fTY1iYrSqSHbFnxfrHaXJiLQsG2+Ek/HxZAPdgOPx6hZKg4gWq2UtVlJrU8dqitz6dg8Pnq4rQiYWWlDal1YgreHsRANL/2+n6r1FTJfmvKcFYUlWavS3pdeZJFqbXfy5vKHSkvTpd+ooE1XP+pgcreD4EYZqJT1XpmdMHBN1mHjhEceZiVqczzPq16thyZlmDUfq6bo6J2zV7XEsrXWw2fGzBi/C56ZG8OnJekJaewGQT0RhSt7qNcJYYyQWNwmK71w1nKgxNI9m1zdzPz81gkfL2/jrRXG/L2zSH4zXDLKKFpybLYr/9EUruiJGbWiHNsbY4t+5d+s4O1ncDQoT/uhEDfmyaEF4Tln2ZUMRJ0q0d/UrZJusoSgKm/TxRsUaJExSJF1KHm7WpjCDkO3DnByZ5hjJQq4HHq1XUBSeixY5hEBCSDIl0gRjv87zZN1C1+Q5opAdyRSAB2GtAlNTlGnjvvlGuWERanK5bUTcnATyI+39WoqUS+aDC5GEObJExbHMGdYbzYF+pNikebLuDvAibLsTmfKkeFGWTwKWusjRN8/p1xpUUueOBSQHhQkn3ZTyyr06yy/Oq8oH2PUMFFqab1krsyBr8i7Iqk65XuWCvw+bw1FuhTQcpuzVPuqGGx1yv3kqrmHSbwLj5oeBGjm6oczIdkcUJtzpaRM2iUfJnV5CyZgpeSXbZLUzKw0yf4UJr7Z7qbykEFlEkncXKKM/IH8Rk8/P1rooisKE55+0lZb1gINt0sWxFuQhh7xGikeEFsyJkTL9vrRRuG1hwhvbAe78/RrRsRMN6pD9mGGw6dKQZ37icAS//tcRspUUaUnS/6yKxKprG8Ad93TZ1+/boen9Z1EfWeFGft+dnt/Ee7+WWGLlCIfnRhowBQ7DRi3sVk+b8lZX9peMlJLa4vHd3nqEfRKVeOIhERIOBw83KzwORFx7IVXGwnenTM8vc2d/9uSZ7cnKo3gcv+OFCAMRtoySTIG4QwBjcuLzDOqnk23J2oWFdbT9uEiWHmmFhG1CtkFTTEz7mzZ0ilPmXffEjKcYOVtAVjbhimOAlKbiPSxPmWR6USqC7PhxTzScXlGlZswTCm5EQm5txwJbE1J0MvRq7bv72dUqrY04osYN30sbbBJkmX9YJ20RcObFR0Hlm7RJSB+qasEjbYezz3MEd+nTnETXYmhPshjDk/EAGnaZXHr27ber25zd5pte0PL6Is/1YJeBhwsuvXE7WVgprujK9vc9WrSy/MoUKAOUfHQvWkmTTg3Rt7Q9XLS4W1F9hTgjYqd2s3ZgPNsQjP73TMPqzUNxUlseZUfGRHnbCljmTon2Lkdh8PCOPrwJy9i5yqJQMWemndq0xZYpZlbPq68mmIzlkCuLKT3S2hTbneOjGc1Mkpn27qibCU0W/R9YWaGpeFjbLH7aAQxwTPvo+SYCztXMpi4WdmjmVeI7pepWXH1EF3Yu29wK8Fz8p7gPvDXc7gR4sLiOT6YaODlWS/tW0oFTIaauZri97iNKsKieMGOyIzf5A5nHL7fx5JX/D2C8CUtI0n88LX6OtJ8g53ERhwUcKzLsXcThwTwLesFdHBIECG4z1mBD+RtpFxhnt9jMheaKMOs7GHYQbsa/l0YPM9KhMayQ3HqYlUlFuP/1xyyGF/EXLnGkNXOxeUN49fCRFpwUtz5S0ezcvZb89OUaDvonAaGLWmQlnOG7/CxAfgdBjH2HgwguFmGOGdeHWrn7lfBrF3ZJ2MVl8Xh+32qdq+BpUdzvooEb6s2TgTcW+1myQ8LP+gAAAABJRU5ErkJggg==";
248
210
  const excelIcon = "data:image/png;base64,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";
249
211
  const htmlIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFgAAABYCAYAAABxlTA0AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABqCSURBVHgBrV1vjF3FdT9n3n273vW/XbANgUDsRNj5Q4SNlKYhbWPjqIlUUKiUkH6o1PClUdNWQNNPaSrCh1SVqgSjqqVVP+CoVRtIWkjhQ1QVcNokNFIDJtAGuxJ2g6FAAZs/3rV3973JnDtzZs6cmXvfs+FYb++9c+eeOfObM785M3PfM8J5ynV//sZetOPddmA+Zkd2NyIugPsgWPcvCJ2gPEd/ItODtHc4vXYMmeJloVsZqNKq+iHpdva7+5bvn3Jnx93pcXf1hPscevD3Nx6C8xA8l8x77zi5sGndzM12NL7FXS7kmhDQGWgliPIeAW9zvCCcG0j4W6uMExXn59HfCOnqoR6JICazctBFwQg6Lx53l4dWV1dv/+6ti8dhSpkK4BscsOPZ4W0u8y1UqLanptROuBcgz9KhvZee7tIjc/hzmyoi8NbOCrEMTsttAKh0itAoqaS21IO4snr7/VMAPRHgG/5i6WYLo6+4nAtdhsajZe/KDaQbZY+WBksWqMOqHEyyRidg3IhIHYq8ko85WJn2Mg0rVrbpxx1F3n7/7246CD3SC/ANf/nmHU7pLcx9+SM251Vx3wo/TMBPx0bcLSUNtG0U4Ir5IIHK5VfTYtk22ibx4nIi/0Q7krOA0GklZ7e68MD9X9hwK3RItdY33H1yAc8M70O0e7nwssukp5VtAXcsuZHTPGLBpdR9KV3cKgpPtmB2ngzL7ZcenPFJVBwRhJJgbFGu9Y8dtrNr++6/afGUNrWBigxWho84cHdb1mDCABbKRTXEo8kNxeJEmG4wdw+UfCxHOATooAvJQ8ijXvB0nyxABxttpvOBopHUWKn8SCDsCDFRjCChXPT13o1nm/vccV9hqk749F8HWsgYUz8kjdSMCCCHoLxT6zw1AMtykx5bsUTmrnmjAAXqrF/agxNshop97b0D3/58ThcZwJ+56/XPwQDvlhVCkcVmo5g/T0ZDUfmUL1UYOwaidAUAGYvLeoW0jPuDDZk9Nfu0rdoerbvW/HnjYBwjEl7Gjm+95/ObDygUAH7jrpPbx4PhIy7TdjYeJbGj8KTE9KFripgxdisbBzZ5T1Yy0xf5GUCSUBE8V0CTZbQ60YJ2kgyIoBOtyBsHV2EzN2qkH8zaIOm0IAbMU2eb1R3MxyY2znB4m6PH7cblMsHQlrvoGimjr4wJyo3x+Qx6O9o0fjbcjzTL99CP46TLBP1tGkLQhbEcZN0mlEv3DMNmQz4bAEz3AW20B8M9vp/sD+UYiD2G7cBYn2SLER5N+o0J9TAYbWn1+zIW5sbD2xhWZO91AB/TlKBFep6/Th6i+5MtdEn+0l01aauVr3VptkzHNADx5CCVInPVe0F/mZVe0XkEODNYXSQvbqOIwczwNq7eJMGOc5nAVUFxlYpmb0BVkRQ/5xX1vUenotCHlTJRel12lvIbqAs1DnttrjdZz5qkfSjuzq81tJzwFROU7EXZRbLuYuO579ao7mHsVhDyDiQlcNcUdBP1tXnT89yNUeXRNpkIckrjMpnWanVJdJLskTQW9RsUtNeNB9/nEA9R3Bvgza3e3/ybN/Y66x7BAL2VzWZzr5EDGGR+I5rXCi8NWbJuFdMEtahi8rLzUT+LTaVdsfg4IkMHCyl7Q71tCNEzG1T9QEQmmZ01u+i+3deYBvbqasSujpKHUGXIuycbIEMW5kPIqCHVXz8LEnDUnZOjFUiTC2omm6OXTckVzkVjijzeudRMUD8vCYfvYY5N1NU+hLsbl+GqtttEM3OerDlCqG6WhkUOrP6VxkqQy6EmMCzK1SwQs7Vxm8dgbo8sjQHTDpzK1OkI+YzQn5jKs3yu/DulE9jW7m0cr26XcwdP7jkUUFEU13BDAveQ+LTNHCFqS8+JQc1K4CAaYwK4Rt+DNLAwJaDwNoxxOBSLNqULqLqJiqCtDZaiYaTdFjI7vS14VUOxLydjtNJmzYvR8vAYPy7vSyNQPMPXgtfYK7nXoCmN5P4mi0ZhPVcuTQyS50hj6LA6NrA8MrAyRhiL9QTjjJox9BnBuoFNdsodgAQDaJqKDRjrIHDxjy809KeIWXWfiEebox61g3b4/Fl5HkYS6VUxi1w0EuXqxgrGZ+WiKuv06gBeX23g1ZVBALVfCOh1gxFsGo5hXTOCucE4lWcFyaGqVua1+bq3O7YAQzXUrlTAWsldNh84MXX7mmRtgB3pYEsuwvKZQrGQk2cbeHF5pvXWcxHKvzJuXKP4awJ8jgCfIe8ew3wzVnXNfSo3M91tDEJ/NCO7P0JlKJLqLPRViwvXa3G5SbJVBc9VR6h0403nsc+fnmmp4HxFFsOAv7bqV3Ql4HMObPp01zUh2CR+zCfAzAixXtxVhFa5Vs09gRdJssZKrN8G4xK0rAe1N2x8sE01pefn9ILwf0tDeMF93qrYnnsE+KoG3FHJ5plxeyTAoxLh4cKDRRwpQhUJlDGQxdWxijGTVZzEIAng40DJMWQqm21hfuVgPotYIAExcgp+9sYQXltJ+wa6676dIjtR6+Gu3NdWfBoDvjA7bj2dKIXq2nDF+FHqvBF0LCkQxZ/WG2WlsE6ZrFPfMJWckgFqjbhpzsA656wzbm584s0ZuGRgoDkN8PJp1jBZ3moj1J5d1YC7qGTeAR092Bdqo7eYXvMg5E758iUX2/GEb0JUDZoGhuTdfD7bIFx5yQCu2NbAlg3YXrMu35sSn//3S86jXwV4+iWAn75EkQTAtAC9VdFDxMrIAT5yDPyFb76ZrZXH3Bw2gDhX3FeozkakdLTWVsOyXORzAJctInz0PUO4bMEEMAOwNgsWxTiBie/D4WcnPdBPh08X4NNYNSmtS5rYFfV0J0bTNgdXgp2NcjYdrWwfsSkaMUyN4dVEf4TLLjDw0Xc38M7F1DeycjphEJUyfrzYuRXgAxen9GPOu//rRefp7vOT56cD3PakYU8evo+/d8+bMSZK0z72Ce6O6doWRVhxp2tzEoQ+td/W3vAgXrtzCFdf3mQawqKJ92LhnXKwXdd48qd2HI28WStrNAiCm2TkNhD4zcDnJQ9/ddmB/oIH//Dzea3eDmlQjOSoBrnEyyhATkXXWNeIuxUoYx4rNKxzmH7qqllHC6bqrMXz7rH1MzSwOADd50wAk43pc/i1sf+QXLgeYIv77NzigSd9jz8H8J8nAB5zn6UeD5+WOhqTwoKQCSOo6dr3fAx5pZcaSFsl+WCW9JVdKemnqODGPTPu2EfSXuNsQ6MzwFnnpa+fhcC/aoJqJ2kpuzgJgU7XV18K8AuXuQV8B/gLrwP8+Dnv4cTlEvA+6pCCN3/LU0RcFsTaYFUbv9KLKOw2TBaKEvOde5FAEcGNV8+20YHMK42l9V7yLiqHPGwk4nmmjzw/9Ips/GlkbujBXnbgHnvl3AZNKqcxvHANaR/KW5DGavISTxs2DYg0QMVh2w9kHDZFeuBJi5yPUxb0DbH3iiFs3ZADJKXlS+M9lrg1A1/q61LQUWktEnTt3csBRIq9d24DuHwR4BO7fBpHKY895481vQ2ihbLgvCNhdibIDiEzx3upT4/LkxJsoef97xjAB9ynkFAEeffIIUoVtNA9bOoKnY/IjlmjOTo/s8oDKs3iPPcT2Aw4TXS+fwzg346lSQ9Jw5uStigw/QV5P/FCZgb3g2hW7A1iKTS44GbHux/ZUX0trh0AG3dr1Y1aI7nMaGuwFEZPJZompg0CyXwaUGmDdabxkQoLDZY3XAnwqw7sfzkC8E9P+XQTd01D9zehGf05xvOYx8gXRvKXR+hRrS9LC8982IG7aR3m1od8g4E3vFjDzVlGEJg+gQJMfbuLDiaoirLmMqyN/ICrJ1DzQw/0168H2Lo+vl1pI5gcW3JBvK/P3JvmC1bEGcmxYzdj3jWYdipcho2zjh4u9tQgyyGuJVDXRlO4oS2vz5UetBdPAh1UXoqvVwLIFIHoeJs8+mvXQ74WITVHcDmtHa/C60I2hW/iNgDI92cg0bSw9j1bTVFRY7yBY1tWT3uoze70waDDxfoTusR+jWWoRyA3oUrjSitnOxoW6oTPgmoNs2asmOCm58T57kubzECeRefhVQ5FaTfCND6LPdcaUKs0dzWIzktCHtyE2dNY5W2yJQjx9jkGj+X3HDpbVo5rxT2bkdRGx7uRe7kSRfeeDB7PKmv8ClCYVb3WIkvV4E4CnIRApngZRJxO0mCmMQ1qbXJcfMd6idrCooaYWX7pZgO1CpUJZTXKRqjL0ZdG8OzJsTuO4dlTY1hesW4G5p+eHyJc4OLuLfOmXa27YtsAdm0bVLXWenJXqWzbKIA8EvulTQJTZI6DneDUrj4vLbA5/+q879kyCFwOHYJQMIW+jH+SYgLw4SNr8NCR1QhmTeje0kkLJ1wDHH6OUlbdegS6CcQArrtypj3v8iHtXwB14Alcoj3m40ZNstRgV24ddQmqTJlx4YKmxO0IDPJNInnS35FRNQAB9sCTqy2wAJNtrMkrpy08emyt/VBsfr0AWg+SIM4lPRVUEhyN6pkmGmpRXE8hpGQjqXp1H4sCPSwXrjdtiDa2ojEsVEuwukQr073Wf3Ue+8CTK5nH9jH33Ay2i/cEItEGUQjRCT3P5RPIlEbeTPkmcba0HUHxOLGj5alyyBFfhwe57Ki+4WDTyI+siRUCZJsgMTaxFBdivKd7TaIlLGthy9DsnsfOtgCfi3hQR+35F69dB/vDesIPHagPPrXqPNkTJ3n0N350tqWRG6+eqerSPb7m3YxPk1OAeLtQEKVP8zXlV4RQoik0x16AOTFvv3DQroZRYG71M7HknN3kiy50XHIg/dlDZ9pBDCqV0hpqHk0gv+xAbBvcXV/jPJU+5L0PCKAfOroKR/9/BH/gGoMGxy6pkZq85glWnALH2RimD8g08EORfBE53Y8ZkveGAi+Yx3YOD9DFlZpg8jskNXDlfVtJk0LbUOSVxLHaDqIE8myK01morK8/fKbQV7eytIOOJgIL+ZvbtbfEoSM9rTXY8PY4inO3c7DBuHVVbNcZSkF1rMs//HjFVdjCWxHy1P1uW0r0rUwI+N/55Vk30KWXWAjkex9b6bSuSxe7S4PcR4vbSUWkj/YpW8+KslPmHZa8l726hMjCJNh+8Myo4FyE0qsm6blwHquRgY4EaJAjIcogIbogJ9m/sxFWQ3aueZjFcNeO34/QH+mt4rsL/Fy20iZ1iDyXbBq03Hs+8rLbcPnnJ1eKdDvhuiYUSeiG6ALn1xzIO8Uk5MGnfMRiK3m1a0kxDApEisCcJiB9Fy4tRXbQirzmcwrRNgijNA9X+p408jsuzqVB6a3KLjVrq5WpwSO64AGOBlhJFV3UoNMNc2XOpfIbO+mLfnw0KL+4h/FLh/HLeOIexb+L6ya98YhqwuGFgP3BM+cWjmmhneo//sRcGw2QkBe+Ummw2sBF44YM1SjS4MauNYjW5wc5gAwcI7+KhDJS8F9T4u3lSCutJl5Pzr/KRMrf6YL7gVEGYHeX5lCYQrTv/OQ8XsVRsnPrIL7EcvjEGtz6j0vwRw8sRZCx51m694tuYJRU8eix1SzeqXG/DBUbBsbX2oPHb0liTBOGWMhmfO0pTzbEX54ZXrzRdBo/qeM//eII3qrQAEUf6uo866MogUM1zcEs1ABfa0M0C7vf2cRJysNH19rptJSa97Ju035flwcnxJweRBqGf3J7qPzkXyocDmj9wfS7ibgpAT/y4uht4V4WBpeA5Sihy/Po+NCRlXbSQUAfPpEaeknMCC3kVFHjY5ON+qgjAH1u69eRGvJvXy66sChGD6hxVsOBsvLpl8oJxbTS154Eru3IJwewZcFOPLvje0deGmXXWo8E2miuzUGDyuQDe9Lzexc5ejCdte2qppenX0iV2rLe08z+XQ384f51cVdkkmYtxMXX7Mh3VGQzcxqtQxxRDczRhG3v9/O31B8mGmJkiRMG7HiYFm14RVnwthaXvHV+cvRQK6tdd+BFche7/umn5uC065pUSUqlgeu3v9kfXezfNYSjjmZ4MCN9tJomS65ZwtNjva48N5NenXr2VKII+bysDetvjJE/VoFZ8Yw1vzjiHw5RRNSMxWvErWJHDVs3msz4+shWgkvC/MuDEYPbJ6ye4l1634310SD3LRfDvtrB6QwK3b/r+2eri/bUUDxQMtBY0YHquklRgHp1SgArv+aFqkKAKj1w7fpZ7Jm9YQF2FldaP5iQ1FayOkM88EuRO9U20Mfd+gPteHStF3AJDzy1kvFtlyyv2EKPFtZpOF41bu9cD2pZmviknwPwHs3nINJpc7OLf7HLqnMQ5mUtchIhi/jch2faJcrCDpGPJhJ90rUdpT1XjtfZ+8El7eZpUUlGu3Xv3rbBN44ValLBHG9Dvj8nRh7i3qWwYVnbw7vAgSXfAYNKBSUnklfTR/OmPE4rtKZhlX5ZJoj0OJMDgOlCNfAvihSerZ65aGP5HaJUMQT5w5sFfjZRwysdvHlNx7tt1MV1JfOy01Fr3rltuhWpLfMpopB6azpNARplNAownSbTwSpwLSzOYfupCoqfKajcZg+8fNE/T15MA170/nBCC+Sf3TNTgEIhFC0z/tW/n20HttOrtui2XZ77uQ/Ptmsnk4TyIJSDHFTKMAVgkoOx/mIf/7JUioHz68W5PiNtBlR5x8uuiwbRyKMdU+ZrXShGg9pXr5+PwBx+bq1dWqQjRQ9f/e4y/IfgVuwok44UsdCi0CSQL1vEQodsNHk3DnJpAEtvTIKiAKiAajCfWtM1vWCSmZDFyZgd+irBlf/hhMGHBi8axGpCFHPQbWLSRmYWqUDdm0nXF35pNtNxoRocd3a8rFKLUgwDGX8DDW367bPwtBFA8o8AeTDTkqaPRHz+hfB6FBZFd6OaG4culm0iD9MbOu0IbrufoUqT9/2J82a588BCEQLRhoyFu8ChGd91YduIbKBJCwu/qJJbmx9lbVu8si6vzk22i2Fz6gCbUwvS+oOB+VmEWvSRhQ216EGdf/y9Hiji4YeeXi08RDcXVZwAeHmpno9o40tuqZIWa7o8ma+v2TFsef7Ln5zLps0Mru4NXZI4uDaICVDT5ihALTbm6Qh5b7efYqILzCtUk487z2EvfsgtEy6vlTn14EVHnghgh36iDJoOvyzWhHVEcGFLO7MuzxieOJEoSi9V1mhHCgF8KgJUAFfbysc6wGFx6JLNHQMEYhWZ7smrbWNh6cUHHy335nT3JNm5zfTo9lNi8mKKMrQem1kAjrtTHvJoueUvP1KPsOkU9fRTmadiHnIlUK06QtWjN6+rckOn6Cy+YslM2mZnL/aRwVrM1yXEmX2RAD87P5Nfsz3cG6gBeOpMwNa8N7db2YVw3C24m8MlLUAWFcTpcKy62EE26YcxF9zeG4MRW7HAe9I8HhUIblT/lTSq3/vY2TaqqDUMP002fFGFW9rLaMnzM2G/DSsWUCxNYR4Lv30py9M6ta7xGP7XWbD2PQaUBzRjsKQJUD+LCImjITTA5jksmKAULC3JpIScBpbrP5hGcgq5OHTrik8IDAmy1ErTbAJXLySxBxK4FEuzXOvWoYkeapMVKGuW9LnNEBdZDQ7H+Bes2j2GbIIhNzr5GSOeXZjrLhbDnxpnwRTGUveU02MCmV7a6/JkEgL5y58sJw60nLllfdmfll0oSLQgwaWQ7bN7ZqPdXeDWxJV6yNz0oblDph3o9K6G3NnIBzYTudhmnr5pNqw/BGu4ClP/DwT+aXGey2+5UV2CTMuLXxI7xDVOpK13+WI1yVWXDooFIRr0aJOTaIHzcmwtdWJhb3ke5Pj73oGH+GtcdzoTbmvXCawApLbDoX/3QRRNv1sjPbZk20QP2X9AEDKjytkFMgHGrzURuAQydeGPiC12afX8TL7uMT+TACdgSddRsc9GeWl76sY9+YwOlW0TeuKhmH734ycXGjt7EkKo1hpjO8J6WfMMBQv73j3TekzWspajAojfJhpXzsc25bXxHIovybBZBMjBH5UL5DzT2hWWJl9p49hROxuUQo1B6XqNl3j5Osf39NsVquahlvXrgjrGsMN58PGY9rePv3nA8fHNtv8xJXm+ve8etgDLGNeGEw8WZqAxqNmxAjAoPVKIJh49Npq4E9HVI6TQYEZc3/c+8JRy8H0X4U1cbivkxTM4e8wlLdSf0R23fJHuo+8aOh6Wr0H5N+ZtPO8G16fl4PIXSaQX11bhaEb2P86j6bsa2lMnCYFJwO4Xs8Yut6p5L5R5jzvv3UfeW9z7u8fP3DIw9o6oQPBxhNemH/dkDmagr75kCNvW53GCBkeCWwW6pQ3lxcGAPpBZiJPpvYUTDmj/da7ErQQg7UZc7naXr9hm2vfWpl1kj/WBCVHEGG5y4B7kyyLv3z+xdMBFCTdzheQYZ7u+Mxc0vXdLA+9aHPhEiwWw8rxOD+fvxX0AdIwmnfkBOr2zk4ODXXe+/2K8pausKPc+ufyIy7w3U6GH0IrQPtyedwzDU9wqyQsjSAJQBrfGwzIPwPmBXDvvawQ9hkPlWZ0vyOH3X4R7QEl1wj5cO/PrLsY9nM/koLr2ID8nl8ciH6bJBaYJi14aZWONLgvSe8koMsZThM5ZI/acS6CsuoeVc60HK884Ow6dXYJ9MMGWQr795NIBi/7X9Avp6FsfunQGLpjL3/fVPNpJE9JzlQd3eTJAvzdPI7WOiT15MC+7oAUpvZtPn/7g/C0WRjeZdlUo97xyY9TP6p45uZZ5Ybl2kXu0nxl675U7KfFYeU7qB+j35j7hhteeiz35RZmnHLi39oFLMnEL9cYrNxx0Cxb7rB1/A8MDJoCb/Xc7YQ2DaOLMau2/rgE13dYg29QQkIMs/0sf0PqgBFpTUJf0gdmXl7x2+TTscOAemOa5qeW+ny5vd8q/4h76mGvN7TUF1MqXbhzAlRc1WdfNKALqIVk22AEUcXJX6FajCNuRcL5s0nrsCO48cwYO7NmBp6Z+Ds5THNh7HQp7nedeRWAjjLcDpkkKcTFvH2X8Gf7ECKLCuzrCsPpa6hDnLEXDVqSPt0P3P+VsP+zK+57rXIdp4QbOQ34OjW5y2ccXKeYAAAAASUVORK5CYII=";
@@ -292,47 +254,37 @@ function getFileIcon(filePath) {
292
254
  const fileSuffix = getFileSuffix(filePath);
293
255
  return getFileSuffixIcon(fileSuffix);
294
256
  }
295
- function getFileItemSuffix(fileItem) {
296
- const { title, viewUrl } = fileItem;
297
- let fileSuffix = "";
298
- [title, viewUrl].filter(Boolean).some((path) => {
299
- if (!checkEmpty(getFileSuffix(path))) {
300
- fileSuffix += `${getFileSuffix(path)}`;
301
- return true;
302
- }
257
+ function isFilePath(filePath) {
258
+ if (checkEmpty(filePath)) {
303
259
  return false;
304
- });
305
- return fileSuffix;
306
- }
307
- function getFileItemIcon(fileItem) {
308
- const fileSuffix = getFileItemSuffix(fileItem);
309
- const fileIcon = getFileSuffixIcon(fileSuffix);
310
- return fileIcon;
260
+ }
261
+ return !!filePathRegex.test(filePath);
311
262
  }
312
263
  function isDocumentFilePath(filePath) {
313
- if (!filePath)
264
+ if (!isFilePath(filePath)) {
314
265
  return false;
266
+ }
315
267
  const fileSuffix = getFileSuffix(filePath);
316
268
  return Object.values(DocumentFileSuffixEnum).includes(fileSuffix);
317
269
  }
318
- function isFilePath(filePath) {
319
- return !!getFileSuffix(filePath);
320
- }
321
270
  function isImageFilePath(filePath) {
322
- if (!filePath)
271
+ if (!isFilePath(filePath)) {
323
272
  return false;
273
+ }
324
274
  const fileSuffix = getFileSuffix(filePath);
325
275
  return Object.values(ImageFileSuffixEnum).includes(fileSuffix);
326
276
  }
327
277
  function isPptFilePath(filePath) {
328
- if (!filePath)
278
+ if (!isFilePath(filePath)) {
329
279
  return false;
280
+ }
330
281
  const fileSuffix = getFileSuffix(filePath);
331
282
  return Object.values(PptFileSuffixEnum).includes(fileSuffix);
332
283
  }
333
284
  function isVideoFilePath(filePath) {
334
- if (!filePath)
285
+ if (!isFilePath(filePath)) {
335
286
  return false;
287
+ }
336
288
  const fileSuffix = getFileSuffix(filePath);
337
289
  return Object.values(VideoFileSuffixEnum).includes(fileSuffix);
338
290
  }
@@ -506,7 +458,6 @@ function createWorker(fun) {
506
458
  return worker;
507
459
  }
508
460
  export {
509
- FileItemFeedTypeEnum,
510
461
  FileSuffixEnum,
511
462
  ImageFileSuffixEnum,
512
463
  add,
@@ -527,10 +478,7 @@ export {
527
478
  deepFreeze,
528
479
  divide,
529
480
  getDecimalPlaces,
530
- getFileFeedType,
531
481
  getFileIcon,
532
- getFileItemIcon,
533
- getFileItemSuffix,
534
482
  getFileName,
535
483
  getFileSuffix,
536
484
  getFileSuffixIcon,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@minto-ai/tools",
3
3
  "type": "module",
4
- "version": "1.0.3",
4
+ "version": "1.0.33",
5
5
  "description": "明途公共工具库",
6
6
  "author": "hcc",
7
7
  "license": "ISC",
@@ -1,9 +0,0 @@
1
- import { FileItemFeedType } from './types';
2
- /**
3
- * 根据文件路径获取文件类型
4
- *
5
- * @param filePath 文件路径
6
- * @returns 文件类型(FileItemFeedTypeEnum)或 undefined(如果无法识别)
7
- */
8
- declare function getFileFeedType(filePath: string): FileItemFeedType | undefined;
9
- export default getFileFeedType;
@@ -1,9 +0,0 @@
1
- import { IFileItem } from './types';
2
- /**
3
- * 根据文件的后缀文件类型获取文件类型图标
4
- *
5
- * @param fileItem 文件实例
6
- * @returns 文件图标
7
- */
8
- declare function getFileItemIcon(fileItem: IFileItem): string;
9
- export default getFileItemIcon;
@@ -1,9 +0,0 @@
1
- import { FileSuffix, IFileItem } from './types';
2
- /**
3
- * 获取文件类型后缀,内部包含各种逻辑,可直接调用和修改
4
- *
5
- * @param fileItem 文件实例
6
- * @returns 文件类型后缀
7
- */
8
- declare function getFileItemSuffix(fileItem: IFileItem): FileSuffix;
9
- export default getFileItemSuffix;