lyb-js 1.0.1

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.
Files changed (89) hide show
  1. package/README.md +34 -0
  2. package/dist/Base/LibGetDataType/index.d.ts +10 -0
  3. package/dist/Base/LibGetDataType/index.js +15 -0
  4. package/dist/Base/LibJsGetDataType/index.d.ts +7 -0
  5. package/dist/Base/LibJsGetDataType/index.js +11 -0
  6. package/dist/Base/LibPromiseTimeout/index.d.ts +10 -0
  7. package/dist/Base/LibPromiseTimeout/index.js +40 -0
  8. package/dist/Browser/LibColorConsole/index.d.ts +15 -0
  9. package/dist/Browser/LibColorConsole/index.js +38 -0
  10. package/dist/Browser/LibIsMobile/index.d.ts +6 -0
  11. package/dist/Browser/LibIsMobile/index.js +9 -0
  12. package/dist/Browser/LibIsPad/index.d.ts +6 -0
  13. package/dist/Browser/LibIsPad/index.js +15 -0
  14. package/dist/Browser/LibPathParams/index.d.ts +6 -0
  15. package/dist/Browser/LibPathParams/index.js +16 -0
  16. package/dist/Browser/LibSetTitleIcon/index.d.ts +7 -0
  17. package/dist/Browser/LibSetTitleIcon/index.js +14 -0
  18. package/dist/Browser/LibTagTitleTip/index.d.ts +7 -0
  19. package/dist/Browser/LibTagTitleTip/index.js +24 -0
  20. package/dist/Data/LibChunkArray/index.d.ts +9 -0
  21. package/dist/Data/LibChunkArray/index.js +15 -0
  22. package/dist/Data/LibDeepJSONParse/index.d.ts +6 -0
  23. package/dist/Data/LibDeepJSONParse/index.js +32 -0
  24. package/dist/Data/LibGroupArrayByKey/index.d.ts +10 -0
  25. package/dist/Data/LibGroupArrayByKey/index.js +20 -0
  26. package/dist/Data/LibMatchEmail/index.d.ts +10 -0
  27. package/dist/Data/LibMatchEmail/index.js +16 -0
  28. package/dist/Data/LibSearch/index.d.ts +8 -0
  29. package/dist/Data/LibSearch/index.js +45 -0
  30. package/dist/Data/LibShuffleArray/index.d.ts +7 -0
  31. package/dist/Data/LibShuffleArray/index.js +14 -0
  32. package/dist/Data/LibStepArray/index.d.ts +8 -0
  33. package/dist/Data/LibStepArray/index.js +14 -0
  34. package/dist/File/LibDownloadImageLink/index.d.ts +7 -0
  35. package/dist/File/LibDownloadImageLink/index.js +17 -0
  36. package/dist/File/LibFileSize/index.d.ts +5 -0
  37. package/dist/File/LibFileSize/index.js +11 -0
  38. package/dist/File/LibImageOptimizer/index.d.ts +32 -0
  39. package/dist/File/LibImageOptimizer/index.js +83 -0
  40. package/dist/File/LibImageOptimizerOptions/index.d.ts +18 -0
  41. package/dist/File/LibImageOptimizerOptions/index.js +69 -0
  42. package/dist/File/LibSaveExcel/index.d.ts +11 -0
  43. package/dist/File/LibSaveExcel/index.js +17 -0
  44. package/dist/File/LibSaveJson/index.d.ts +8 -0
  45. package/dist/File/LibSaveJson/index.js +16 -0
  46. package/dist/Formatter/LibFormatterByte/index.d.ts +9 -0
  47. package/dist/Formatter/LibFormatterByte/index.js +17 -0
  48. package/dist/Formatter/LibMaskPhoneNumber/index.d.ts +8 -0
  49. package/dist/Formatter/LibMaskPhoneNumber/index.js +11 -0
  50. package/dist/Formatter/LibNumComma/index.d.ts +9 -0
  51. package/dist/Formatter/LibNumComma/index.js +13 -0
  52. package/dist/Formatter/LibNumberUnit/index.d.ts +12 -0
  53. package/dist/Formatter/LibNumberUnit/index.js +23 -0
  54. package/dist/Math/LibCalculateExpression/index.d.ts +10 -0
  55. package/dist/Math/LibCalculateExpression/index.js +108 -0
  56. package/dist/Math/LibConvertAngle/index.d.ts +12 -0
  57. package/dist/Math/LibConvertAngle/index.js +22 -0
  58. package/dist/Math/LibCoordsAngle/index.d.ts +15 -0
  59. package/dist/Math/LibCoordsAngle/index.js +24 -0
  60. package/dist/Math/LibCoordsDistance/index.d.ts +15 -0
  61. package/dist/Math/LibCoordsDistance/index.js +16 -0
  62. package/dist/Math/LibDecimal/index.d.ts +11 -0
  63. package/dist/Math/LibDecimal/index.js +26 -0
  64. package/dist/Misc/LibRegFormValidate/index.d.ts +32 -0
  65. package/dist/Misc/LibRegFormValidate/index.js +34 -0
  66. package/dist/Misc/LibRetryRequest/index.d.ts +24 -0
  67. package/dist/Misc/LibRetryRequest/index.js +37 -0
  68. package/dist/Random/LibProbabilityResult/index.d.ts +8 -0
  69. package/dist/Random/LibProbabilityResult/index.js +8 -0
  70. package/dist/Random/LibRandom/index.d.ts +10 -0
  71. package/dist/Random/LibRandom/index.js +12 -0
  72. package/dist/Random/LibRandomColor/index.d.ts +7 -0
  73. package/dist/Random/LibRandomColor/index.js +12 -0
  74. package/dist/Random/LibUniqueRandomNumbers/index.d.ts +9 -0
  75. package/dist/Random/LibUniqueRandomNumbers/index.js +16 -0
  76. package/dist/Time/LibSameTimeCheck/index.d.ts +8 -0
  77. package/dist/Time/LibSameTimeCheck/index.js +20 -0
  78. package/dist/Time/LibSecondsFormatterChinese/index.d.ts +11 -0
  79. package/dist/Time/LibSecondsFormatterChinese/index.js +42 -0
  80. package/dist/Time/LibTimeAgo/index.d.ts +9 -0
  81. package/dist/Time/LibTimeAgo/index.js +27 -0
  82. package/dist/Time/LibTimeGreeting/index.d.ts +17 -0
  83. package/dist/Time/LibTimeGreeting/index.js +23 -0
  84. package/dist/index.d.ts +395 -0
  85. package/dist/index.js +405 -0
  86. package/dist/lib.d.ts +39 -0
  87. package/dist/lib.js +39 -0
  88. package/package.json +24 -0
  89. package/test/index.js +0 -0
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @description 表单验证函数。
3
+ * @param form 表单数据对象。
4
+ * @param rules 验证规则数组。
5
+ * @returns 验证结果数组,包含未通过验证的项。
6
+ * @example
7
+ * const form = { username: "john", email: "john@example.com" };
8
+ * const rules = [
9
+ * { key: "username", verify: /^[a-zA-Z0-9]{3,}$/, msg: "用户名不合法", name: "用户名" },
10
+ * { key: "email", verify: /^\S+@\S+\.\S+$/, msg: "邮箱格式不正确", name: "邮箱" },
11
+ * ];
12
+ * libRegFormValidate(form, rules);
13
+ * // 返回结果: []
14
+ *
15
+ * const invalidForm = { username: "jo", email: "invalid-email" };
16
+ * libRegFormValidate(invalidForm, rules);
17
+ * // 返回结果: [
18
+ * // { key: "username", msg: "用户名不合法", name: "用户名" },
19
+ * // { key: "email", msg: "邮箱格式不正确", name: "邮箱" }
20
+ * // ]
21
+ */
22
+ export const libRegFormValidate = (form, rules) => {
23
+ return rules.reduce((result, rule) => {
24
+ const { key, verify, msg, name } = rule;
25
+ const value = form[key];
26
+ if (value === "" || value === undefined || value === null) {
27
+ result.push({ key, msg: "必填项", name });
28
+ }
29
+ else if (typeof verify === "function" ? !verify(value) : !verify.test(value)) {
30
+ result.push({ key, msg, name });
31
+ }
32
+ return result;
33
+ }, []);
34
+ };
@@ -0,0 +1,24 @@
1
+ /** @description 请求失败重连
2
+ * @param promiseFn 请求函数
3
+ * @param maxRetries 最大重试次数
4
+ * @param retryDelay 重试间隔时间
5
+ * @param params 请求参数
6
+ * @example
7
+ * const requestFn = (params: { url: string }) => fetch(params.url).then(res => res.json());
8
+ * const params = { url: "https://api.example.com/data" };
9
+ * libRetryRequest({
10
+ * promiseFn: requestFn,
11
+ * params,
12
+ * maxRetries: 5,
13
+ * retryDelay: 1000
14
+ * })
15
+ * .then(data => console.log(data))
16
+ * .catch(err => console.error(err));
17
+ */
18
+ export declare const libRetryRequest: <T>({ promiseFn, maxRetries, retryDelay, params, }: {
19
+ promiseFn: (params?: any) => Promise<T>;
20
+ params?: any;
21
+ maxRetries?: number;
22
+ retryDelay?: number;
23
+ onRetry?: () => void;
24
+ }) => Promise<T>;
@@ -0,0 +1,37 @@
1
+ /** @description 请求失败重连
2
+ * @param promiseFn 请求函数
3
+ * @param maxRetries 最大重试次数
4
+ * @param retryDelay 重试间隔时间
5
+ * @param params 请求参数
6
+ * @example
7
+ * const requestFn = (params: { url: string }) => fetch(params.url).then(res => res.json());
8
+ * const params = { url: "https://api.example.com/data" };
9
+ * libRetryRequest({
10
+ * promiseFn: requestFn,
11
+ * params,
12
+ * maxRetries: 5,
13
+ * retryDelay: 1000
14
+ * })
15
+ * .then(data => console.log(data))
16
+ * .catch(err => console.error(err));
17
+ */
18
+ export const libRetryRequest = ({ promiseFn, maxRetries = 3, retryDelay = 2000, params = undefined, }) => {
19
+ return new Promise((resolve, reject) => {
20
+ let count = 0;
21
+ const makeRequest = () => {
22
+ promiseFn(params)
23
+ .then((res) => {
24
+ resolve(res);
25
+ })
26
+ .catch((err) => {
27
+ count++;
28
+ if (count >= maxRetries) {
29
+ reject(err);
30
+ return;
31
+ }
32
+ setTimeout(makeRequest, retryDelay);
33
+ });
34
+ };
35
+ makeRequest();
36
+ });
37
+ };
@@ -0,0 +1,8 @@
1
+ /** @description 百分比概率结果
2
+ * @param probability 触发概率,百分比,0-100
3
+ * @example
4
+ * libProbabilityResult(50); // 50% 概率为 true
5
+ * libProbabilityResult(80); // 80% 概率为 true
6
+ * libProbabilityResult(100); // 100% 概率为 true
7
+ */
8
+ export declare const libProbabilityResult: (probability: number) => boolean;
@@ -0,0 +1,8 @@
1
+ /** @description 百分比概率结果
2
+ * @param probability 触发概率,百分比,0-100
3
+ * @example
4
+ * libProbabilityResult(50); // 50% 概率为 true
5
+ * libProbabilityResult(80); // 80% 概率为 true
6
+ * libProbabilityResult(100); // 100% 概率为 true
7
+ */
8
+ export const libProbabilityResult = (probability) => Math.random() * 100 < probability;
@@ -0,0 +1,10 @@
1
+ /** @description 随机数
2
+ * @param min 最小值
3
+ * @param max 最大值
4
+ * @param num 保留小数位数
5
+ * @example
6
+ * libRandom(1, 10); // 1 到 10 之间的随机整数
7
+ * libRandom(1, 10, 2); // 1 到 10 之间保留两位小数的随机数
8
+ * libRandom(5, 5, 3); // 返回 5.000
9
+ */
10
+ export declare const libRandom: (min: number, max: number, num?: number) => number;
@@ -0,0 +1,12 @@
1
+ /** @description 随机数
2
+ * @param min 最小值
3
+ * @param max 最大值
4
+ * @param num 保留小数位数
5
+ * @example
6
+ * libRandom(1, 10); // 1 到 10 之间的随机整数
7
+ * libRandom(1, 10, 2); // 1 到 10 之间保留两位小数的随机数
8
+ * libRandom(5, 5, 3); // 返回 5.000
9
+ */
10
+ export const libRandom = (min, max, num = 0) => {
11
+ return parseFloat((Math.random() * (max - min) + min).toFixed(num));
12
+ };
@@ -0,0 +1,7 @@
1
+ /** @description 随机 RGBA 颜色
2
+ * @param alpha 透明度
3
+ * @example
4
+ * libRandomColor(); // 生成随机的 RGBA 颜色,默认透明度 1
5
+ * libRandomColor(0.5); // 生成随机的 RGBA 颜色,透明度为 0.5
6
+ */
7
+ export declare const libRandomColor: (alpha?: number) => string;
@@ -0,0 +1,12 @@
1
+ /** @description 随机 RGBA 颜色
2
+ * @param alpha 透明度
3
+ * @example
4
+ * libRandomColor(); // 生成随机的 RGBA 颜色,默认透明度 1
5
+ * libRandomColor(0.5); // 生成随机的 RGBA 颜色,透明度为 0.5
6
+ */
7
+ export const libRandomColor = (alpha = 1) => {
8
+ const r = Math.floor(Math.random() * 256);
9
+ const g = Math.floor(Math.random() * 256);
10
+ const b = Math.floor(Math.random() * 256);
11
+ return `rgba(${r}, ${g}, ${b}, ${alpha})`;
12
+ };
@@ -0,0 +1,9 @@
1
+ /** @description 随机生成n个指定范围的随机数数组
2
+ * @param min 最小值
3
+ * @param max 最大值
4
+ * @param count 数组长度
5
+ * @example
6
+ * libUniqueRandomNumbers(1, 10, 5); // 从 1 到 10 中随机生成 5 个唯一数字
7
+ * libUniqueRandomNumbers(1, 100, 10); // 从 1 到 100 中随机生成 10 个唯一数字
8
+ */
9
+ export declare const libUniqueRandomNumbers: (min: number, max: number, count: number) => number[];
@@ -0,0 +1,16 @@
1
+ /** @description 随机生成n个指定范围的随机数数组
2
+ * @param min 最小值
3
+ * @param max 最大值
4
+ * @param count 数组长度
5
+ * @example
6
+ * libUniqueRandomNumbers(1, 10, 5); // 从 1 到 10 中随机生成 5 个唯一数字
7
+ * libUniqueRandomNumbers(1, 100, 10); // 从 1 到 100 中随机生成 10 个唯一数字
8
+ */
9
+ export const libUniqueRandomNumbers = (min, max, count) => {
10
+ const numbers = Array.from({ length: max - min + 1 }, (_, i) => i + min);
11
+ for (let i = numbers.length - 1; i > 0; i--) {
12
+ const j = Math.floor(Math.random() * (i + 1));
13
+ [numbers[i], numbers[j]] = [numbers[j], numbers[i]];
14
+ }
15
+ return numbers.slice(0, count);
16
+ };
@@ -0,0 +1,8 @@
1
+ import dayjs from "dayjs";
2
+ /**
3
+ * @description 传入时间戳与当前时间判断是否为同一天或同一周
4
+ * @param timestamp 毫秒时间戳
5
+ * @param unit 判断单位
6
+ * @returns 0-同一单位时间 1-新单位时间 -1时间戳大于当前时间
7
+ */
8
+ export declare const libSameTimeCheck: (timestamp: number, unit: dayjs.OpUnitType) => 0 | 1 | -1;
@@ -0,0 +1,20 @@
1
+ import dayjs from "dayjs";
2
+ /**
3
+ * @description 传入时间戳与当前时间判断是否为同一天或同一周
4
+ * @param timestamp 毫秒时间戳
5
+ * @param unit 判断单位
6
+ * @returns 0-同一单位时间 1-新单位时间 -1时间戳大于当前时间
7
+ */
8
+ export const libSameTimeCheck = (timestamp, unit) => {
9
+ const inputTime = dayjs(timestamp).startOf(unit);
10
+ const currentTime = dayjs().startOf(unit);
11
+ if (inputTime.isSame(currentTime)) {
12
+ return 0;
13
+ }
14
+ else if (inputTime.isBefore(currentTime)) {
15
+ return 1;
16
+ }
17
+ else {
18
+ return -1;
19
+ }
20
+ };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @description 将秒数格式化为中文时间描述,支持扩展到年和月。
3
+ * @param seconds 秒数
4
+ * @returns 格式化后的中文时间
5
+ * @example
6
+ * libSecondsFormatterChinese(100000); // "1天3小时46分40秒"
7
+ * libSecondsFormatterChinese(31536000); // "1年"
8
+ * libSecondsFormatterChinese(3600); // "1小时"
9
+ * libSecondsFormatterChinese(90); // "1分30秒"
10
+ */
11
+ export declare const libSecondsFormatterChinese: (seconds: number) => string;
@@ -0,0 +1,42 @@
1
+ import dayjs from "dayjs";
2
+ import duration from "dayjs/plugin/duration";
3
+ dayjs.extend(duration);
4
+ /**
5
+ * @description 将秒数格式化为中文时间描述,支持扩展到年和月。
6
+ * @param seconds 秒数
7
+ * @returns 格式化后的中文时间
8
+ * @example
9
+ * libSecondsFormatterChinese(100000); // "1天3小时46分40秒"
10
+ * libSecondsFormatterChinese(31536000); // "1年"
11
+ * libSecondsFormatterChinese(3600); // "1小时"
12
+ * libSecondsFormatterChinese(90); // "1分30秒"
13
+ */
14
+ export const libSecondsFormatterChinese = (seconds) => {
15
+ const duration = dayjs.duration(seconds, "seconds");
16
+ const years = Math.floor(duration.asYears());
17
+ const months = Math.floor(duration.asMonths() % 12);
18
+ const days = Math.floor(duration.asDays() % 30);
19
+ const hours = duration.hours();
20
+ const minutes = duration.minutes();
21
+ const remainingSeconds = duration.seconds();
22
+ const timeParts = [];
23
+ if (years > 0) {
24
+ timeParts.push(`${years}年`);
25
+ }
26
+ if (months > 0) {
27
+ timeParts.push(`${months}月`);
28
+ }
29
+ if (days > 0) {
30
+ timeParts.push(`${days}天`);
31
+ }
32
+ if (hours > 0) {
33
+ timeParts.push(`${hours}小时`);
34
+ }
35
+ if (minutes > 0) {
36
+ timeParts.push(`${minutes}分`);
37
+ }
38
+ if (timeParts.length === 0 || remainingSeconds > 0) {
39
+ timeParts.push(`${remainingSeconds}秒`);
40
+ }
41
+ return timeParts.join("");
42
+ };
@@ -0,0 +1,9 @@
1
+ /** @description 时间差计算
2
+ * @param timestamp 毫秒时间戳
3
+ * @example
4
+ * libTimeAgotamp(Date.now() - 3600000); // "1 小时前"
5
+ * libTimeAgotamp(Date.now() - 86400000); // "1 天前"
6
+ * libTimeAgotamp(Date.now() - 31536000000); // "1 年前"
7
+ * libTimeAgotamp(Date.now() - 10000); // "刚刚"
8
+ */
9
+ export declare const libTimeAgo: (timestamp: number) => string;
@@ -0,0 +1,27 @@
1
+ /** @description 时间差计算
2
+ * @param timestamp 毫秒时间戳
3
+ * @example
4
+ * libTimeAgotamp(Date.now() - 3600000); // "1 小时前"
5
+ * libTimeAgotamp(Date.now() - 86400000); // "1 天前"
6
+ * libTimeAgotamp(Date.now() - 31536000000); // "1 年前"
7
+ * libTimeAgotamp(Date.now() - 10000); // "刚刚"
8
+ */
9
+ export const libTimeAgo = (timestamp) => {
10
+ const timeUnits = [
11
+ { unit: "年", milliseconds: 365 * 24 * 60 * 60 * 1000 },
12
+ { unit: "月", milliseconds: 30 * 24 * 60 * 60 * 1000 },
13
+ { unit: "周", milliseconds: 7 * 24 * 60 * 60 * 1000 },
14
+ { unit: "天", milliseconds: 24 * 60 * 60 * 1000 },
15
+ { unit: "小时", milliseconds: 60 * 60 * 1000 },
16
+ { unit: "分钟", milliseconds: 60 * 1000 },
17
+ ];
18
+ const currentTime = Date.now();
19
+ const timeDifference = currentTime - timestamp;
20
+ for (const { unit, milliseconds } of timeUnits) {
21
+ if (timeDifference >= milliseconds) {
22
+ const count = Math.floor(timeDifference / milliseconds);
23
+ return `${count} ${unit}前`;
24
+ }
25
+ }
26
+ return "刚刚";
27
+ };
@@ -0,0 +1,17 @@
1
+ export interface LibTimeGreetingParams {
2
+ midnight?: string;
3
+ morning?: string;
4
+ forenoon?: string;
5
+ noon?: string;
6
+ afternoon?: string;
7
+ evening?: string;
8
+ }
9
+ /**
10
+ * @description 根据当前时间返回问候语。
11
+ * @param greet 自定义问候语对象。
12
+ * @example
13
+ * libTimeGreeting(); // 根据当前时间返回默认问候语
14
+ * libTimeGreeting({ morning: "早安" }); // 自定义早上问候语
15
+ * libTimeGreeting({ afternoon: "午后好" }); // 自定义下午问候语
16
+ */
17
+ export declare const libTimeGreeting: (greet?: LibTimeGreetingParams) => string;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @description 根据当前时间返回问候语。
3
+ * @param greet 自定义问候语对象。
4
+ * @example
5
+ * libTimeGreeting(); // 根据当前时间返回默认问候语
6
+ * libTimeGreeting({ morning: "早安" }); // 自定义早上问候语
7
+ * libTimeGreeting({ afternoon: "午后好" }); // 自定义下午问候语
8
+ */
9
+ export const libTimeGreeting = (greet = {}) => {
10
+ const { midnight = "午夜好", morning = "早上好", forenoon = "上午好", noon = "中午好", afternoon = "下午好", evening = "晚上好", } = greet;
11
+ const now = new Date().getHours();
12
+ return now < 4
13
+ ? midnight
14
+ : now < 10
15
+ ? morning
16
+ : now < 12
17
+ ? forenoon
18
+ : now < 14
19
+ ? noon
20
+ : now < 18
21
+ ? afternoon
22
+ : evening;
23
+ };