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

  1. Always pair basic/context modes with an optimizationMode value
  2. Validate the mode/optimizationMode combination in the form before submit
  3. 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

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


AI-assisted analysis of linshenkx/prompt-optimizer@3e677b1d9f (2026-08-27). Data as JSON: /api/errors/2efa172da854e099. Report an issue: GitHub.