@hzab/utils 1.0.17 → 1.0.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/changelog.md CHANGED
@@ -1,3 +1,11 @@
1
+ # @hzab/utils@1.0.19
2
+
3
+ fix: 修复图片后缀名-判断优化
4
+
5
+ # @hzab/utils@1.0.18
6
+
7
+ fix: 修复图片后缀名
8
+
1
9
  # @hzab/utils@1.0.17
2
10
 
3
11
  fix: scan-qr 引用路径修复
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hzab/utils",
3
- "version": "1.0.17",
3
+ "version": "1.0.19",
4
4
  "description": "utils",
5
5
  "main": "src",
6
6
  "scripts": {
@@ -1,164 +1,162 @@
1
- import dayjs from "dayjs";
2
-
3
- import { getArr } from "../array";
4
- import { isBase64Str } from "../base64Str";
5
-
6
- import { mergeFileName, getFileName, getFileNameExt } from "../file/fileName";
7
- import { getFileTypeExt } from "../file/fileType";
8
- import { nanoidNumALetters } from "../nanoid";
9
-
10
- /**
11
- * 格式化 dir 字符串,必须为非 / 开头, / 结尾。如: test/
12
- * @param {*} dir
13
- * @returns
14
- */
15
- export const formatDirStr = function (dir) {
16
- return dir?.replace(/^\/(.*)\/*$/, "$1").replace(/(.?=*)\/*$/, "$1/");
17
- };
18
-
19
- /**
20
- * 合并 dir 字符串
21
- * @param {*} dir
22
- */
23
- export const mergeDirStr = function (dir1, dir2) {
24
- return `${formatDirStr(dir1 || "")}${formatDirStr(dir2 || "")}`;
25
- };
26
-
27
- /**
28
- * 限制文件数量
29
- * @param fileList
30
- * @param maxCount
31
- * @returns
32
- */
33
- export function handleMaxCount(fileList, maxCount) {
34
- let list = getArr(fileList);
35
- if (maxCount > 0 && list.length > maxCount) {
36
- list = list.slice(0, maxCount);
37
- }
38
- return list;
39
- }
40
-
41
- /**
42
- * 获取预览 url
43
- * @param {*} uri
44
- * @param {*} previewConfig
45
- * @returns
46
- */
47
- export function getPreviewUrl(uri, previewConfig) {
48
- const isUriPattern = /http[s]?:\/\/[^\s]+/.test(uri);
49
- const query = previewConfig?.query ? "?" + previewConfig?.query : "";
50
-
51
- if (isUriPattern) return `${uri}${query}`?.trim();
52
-
53
- if (previewConfig) return `${previewConfig?.url}/${uri}${query}`?.trim();
54
-
55
- return uri;
56
- }
57
-
58
- /**
59
- * 根据 file 对象获取文件名称,文件名称包含:初始名称、类型
60
- * 数据存储格式 ~k[key]-[data]~ 如: ~ktime-1743649562530~
61
- * key、data 中的 ~ 转为 _
62
- * @param file
63
- */
64
- export const getFileNameByFileObj = (file, opt: any) => {
65
- const {
66
- useHashName = true,
67
- params: { fileName = "" } = {}, // 给 params 加默认空对象
68
- } = opt || {};
69
-
70
- const _fullFileName = file.name || fileName || "";
71
- const { mainPart, ext } = getFileNameExt(_fullFileName);
72
-
73
- console.log("getFileTypeExt(file.type)", file.type, getFileTypeExt(file.type));
74
-
75
- const _fileName = mainPart || _fullFileName || getFileName(file.url) || "file";
76
- const _ext = ext || getFileTypeExt(file.type);
77
-
78
- if (_fileName.indexOf("~kid-") >= 0) {
79
- return _fileName;
80
- }
81
-
82
- const hashStr = useHashName ? nanoidNumALetters() : "";
83
- const nm = mergeFileName(_fileName + "." + _ext, `~kid-${hashStr}-${file.createTime || dayjs().valueOf()}-${ext}`);
84
-
85
- return nm;
86
- };
87
-
88
- /**
89
- * 解析
90
- * @param url
91
- * @returns
92
- */
93
- export const getFileNameObj = function (url): any {
94
- const list = url.match(/~k([^-~]+)-([^~]*)~/g);
95
- const res = {};
96
- list?.forEach((it) => {
97
- const arr = it?.match(/~k([^-~]+)-([^~]*)~/);
98
- if (arr?.length >= 3) {
99
- res[arr[1]] = arr[2];
100
- }
101
- });
102
- return res;
103
- };
104
-
105
- /**
106
- * 解析
107
- * @param url
108
- * @returns
109
- */
110
- export function setFileNameObj(obj) {
111
- return Object.keys(obj)
112
- .map((key) => {
113
- return `~k${key?.replace(/~/g, "_")}-${obj[key]?.toString()?.replace(/~/g, "_")}~`;
114
- })
115
- .join("");
116
- }
117
-
118
- /**
119
- * 通过 key 获取对应的值
120
- * @param url
121
- * @param key
122
- * @returns
123
- */
124
- export const getValByKey = function (url, key) {
125
- const reg = new RegExp(`~k${key?.replace(/~/g, "_")}-\([^~]*\)~`);
126
- return url.match(reg)?.[1];
127
- };
128
-
129
- /**
130
- * 预览 url 添加前缀
131
- * @param {*} uri
132
- * @param {*} conf
133
- * @returns
134
- */
135
- export function mergePreviewConfig(uri, conf) {
136
- let _uri = uri;
137
- let basePath = "";
138
- if (typeof _uri === "object") {
139
- basePath = _uri.basePath;
140
- _uri = _uri.previewUrl || _uri.url;
141
- }
142
- if (typeof _uri !== "string") {
143
- return _uri;
144
- }
145
- _uri = _uri?.trim();
146
- // base64 直接返回
147
- if (isBase64Str(_uri)) {
148
- return _uri;
149
- }
150
- const isUriPattern = /http[s]?:\/\/[^\s]+/.test(_uri);
151
- const query = conf?.query?.trim() ? "?" + conf?.query?.trim() : "";
152
-
153
- if (isUriPattern) {
154
- // 源地址为 http 地址,直接拼接 query 参数
155
- return `${_uri}${query}`;
156
- }
157
-
158
- if (conf) {
159
- // 拼接前缀
160
- return `${conf?.url?.trim()?.replace(/\/$/, "")}/${_uri?.trim()?.replace(/^\//, "")}${query}`?.trim();
161
- }
162
-
163
- return _uri;
164
- }
1
+ import dayjs from "dayjs";
2
+
3
+ import { getArr } from "../array";
4
+ import { isBase64Str } from "../base64Str";
5
+
6
+ import { mergeFileName, getFileName, getFileNameExt } from "../file/fileName";
7
+ import { getFileTypeExt } from "../file/fileType";
8
+ import { nanoidNumALetters } from "../nanoid";
9
+
10
+ /**
11
+ * 格式化 dir 字符串,必须为非 / 开头, / 结尾。如: test/
12
+ * @param {*} dir
13
+ * @returns
14
+ */
15
+ export const formatDirStr = function (dir) {
16
+ return dir?.replace(/^\/(.*)\/*$/, "$1").replace(/(.?=*)\/*$/, "$1/");
17
+ };
18
+
19
+ /**
20
+ * 合并 dir 字符串
21
+ * @param {*} dir
22
+ */
23
+ export const mergeDirStr = function (dir1, dir2) {
24
+ return `${formatDirStr(dir1 || "")}${formatDirStr(dir2 || "")}`;
25
+ };
26
+
27
+ /**
28
+ * 限制文件数量
29
+ * @param fileList
30
+ * @param maxCount
31
+ * @returns
32
+ */
33
+ export function handleMaxCount(fileList, maxCount) {
34
+ let list = getArr(fileList);
35
+ if (maxCount > 0 && list.length > maxCount) {
36
+ list = list.slice(0, maxCount);
37
+ }
38
+ return list;
39
+ }
40
+
41
+ /**
42
+ * 获取预览 url
43
+ * @param {*} uri
44
+ * @param {*} previewConfig
45
+ * @returns
46
+ */
47
+ export function getPreviewUrl(uri, previewConfig) {
48
+ const isUriPattern = /http[s]?:\/\/[^\s]+/.test(uri);
49
+ const query = previewConfig?.query ? "?" + previewConfig?.query : "";
50
+
51
+ if (isUriPattern) return `${uri}${query}`?.trim();
52
+
53
+ if (previewConfig) return `${previewConfig?.url}/${uri}${query}`?.trim();
54
+
55
+ return uri;
56
+ }
57
+
58
+ /**
59
+ * 根据 file 对象获取文件名称,文件名称包含:初始名称、类型
60
+ * 数据存储格式 ~k[key]-[data]~ 如: ~ktime-1743649562530~
61
+ * key、data 中的 ~ 转为 _
62
+ * @param file
63
+ */
64
+ export const getFileNameByFileObj = (file, opt: any) => {
65
+ const {
66
+ useHashName = true,
67
+ params: { fileName = "" } = {}, // 给 params 加默认空对象
68
+ } = opt || {};
69
+
70
+ const _fullFileName = file.name || fileName || "";
71
+ const { mainPart, ext } = getFileNameExt(_fullFileName);
72
+
73
+ console.log("getFileTypeExt(file.type)", file.type, getFileTypeExt(file.type));
74
+
75
+ const _fileName = mainPart || _fullFileName || getFileName(file.url) || "file";
76
+ const _ext = ext || getFileTypeExt(file.type);
77
+
78
+
79
+
80
+ const hashStr = useHashName ? nanoidNumALetters() : "";
81
+ const nm = mergeFileName(_fileName + "." + _ext, (_fileName.indexOf("~kid-") ? "" : `~kid-${hashStr}-${file.createTime || dayjs().valueOf()}-${ext}`));
82
+
83
+ return nm;
84
+ };
85
+
86
+ /**
87
+ * 解析
88
+ * @param url
89
+ * @returns
90
+ */
91
+ export const getFileNameObj = function (url): any {
92
+ const list = url.match(/~k([^-~]+)-([^~]*)~/g);
93
+ const res = {};
94
+ list?.forEach((it) => {
95
+ const arr = it?.match(/~k([^-~]+)-([^~]*)~/);
96
+ if (arr?.length >= 3) {
97
+ res[arr[1]] = arr[2];
98
+ }
99
+ });
100
+ return res;
101
+ };
102
+
103
+ /**
104
+ * 解析
105
+ * @param url
106
+ * @returns
107
+ */
108
+ export function setFileNameObj(obj) {
109
+ return Object.keys(obj)
110
+ .map((key) => {
111
+ return `~k${key?.replace(/~/g, "_")}-${obj[key]?.toString()?.replace(/~/g, "_")}~`;
112
+ })
113
+ .join("");
114
+ }
115
+
116
+ /**
117
+ * 通过 key 获取对应的值
118
+ * @param url
119
+ * @param key
120
+ * @returns
121
+ */
122
+ export const getValByKey = function (url, key) {
123
+ const reg = new RegExp(`~k${key?.replace(/~/g, "_")}-\([^~]*\)~`);
124
+ return url.match(reg)?.[1];
125
+ };
126
+
127
+ /**
128
+ * 预览 url 添加前缀
129
+ * @param {*} uri
130
+ * @param {*} conf
131
+ * @returns
132
+ */
133
+ export function mergePreviewConfig(uri, conf) {
134
+ let _uri = uri;
135
+ let basePath = "";
136
+ if (typeof _uri === "object") {
137
+ basePath = _uri.basePath;
138
+ _uri = _uri.previewUrl || _uri.url;
139
+ }
140
+ if (typeof _uri !== "string") {
141
+ return _uri;
142
+ }
143
+ _uri = _uri?.trim();
144
+ // base64 直接返回
145
+ if (isBase64Str(_uri)) {
146
+ return _uri;
147
+ }
148
+ const isUriPattern = /http[s]?:\/\/[^\s]+/.test(_uri);
149
+ const query = conf?.query?.trim() ? "?" + conf?.query?.trim() : "";
150
+
151
+ if (isUriPattern) {
152
+ // 源地址为 http 地址,直接拼接 query 参数
153
+ return `${_uri}${query}`;
154
+ }
155
+
156
+ if (conf) {
157
+ // 拼接前缀
158
+ return `${conf?.url?.trim()?.replace(/\/$/, "")}/${_uri?.trim()?.replace(/^\//, "")}${query}`?.trim();
159
+ }
160
+
161
+ return _uri;
162
+ }