nhanh-pure-function 1.3.22 → 1.4.1
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/lib/Constant.ts +249 -0
- package/lib/User/User.d.ts +0 -103
- package/lib/User/User.js +0 -199
- package/lib/Utility/Utility.d.ts +19 -4
- package/lib/Utility/Utility.js +91 -106
- package/lib/test.ts +0 -11
- package/package.json +1 -1
package/lib/Constant.ts
ADDED
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
export const EXTENSION_TO_MIME = {
|
|
2
|
+
/* 常见扩展名映射 */
|
|
3
|
+
".mp3": "audio/mpeg",
|
|
4
|
+
".mp4": "video/mp4",
|
|
5
|
+
".m4a": "audio/mp4",
|
|
6
|
+
".aac": "audio/aac",
|
|
7
|
+
".ogg": "audio/ogg",
|
|
8
|
+
".wav": "audio/wav",
|
|
9
|
+
".flac": "audio/flac",
|
|
10
|
+
".opus": "audio/opus",
|
|
11
|
+
".webm": "video/webm",
|
|
12
|
+
".avi": "video/x-msvideo",
|
|
13
|
+
".mov": "video/quicktime",
|
|
14
|
+
".wmv": "video/x-ms-wmv",
|
|
15
|
+
".png": "image/png",
|
|
16
|
+
".jpg": "image/jpeg",
|
|
17
|
+
".jpeg": "image/jpeg",
|
|
18
|
+
".gif": "image/gif",
|
|
19
|
+
".bmp": "image/bmp",
|
|
20
|
+
".tiff": "image/tiff",
|
|
21
|
+
".ico": "image/vnd.microsoft.icon",
|
|
22
|
+
".svg": "image/svg+xml",
|
|
23
|
+
".webp": "image/webp",
|
|
24
|
+
".heif": "image/heif",
|
|
25
|
+
".heic": "image/heic",
|
|
26
|
+
".json": "application/json",
|
|
27
|
+
".xml": "application/xml",
|
|
28
|
+
".html": "text/html",
|
|
29
|
+
".htm": "text/html",
|
|
30
|
+
".css": "text/css",
|
|
31
|
+
".js": "application/javascript",
|
|
32
|
+
".ts": "application/typescript",
|
|
33
|
+
".csv": "text/csv",
|
|
34
|
+
".tsv": "text/tab-separated-values",
|
|
35
|
+
".txt": "text/plain",
|
|
36
|
+
".md": "text/markdown",
|
|
37
|
+
".rtf": "application/rtf",
|
|
38
|
+
".pdf": "application/pdf",
|
|
39
|
+
".zip": "application/zip",
|
|
40
|
+
".rar": "application/x-rar-compressed",
|
|
41
|
+
".tar": "application/x-tar",
|
|
42
|
+
".gz": "application/gzip",
|
|
43
|
+
".7z": "application/x-7z-compressed",
|
|
44
|
+
".exe": "application/x-msdownload",
|
|
45
|
+
".apk": "application/vnd.android.package-archive",
|
|
46
|
+
".doc": "application/msword",
|
|
47
|
+
".docx":
|
|
48
|
+
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
49
|
+
".xls": "application/vnd.ms-excel",
|
|
50
|
+
".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
51
|
+
".ppt": "application/vnd.ms-powerpoint",
|
|
52
|
+
".pptx":
|
|
53
|
+
"application/vnd.openxmlformats-officedocument.presentationml.presentation",
|
|
54
|
+
".odt": "application/vnd.oasis.opendocument.text",
|
|
55
|
+
".ods": "application/vnd.oasis.opendocument.spreadsheet",
|
|
56
|
+
".odp": "application/vnd.oasis.opendocument.presentation",
|
|
57
|
+
".jsonld": "application/ld+json",
|
|
58
|
+
".yaml": "application/x-yaml",
|
|
59
|
+
".yml": "application/x-yaml",
|
|
60
|
+
".woff": "font/woff",
|
|
61
|
+
".woff2": "font/woff2",
|
|
62
|
+
".ttf": "font/ttf",
|
|
63
|
+
".otf": "font/otf",
|
|
64
|
+
".eot": "application/vnd.ms-fontobject",
|
|
65
|
+
".map": "application/json",
|
|
66
|
+
// 可根据需要继续扩展
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
export const FILE_EXTENSIONS = {
|
|
70
|
+
image: [
|
|
71
|
+
".jpg",
|
|
72
|
+
".jpeg",
|
|
73
|
+
".png",
|
|
74
|
+
".gif",
|
|
75
|
+
".bmp",
|
|
76
|
+
".webp",
|
|
77
|
+
".tiff",
|
|
78
|
+
".svg",
|
|
79
|
+
".heif",
|
|
80
|
+
".heic",
|
|
81
|
+
".ico",
|
|
82
|
+
".raw",
|
|
83
|
+
".jfif",
|
|
84
|
+
".avif",
|
|
85
|
+
".png8",
|
|
86
|
+
".indd",
|
|
87
|
+
".eps",
|
|
88
|
+
".ai",
|
|
89
|
+
],
|
|
90
|
+
ppt: [".ppt", ".pptx", ".odp"],
|
|
91
|
+
word: [".doc", ".docx", ".odt", ".rtf"],
|
|
92
|
+
excel: [".xls", ".xlsx", ".ods", ".csv", ".tsv"],
|
|
93
|
+
pdf: [".pdf"],
|
|
94
|
+
text: [
|
|
95
|
+
".txt",
|
|
96
|
+
".csv",
|
|
97
|
+
".md",
|
|
98
|
+
".json",
|
|
99
|
+
".yaml",
|
|
100
|
+
".yml",
|
|
101
|
+
".log",
|
|
102
|
+
".ini",
|
|
103
|
+
".rtf",
|
|
104
|
+
],
|
|
105
|
+
audio: [
|
|
106
|
+
".mp3",
|
|
107
|
+
".wav",
|
|
108
|
+
".ogg",
|
|
109
|
+
".flac",
|
|
110
|
+
".aac",
|
|
111
|
+
".wma",
|
|
112
|
+
".m4a",
|
|
113
|
+
".alac",
|
|
114
|
+
".ape",
|
|
115
|
+
".opus",
|
|
116
|
+
".amr",
|
|
117
|
+
".ra",
|
|
118
|
+
".mid",
|
|
119
|
+
".midi",
|
|
120
|
+
".aiff",
|
|
121
|
+
".pcm",
|
|
122
|
+
".au",
|
|
123
|
+
".wavpack",
|
|
124
|
+
".spx",
|
|
125
|
+
],
|
|
126
|
+
video: [
|
|
127
|
+
".mp4",
|
|
128
|
+
".avi",
|
|
129
|
+
".mkv",
|
|
130
|
+
".mov",
|
|
131
|
+
".wmv",
|
|
132
|
+
".flv",
|
|
133
|
+
".webm",
|
|
134
|
+
".mpg",
|
|
135
|
+
".mpeg",
|
|
136
|
+
".3gp",
|
|
137
|
+
".vob",
|
|
138
|
+
".ogv",
|
|
139
|
+
".m4v",
|
|
140
|
+
".ts",
|
|
141
|
+
".rm",
|
|
142
|
+
".rmvb",
|
|
143
|
+
".m2ts",
|
|
144
|
+
".divx",
|
|
145
|
+
".xvid",
|
|
146
|
+
".swf",
|
|
147
|
+
".f4v",
|
|
148
|
+
],
|
|
149
|
+
archive: [
|
|
150
|
+
".zip",
|
|
151
|
+
".rar",
|
|
152
|
+
".tar",
|
|
153
|
+
".gz",
|
|
154
|
+
".bz2",
|
|
155
|
+
".xz",
|
|
156
|
+
".7z",
|
|
157
|
+
".tar.gz",
|
|
158
|
+
".tar.bz2",
|
|
159
|
+
".tar.xz",
|
|
160
|
+
".tar.lz",
|
|
161
|
+
".tar.lzma",
|
|
162
|
+
".cab",
|
|
163
|
+
".iso",
|
|
164
|
+
".dmg",
|
|
165
|
+
".tgz",
|
|
166
|
+
".apk",
|
|
167
|
+
".gz2",
|
|
168
|
+
".tar.zst",
|
|
169
|
+
],
|
|
170
|
+
code: [
|
|
171
|
+
".js",
|
|
172
|
+
".ts",
|
|
173
|
+
".py",
|
|
174
|
+
".java",
|
|
175
|
+
".cpp",
|
|
176
|
+
".c",
|
|
177
|
+
".html",
|
|
178
|
+
".css",
|
|
179
|
+
".scss",
|
|
180
|
+
".less",
|
|
181
|
+
".sass",
|
|
182
|
+
".php",
|
|
183
|
+
".rb",
|
|
184
|
+
".go",
|
|
185
|
+
".swift",
|
|
186
|
+
".rs",
|
|
187
|
+
".kt",
|
|
188
|
+
".scala",
|
|
189
|
+
".lua",
|
|
190
|
+
".pl",
|
|
191
|
+
".m",
|
|
192
|
+
".h",
|
|
193
|
+
".xml",
|
|
194
|
+
".json",
|
|
195
|
+
".yaml",
|
|
196
|
+
".yml",
|
|
197
|
+
".toml",
|
|
198
|
+
".vue",
|
|
199
|
+
".ejs",
|
|
200
|
+
".handlebars",
|
|
201
|
+
".jinja",
|
|
202
|
+
".dart",
|
|
203
|
+
],
|
|
204
|
+
font: [
|
|
205
|
+
".woff",
|
|
206
|
+
".woff2",
|
|
207
|
+
".ttf",
|
|
208
|
+
".otf",
|
|
209
|
+
".eot",
|
|
210
|
+
".svg",
|
|
211
|
+
".ttc",
|
|
212
|
+
".fnt",
|
|
213
|
+
".fon",
|
|
214
|
+
".otc",
|
|
215
|
+
],
|
|
216
|
+
database: [
|
|
217
|
+
".sql",
|
|
218
|
+
".sqlite",
|
|
219
|
+
".db",
|
|
220
|
+
".mdb",
|
|
221
|
+
".accdb",
|
|
222
|
+
".jsonld",
|
|
223
|
+
".xml",
|
|
224
|
+
".csv",
|
|
225
|
+
],
|
|
226
|
+
markup: [".html", ".htm", ".xhtml", ".xml", ".json", ".yaml", ".yml"],
|
|
227
|
+
configuration: [
|
|
228
|
+
".ini",
|
|
229
|
+
".conf",
|
|
230
|
+
".cfg",
|
|
231
|
+
".env",
|
|
232
|
+
".properties",
|
|
233
|
+
".json",
|
|
234
|
+
".toml",
|
|
235
|
+
],
|
|
236
|
+
logs: [".log", ".err", ".trace", ".out"],
|
|
237
|
+
script: [
|
|
238
|
+
".bash",
|
|
239
|
+
".sh",
|
|
240
|
+
".zsh",
|
|
241
|
+
".bat",
|
|
242
|
+
".ps1",
|
|
243
|
+
".vbs",
|
|
244
|
+
".cmd",
|
|
245
|
+
".sed",
|
|
246
|
+
".awk",
|
|
247
|
+
".php",
|
|
248
|
+
],
|
|
249
|
+
};
|
package/lib/User/User.d.ts
CHANGED
|
@@ -6,109 +6,6 @@ export function _ScrollEndListener(
|
|
|
6
6
|
callback: (trigger: "vertical" | "horizontal") => void
|
|
7
7
|
): (payload: Event) => void;
|
|
8
8
|
|
|
9
|
-
/**
|
|
10
|
-
* 设置量词属性
|
|
11
|
-
* @param {*} data 需修改对象
|
|
12
|
-
* @param {*} options 配置
|
|
13
|
-
* @returns data
|
|
14
|
-
*/
|
|
15
|
-
export function _SetQuantifierAttribute<T>(
|
|
16
|
-
data: T,
|
|
17
|
-
options?: (
|
|
18
|
-
| keyof T
|
|
19
|
-
| [
|
|
20
|
-
keyof T,
|
|
21
|
-
{
|
|
22
|
-
join?: boolean;
|
|
23
|
-
suffix?: string;
|
|
24
|
-
integer?: boolean;
|
|
25
|
-
}
|
|
26
|
-
]
|
|
27
|
-
)[]
|
|
28
|
-
): T;
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* 为属性值为null | undefined的属性设置默认值
|
|
32
|
-
* @param data 需修改对象
|
|
33
|
-
* @param options 配置
|
|
34
|
-
* @returns
|
|
35
|
-
*/
|
|
36
|
-
export function _SetDefaultValue<T>(
|
|
37
|
-
data: T,
|
|
38
|
-
options?: {
|
|
39
|
-
defaultValue?: string;
|
|
40
|
-
fieldsNotRequiringAction?: (string | number | symbol)[];
|
|
41
|
-
}
|
|
42
|
-
): T;
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* 将字典value转为对应label
|
|
46
|
-
* @param data 需修改对象
|
|
47
|
-
* @param options 配置
|
|
48
|
-
* @returns
|
|
49
|
-
*/
|
|
50
|
-
export function _SetDictionary<T>(
|
|
51
|
-
data: T,
|
|
52
|
-
options: {
|
|
53
|
-
dictionaryOptions?: { [key in keyof T]: { [key: string | number]: any } };
|
|
54
|
-
dictionaryLabel?: (keyof T)[];
|
|
55
|
-
dictionaryLabelJoin?: (keyof T)[];
|
|
56
|
-
defaultValue?: string;
|
|
57
|
-
}
|
|
58
|
-
): T;
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* 将字符串拼接的图片地址转为数组
|
|
62
|
-
* @param data 需修改对象
|
|
63
|
-
* @param options 配置
|
|
64
|
-
* @returns
|
|
65
|
-
*/
|
|
66
|
-
export function _SetPhoto<T>(
|
|
67
|
-
data: T,
|
|
68
|
-
options: {
|
|
69
|
-
label?: (keyof T)[];
|
|
70
|
-
defaultUrl?: {
|
|
71
|
-
[key in keyof T]: string[];
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
): T;
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* 将接口返回的数据进行处理,得到展示数据
|
|
78
|
-
* @param data object 类型的数据
|
|
79
|
-
* @param options 配置
|
|
80
|
-
* @returns exhibit_data
|
|
81
|
-
*/
|
|
82
|
-
export function _Exhibit_details<T>(
|
|
83
|
-
data: T,
|
|
84
|
-
options?: {
|
|
85
|
-
dictionaryOptions?: { [key in keyof T]: { [key: string | number]: any } };
|
|
86
|
-
dictionaryLabel?: (keyof T)[];
|
|
87
|
-
dictionaryLabelJoin?: (keyof T)[];
|
|
88
|
-
|
|
89
|
-
photoLabel?: (keyof T)[];
|
|
90
|
-
photoDefaultUrl?: {
|
|
91
|
-
[key in keyof T]: string[];
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
quantifierLabel?: (
|
|
95
|
-
| keyof T
|
|
96
|
-
| [
|
|
97
|
-
keyof T,
|
|
98
|
-
{
|
|
99
|
-
join?: boolean;
|
|
100
|
-
suffix?: string;
|
|
101
|
-
integer?: boolean;
|
|
102
|
-
}
|
|
103
|
-
]
|
|
104
|
-
)[];
|
|
105
|
-
|
|
106
|
-
filterLabel?: (keyof T)[];
|
|
107
|
-
|
|
108
|
-
defaultValue?: string;
|
|
109
|
-
}
|
|
110
|
-
): T;
|
|
111
|
-
|
|
112
9
|
type UiLibrary = "naiveUI" | "ElementPlus" | "Element";
|
|
113
10
|
/**
|
|
114
11
|
* 点击非指定dom(包含子级dom)时执行 callback
|
package/lib/User/User.js
CHANGED
|
@@ -44,205 +44,6 @@ export function _ScrollEndListener(callback) {
|
|
|
44
44
|
};
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
/**
|
|
48
|
-
* 设置量词属性
|
|
49
|
-
* @param {*} data 需修改对象
|
|
50
|
-
* @param {*} options 配置
|
|
51
|
-
* @returns data
|
|
52
|
-
*/
|
|
53
|
-
export function _SetQuantifierAttribute(data, options = []) {
|
|
54
|
-
if (!_IsObject(data)) {
|
|
55
|
-
console.error("异常输入:", data);
|
|
56
|
-
return data;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
options.forEach((item) => {
|
|
60
|
-
if (typeof item === "string") {
|
|
61
|
-
data[item] = _FormatNumberWithUnit(data[item]);
|
|
62
|
-
} else if (Array.isArray(item)) {
|
|
63
|
-
const [label, config] = data[item];
|
|
64
|
-
if (_NotNull(label) && _IsObject(config))
|
|
65
|
-
data[label] = _FormatNumberWithUnit(label, config);
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
return data;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* 为属性值为null | undefined的属性设置默认值
|
|
73
|
-
* @param data 需修改对象
|
|
74
|
-
* @param options 配置
|
|
75
|
-
* @returns
|
|
76
|
-
*/
|
|
77
|
-
export function _SetDefaultValue(data, options = {}) {
|
|
78
|
-
if (!_IsObject(data)) {
|
|
79
|
-
console.error("异常输入:", data);
|
|
80
|
-
return data;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
const { defaultValue = "--", fieldsNotRequiringAction } = options;
|
|
84
|
-
|
|
85
|
-
for (const key in data) {
|
|
86
|
-
if (Object.prototype.hasOwnProperty.call(data, key)) {
|
|
87
|
-
const element = data[key];
|
|
88
|
-
if (fieldsNotRequiringAction) {
|
|
89
|
-
if (!fieldsNotRequiringAction.includes(key) && !_NotNull(element)) {
|
|
90
|
-
data[key] = defaultValue;
|
|
91
|
-
}
|
|
92
|
-
} else if (!_NotNull(element)) {
|
|
93
|
-
data[key] = defaultValue;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
return data;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* 将字典value转为对应label
|
|
103
|
-
* @param data 需修改对象
|
|
104
|
-
* @param options 配置
|
|
105
|
-
* @returns
|
|
106
|
-
*/
|
|
107
|
-
export function _SetDictionary(data, options = {}) {
|
|
108
|
-
if (!_IsObject(data)) {
|
|
109
|
-
console.error("异常输入:", data);
|
|
110
|
-
return data;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
const {
|
|
114
|
-
dictionaryLabel = [],
|
|
115
|
-
dictionaryLabelJoin = [],
|
|
116
|
-
dictionaryOptions,
|
|
117
|
-
defaultValue = "--",
|
|
118
|
-
} = options;
|
|
119
|
-
|
|
120
|
-
if (dictionaryOptions) {
|
|
121
|
-
dictionaryLabel.forEach((label) => {
|
|
122
|
-
if (_NotNull(data[label])) {
|
|
123
|
-
const options = dictionaryOptions[label];
|
|
124
|
-
|
|
125
|
-
if (options) {
|
|
126
|
-
data[label] = options[data[label]];
|
|
127
|
-
} else {
|
|
128
|
-
data[label] = defaultValue;
|
|
129
|
-
}
|
|
130
|
-
} else {
|
|
131
|
-
data[label] = defaultValue;
|
|
132
|
-
}
|
|
133
|
-
});
|
|
134
|
-
dictionaryLabelJoin.forEach((label) => {
|
|
135
|
-
if (_NotNull(data[label]) && data[label] != "") {
|
|
136
|
-
const options = dictionaryOptions[label];
|
|
137
|
-
if (options) {
|
|
138
|
-
const oldvalue = data[label].split(",");
|
|
139
|
-
data[label] = "";
|
|
140
|
-
oldvalue.forEach((_label) => {
|
|
141
|
-
data[label] += options[_label];
|
|
142
|
-
});
|
|
143
|
-
} else {
|
|
144
|
-
data[label] = defaultValue;
|
|
145
|
-
}
|
|
146
|
-
} else {
|
|
147
|
-
data[label] = defaultValue;
|
|
148
|
-
}
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
return data;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* 将字符串拼接的图片地址转为数组
|
|
157
|
-
* @param data 需修改对象
|
|
158
|
-
* @param options 配置
|
|
159
|
-
* @returns
|
|
160
|
-
*/
|
|
161
|
-
export function _SetPhoto(data, options = {}) {
|
|
162
|
-
if (!_IsObject(data)) {
|
|
163
|
-
console.error("异常输入:", data);
|
|
164
|
-
return data;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
const { label, defaultUrl } = options;
|
|
168
|
-
|
|
169
|
-
if (label) {
|
|
170
|
-
label.forEach((label) => {
|
|
171
|
-
const defaultValue = (defaultUrl && defaultUrl[label]) || [];
|
|
172
|
-
const value = data[label];
|
|
173
|
-
if (typeof value === "string") {
|
|
174
|
-
data[label] = value.split(",").filter(Boolean);
|
|
175
|
-
} else {
|
|
176
|
-
data[label] = defaultValue;
|
|
177
|
-
}
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
return data;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* 将接口返回的数据进行处理,得到展示数据
|
|
186
|
-
* @param data object 类型的数据
|
|
187
|
-
* @param options 配置
|
|
188
|
-
* @returns exhibit_data
|
|
189
|
-
*/
|
|
190
|
-
export function _Exhibit_details(data, options = {}) {
|
|
191
|
-
if (!_IsObject(data)) {
|
|
192
|
-
console.error("异常输入:", data);
|
|
193
|
-
return {};
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
data = JSON.parse(JSON.stringify(data));
|
|
197
|
-
|
|
198
|
-
const {
|
|
199
|
-
dictionaryLabel = [],
|
|
200
|
-
dictionaryLabelJoin = [],
|
|
201
|
-
dictionaryOptions,
|
|
202
|
-
|
|
203
|
-
photoLabel = [],
|
|
204
|
-
photoDefaultUrl,
|
|
205
|
-
|
|
206
|
-
quantifierLabel = [],
|
|
207
|
-
|
|
208
|
-
filterLabel = [],
|
|
209
|
-
|
|
210
|
-
defaultValue = "--",
|
|
211
|
-
} = options;
|
|
212
|
-
|
|
213
|
-
_SetDictionary(data, {
|
|
214
|
-
dictionaryLabel,
|
|
215
|
-
dictionaryLabelJoin,
|
|
216
|
-
dictionaryOptions,
|
|
217
|
-
defaultValue,
|
|
218
|
-
});
|
|
219
|
-
|
|
220
|
-
_SetPhoto(data, {
|
|
221
|
-
label: photoLabel,
|
|
222
|
-
defaultUrl: photoDefaultUrl,
|
|
223
|
-
});
|
|
224
|
-
|
|
225
|
-
_SetQuantifierAttribute(data, quantifierLabel);
|
|
226
|
-
|
|
227
|
-
_SetDefaultValue(data, {
|
|
228
|
-
defaultValue,
|
|
229
|
-
fieldsNotRequiringAction: dictionaryLabel
|
|
230
|
-
.concat(dictionaryLabelJoin)
|
|
231
|
-
.concat(photoLabel)
|
|
232
|
-
.concat(
|
|
233
|
-
quantifierLabel
|
|
234
|
-
.map((item) => {
|
|
235
|
-
if (typeof item == "string") return item;
|
|
236
|
-
if (Array.isArray(item)) return item[0];
|
|
237
|
-
})
|
|
238
|
-
.filter(Boolean)
|
|
239
|
-
)
|
|
240
|
-
.concat(filterLabel),
|
|
241
|
-
});
|
|
242
|
-
|
|
243
|
-
return data;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
47
|
/**
|
|
247
48
|
* 点击非指定dom(包含子级dom)时执行 callback
|
|
248
49
|
* @param querySelector 允许点击的 dom 顶层祖先元素选择器
|
package/lib/Utility/Utility.d.ts
CHANGED
|
@@ -287,7 +287,6 @@ export class _FileTypeChecker {
|
|
|
287
287
|
* 检查给定URL的文件类型
|
|
288
288
|
* @param {string} url - 文件的URL
|
|
289
289
|
* @returns {keyof _FileTypeChecker['fileExtensions'] | 'unknown'} - 返回文件类型或 "unknown"
|
|
290
|
-
* @throws {Error} - 如果URL无效或指定的文件类型未知,则抛出错误
|
|
291
290
|
*/
|
|
292
291
|
static check(url: string): keyof FileExtensions | "unknown";
|
|
293
292
|
/**
|
|
@@ -295,7 +294,6 @@ export class _FileTypeChecker {
|
|
|
295
294
|
* @param {string} url - 文件的URL
|
|
296
295
|
* @param {keyof _FileTypeChecker['fileExtensions']} [type] - 可选参数,指定要检查的文件类型
|
|
297
296
|
* @returns {boolean} - 返回布尔值
|
|
298
|
-
* @throws {Error} - 如果URL无效或指定的文件类型未知,则抛出错误
|
|
299
297
|
*/
|
|
300
298
|
static check(url: string, type: keyof FileExtensions): boolean;
|
|
301
299
|
|
|
@@ -306,11 +304,28 @@ export class _FileTypeChecker {
|
|
|
306
304
|
*
|
|
307
305
|
* @param {string} url - 以逗号分隔的URL字符串,每个URL代表一个资源的位置
|
|
308
306
|
* @returns {Array} - 包含每个URL及其相关信息(名称和类型)的对象数组
|
|
309
|
-
* @throws {Error} - 如果提供的URL为空或不是字符串,则抛出错误
|
|
310
307
|
*/
|
|
311
308
|
static parseAddresses(
|
|
312
309
|
url: string
|
|
313
|
-
): { url: string; name: string; type:
|
|
310
|
+
): { url: string; name: string; type: keyof FileExtensions | "unknown" }[];
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* 检查 MIME 类型是否与指定的模式匹配
|
|
314
|
+
* @param {string} type - 要检查的 MIME 类型(如 "image/png")
|
|
315
|
+
* @param {string} [accept] - 可接受的 MIME 类型模式(如 "image/*, text/plain")
|
|
316
|
+
* @returns {boolean} - 如果类型匹配,则返回 true,否则返回 false
|
|
317
|
+
*/
|
|
318
|
+
static matchesMimeType(type: string, accept?: string): boolean;
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* 类型标准化函数
|
|
322
|
+
* 该函数旨在将文件类型或MIME类型字符串转换为标准格式
|
|
323
|
+
* 主要处理三种情况:带扩展名的字符串、简写格式的类型以及已标准格式的类型
|
|
324
|
+
*
|
|
325
|
+
* @param {string} type - 文件类型或MIME类型字符串
|
|
326
|
+
* @returns {string} 标准化的MIME类型字符串,如果无法识别则返回原始输入
|
|
327
|
+
*/
|
|
328
|
+
static _normalizeType(type: string): string;
|
|
314
329
|
|
|
315
330
|
/**
|
|
316
331
|
* 检查URL是否具有任何指定的文件扩展名
|
package/lib/Utility/Utility.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { EXTENSION_TO_MIME, FILE_EXTENSIONS } from "../Constant";
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* 非null | undefined判断
|
|
3
5
|
* @param value any
|
|
@@ -141,39 +143,27 @@ export function _TimeTransition(
|
|
|
141
143
|
template = "YYYY-MM-DD hh:mm:ss",
|
|
142
144
|
pad = true
|
|
143
145
|
) {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
console.error(
|
|
146
|
+
const date = new Date(time);
|
|
147
|
+
|
|
148
|
+
if (isNaN(date.getTime())) {
|
|
149
|
+
console.error("Invalid date");
|
|
148
150
|
return "";
|
|
149
151
|
}
|
|
152
|
+
|
|
150
153
|
const dictionary = {
|
|
151
|
-
YYYY:
|
|
152
|
-
MM:
|
|
153
|
-
DD:
|
|
154
|
-
hh:
|
|
155
|
-
mm:
|
|
156
|
-
ss:
|
|
157
|
-
ms: (
|
|
154
|
+
YYYY: (date) => date.getFullYear(),
|
|
155
|
+
MM: (date) => date.getMonth() + 1, // Adjust for 0-based month
|
|
156
|
+
DD: (date) => date.getDate(),
|
|
157
|
+
hh: (date) => date.getHours(),
|
|
158
|
+
mm: (date) => date.getMinutes(),
|
|
159
|
+
ss: (date) => date.getSeconds(),
|
|
160
|
+
ms: (date) => date.getMilliseconds(),
|
|
158
161
|
};
|
|
159
|
-
for (const key in dictionary) {
|
|
160
|
-
if (Object.hasOwnProperty.call(dictionary, key)) {
|
|
161
|
-
if (new RegExp(key).test(template)) {
|
|
162
|
-
let value,
|
|
163
|
-
fun = dictionary[key];
|
|
164
|
-
|
|
165
|
-
if (typeof fun == "function") value = fun(time);
|
|
166
|
-
else value = time[fun]();
|
|
167
|
-
|
|
168
|
-
if (key == "MM") value++;
|
|
169
|
-
|
|
170
|
-
if (pad) value = String(value).padStart(2, "0");
|
|
171
162
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
}
|
|
176
|
-
return template;
|
|
163
|
+
return template.replace(/YYYY|MM|DD|hh|mm|ss|ms/g, (match) => {
|
|
164
|
+
const value = dictionary[match](date);
|
|
165
|
+
return pad ? String(value).padStart(2, "0") : String(value);
|
|
166
|
+
});
|
|
177
167
|
}
|
|
178
168
|
|
|
179
169
|
/**
|
|
@@ -667,90 +657,20 @@ export function _IsSecureContext(url) {
|
|
|
667
657
|
* 用于检查文件URL的类型
|
|
668
658
|
*/
|
|
669
659
|
export class _FileTypeChecker {
|
|
670
|
-
// 定义各种文件类型的文件扩展名
|
|
671
|
-
static fileExtensions = {
|
|
672
|
-
image: [
|
|
673
|
-
".jpg",
|
|
674
|
-
".jpeg",
|
|
675
|
-
".png",
|
|
676
|
-
".gif",
|
|
677
|
-
".bmp",
|
|
678
|
-
".webp",
|
|
679
|
-
".tiff",
|
|
680
|
-
".svg",
|
|
681
|
-
".heif",
|
|
682
|
-
".heic",
|
|
683
|
-
".ico",
|
|
684
|
-
".raw",
|
|
685
|
-
".jfif",
|
|
686
|
-
],
|
|
687
|
-
ppt: [".ppt", ".pptx"],
|
|
688
|
-
word: [".doc", ".docx"],
|
|
689
|
-
excel: [".xls", ".xlsx"],
|
|
690
|
-
pdf: [".pdf"],
|
|
691
|
-
text: [".txt", ".csv"],
|
|
692
|
-
audio: [
|
|
693
|
-
".mp3",
|
|
694
|
-
".wav",
|
|
695
|
-
".ogg",
|
|
696
|
-
".flac",
|
|
697
|
-
".aac",
|
|
698
|
-
".wma",
|
|
699
|
-
".m4a",
|
|
700
|
-
".alac",
|
|
701
|
-
".ape",
|
|
702
|
-
".opus",
|
|
703
|
-
".amr",
|
|
704
|
-
".ra",
|
|
705
|
-
],
|
|
706
|
-
video: [
|
|
707
|
-
".mp4",
|
|
708
|
-
".avi",
|
|
709
|
-
".mkv",
|
|
710
|
-
".mov",
|
|
711
|
-
".wmv",
|
|
712
|
-
".flv",
|
|
713
|
-
".webm",
|
|
714
|
-
".mpg",
|
|
715
|
-
".mpeg",
|
|
716
|
-
".3gp",
|
|
717
|
-
".vob",
|
|
718
|
-
".ogv",
|
|
719
|
-
".m4v",
|
|
720
|
-
".ts",
|
|
721
|
-
".rm",
|
|
722
|
-
".rmvb",
|
|
723
|
-
],
|
|
724
|
-
archive: [
|
|
725
|
-
".zip",
|
|
726
|
-
".rar",
|
|
727
|
-
".tar",
|
|
728
|
-
".gz",
|
|
729
|
-
".bz2",
|
|
730
|
-
".xz",
|
|
731
|
-
".7z",
|
|
732
|
-
".tar.gz",
|
|
733
|
-
".tar.bz2",
|
|
734
|
-
".tar.xz",
|
|
735
|
-
],
|
|
736
|
-
code: [".js", ".ts", ".py", ".java", ".cpp", ".c"],
|
|
737
|
-
font: [".woff", ".woff2", ".ttf", ".otf"],
|
|
738
|
-
};
|
|
739
|
-
|
|
740
660
|
// 缓存文件扩展名的条目,以提高性能
|
|
741
|
-
static cachedEntries = Object.entries(
|
|
661
|
+
static cachedEntries = Object.entries(FILE_EXTENSIONS);
|
|
742
662
|
|
|
743
663
|
/**
|
|
744
664
|
* 检查给定URL的文件类型
|
|
745
665
|
* @param {string} url - 文件的URL
|
|
746
666
|
* @param {string} [type] - 可选参数,指定要检查的文件类型
|
|
747
667
|
* @returns {string} - 如果URL与指定类型或任何已知类型匹配,则返回文件类型,否则返回"unknown"
|
|
748
|
-
* @throws {Error} - 如果URL无效或指定的文件类型未知,则抛出错误
|
|
749
668
|
*/
|
|
750
669
|
static check(url, type) {
|
|
751
670
|
// 确保提供的URL是字符串且非空
|
|
752
671
|
if (!url || typeof url !== "string") {
|
|
753
|
-
|
|
672
|
+
console.error("Invalid URL provided");
|
|
673
|
+
return type ? false : "unknown";
|
|
754
674
|
}
|
|
755
675
|
|
|
756
676
|
// 将URL转换为小写,以确保文件扩展名匹配不区分大小写
|
|
@@ -759,10 +679,11 @@ export class _FileTypeChecker {
|
|
|
759
679
|
// 如果指定了文件类型,则检查URL是否具有该类型的任何文件扩展名
|
|
760
680
|
if (type) {
|
|
761
681
|
// 确保指定的文件类型是已知的
|
|
762
|
-
if (!
|
|
763
|
-
|
|
682
|
+
if (!FILE_EXTENSIONS.hasOwnProperty(type)) {
|
|
683
|
+
console.error(`Unknown file type: ${type}`);
|
|
684
|
+
return "unknown";
|
|
764
685
|
}
|
|
765
|
-
const extensions =
|
|
686
|
+
const extensions = FILE_EXTENSIONS[type];
|
|
766
687
|
return _FileTypeChecker._checkExtension(lowerCaseUrl, extensions);
|
|
767
688
|
}
|
|
768
689
|
|
|
@@ -777,12 +698,12 @@ export class _FileTypeChecker {
|
|
|
777
698
|
*
|
|
778
699
|
* @param {string} url - 以逗号分隔的URL字符串,每个URL代表一个资源的位置
|
|
779
700
|
* @returns {Array} - 包含每个URL及其相关信息(名称和类型)的对象数组
|
|
780
|
-
* @throws {Error} - 如果提供的URL为空或不是字符串,则抛出错误
|
|
781
701
|
*/
|
|
782
702
|
static parseAddresses(url) {
|
|
783
703
|
// 确保提供的URL是字符串且非空
|
|
784
704
|
if (!url || typeof url !== "string") {
|
|
785
|
-
|
|
705
|
+
console.error("Invalid URL provided");
|
|
706
|
+
return [];
|
|
786
707
|
}
|
|
787
708
|
|
|
788
709
|
// 分割URL字符串并映射每个URL到包含其详细信息的对象
|
|
@@ -796,6 +717,70 @@ export class _FileTypeChecker {
|
|
|
796
717
|
});
|
|
797
718
|
}
|
|
798
719
|
|
|
720
|
+
/**
|
|
721
|
+
* 检查 MIME 类型是否与指定的模式匹配
|
|
722
|
+
* @param {string} type - 要检查的 MIME 类型(如 "image/png")
|
|
723
|
+
* @param {string} [accept] - 可接受的 MIME 类型模式(如 "image/*, text/plain")
|
|
724
|
+
* @returns {boolean} - 如果类型匹配,则返回 true,否则返回 false
|
|
725
|
+
*/
|
|
726
|
+
static matchesMimeType(type, accept) {
|
|
727
|
+
// 参数有效性检查
|
|
728
|
+
if (
|
|
729
|
+
!accept ||
|
|
730
|
+
!type ||
|
|
731
|
+
typeof accept !== "string" ||
|
|
732
|
+
typeof type !== "string"
|
|
733
|
+
) {
|
|
734
|
+
return true;
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
// 标准化类型和接受模式
|
|
738
|
+
const normalizedType = _FileTypeChecker._normalizeType(type);
|
|
739
|
+
const mimePatterns = accept
|
|
740
|
+
.split(",")
|
|
741
|
+
.map((pattern) => _FileTypeChecker._normalizeType(pattern.trim()));
|
|
742
|
+
|
|
743
|
+
// 拆分主/子类型
|
|
744
|
+
const [typeMain, typeSub = "*"] = normalizedType.split("/");
|
|
745
|
+
|
|
746
|
+
return mimePatterns.some((pattern) => {
|
|
747
|
+
const [patternMain, patternSub = "*"] = pattern.split("/");
|
|
748
|
+
|
|
749
|
+
// 主类型匹配逻辑
|
|
750
|
+
const mainMatch =
|
|
751
|
+
patternMain === "*" || typeMain === "*" || patternMain === typeMain;
|
|
752
|
+
|
|
753
|
+
// 子类型匹配逻辑
|
|
754
|
+
const subMatch =
|
|
755
|
+
patternSub === "*" || typeSub === "*" || patternSub === typeSub;
|
|
756
|
+
|
|
757
|
+
return mainMatch && subMatch;
|
|
758
|
+
});
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
/**
|
|
762
|
+
* 类型标准化函数
|
|
763
|
+
* 该函数旨在将文件类型或MIME类型字符串转换为标准格式
|
|
764
|
+
* 主要处理三种情况:带扩展名的字符串、简写格式的类型以及已标准格式的类型
|
|
765
|
+
*
|
|
766
|
+
* @param {string} type - 文件类型或MIME类型字符串
|
|
767
|
+
* @returns {string} 标准化的MIME类型字符串,如果无法识别则返回原始输入
|
|
768
|
+
*/
|
|
769
|
+
static _normalizeType(type) {
|
|
770
|
+
// 处理扩展名(如 .mp3)
|
|
771
|
+
if (type.startsWith(".") && !type.includes("/")) {
|
|
772
|
+
return EXTENSION_TO_MIME[type.toLowerCase()] || type;
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
// 处理简写格式(如 "image" 转换为 "image/*")
|
|
776
|
+
if (!type.includes("/")) {
|
|
777
|
+
return `${type}/*`;
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
// 返回原始输入,因为它已经是标准格式
|
|
781
|
+
return type;
|
|
782
|
+
}
|
|
783
|
+
|
|
799
784
|
/**
|
|
800
785
|
* 检查URL是否具有任何指定的文件扩展名
|
|
801
786
|
* @param {string} url - 文件的URL
|
package/lib/test.ts
CHANGED
|
@@ -1,12 +1 @@
|
|
|
1
1
|
import { _FileTypeChecker, _GetHrefName } from "./Utility/Utility";
|
|
2
|
-
|
|
3
|
-
let value: any = _GetHrefName(
|
|
4
|
-
"https://fastly.picsum.photos/id/841/805/453.jpg?hmac=RMVB2BBB6T34wI08nwWz1urBgdzSQxNR6L48hkOsTNo"
|
|
5
|
-
);
|
|
6
|
-
|
|
7
|
-
console.log(value);
|
|
8
|
-
|
|
9
|
-
value = _FileTypeChecker.parseAddresses(
|
|
10
|
-
"https://emergency.wjtsc.com:1128/resources/life-cycle/test/1-110000251006481.pcm,https://emergency.wjtsc.com:1128/resources/life-cycle/test/car-828972667665784.mp3,https://emergency.wjtsc.com:1128/resources/life-cycle/test/317361004975528.jpg"
|
|
11
|
-
);
|
|
12
|
-
console.log(value);
|