From bf073b544bbfc67f036560dccbc7a2314f5bf3f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Wed, 28 Jan 2026 16:01:43 +0800 Subject: [PATCH] Refactor schema ID handling and reduce parse depth Changed MAX_PARSE_DEPTH from 10 to 6 to limit nesting. Improved schema ID retrieval to only use $id if present, and added a utility to collect all $id values in a schema for better circular reference detection. Updated font file AaCute.woff. --- .../public/fonts/AaCute.woff | Bin 303956 -> 298512 bytes .../src/utils/typebox.ts | 38 ++++++++++++++++-- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/packages/napcat-webui-frontend/public/fonts/AaCute.woff b/packages/napcat-webui-frontend/public/fonts/AaCute.woff index 2ec3232af4cfccb26af508433727ea84534a06a4..73c06985bd28bc58391958ada1e70a3e608a38b5 100644 GIT binary patch delta 28914 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�Yw{?$VUl0gdjLQQ=LuH<}sY)fGMtga-u;4 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 diff --git a/packages/napcat-webui-frontend/src/utils/typebox.ts b/packages/napcat-webui-frontend/src/utils/typebox.ts index fd175ccc..92d1ae55 100644 --- a/packages/napcat-webui-frontend/src/utils/typebox.ts +++ b/packages/napcat-webui-frontend/src/utils/typebox.ts @@ -22,14 +22,44 @@ export const BaseResponseSchema = Type.Object({ }); // 最大解析深度,防止过深的嵌套 -const MAX_PARSE_DEPTH = 10; +const MAX_PARSE_DEPTH = 6; /** * 获取 schema 的唯一标识符用于循环引用检测 - * 优先使用 $id,否则使用对象引用 + * 优先使用 $id 字符串标识符 */ -function getSchemaId (schema: TSchema): string | TSchema { - return schema.$id || schema; +function getSchemaId (schema: TSchema): string | undefined { + // 优先使用 $id + if (schema.$id) { + return schema.$id; + } + return undefined; +} + +/** + * 收集 schema 中所有的 $id,用于预先检测可能的循环引用 + */ +function collectSchemaIds (schema: TSchema, ids: Set = new Set()): Set { + if (!schema) return ids; + if (schema.$id) { + ids.add(schema.$id); + } + if (schema.anyOf) { + (schema.anyOf as TSchema[]).forEach(s => collectSchemaIds(s, ids)); + } + if (schema.oneOf) { + (schema.oneOf as TSchema[]).forEach(s => collectSchemaIds(s, ids)); + } + if (schema.allOf) { + (schema.allOf as TSchema[]).forEach(s => collectSchemaIds(s, ids)); + } + if (schema.items) { + collectSchemaIds(schema.items as TSchema, ids); + } + if (schema.properties) { + Object.values(schema.properties).forEach(s => collectSchemaIds(s as TSchema, ids)); + } + return ids; } export function parseTypeBox (