Skip to content

Commit ec02b2e

Browse files
committed
feat: 完善util的注释
1 parent 0dea2aa commit ec02b2e

File tree

7 files changed

+74
-54
lines changed

7 files changed

+74
-54
lines changed

src/utils/code-util.js

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
/**
2+
* 获取函数的方法体代码。
23
*
3-
* 获取函数的方法体代码
4-
*
5-
* @param fn
6-
* @return {string}
4+
* @param {Function} fn - 要提取方法体的函数。
5+
* @return {string} - 返回函数的方法体代码。
6+
* @throws {TypeError} - 如果传入的参数不是函数,则抛出 TypeError。
77
*/
88
function getFunctionBody(fn) {
99
if (typeof fn !== 'function') {
@@ -22,10 +22,11 @@ function getFunctionBody(fn) {
2222
}
2323

2424
/**
25-
* 获取函数的参数名
25+
* 获取函数的参数名
2626
*
27-
* @param fn
28-
* @return {string[]|*[]}
27+
* @param {Function} fn - 要提取参数名的函数。
28+
* @return {string[]} - 返回函数的参数名数组。如果没有参数,则返回空数组。
29+
* @throws {TypeError} - 如果传入的参数不是函数,则抛出 TypeError。
2930
*/
3031
function getParameterNames(fn) {
3132
if (typeof fn !== 'function') {
@@ -53,10 +54,10 @@ function getParameterNames(fn) {
5354
}
5455

5556
/**
56-
* 生成一个随机的函数名
57+
* 生成一个随机的函数名
5758
*
58-
* @param length
59-
* @return {string}
59+
* @param {number} [length=8] - 函数名的长度,默认为 8。
60+
* @return {string} - 返回生成的随机函数名。
6061
*/
6162
function generateRandomFunctionName(length = 8) {
6263
const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
@@ -71,4 +72,4 @@ module.exports = {
7172
getFunctionBody,
7273
getParameterNames,
7374
generateRandomFunctionName,
74-
}
75+
};

src/utils/color-util.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
/**
2+
* 生成一个随机的 RGB 颜色值。
3+
*
4+
* @return {string} - 返回一个表示 RGB 颜色的字符串,格式为 `rgb(r, g, b)`,其中 `r`、`g`、`b` 分别是 0 到 255 之间的随机整数。
5+
*/
16
function getRandomRGBColor() {
27
const r = Math.floor(Math.random() * 256); // 红色分量 (0-255)
38
const g = Math.floor(Math.random() * 256); // 绿色分量 (0-255)
@@ -7,4 +12,4 @@ function getRandomRGBColor() {
712

813
module.exports = {
914
getRandomRGBColor
10-
}
15+
};

src/utils/id-util.js

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,19 @@
11
/**
2-
* 生成一个随机id,类似UUID的格式
2+
* 生成一个随机 ID,格式类似于 UUID。
33
*
4-
* @returns {string}
4+
* @returns {string} - 返回一个随机生成的 ID,格式为 "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx"。
55
*/
66
function randomId() {
7-
return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
8-
const r = Math.random() * 16 | 0,
9-
v = c === 'x' ? r : (r & 0x3 | 0x8);
7+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
8+
// 生成一个 0 到 15 的随机整数
9+
const r = Math.random() * 16 | 0;
10+
// 如果字符是 'x',则直接使用随机数;如果是 'y',则根据规则生成特定值
11+
const v = c === 'x' ? r : (r & 0x3 | 0x8);
12+
// 将结果转换为十六进制字符串
1013
return v.toString(16);
1114
});
1215
}
1316

1417
module.exports = {
1518
randomId
16-
}
17-
18-
19-
20-
21-
19+
};

src/utils/log-util.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
11
/**
2+
* 生成一个格式化字符串数组,用于 `console.log` 的多样式输出。
23
*
4+
* 该函数接受一个包含消息和样式的数组,生成一个格式化字符串,用于将消息和样式一一对应。
5+
* 例如,输入 `["Hello", "color: red", "World", "color: blue"]`,输出 `"%c%s%c%s"`。
36
*
4-
*
5-
* @param messageAndStyleArray
6-
* @return {string}
7+
* @param {Array<string>} messageAndStyleArray - 包含消息和样式的数组。消息和样式交替出现,例如 `["消息1", "样式1", "消息2", "样式2"]`。
8+
* @return {string} - 返回一个格式化字符串,例如 `"%c%s%c%s"`,用于 `console.log` 的多样式输出。
79
*/
810
function genFormatArray(messageAndStyleArray) {
911
const formatArray = [];
12+
// 遍历数组,每两个元素(消息和样式)生成一个 "%c%s"
1013
for (let i = 0, end = messageAndStyleArray.length / 2; i < end; i++) {
1114
formatArray.push("%c%s");
1215
}
16+
// 将数组拼接成一个字符串
1317
return formatArray.join("");
1418
}
1519

1620
module.exports = {
1721
genFormatArray
18-
}
22+
};

src/utils/scope-util.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
/**
2+
* 获取 `unsafeWindow` 对象,用于在油猴脚本中访问或修改全局 `window` 对象。
23
*
3-
* 在油猴脚本内部的沙箱机制,不让修改window上的变量,要修改的话需要通过 unsafeWindow,需要修改的地方全局调用此方法获取,这样后面方便知道都有哪些地方用到了unsafeWindow
4+
* 油猴脚本默认运行在一个沙箱环境中,无法直接修改全局 `window` 对象。
5+
* 通过 `unsafeWindow` 可以绕过沙箱机制,直接访问或修改全局 `window` 对象。
6+
* 使用此方法封装 `unsafeWindow` 的调用,便于后续追踪哪些地方使用了 `unsafeWindow`。
47
*
5-
* https://wiki.greasespot.net/UnsafeWindow
6-
*
7-
* @returns {*}
8+
* @see https://wiki.greasespot.net/UnsafeWindow - 油猴脚本中 `unsafeWindow` 的官方文档。
9+
* @returns {Window} - 返回全局的 `unsafeWindow` 对象。
810
*/
911
function getUnsafeWindow() {
1012
return unsafeWindow;
1113
}
1214

1315
module.exports = {
1416
getUnsafeWindow,
15-
}
17+
};

