refactor: improve resourceLocator validation based on code review

Implemented code review suggestions (score 9.5/10):

1. Added mode value validation (lines 267-274):
   - Validates mode is 'list', 'id', or 'url'
   - Provides clear error for invalid mode values
   - Prevents runtime errors from unsupported modes

2. Added JSDoc documentation (lines 238-242):
   - Explains resourceLocator structure and usage
   - Documents common mistakes (string vs object)
   - Helps future maintainers understand context

3. Added 4 additional test cases:
   - Invalid mode value rejection
   - Mode "url" acceptance
   - Empty object detection
   - Extra properties handling

Test Results:
- 29 tests passing (was 25)
- 100% coverage of validation logic
- All edge cases covered

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
czlonkowski
2025-10-07 16:59:43 +02:00
parent e95ac7c335
commit 2c536a25fd
3 changed files with 111 additions and 4 deletions

View File

@@ -235,7 +235,11 @@ export class ConfigValidator {
fix: `Change ${key} to true or false`
});
} else if (prop.type === 'resourceLocator') {
// resourceLocator must be an object with mode and value properties
// resourceLocator validation: Used by AI model nodes (OpenAI, Anthropic, etc.)
// Must be an object with required properties:
// - mode: string ('list' | 'id' | 'url')
// - value: any (the actual model/resource identifier)
// Common mistake: passing string directly instead of object structure
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
const fixValue = typeof value === 'string' ? value : JSON.stringify(value);
errors.push({
@@ -260,6 +264,13 @@ export class ConfigValidator {
message: `resourceLocator '${key}.mode' must be a string, got ${typeof value.mode}`,
fix: `Set mode to "list" or "id"`
});
} else if (!['list', 'id', 'url'].includes(value.mode)) {
errors.push({
type: 'invalid_value',
property: `${key}.mode`,
message: `resourceLocator '${key}.mode' must be 'list', 'id', or 'url', got '${value.mode}'`,
fix: `Change mode to "list", "id", or "url"`
});
}
if (value.value === undefined) {