linshenkx/prompt-optimizer · warning · FavoriteValidationError
Function mode (functionMode) cannot be empty
Error message
Function mode (functionMode) cannot be empty
What it means
addFavorite rejects with FavoriteValidationError when favorite.functionMode is falsy. Every favorite must declare its function mode (e.g. basic/context/image) so downstream behavior is deterministic.
Solutions
- Set functionMode explicitly on every favorite you create
- Default it in a mapping layer when upgrading old call sites
- Catch FavoriteValidationError to find remaining call sites during migration
Example fix
// before
await manager.addFavorite({ content, title });
// after
await manager.addFavorite({ content, title, functionMode: 'basic', optimizationMode: 'standard' }); Defensive patterns
Strategy: validation
Validate before calling
if (!fav.functionMode) fav = { ...fav, functionMode: 'basic', optimizationMode: 'standard' }; Type guard
const hasFunctionMode = (f: Partial<FavoritePrompt>): f is FavoritePrompt & { functionMode: string } => !!f.functionMode; Try / catch
try { await manager.addFavorite(fav); } catch (e) { if (e instanceof FavoriteValidationError && /functionMode/.test(e.message)) { fav.functionMode = 'basic'; return manager.addFavorite(fav as any); } throw e; } Prevention
- Always construct favorites via a typed builder
- Add a compile-time Required check on functionMode at call sites
- Grep old call sites when upgrading the library
When it happens
Trigger: await manager.addFavorite({ content: 'x' }) with no functionMode — introduced when the functionMode field became mandatory.
Common situations: Code written against an older API where functionMode was optional; deserialized records missing the field; form not updated after upgrading the library.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- At least one message is required
- CONFIG_INVALID
- mode must specify optimizationMode
- Image mode must specify imageSubMode
- testCaseId must not be empty.
AI-assisted analysis of linshenkx/prompt-optimizer@3e677b1d9f (2026-08-27).
Data as JSON: /api/errors/d53c305a116edad2.
Report an issue: GitHub.
Appendix: source
Thrown at packages/core/src/services/favorite/manager.ts:271
// ✅ 标记已初始化
await this.storageProvider.setItem('favorite_categories_initialized', 'true');
}
} catch (error) {
console.warn('[FavoriteManager] Failed to ensure default categories:', error);
}
}
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 = {View on GitHub (pinned to 3e677b1d9f)