31 lines
1015 B
TypeScript
31 lines
1015 B
TypeScript
import { isLongText } from './fileKind';
|
|
|
|
/** 不大的视频才直接放进列表播放 */
|
|
export const VIDEO_INLINE_MAX = 25 * 1024 * 1024;
|
|
|
|
const JSON_MAX_LINES = 14;
|
|
const JSON_MAX_CHARS = 1200;
|
|
const JSON_PARSE_MAX_CHARS = 100_000;
|
|
|
|
export interface TextView {
|
|
json: boolean;
|
|
/** 要显示的内容:JSON 已格式化 */
|
|
body: string;
|
|
/** 太长,列表里只显示前几行 */
|
|
long: boolean;
|
|
}
|
|
|
|
/** 文本与 JSON 的内联显示:能解析成对象或数组的当作 JSON 格式化,否则原样显示 */
|
|
export function textView(text: string): TextView {
|
|
const t = text.trim();
|
|
if ((t.startsWith('{') || t.startsWith('[')) && t.length <= JSON_PARSE_MAX_CHARS) {
|
|
try {
|
|
const body = JSON.stringify(JSON.parse(t) as unknown, null, 2);
|
|
return { json: true, body, long: body.split('\n').length > JSON_MAX_LINES || body.length > JSON_MAX_CHARS };
|
|
} catch {
|
|
/* 不是合法 JSON,按普通文本显示 */
|
|
}
|
|
}
|
|
return { json: false, body: text, long: isLongText(text) };
|
|
}
|