src/utils/string-util.js

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
/**
2+
* 将字符串重复指定次数并拼接成一个新字符串。
23
*
3-
* @param s
4-
* @param times
5-
* @return {string}
4+
* @param {string} s - 需要重复的字符串。
5+
* @param {number} times - 重复的次数。
6+
* @return {string} - 返回重复拼接后的字符串。
67
*/
78
function repeat(s, times) {
89
const msgs = [];
@@ -13,10 +14,11 @@ function repeat(s, times) {
1314
}
1415

1516
/**
17+
* 将字符串填充到指定长度。如果字符串长度不足,则在末尾填充空格。
1618
*
17-
* @param s
18-
* @param length
19-
* @return {*|string}
19+
* @param {string} s - 需要填充的字符串。
20+
* @param {number} length - 目标长度。
21+
* @return {string} - 返回填充后的字符串。如果字符串长度已经大于或等于目标长度,则返回原字符串。
2022
*/
2123
function fillToLength(s, length) {
2224
if (s.length >= length) {
@@ -29,4 +31,4 @@ function fillToLength(s, length) {
2931
module.exports = {
3032
repeat,
3133
fillToLength,
32-
}
34+
};

src/utils/url-util.js

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,64 @@
11
/**
2+
* 获取 URL 的基础路径(包括协议、域名和路径部分,但不包括文件名)。
23
*
3-
* @param urlString {String} "https://example.com/path/to/page.html"
4-
* @return
4+
* @param {string} urlString - 完整的 URL 字符串,例如 "https://example.com/path/to/page.html"
5+
* @return {string} - 返回 URL 的基础路径,例如 "https://example.com/path/to/"。
56
*/
67
function urlBasePath(urlString) {
78
const url = new URL(urlString);
9+
// 获取基础路径(包括协议、域名和路径部分,但不包括文件名)
810
const basePath = `${url.origin}${url.pathname.substring(0, url.pathname.lastIndexOf("/") + 1)}`;
911
// console.log(basePath); // 输出: https://example.com/path/to/
1012
return basePath;
1113
}
1214

1315
/**
16+
* 将 script 的 src 格式化为完整的 URL。
1417
*
15-
* 把script的src格式化,统一为url的形式
18+
* 支持以下格式的 script src:
19+
* 1. 完整的 URL(以 "http://" 或 "https://" 开头)。
20+
* 2. CDN URL(以 "//" 开头)。
21+
* 3. 相对路径(以 "./" 开头)。
22+
* 4. 省略域名的路径(以 "/" 开头)。
23+
* 5. 其他相对路径。
1624
*
17-
* @param scriptSrc {String}
18-
* @return
25+
* @param {string} scriptSrc - script 的 src 属性值。
26+
* @return {string} - 返回格式化后的完整 URL。
1927
*/
2028
function formatScriptSrcToUrl(scriptSrc) {
2129

22-
// 强制requestUrl是一个字符串
23-
// 比如可能会是一个TrustedScriptURL
30+
// 强制将 scriptSrc 转换为字符串(例如,处理 TrustedScriptURL 类型)
2431
scriptSrc = scriptSrc + "";
2532

26-
// 正常格式直接返回
33+
// 如果已经是完整的 URL,直接返回
2734
if (scriptSrc.startsWith("http://") || scriptSrc.startsWith("https://")) {
2835
return scriptSrc;
2936
}
3037

31-
// 兼容CDN URL
38+
// 处理 CDN URL(以 "//" 开头)
3239
// 示例:"//statics.moonshot.cn/kimi-chat/shared-K0TvIN461soURJCs7nh6uxcQiCM_.04bc3959.async.js"
3340
if (scriptSrc.startsWith("//")) {
3441
return "https:" + scriptSrc;
3542
}
3643

37-
// 相对路径: "./js/login/log-utils1.1.js"
44+
// 处理相对路径(以 "./" 开头)
45+
// 示例:"./js/login/log-utils1.1.js"
3846
if (scriptSrc.startsWith("./")) {
3947
return urlBasePath(window.location.href) + scriptSrc.substring(2, scriptSrc.length);
4048
}
4149

42-
// 兼容省略域名的情况
43-
// 数据样例:"/logos/2024/moon/december-r4/december.js"
50+
// 处理省略域名的路径(以 "/" 开头)
51+
// 示例:"/logos/2024/moon/december-r4/december.js"
4452
if (scriptSrc.startsWith("/")) {
4553
return window.location.origin + scriptSrc;
4654
}
4755

48-
// 相对路径
49-
// "static/js/chunk-19a101ae.45e69b5c.js"
56+
// 处理其他相对路径
57+
// 示例:"static/js/chunk-19a101ae.45e69b5c.js"
5058
return window.location.origin + "/" + scriptSrc;
5159
}
5260

5361
module.exports = {
5462
urlBasePath,
5563
formatScriptSrcToUrl,
56-
}
64+
};

0 commit comments

Comments
 (0)