@minto-ai/tools 1.0.667 → 1.0.669
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 +32 -0
- package/dist/browser/get-absolute-url.d.ts +7 -0
- package/dist/browser/get-browser-fingerprint.d.ts +10 -0
- package/dist/browser/index.d.ts +3 -1
- package/dist/file/single-download-file.d.ts +8 -5
- package/dist/index.js +232 -21
- package/dist/validator/index.d.ts +2 -1
- package/dist/validator/is-valid-base64.d.ts +6 -0
- package/dist/validator/is-valid-url.d.ts +4 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -805,6 +805,38 @@ await audioPermission.requestPlaybackPermission()
|
|
|
805
805
|
await audioPermission.requestMicrophonePermission()
|
|
806
806
|
```
|
|
807
807
|
|
|
808
|
+
### `getBrowserFingerprint`
|
|
809
|
+
|
|
810
|
+
> `function getBrowserFingerprint(): string`
|
|
811
|
+
|
|
812
|
+
生成匿名浏览器指纹,用于区分浏览器匿名用户的唯一 ID。通过收集浏览器环境特征(如 UserAgent、语言、屏幕分辨率、色深、时区、硬件并发、平台,以及 Canvas 渲染指纹等),并使用 MurmurHash3(32 位)生成稳定的十六进制字符串。
|
|
813
|
+
|
|
814
|
+
#### 参数
|
|
815
|
+
|
|
816
|
+
- 无
|
|
817
|
+
|
|
818
|
+
#### 返回
|
|
819
|
+
|
|
820
|
+
`(string)`: 浏览器指纹 ID(十六进制字符串)。在非浏览器环境(如 Node/SSR)返回空字符串 `''`。
|
|
821
|
+
|
|
822
|
+
#### 例子
|
|
823
|
+
|
|
824
|
+
```typescript
|
|
825
|
+
import { getBrowserFingerprint } from '@minto-ai/tools'
|
|
826
|
+
|
|
827
|
+
// 生成匿名用户唯一ID
|
|
828
|
+
const fingerprint = getBrowserFingerprint()
|
|
829
|
+
console.log(fingerprint) // 例如:'a1b2c3d4'
|
|
830
|
+
|
|
831
|
+
// 建议:结合本地存储缓存以保持一致性
|
|
832
|
+
localStorage.setItem('anonymous_id', fingerprint)
|
|
833
|
+
```
|
|
834
|
+
|
|
835
|
+
#### 注意事项
|
|
836
|
+
|
|
837
|
+
- 指纹可能随浏览器升级、系统变更或渲染差异而变化,适合作为匿名用户的临时唯一标识,不建议用于强身份识别。
|
|
838
|
+
- 隐私增强模式或跨平台差异可能禁用部分特征(如 deviceMemory、Canvas),函数会自动兼容并尽可能生成可辨识的 ID。
|
|
839
|
+
|
|
808
840
|
## 工具
|
|
809
841
|
|
|
810
842
|
### `getUuid`
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 获取浏览器唯一指纹 ID
|
|
3
|
+
* 通过收集浏览器特征(UserAgent, Screen, Language, Timezone, Canvas 等)生成哈希值
|
|
4
|
+
* 注意:此方法生成的 ID 在浏览器环境变化(如升级、窗口大小改变如果包含了窗口大小)时可能会变化,
|
|
5
|
+
* 但作为匿名用户的临时唯一标识通常足够。
|
|
6
|
+
*
|
|
7
|
+
* @returns 浏览器指纹 ID 字符串
|
|
8
|
+
*/
|
|
9
|
+
export declare function getBrowserFingerprint(): string;
|
|
10
|
+
export default getBrowserFingerprint;
|
package/dist/browser/index.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { default as copyText } from './copy-text';
|
|
2
2
|
import { default as createAudioPermission } from './create-audio-permission';
|
|
3
|
+
import { default as getAbsoluteUrl } from './get-absolute-url';
|
|
4
|
+
import { default as getBrowserFingerprint } from './get-browser-fingerprint';
|
|
3
5
|
import { default as isAndroid } from './is-android';
|
|
4
6
|
import { default as isIos } from './is-ios';
|
|
5
7
|
import { default as isMobile } from './is-mobile';
|
|
6
8
|
import { default as isPc } from './is-pc';
|
|
7
|
-
export { copyText, createAudioPermission, isAndroid, isIos, isMobile, isPc };
|
|
9
|
+
export { copyText, createAudioPermission, getAbsoluteUrl, getBrowserFingerprint, isAndroid, isIos, isMobile, isPc, };
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* 单文件下载
|
|
3
|
+
* @param source 下载源,支持 Base64 字符串或 URL
|
|
4
|
+
* @param fileName 下载文件名
|
|
5
|
+
* - 当 source 为 Base64 字符串时,必须提供文件名
|
|
6
|
+
* - 当 source 为 URL 且为文件路径时,若未提供文件名,则默认使用 URL 路径中的文件名
|
|
7
|
+
* - 当 source 为 URL 且不为文件路径时,传入的文件名参数无效,将使用服务器响应头中的文件名
|
|
3
8
|
*
|
|
4
|
-
* @
|
|
5
|
-
* @param fileName 下载时保存的文件名(可选)。如果未提供,将自动从 第一个参数`filePath` 提取文件名。
|
|
6
|
-
* @returns 返回一个 Promise,在文件下载完成后。
|
|
9
|
+
* @returns Promise<void> 下载完成后解析的 Promise
|
|
7
10
|
*/
|
|
8
|
-
declare function singleDownloadFile(
|
|
11
|
+
declare function singleDownloadFile(source: string, fileName?: string): Promise<void>;
|
|
9
12
|
export default singleDownloadFile;
|
package/dist/index.js
CHANGED
|
@@ -13754,6 +13754,137 @@ function createAudioPermission() {
|
|
|
13754
13754
|
}
|
|
13755
13755
|
return audioPermissionInstance;
|
|
13756
13756
|
}
|
|
13757
|
+
function getAbsoluteUrl(rawUrl) {
|
|
13758
|
+
if (!rawUrl) {
|
|
13759
|
+
return "";
|
|
13760
|
+
}
|
|
13761
|
+
try {
|
|
13762
|
+
var absoluteUrl = new URL(rawUrl).toString();
|
|
13763
|
+
return absoluteUrl;
|
|
13764
|
+
} catch (_unused) {
|
|
13765
|
+
try {
|
|
13766
|
+
var currentPageUrl = window.location.href;
|
|
13767
|
+
var _absoluteUrl = new URL(rawUrl, currentPageUrl).toString();
|
|
13768
|
+
return _absoluteUrl;
|
|
13769
|
+
} catch (_unused2) {
|
|
13770
|
+
var siteOrigin = window.location.origin;
|
|
13771
|
+
var normalizedPath = rawUrl.startsWith("/") ? rawUrl : "/".concat(rawUrl);
|
|
13772
|
+
var _absoluteUrl2 = "".concat(siteOrigin).concat(normalizedPath).replace(/\/+/g, "/");
|
|
13773
|
+
return _absoluteUrl2;
|
|
13774
|
+
}
|
|
13775
|
+
}
|
|
13776
|
+
}
|
|
13777
|
+
function murmurHash332Gc(key) {
|
|
13778
|
+
var seed = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0;
|
|
13779
|
+
var k1;
|
|
13780
|
+
var h1;
|
|
13781
|
+
var remainder = key.length & 3;
|
|
13782
|
+
var bytes = key.length - remainder;
|
|
13783
|
+
h1 = seed;
|
|
13784
|
+
var c1 = 3432918353;
|
|
13785
|
+
var c2 = 461845907;
|
|
13786
|
+
var i = 0;
|
|
13787
|
+
while (i < bytes) {
|
|
13788
|
+
k1 = key.charCodeAt(i) & 255 | (key.charCodeAt(++i) & 255) << 8 | (key.charCodeAt(++i) & 255) << 16 | (key.charCodeAt(++i) & 255) << 24;
|
|
13789
|
+
++i;
|
|
13790
|
+
k1 = (k1 & 65535) * c1 + (((k1 >>> 16) * c1 & 65535) << 16) & 4294967295;
|
|
13791
|
+
k1 = k1 << 15 | k1 >>> 17;
|
|
13792
|
+
k1 = (k1 & 65535) * c2 + (((k1 >>> 16) * c2 & 65535) << 16) & 4294967295;
|
|
13793
|
+
h1 ^= k1;
|
|
13794
|
+
h1 = h1 << 13 | h1 >>> 19;
|
|
13795
|
+
var h1b = (h1 & 65535) * 5 + (((h1 >>> 16) * 5 & 65535) << 16) & 4294967295;
|
|
13796
|
+
h1 = (h1b & 65535) + 27492 + (((h1b >>> 16) + 58964 & 65535) << 16);
|
|
13797
|
+
}
|
|
13798
|
+
k1 = 0;
|
|
13799
|
+
if (remainder >= 3) {
|
|
13800
|
+
k1 ^= (key.charCodeAt(i + 2) & 255) << 16;
|
|
13801
|
+
}
|
|
13802
|
+
if (remainder >= 2) {
|
|
13803
|
+
k1 ^= (key.charCodeAt(i + 1) & 255) << 8;
|
|
13804
|
+
}
|
|
13805
|
+
if (remainder >= 1) {
|
|
13806
|
+
k1 ^= key.charCodeAt(i) & 255;
|
|
13807
|
+
k1 = (k1 & 65535) * c1 + (((k1 >>> 16) * c1 & 65535) << 16) & 4294967295;
|
|
13808
|
+
k1 = k1 << 15 | k1 >>> 17;
|
|
13809
|
+
k1 = (k1 & 65535) * c2 + (((k1 >>> 16) * c2 & 65535) << 16) & 4294967295;
|
|
13810
|
+
h1 ^= k1;
|
|
13811
|
+
}
|
|
13812
|
+
h1 ^= key.length;
|
|
13813
|
+
h1 ^= h1 >>> 16;
|
|
13814
|
+
h1 = (h1 & 65535) * 2246822507 + (((h1 >>> 16) * 2246822507 & 65535) << 16) & 4294967295;
|
|
13815
|
+
h1 ^= h1 >>> 13;
|
|
13816
|
+
h1 = (h1 & 65535) * 3266489909 + (((h1 >>> 16) * 3266489909 & 65535) << 16) & 4294967295;
|
|
13817
|
+
h1 ^= h1 >>> 16;
|
|
13818
|
+
return h1 >>> 0;
|
|
13819
|
+
}
|
|
13820
|
+
function getCanvasFingerprint() {
|
|
13821
|
+
try {
|
|
13822
|
+
var canvas = document.createElement("canvas");
|
|
13823
|
+
var ctx = canvas.getContext("2d");
|
|
13824
|
+
if (!ctx) {
|
|
13825
|
+
return "";
|
|
13826
|
+
}
|
|
13827
|
+
canvas.width = 200;
|
|
13828
|
+
canvas.height = 50;
|
|
13829
|
+
ctx.textBaseline = "top";
|
|
13830
|
+
ctx.font = "14px Arial";
|
|
13831
|
+
ctx.fillStyle = "#f60";
|
|
13832
|
+
ctx.fillRect(125, 1, 62, 20);
|
|
13833
|
+
ctx.fillStyle = "#069";
|
|
13834
|
+
ctx.fillText("Hello, world!", 2, 15);
|
|
13835
|
+
ctx.fillStyle = "rgba(102, 204, 0, 0.7)";
|
|
13836
|
+
ctx.fillText("Hello, world!", 4, 17);
|
|
13837
|
+
ctx.globalCompositeOperation = "multiply";
|
|
13838
|
+
ctx.fillStyle = "rgb(255,0,255)";
|
|
13839
|
+
ctx.beginPath();
|
|
13840
|
+
ctx.arc(50, 50, 50, 0, Math.PI * 2, true);
|
|
13841
|
+
ctx.closePath();
|
|
13842
|
+
ctx.fill();
|
|
13843
|
+
ctx.fillStyle = "rgb(0,255,255)";
|
|
13844
|
+
ctx.beginPath();
|
|
13845
|
+
ctx.arc(100, 50, 50, 0, Math.PI * 2, true);
|
|
13846
|
+
ctx.closePath();
|
|
13847
|
+
ctx.fill();
|
|
13848
|
+
ctx.fillStyle = "rgb(255,255,0)";
|
|
13849
|
+
ctx.beginPath();
|
|
13850
|
+
ctx.arc(75, 100, 50, 0, Math.PI * 2, true);
|
|
13851
|
+
ctx.closePath();
|
|
13852
|
+
ctx.fill();
|
|
13853
|
+
ctx.fillStyle = "rgb(255,0,255)";
|
|
13854
|
+
ctx.arc(75, 75, 75, 0, Math.PI * 2, true);
|
|
13855
|
+
ctx.arc(75, 75, 25, 0, Math.PI * 2, true);
|
|
13856
|
+
ctx.fill("evenodd");
|
|
13857
|
+
return canvas.toDataURL();
|
|
13858
|
+
} catch (_unused) {
|
|
13859
|
+
return "";
|
|
13860
|
+
}
|
|
13861
|
+
}
|
|
13862
|
+
function getBrowserFingerprint() {
|
|
13863
|
+
if (typeof window === "undefined") {
|
|
13864
|
+
return "";
|
|
13865
|
+
}
|
|
13866
|
+
var _window = window, navigator2 = _window.navigator, screen = _window.screen;
|
|
13867
|
+
var components = [];
|
|
13868
|
+
components.push(navigator2.userAgent);
|
|
13869
|
+
components.push(navigator2.language);
|
|
13870
|
+
components.push("".concat(screen.width, "x").concat(screen.height));
|
|
13871
|
+
components.push("".concat(screen.colorDepth));
|
|
13872
|
+
components.push("".concat((/* @__PURE__ */ new Date()).getTimezoneOffset()));
|
|
13873
|
+
if (navigator2.hardwareConcurrency) {
|
|
13874
|
+
components.push("".concat(navigator2.hardwareConcurrency));
|
|
13875
|
+
}
|
|
13876
|
+
if (navigator2.deviceMemory) {
|
|
13877
|
+
components.push("".concat(navigator2.deviceMemory));
|
|
13878
|
+
}
|
|
13879
|
+
if (navigator2.platform) {
|
|
13880
|
+
components.push(navigator2.platform);
|
|
13881
|
+
}
|
|
13882
|
+
var canvasFingerprint = getCanvasFingerprint();
|
|
13883
|
+
components.push(canvasFingerprint);
|
|
13884
|
+
var fingerprintString = components.join("###");
|
|
13885
|
+
var hash = murmurHash332Gc(fingerprintString);
|
|
13886
|
+
return hash.toString(16);
|
|
13887
|
+
}
|
|
13757
13888
|
function isAndroid() {
|
|
13758
13889
|
var userAgent2 = navigator.userAgent.toLowerCase();
|
|
13759
13890
|
return /android/.test(userAgent2);
|
|
@@ -14125,33 +14256,117 @@ function isVideoFilePath(filePath) {
|
|
|
14125
14256
|
var fileSuffix = getFileSuffix(filePath);
|
|
14126
14257
|
return Object.values(VideoFileSuffixEnum).includes(fileSuffix);
|
|
14127
14258
|
}
|
|
14259
|
+
var DATA_URI_PREFIX = "data:";
|
|
14260
|
+
var BASE64_MARKER = ";base64,";
|
|
14261
|
+
var BASE64_REGEX = /^[A-Z0-9+/]+={0,2}$/i;
|
|
14262
|
+
function isValidBase64(value) {
|
|
14263
|
+
if (!isString$1(value)) {
|
|
14264
|
+
return false;
|
|
14265
|
+
}
|
|
14266
|
+
var str = value.trim();
|
|
14267
|
+
if (!str) {
|
|
14268
|
+
return false;
|
|
14269
|
+
}
|
|
14270
|
+
if (str.startsWith(DATA_URI_PREFIX)) {
|
|
14271
|
+
var markerIndex = str.indexOf(BASE64_MARKER);
|
|
14272
|
+
if (markerIndex === -1) {
|
|
14273
|
+
return false;
|
|
14274
|
+
}
|
|
14275
|
+
str = str.slice(markerIndex + BASE64_MARKER.length);
|
|
14276
|
+
}
|
|
14277
|
+
var content = str.replace(/\s+/g, "");
|
|
14278
|
+
if (content.length % 4 !== 0) {
|
|
14279
|
+
return false;
|
|
14280
|
+
}
|
|
14281
|
+
return BASE64_REGEX.test(content);
|
|
14282
|
+
}
|
|
14283
|
+
var URL_REGEX = /^https?:\/\/(?:[\w-]+:[\w-]+@)?(?:localhost|(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}|(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))(?::\d{1,5})?(?:\/[^\s?#]*)?(?:\?[^\s#]*)?(?:#\S*)?$/i;
|
|
14284
|
+
function isValidUrl(value) {
|
|
14285
|
+
if (!isString$1(value)) {
|
|
14286
|
+
return false;
|
|
14287
|
+
}
|
|
14288
|
+
return URL_REGEX.test(value.trim());
|
|
14289
|
+
}
|
|
14128
14290
|
function singleDownloadFile(_x, _x2) {
|
|
14129
14291
|
return _singleDownloadFile.apply(this, arguments);
|
|
14130
14292
|
}
|
|
14131
14293
|
function _singleDownloadFile() {
|
|
14132
|
-
_singleDownloadFile = _asyncToGenerator(/* @__PURE__ */ _regenerator().m(function _callee(
|
|
14133
|
-
var
|
|
14294
|
+
_singleDownloadFile = _asyncToGenerator(/* @__PURE__ */ _regenerator().m(function _callee(source, fileName) {
|
|
14295
|
+
var base64Url, response, blob, downloadName, requestUrl, _response, link2, _t, _t2;
|
|
14134
14296
|
return _regenerator().w(function(_context) {
|
|
14135
|
-
while (1) switch (_context.n) {
|
|
14297
|
+
while (1) switch (_context.p = _context.n) {
|
|
14136
14298
|
case 0:
|
|
14137
|
-
if (!
|
|
14138
|
-
|
|
14299
|
+
if (!isValidBase64(source)) {
|
|
14300
|
+
_context.n = 6;
|
|
14301
|
+
break;
|
|
14302
|
+
}
|
|
14303
|
+
if (fileName) {
|
|
14304
|
+
_context.n = 1;
|
|
14305
|
+
break;
|
|
14139
14306
|
}
|
|
14140
|
-
|
|
14307
|
+
throw new Error("下载失败:Base64 数据必须提供文件名");
|
|
14308
|
+
case 1:
|
|
14309
|
+
base64Url = source;
|
|
14310
|
+
if (!source.startsWith("data:")) {
|
|
14311
|
+
base64Url = "data:application/octet-stream;base64,".concat(source);
|
|
14312
|
+
}
|
|
14313
|
+
_context.p = 2;
|
|
14314
|
+
_context.n = 3;
|
|
14315
|
+
return fetch(base64Url);
|
|
14316
|
+
case 3:
|
|
14317
|
+
response = _context.v;
|
|
14318
|
+
_context.n = 4;
|
|
14319
|
+
return response.blob();
|
|
14320
|
+
case 4:
|
|
14321
|
+
blob = _context.v;
|
|
14322
|
+
FileSaver.saveAs(blob, fileName);
|
|
14323
|
+
return _context.a(2);
|
|
14324
|
+
case 5:
|
|
14325
|
+
_context.p = 5;
|
|
14326
|
+
_t = _context.v;
|
|
14327
|
+
console.error("Base64 下载失败:", _t);
|
|
14328
|
+
throw _t;
|
|
14329
|
+
case 6:
|
|
14330
|
+
if (!isValidUrl(source)) {
|
|
14331
|
+
_context.n = 11;
|
|
14332
|
+
break;
|
|
14333
|
+
}
|
|
14334
|
+
if (!isFilePath(source)) {
|
|
14335
|
+
_context.n = 10;
|
|
14336
|
+
break;
|
|
14337
|
+
}
|
|
14338
|
+
downloadName = fileName || getFileName(source) || "download";
|
|
14339
|
+
requestUrl = updateFilePathQuery(source, {
|
|
14141
14340
|
"response-content-type": "application/octet-stream"
|
|
14142
14341
|
});
|
|
14143
|
-
_context.
|
|
14144
|
-
|
|
14342
|
+
_context.p = 7;
|
|
14343
|
+
_context.n = 8;
|
|
14344
|
+
return axios.get(requestUrl, {
|
|
14145
14345
|
responseType: "blob"
|
|
14146
14346
|
});
|
|
14147
|
-
case
|
|
14148
|
-
|
|
14149
|
-
|
|
14150
|
-
|
|
14151
|
-
case
|
|
14347
|
+
case 8:
|
|
14348
|
+
_response = _context.v;
|
|
14349
|
+
FileSaver.saveAs(_response.data, downloadName);
|
|
14350
|
+
return _context.a(2);
|
|
14351
|
+
case 9:
|
|
14352
|
+
_context.p = 9;
|
|
14353
|
+
_t2 = _context.v;
|
|
14354
|
+
console.error("文件资源下载失败:", _t2);
|
|
14355
|
+
throw _t2;
|
|
14356
|
+
case 10:
|
|
14357
|
+
link2 = document.createElement("a");
|
|
14358
|
+
link2.href = source;
|
|
14359
|
+
link2.style.display = "none";
|
|
14360
|
+
document.body.appendChild(link2);
|
|
14361
|
+
link2.click();
|
|
14362
|
+
document.body.removeChild(link2);
|
|
14363
|
+
return _context.a(2);
|
|
14364
|
+
case 11:
|
|
14365
|
+
throw new Error("下载失败:无效的下载源 (非有效 Base64 或 URL)");
|
|
14366
|
+
case 12:
|
|
14152
14367
|
return _context.a(2);
|
|
14153
14368
|
}
|
|
14154
|
-
}, _callee);
|
|
14369
|
+
}, _callee, null, [[7, 9], [2, 5]]);
|
|
14155
14370
|
}));
|
|
14156
14371
|
return _singleDownloadFile.apply(this, arguments);
|
|
14157
14372
|
}
|
|
@@ -16648,13 +16863,6 @@ function useTheme() {
|
|
|
16648
16863
|
toggleTheme
|
|
16649
16864
|
};
|
|
16650
16865
|
}
|
|
16651
|
-
function isValidUrl(url) {
|
|
16652
|
-
if (!isString$1(url)) {
|
|
16653
|
-
return false;
|
|
16654
|
-
}
|
|
16655
|
-
var urlPattern = /^https?:\/\/(?:[\w-]+:[\w-]+@)?(?:localhost|(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}|(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))(?::\d{1,5})?(?:\/[^\s?#]*)?(?:\?[^\s#]*)?(?:#\S*)?$/i;
|
|
16656
|
-
return urlPattern.test(url.trim());
|
|
16657
|
-
}
|
|
16658
16866
|
function createWebSocket(url) {
|
|
16659
16867
|
return new WebSocket(url);
|
|
16660
16868
|
}
|
|
@@ -16720,6 +16928,8 @@ export {
|
|
|
16720
16928
|
deepFreeze,
|
|
16721
16929
|
index as default,
|
|
16722
16930
|
divide2 as divide,
|
|
16931
|
+
getAbsoluteUrl,
|
|
16932
|
+
getBrowserFingerprint,
|
|
16723
16933
|
getDecimalPlaces,
|
|
16724
16934
|
getFileIcon,
|
|
16725
16935
|
getFileName,
|
|
@@ -16747,6 +16957,7 @@ export {
|
|
|
16747
16957
|
isPptFilePath,
|
|
16748
16958
|
isString$1 as isString,
|
|
16749
16959
|
isUndefined,
|
|
16960
|
+
isValidBase64,
|
|
16750
16961
|
isValidUrl,
|
|
16751
16962
|
isVideoFilePath,
|
|
16752
16963
|
isWebSocketSupported,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* @param
|
|
4
|
-
* @returns
|
|
2
|
+
* 检查给定的字符串是否符合标准网页地址格式。
|
|
3
|
+
* @param value - 需要验证的字符串。
|
|
4
|
+
* @returns 如果字符串格式合格,返回true;否则返回false。
|
|
5
5
|
*/
|
|
6
|
-
export declare function isValidUrl(
|
|
6
|
+
export declare function isValidUrl(value: string): boolean;
|
|
7
7
|
export default isValidUrl;
|