-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathformat-core.js
More file actions
113 lines (100 loc) · 3.39 KB
/
Copy pathformat-core.js
File metadata and controls
113 lines (100 loc) · 3.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
(function (root) {
function numeric(value) {
if (value === null || value === undefined || value === "") return NaN;
const number = Number(value);
return Number.isFinite(number) ? number : NaN;
}
function canonicalPlan(value) {
const plan = String(value || "").trim().toLowerCase();
if (plan === "chatgptplus") return "plus";
if (["plus", "pro", "team", "enterprise", "free"].includes(plan)) return plan;
return plan;
}
function escapeHtml(value) {
return String(value ?? "").replace(/[&<>"']/g, (char) => ({
"&": "&",
"<": "<",
">": ">",
'"': """,
"'": "'",
})[char]);
}
function shortId(value) {
if (!value) return "未识别";
return value.length <= 16 ? value : `${value.slice(0, 8)}...${value.slice(-6)}`;
}
function formatTime(value) {
if (!value) return "无记录";
const date = new Date(value);
return Number.isNaN(date.getTime()) ? value : date.toLocaleString();
}
function formatRefreshTime(value) {
if (!value) return "未刷新";
const date = new Date(value);
if (Number.isNaN(date.getTime())) return value;
return date.toLocaleString([], { month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit" });
}
function formatResetTime(value) {
if (!value) return "重置未知";
const number = numeric(value);
const date = Number.isFinite(number) && number > 1000000000 ? new Date(number * 1000) : new Date(value);
if (Number.isNaN(date.getTime())) return "重置未知";
return `重置 ${date.toLocaleString([], { month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit" })}`;
}
function planLabel(plan) {
const value = String(plan || "未知").toLowerCase();
if (value === "plus") return "Plus";
if (value === "pro") return "Pro";
if (value === "team") return "Team";
if (value === "enterprise") return "Enterprise";
if (value === "free") return "Free";
return plan || "未知";
}
function planClass(plan) {
const value = canonicalPlan(plan);
return value ? `plan-${value}` : "plan-unknown";
}
function formatTokenTime(date) {
if (!date || Number.isNaN(date.getTime())) return "未知";
return date.toLocaleString([], { month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit" });
}
function formatBytes(value) {
const size = Number(value) || 0;
if (size < 1024) return `${size} B`;
if (size < 1024 * 1024) return `${Math.round(size / 1024)} KB`;
return `${(size / 1024 / 1024).toFixed(1)} MB`;
}
function errorSeverity(label) {
const text = String(label || "").toLowerCase();
if (!text) return "neutral";
if (
text.includes("封") ||
text.includes("停用") ||
text.includes("账号已被禁用") ||
text.includes("账号不可用") ||
text.includes("banned") ||
text.includes("suspended") ||
text.includes("deactivated") ||
text.includes("disabled account")
) {
return "bad";
}
return "warn";
}
const api = Object.freeze({
escapeHtml,
shortId,
formatTime,
formatRefreshTime,
formatResetTime,
planLabel,
planClass,
formatTokenTime,
formatBytes,
errorSeverity,
});
root.CodexFormatCore = api;
if (typeof module !== "undefined" && module.exports) {
module.exports = api;
}
})(typeof globalThis !== "undefined" ? globalThis : window);