nhanh-pure-function 1.3.17 → 1.3.19
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/Utility/Utility.d.ts +46 -30
- package/lib/Utility/Utility.js +77 -24
- package/lib/test.ts +7 -0
- package/package.json +1 -1
package/lib/Utility/Utility.d.ts
CHANGED
|
@@ -77,12 +77,12 @@ export function _TimeTransition(
|
|
|
77
77
|
export function _ReadFile(src: string): Promise<string>;
|
|
78
78
|
|
|
79
79
|
/**
|
|
80
|
-
* 从给定的
|
|
81
|
-
*
|
|
80
|
+
* 从给定的href中提取名称部分
|
|
81
|
+
* 该函数旨在处理URL字符串,并返回URL路径的最后一部分,去除查询参数
|
|
82
82
|
*
|
|
83
|
-
* @param {string} href -
|
|
83
|
+
* @param {string} href - 待处理的URL字符串
|
|
84
84
|
* @param {string} [defaultName="file"] - 默认的文件名,当无法提取时使用
|
|
85
|
-
* @returns {string}
|
|
85
|
+
* @returns {string} URL路径的最后一部分,不包括查询参数
|
|
86
86
|
*/
|
|
87
87
|
export function _GetHrefName(href: string, defaultName?: string): string;
|
|
88
88
|
|
|
@@ -259,47 +259,63 @@ export function _CheckConnectionWithXHR(url: string): Promise<any>;
|
|
|
259
259
|
*/
|
|
260
260
|
export function _IsSecureContext(url: string): boolean;
|
|
261
261
|
|
|
262
|
+
type FileExtensions = {
|
|
263
|
+
image: string[];
|
|
264
|
+
ppt: string[];
|
|
265
|
+
word: string[];
|
|
266
|
+
excel: string[];
|
|
267
|
+
pdf: string[];
|
|
268
|
+
text: string[];
|
|
269
|
+
audio: string[];
|
|
270
|
+
video: string[];
|
|
271
|
+
archive: string[];
|
|
272
|
+
code: string[];
|
|
273
|
+
font: string[];
|
|
274
|
+
};
|
|
262
275
|
/**
|
|
263
276
|
* 文件类型检查器类
|
|
264
277
|
* 用于检查和验证文件的类型
|
|
265
278
|
*/
|
|
266
279
|
export class _FileTypeChecker {
|
|
267
|
-
//
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
excel: string[];
|
|
273
|
-
pdf: string[];
|
|
274
|
-
text: string[];
|
|
275
|
-
audio: string[];
|
|
276
|
-
video: string[];
|
|
277
|
-
archive: string[];
|
|
278
|
-
};
|
|
280
|
+
// 定义各种文件类型的文件扩展名
|
|
281
|
+
static fileExtensions: FileExtensions;
|
|
282
|
+
|
|
283
|
+
// 缓存文件扩展名的条目,以提高性能
|
|
284
|
+
static cachedEntries: [keyof FileExtensions, string[]][];
|
|
279
285
|
|
|
280
286
|
/**
|
|
281
|
-
*
|
|
282
|
-
*
|
|
283
|
-
* @
|
|
284
|
-
* @
|
|
285
|
-
* @returns 如果文件符合指定类型,则返回true;否则返回false
|
|
287
|
+
* 检查给定URL的文件类型
|
|
288
|
+
* @param {string} url - 文件的URL
|
|
289
|
+
* @returns {keyof _FileTypeChecker['fileExtensions'] | 'unknown'} - 返回文件类型或 "unknown"
|
|
290
|
+
* @throws {Error} - 如果URL无效或指定的文件类型未知,则抛出错误
|
|
286
291
|
*/
|
|
287
|
-
static check(
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
292
|
+
static check(url: string): keyof FileExtensions | "unknown";
|
|
293
|
+
/**
|
|
294
|
+
* 检查给定URL的文件类型
|
|
295
|
+
* @param {string} url - 文件的URL
|
|
296
|
+
* @param {keyof _FileTypeChecker['fileExtensions']} [type] - 可选参数,指定要检查的文件类型
|
|
297
|
+
* @returns {boolean} - 返回布尔值
|
|
298
|
+
* @throws {Error} - 如果URL无效或指定的文件类型未知,则抛出错误
|
|
299
|
+
*/
|
|
300
|
+
static check(url: string, type: keyof FileExtensions): boolean;
|
|
291
301
|
|
|
292
302
|
/**
|
|
293
|
-
*
|
|
294
|
-
*
|
|
295
|
-
* @param
|
|
296
|
-
* @
|
|
297
|
-
* @returns 如果文件扩展名在有效扩展名列表中,则返回true;否则返回false
|
|
303
|
+
* 检查URL是否具有任何指定的文件扩展名
|
|
304
|
+
* @param {string} url - 文件的URL
|
|
305
|
+
* @param {string[]} validExtensions - 有效文件扩展名的数组
|
|
306
|
+
* @returns {boolean} - 如果URL具有任何指定的文件扩展名,则返回true,否则返回false
|
|
298
307
|
*/
|
|
299
308
|
private static _checkExtension(
|
|
300
309
|
url: string,
|
|
301
310
|
validExtensions: string[]
|
|
302
311
|
): boolean;
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* 检测文件URL的类型
|
|
315
|
+
* @param {string} url - 文件的URL
|
|
316
|
+
* @returns {keyof _FileTypeChecker['fileExtensions'] | 'unknown'} - 如果URL与任何已知类型匹配,则返回文件类型,否则返回"unknown"
|
|
317
|
+
*/
|
|
318
|
+
private static _detectFileType(url: string): keyof FileExtensions | "unknown";
|
|
303
319
|
}
|
|
304
320
|
|
|
305
321
|
/**
|
package/lib/Utility/Utility.js
CHANGED
|
@@ -193,16 +193,32 @@ export function _ReadFile(src) {
|
|
|
193
193
|
}
|
|
194
194
|
|
|
195
195
|
/**
|
|
196
|
-
* 从给定的
|
|
197
|
-
*
|
|
196
|
+
* 从给定的href中提取名称部分
|
|
197
|
+
* 该函数旨在处理URL字符串,并返回URL路径的最后一部分,去除查询参数
|
|
198
198
|
*
|
|
199
|
-
* @param {string} href -
|
|
199
|
+
* @param {string} href - 待处理的URL字符串
|
|
200
200
|
* @param {string} [defaultName="file"] - 默认的文件名,当无法提取时使用
|
|
201
|
-
* @returns {string}
|
|
201
|
+
* @returns {string} URL路径的最后一部分,不包括查询参数
|
|
202
202
|
*/
|
|
203
203
|
export function _GetHrefName(href, defaultName = "file") {
|
|
204
|
-
//
|
|
205
|
-
|
|
204
|
+
// 简单检查空值和其他假值
|
|
205
|
+
if (!href) return defaultName;
|
|
206
|
+
|
|
207
|
+
// 将 href 转换为字符串以防止其他类型输入
|
|
208
|
+
href = String(href).trim();
|
|
209
|
+
|
|
210
|
+
// 如果 href 是空字符串,直接返回空字符串
|
|
211
|
+
if (href === "") return defaultName;
|
|
212
|
+
|
|
213
|
+
// 分割路径部分并获取最后一部分
|
|
214
|
+
const pathParts = href.split("/");
|
|
215
|
+
const lastPart = pathParts[pathParts.length - 1];
|
|
216
|
+
|
|
217
|
+
// 分割查询参数并获取基础名称
|
|
218
|
+
const name = lastPart.split("?")[0];
|
|
219
|
+
|
|
220
|
+
// 返回处理后的名称部分
|
|
221
|
+
return name;
|
|
206
222
|
}
|
|
207
223
|
|
|
208
224
|
/**
|
|
@@ -586,11 +602,11 @@ export function _IsSecureContext(url) {
|
|
|
586
602
|
|
|
587
603
|
/**
|
|
588
604
|
* 文件类型检查器类
|
|
589
|
-
*
|
|
605
|
+
* 用于检查文件URL的类型
|
|
590
606
|
*/
|
|
591
607
|
export class _FileTypeChecker {
|
|
608
|
+
// 定义各种文件类型的文件扩展名
|
|
592
609
|
static fileExtensions = {
|
|
593
|
-
// 图片文件
|
|
594
610
|
image: [
|
|
595
611
|
".jpg",
|
|
596
612
|
".jpeg",
|
|
@@ -606,17 +622,11 @@ export class _FileTypeChecker {
|
|
|
606
622
|
".raw",
|
|
607
623
|
".jfif",
|
|
608
624
|
],
|
|
609
|
-
// 演示文稿文件(PPT)
|
|
610
625
|
ppt: [".ppt", ".pptx"],
|
|
611
|
-
// Word 文件
|
|
612
626
|
word: [".doc", ".docx"],
|
|
613
|
-
// Excel 文件
|
|
614
627
|
excel: [".xls", ".xlsx"],
|
|
615
|
-
// PDF 文件
|
|
616
628
|
pdf: [".pdf"],
|
|
617
|
-
// 文本文件
|
|
618
629
|
text: [".txt", ".csv"],
|
|
619
|
-
// 音频文件
|
|
620
630
|
audio: [
|
|
621
631
|
".mp3",
|
|
622
632
|
".wav",
|
|
@@ -631,7 +641,6 @@ export class _FileTypeChecker {
|
|
|
631
641
|
".amr",
|
|
632
642
|
".ra",
|
|
633
643
|
],
|
|
634
|
-
// 视频文件
|
|
635
644
|
video: [
|
|
636
645
|
".mp4",
|
|
637
646
|
".avi",
|
|
@@ -650,7 +659,6 @@ export class _FileTypeChecker {
|
|
|
650
659
|
".rm",
|
|
651
660
|
".rmvb",
|
|
652
661
|
],
|
|
653
|
-
// 压缩包文件
|
|
654
662
|
archive: [
|
|
655
663
|
".zip",
|
|
656
664
|
".rar",
|
|
@@ -663,20 +671,65 @@ export class _FileTypeChecker {
|
|
|
663
671
|
".tar.bz2",
|
|
664
672
|
".tar.xz",
|
|
665
673
|
],
|
|
674
|
+
code: [".js", ".ts", ".py", ".java", ".cpp", ".c"],
|
|
675
|
+
font: [".woff", ".woff2", ".ttf", ".otf"],
|
|
666
676
|
};
|
|
667
677
|
|
|
668
|
-
//
|
|
678
|
+
// 缓存文件扩展名的条目,以提高性能
|
|
679
|
+
static cachedEntries = Object.entries(_FileTypeChecker.fileExtensions);
|
|
680
|
+
|
|
681
|
+
/**
|
|
682
|
+
* 检查给定URL的文件类型
|
|
683
|
+
* @param {string} url - 文件的URL
|
|
684
|
+
* @param {string} [type] - 可选参数,指定要检查的文件类型
|
|
685
|
+
* @returns {string} - 如果URL与指定类型或任何已知类型匹配,则返回文件类型,否则返回"unknown"
|
|
686
|
+
* @throws {Error} - 如果URL无效或指定的文件类型未知,则抛出错误
|
|
687
|
+
*/
|
|
669
688
|
static check(url, type) {
|
|
670
|
-
|
|
671
|
-
|
|
689
|
+
// 确保提供的URL是字符串且非空
|
|
690
|
+
if (!url || typeof url !== "string") {
|
|
691
|
+
throw new Error("Invalid URL provided");
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
// 将URL转换为小写,以确保文件扩展名匹配不区分大小写
|
|
695
|
+
const lowerCaseUrl = _GetHrefName(url).toLowerCase();
|
|
696
|
+
|
|
697
|
+
// 如果指定了文件类型,则检查URL是否具有该类型的任何文件扩展名
|
|
698
|
+
if (type) {
|
|
699
|
+
// 确保指定的文件类型是已知的
|
|
700
|
+
if (!_FileTypeChecker.fileExtensions.hasOwnProperty(type)) {
|
|
701
|
+
throw new Error(`Unknown file type: ${type}`);
|
|
702
|
+
}
|
|
703
|
+
const extensions = _FileTypeChecker.fileExtensions[type];
|
|
704
|
+
return _FileTypeChecker._checkExtension(lowerCaseUrl, extensions);
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
// 如果未指定文件类型,则检测URL属于哪种文件类型
|
|
708
|
+
return _FileTypeChecker._detectFileType(lowerCaseUrl);
|
|
672
709
|
}
|
|
673
710
|
|
|
674
|
-
|
|
711
|
+
/**
|
|
712
|
+
* 检查URL是否具有任何指定的文件扩展名
|
|
713
|
+
* @param {string} url - 文件的URL
|
|
714
|
+
* @param {string[]} validExtensions - 有效文件扩展名的数组
|
|
715
|
+
* @returns {boolean} - 如果URL具有任何指定的文件扩展名,则返回true,否则返回false
|
|
716
|
+
*/
|
|
675
717
|
static _checkExtension(url, validExtensions) {
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
718
|
+
return validExtensions.some((extension) => url.endsWith(extension));
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
/**
|
|
722
|
+
* 检测文件URL的类型
|
|
723
|
+
* @param {string} url - 文件的URL
|
|
724
|
+
* @returns {string} - 如果URL与任何已知类型匹配,则返回文件类型,否则返回"unknown"
|
|
725
|
+
*/
|
|
726
|
+
static _detectFileType(url) {
|
|
727
|
+
for (const [type, extensions] of _FileTypeChecker.cachedEntries) {
|
|
728
|
+
if (extensions.some((extension) => url.endsWith(extension))) {
|
|
729
|
+
return type;
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
return "unknown";
|
|
680
733
|
}
|
|
681
734
|
}
|
|
682
735
|
|
package/lib/test.ts
ADDED