mirror of https://github.com/msgbyte/tailchat
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
1.8 KiB
TypeScript
81 lines
1.8 KiB
TypeScript
import randomString from 'crypto-random-string';
|
|
import _ from 'lodash';
|
|
import urlRegex from 'url-regex';
|
|
|
|
/**
|
|
* 返回电子邮箱的地址
|
|
* @param email 电子邮箱
|
|
* @returns 电子邮箱
|
|
*/
|
|
export function getEmailAddress(email: string) {
|
|
return email.split('@')[0];
|
|
}
|
|
|
|
/**
|
|
* 生成随机字符串
|
|
* @param length 随机字符串长度
|
|
*/
|
|
export function generateRandomStr(length = 10): string {
|
|
return randomString({ length });
|
|
}
|
|
|
|
export function generateRandomNumStr(length = 6) {
|
|
return randomString({
|
|
length,
|
|
type: 'numeric',
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 是否一个可用的字符串
|
|
* 定义为有长度的字符串
|
|
*/
|
|
export function isValidStr(str: unknown): str is string {
|
|
return typeof str == 'string' && str !== '';
|
|
}
|
|
|
|
/**
|
|
* 判断是否是一个可用的url
|
|
*/
|
|
export function isValidUrl(str: unknown): str is string {
|
|
return typeof str == 'string' && urlRegex({ exact: true }).test(str);
|
|
}
|
|
|
|
/**
|
|
* 检测一个地址是否是一个合法的资源地址
|
|
*/
|
|
export function isValidStaticAssetsUrl(str: unknown): str is string {
|
|
if (typeof str !== 'string') {
|
|
return false;
|
|
}
|
|
|
|
const filename = _.last(str.split('/'));
|
|
if (filename.indexOf('.') === -1) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* 休眠一定时间
|
|
*/
|
|
export function sleep(ms: number): Promise<void> {
|
|
return new Promise((resolve) =>
|
|
setTimeout(() => {
|
|
resolve();
|
|
}, ms)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 检查url地址是否匹配
|
|
*/
|
|
export function checkPathMatch(urlList: string[], url: string): boolean {
|
|
const fuzzList = urlList.map((url) => url.replaceAll('/', '.'));
|
|
const fuzzUrl = url.split('?')[0].replaceAll('/', '.');
|
|
|
|
// 考虑到serviceName中间可能会有. 且注册的时候不可能把所有情况都列出来,因此进行模糊处理
|
|
return fuzzList.includes(fuzzUrl);
|
|
}
|