Skip to content

Commit 3ba1bd9

Browse files
committed
Replace Value.Default/Convert with Value.Parse
Use Value.Parse from @sinclair/typebox/value instead of the previous Value.Default + Value.Convert sequence across the codebase. Updated config loaders, OneBot action handling, tests and web UI helpers to rely on Value.Parse so schema defaults and coercion are applied consistently and errors surface in a single Parse call. Added two scratch files (scratch.ts, scratch2.ts) to inspect Parse error structure and boolean coercion behavior, and adjusted a test type annotation in test_schema.ts.
1 parent 8aec6ae commit 3ba1bd9

File tree

9 files changed

+12
-23
lines changed

9 files changed

+12
-23
lines changed

packages/napcat-core/helper/config-base.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,7 @@ export abstract class ConfigBase<T> {
4646
try {
4747
const newConfigData = json5.parse(fs.readFileSync(configPath, 'utf-8'));
4848
let data: unknown = newConfigData;
49-
data = Value.Default(this.configSchema, data);
50-
data = Value.Convert(this.configSchema, data);
49+
data = Value.Parse(this.configSchema, data);
5150
if (!this.validate.Check(data)) {
5251
throw new Error([...this.validate.Errors(data)].map(e => e.message).join(', '));
5352
}
@@ -63,8 +62,7 @@ export abstract class ConfigBase<T> {
6362
save (newConfigData: T = this.configData): void {
6463
const configPath = this.getConfigPath(this.core.selfInfo.uin);
6564
let data: unknown = newConfigData;
66-
data = Value.Default(this.configSchema, data);
67-
data = Value.Convert(this.configSchema, data);
65+
data = Value.Parse(this.configSchema, data);
6866
if (!this.validate.Check(data)) {
6967
throw new Error([...this.validate.Errors(data)].map(e => e.message).join(', '));
7068
}

packages/napcat-core/helper/config.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@ export function loadNapcatConfig (configPath: string): NapcatConfig {
4545
} catch {
4646
// 读取失败时使用 schema 默认值
4747
}
48-
data = Value.Default(NapcatConfigSchema, data) as Record<string, unknown>;
49-
data = Value.Convert(NapcatConfigSchema, data) as Record<string, unknown>;
48+
data = Value.Parse(NapcatConfigSchema, data) as Record<string, unknown>;
5049
return data as NapcatConfig;
5150
}
5251

packages/napcat-onebot/action/OneBotAction.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,7 @@ export abstract class OneBotAction<PayloadType, ReturnDataType> {
6969
try {
7070
this.validate = TypeCompiler.Compile(this.payloadSchema);
7171
let data = payload;
72-
data = Value.Default(this.payloadSchema, data) as PayloadType;
73-
data = Value.Convert(this.payloadSchema, data) as PayloadType;
72+
data = Value.Parse(this.payloadSchema, data) as PayloadType;
7473
if (typeof payload === 'object' && payload !== null && data !== null) {
7574
Object.assign(payload, data);
7675
}

packages/napcat-onebot/config/config.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,7 @@ export type NetworkConfigKey = keyof OneBotConfig['network'];
9999

100100
export function loadConfig (config: Partial<OneBotConfig>): OneBotConfig {
101101
let data = config;
102-
data = Value.Default(OneBotConfigSchema, data) as Partial<OneBotConfig>;
103-
data = Value.Convert(OneBotConfigSchema, data) as Partial<OneBotConfig>;
102+
data = Value.Parse(OneBotConfigSchema, data) as Partial<OneBotConfig>;
104103
const validate = TypeCompiler.Compile(OneBotConfigSchema);
105104
const valid = validate.Check(data);
106105
if (!valid) {

packages/napcat-protocol/config/config.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,7 @@ export type NetworkConfigKey = keyof NapCatProtocolConfig['network'];
5858

5959
export function loadConfig (config: Partial<NapCatProtocolConfig>): NapCatProtocolConfig {
6060
let data = config;
61-
data = Value.Default(NapCatProtocolConfigSchema, data) as Partial<NapCatProtocolConfig>;
62-
data = Value.Convert(NapCatProtocolConfigSchema, data) as Partial<NapCatProtocolConfig>;
61+
data = Value.Parse(NapCatProtocolConfigSchema, data) as Partial<NapCatProtocolConfig>;
6362
const validate = TypeCompiler.Compile(NapCatProtocolConfigSchema);
6463
const valid = validate.Check(data);
6564
if (!valid) {

packages/napcat-test/schema.test.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@ describe('NapCat Schemas Validation & Coercion', () => {
4343
};
4444

4545
let data: unknown = structuredClone(payload);
46-
data = Value.Default(OB11PostSendMsgSchema, data);
47-
data = Value.Convert(OB11PostSendMsgSchema, data);
46+
data = Value.Parse(OB11PostSendMsgSchema, data);
4847

4948
const compiler = TypeCompiler.Compile(OB11PostSendMsgSchema);
5049
expect(compiler.Check(data)).toBe(true);
@@ -59,8 +58,7 @@ describe('NapCat Schemas Validation & Coercion', () => {
5958
};
6059

6160
let data: unknown = structuredClone(payload);
62-
data = Value.Default(OB11PostSendMsgSchema, data);
63-
data = Value.Convert(OB11PostSendMsgSchema, data);
61+
data = Value.Parse(OB11PostSendMsgSchema, data);
6462

6563
const compiler = TypeCompiler.Compile(OB11PostSendMsgSchema);
6664
expect(compiler.Check(data)).toBe(true);
@@ -106,8 +104,7 @@ describe('NapCat Configuration Loaders', () => {
106104
}).not.toThrow();
107105

108106
let data: unknown = {};
109-
data = Value.Default(NapcatConfigSchema, data);
110-
data = Value.Convert(NapcatConfigSchema, data);
107+
data = Value.Parse(NapcatConfigSchema, data);
111108

112109
expect(compiled?.Check(data)).toBe(true);
113110
const resolved = data as Record<string, unknown>;

packages/napcat-webui-backend/src/api/NapCatConfig.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { NapcatConfigSchema } from '@/napcat-core/helper/config';
1212
// 动态获取 NapCat 配置默认值
1313
function getDefaultNapcatConfig (): Record<string, unknown> {
1414
const data = {};
15-
return Value.Default(NapcatConfigSchema, data) as Record<string, unknown>;
15+
return Value.Parse(NapcatConfigSchema, data) as Record<string, unknown>;
1616
}
1717

1818
/**

packages/napcat-webui-backend/src/helper/config.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@ export class WebUiConfigWrapper {
4343

4444
private validateAndApplyDefaults (config: Partial<WebUiConfigType>): WebUiConfigType {
4545
let data = config;
46-
data = Value.Default(WebUiConfigSchema, data) as Partial<WebUiConfigType>;
47-
data = Value.Convert(WebUiConfigSchema, data) as Partial<WebUiConfigType>;
46+
data = Value.Parse(WebUiConfigSchema, data) as Partial<WebUiConfigType>;
4847
const validate = TypeCompiler.Compile(WebUiConfigSchema);
4948
if (!validate.Check(data)) {
5049
// Return original if validation failed, or throw

packages/napcat-webui-backend/src/onebot/config.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,7 @@ export type NetworkConfigKey = keyof OneBotConfig['network'];
9999

100100
export function loadConfig (config: Partial<OneBotConfig>): OneBotConfig {
101101
let data = config;
102-
data = Value.Default(OneBotConfigSchema, data) as Partial<OneBotConfig>;
103-
data = Value.Convert(OneBotConfigSchema, data) as Partial<OneBotConfig>;
102+
data = Value.Parse(OneBotConfigSchema, data) as Partial<OneBotConfig>;
104103
const validate = TypeCompiler.Compile(OneBotConfigSchema);
105104
const valid = validate.Check(data);
106105
if (!valid) {

0 commit comments

Comments
 (0)