🧹 chore: Clean Up Config Fields (#12537)

* chore: remove unused `interface.endpointsMenu` config field

* chore: address review — restore JSDoc UI-only example, add Zod strip test

* chore: remove unused `interface.sidePanel` config field

* chore: restrict fileStrategy/fileStrategies schema to valid storage backends

* fix: use valid FileStorage value in AppService test

* chore: address review — version bump, exhaustiveness guard, JSDoc, configSchema test

* chore: remove debug logger.log from MessageIcon render path

* fix: rewrite MessageIcon render tests to use render counting instead of logger spying

* chore: bump librechat-data-provider to 0.8.407

* chore: sync example YAML version to 1.3.7
This commit is contained in:
Danny Avila 2026-04-03 12:22:58 -04:00 committed by GitHub
parent b4d97bd888
commit ea28dbfa89
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
17 changed files with 211 additions and 190 deletions

View file

@ -4,8 +4,12 @@ import {
azureEndpointSchema,
endpointSchema,
configSchema,
interfaceSchema,
fileStorageSchema,
fileStrategiesSchema,
} from '../src/config';
import { tModelSpecPresetSchema, EModelEndpoint } from '../src/schemas';
import { FileSources } from '../src/types/files';
describe('paramDefinitionSchema', () => {
it('accepts a minimal definition with only key', () => {
@ -421,3 +425,80 @@ describe('azureEndpointSchema', () => {
expect(result.success).toBe(false);
});
});
describe('fileStorageSchema', () => {
const validStrategies = [
FileSources.local,
FileSources.firebase,
FileSources.s3,
FileSources.azure_blob,
];
const invalidStrategies = [
FileSources.openai,
FileSources.azure,
FileSources.vectordb,
FileSources.execute_code,
FileSources.mistral_ocr,
FileSources.azure_mistral_ocr,
FileSources.vertexai_mistral_ocr,
FileSources.text,
FileSources.document_parser,
];
for (const strategy of validStrategies) {
it(`accepts storage strategy "${strategy}"`, () => {
expect(fileStorageSchema.safeParse(strategy).success).toBe(true);
});
}
for (const strategy of invalidStrategies) {
it(`rejects processing strategy "${strategy}"`, () => {
expect(fileStorageSchema.safeParse(strategy).success).toBe(false);
});
}
});
describe('fileStrategiesSchema', () => {
it('accepts valid storage strategies for all sub-fields', () => {
const result = fileStrategiesSchema.safeParse({
default: FileSources.s3,
avatar: FileSources.local,
image: FileSources.firebase,
document: FileSources.azure_blob,
});
expect(result.success).toBe(true);
});
it('rejects processing strategies in sub-fields', () => {
const result = fileStrategiesSchema.safeParse({
default: FileSources.vectordb,
});
expect(result.success).toBe(false);
});
});
describe('configSchema fileStrategy', () => {
it('rejects a processing strategy as fileStrategy', () => {
const result = configSchema.safeParse({ version: '1.3.7', fileStrategy: FileSources.vectordb });
expect(result.success).toBe(false);
});
it('defaults fileStrategy to local when absent', () => {
const result = configSchema.safeParse({ version: '1.3.7' });
expect(result.success).toBe(true);
expect(result.data?.fileStrategy).toBe(FileSources.local);
});
});
describe('interfaceSchema', () => {
it('silently strips removed legacy fields', () => {
const result = interfaceSchema.parse({
endpointsMenu: true,
sidePanel: true,
modelSelect: false,
});
expect(result).not.toHaveProperty('endpointsMenu');
expect(result).not.toHaveProperty('sidePanel');
expect(result.modelSelect).toBe(false);
});
});