nhanh-pure-function 1.3.16 → 1.3.18

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.
@@ -77,12 +77,12 @@ export function _TimeTransition(
77
77
  export function _ReadFile(src: string): Promise<string>;
78
78
 
79
79
  /**
80
- * 从给定的URL中提取文件名
81
- * 如果无法提取文件名,则返回默认的文件名
80
+ * 从给定的href中提取名称部分
81
+ * 该函数旨在处理URL字符串,并返回URL路径的最后一部分,去除查询参数
82
82
  *
83
- * @param {string} href - 包含文件路径的URL
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
- private static fileExtensions: {
269
- image: string[];
270
- ppt: string[];
271
- word: string[];
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
- * @param url 文件的URL或路径,用于检查文件类型
284
- * @param type 文件类型,必须是fileExtensions属性中定义的键之一
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
- url: string,
289
- type: keyof typeof _FileTypeChecker.fileExtensions
290
- ): boolean;
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 url 文件的URL或路径,用于提取文件扩展名
296
- * @param validExtensions 有效的文件扩展名数组,用于比较
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
  /**
@@ -193,16 +193,32 @@ export function _ReadFile(src) {
193
193
  }
194
194
 
195
195
  /**
196
- * 从给定的URL中提取文件名
197
- * 如果无法提取文件名,则返回默认的文件名
196
+ * 从给定的href中提取名称部分
197
+ * 该函数旨在处理URL字符串,并返回URL路径的最后一部分,去除查询参数
198
198
  *
199
- * @param {string} href - 包含文件路径的URL
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
- // 分割URL并获取最后一个路径段,然后去除查询字符串,最后返回文件名或默认名
205
- return href.split("/").pop().split("?")[0] || defaultName;
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
- const extensions = FileTypeChecker.fileExtensions[type];
671
- return FileTypeChecker._checkExtension(url, extensions);
689
+ // 确保提供的URL是字符串且非空
690
+ if (!url || typeof url !== "string") {
691
+ throw new Error("Invalid URL provided");
692
+ }
693
+
694
+ // 将URL转换为小写,以确保文件扩展名匹配不区分大小写
695
+ const lowerCaseUrl = 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
- const lowerCaseUrl = url.toLowerCase();
677
- return validExtensions.some((extension) =>
678
- lowerCaseUrl.endsWith(extension)
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
@@ -0,0 +1,5 @@
1
+ import { _GetHrefName } from "./Utility/Utility";
2
+
3
+ const value = _GetHrefName("http://vfv/vf/vdwdqd.dw?id=21");
4
+
5
+ console.log(value);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nhanh-pure-function",
3
- "version": "1.3.16",
3
+ "version": "1.3.18",
4
4
  "description": "纯函数工具",
5
5
  "main": "lib/Index.js",
6
6
  "scripts": {