linshenkx/prompt-optimizer · warning · FavoriteValidationError
${favorite.functionMode} mode must specify optimizationMode
Error message
${favorite.functionMode} mode must specify optimizationMode What it means
addFavorite requires that favorites with functionMode 'basic' or 'context' also specify optimizationMode; otherwise it throws FavoriteValidationError with the mode interpolated into the message.
Source
Thrown at packages/core/src/services/favorite/manager.ts:277
}
async addFavorite(favorite: Omit<FavoritePrompt, 'id' | 'createdAt' | 'updatedAt' | 'useCount'>): Promise<string> {
await this.ensureInitialized();
// 验证输入
if (!favorite.content?.trim()) {
throw new FavoriteValidationError('Prompt content cannot be empty');
}
// 验证 functionMode 必填
if (!favorite.functionMode) {
throw new FavoriteValidationError('Function mode (functionMode) cannot be empty');
}
// 验证功能模式分类的完整性
if (favorite.functionMode === 'basic' || favorite.functionMode === 'context') {
if (!favorite.optimizationMode) {
throw new FavoriteValidationError(`${favorite.functionMode} mode must specify optimizationMode`);
}
}
if (favorite.functionMode === 'image') {
if (!favorite.imageSubMode) {
throw new FavoriteValidationError('Image mode must specify imageSubMode');
}
}
assertFavoriteMetadataHasNoInlineImages(favorite.metadata);
const favoriteData = {
title: favorite.title?.trim() || favorite.content.slice(0, 50) + (favorite.content.length > 50 ? '...' : ''),
content: favorite.content,
description: favorite.description,
category: favorite.category,
tags: favorite.tags || [],
functionMode: favorite.functionMode,View on GitHub (pinned to 3e677b1d9f)
Solutions
- Always pair basic/context modes with an optimizationMode value
- Validate the mode/optimizationMode combination in the form before submit
- Add a builder helper that enforces required fields per functionMode
Example fix
// before
await manager.addFavorite({ content, functionMode: 'basic' });
// after
await manager.addFavorite({ content, functionMode: 'basic', optimizationMode: 'standard' }); Defensive patterns
Strategy: validation
Validate before calling
function assertModeComplete(f: Partial<FavoritePrompt>) {
if ((f.functionMode === 'basic' || f.functionMode === 'context') && !f.optimizationMode)
throw new Error(`${f.functionMode} needs optimizationMode`);
} Type guard
const isModeComplete = (f: Partial<FavoritePrompt>): f is FavoritePrompt => f.functionMode !== 'basic' && f.functionMode !== 'context' ? true : !!f.optimizationMode;
Try / catch
try { await manager.addFavorite(fav); } catch (e) { if (e instanceof FavoriteValidationError && /optimizationMode/.test(e.message)) { openModeDialog(); return; } throw e; } Prevention
- Enforce mode/optimizationMode pairs in the form model
- Centralize favorite construction in one builder function
- Cover each functionMode in tests
When it happens
Trigger: addFavorite({ functionMode: 'basic' }) (or 'context') without optimizationMode.
Common situations: New call sites copying partial favorite objects; upgrade to a version that enforces mode completeness; form allows picking functionMode without optimizationMode.
Related errors
- Image mode must specify imageSubMode
- VALIDATION_ERROR
- Prompt content cannot be empty
- Function mode (functionMode) cannot be empty
- CONTEXT_ERROR_CODES.STORAGE_ERROR
AI-assisted analysis of linshenkx/prompt-optimizer@3e677b1d9f (2026-08-27).
Data as JSON: /api/errors/2efa172da854e099.
Report an issue: GitHub.