Commit Graph

3 Commits

Author SHA1 Message Date
czlonkowski
fc8fb66900 fix: enable schema-based resourceLocator mode validation
Root cause analysis revealed validator was looking at wrong path for
modes data. n8n stores modes at top level of properties, not nested
in typeOptions.

Changes:
- config-validator.ts: Changed from prop.typeOptions?.resourceLocator?.modes
  to prop.modes (lines 273-310)
- property-extractor.ts: Added modes field to normalizeProperties to
  capture mode definitions from n8n nodes
- Updated all test cases to match real n8n schema structure with modes
  at property top level
- Rebuilt database with modes field

Results:
- 100% coverage: All 70 resourceLocator nodes now have modes defined
- Schema-based validation now ACTIVE (was being skipped before)
- False positive eliminated: Google Sheets "name" mode now validates
- Helpful error messages showing actual allowed modes from schema

Testing:
- All 33 unit tests pass
- Verified with n8n-mcp-tester: valid "name" mode passes, invalid modes
  fail with clear error listing allowed options [list, url, id, name]

Fixes #304 (Google Sheets false positive)
Related to #306 (validator improvements)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-11 19:29:21 +02:00
czlonkowski
f3164e202f feat: add TypeScript type safety with strategic any assertions (v2.17.5)
Added comprehensive TypeScript type definitions for n8n node parsing while
maintaining zero compilation errors. Uses pragmatic "70% benefit with 0%
breakage" approach with strategic `any` assertions.

## Type Definitions (src/types/node-types.ts)
- NodeClass union type replaces `any` in method signatures
- Type guards: isVersionedNodeInstance(), isVersionedNodeClass()
- Utility functions for safe node handling

## Parser Updates
- node-parser.ts: All methods use NodeClass (15+ methods)
- simple-parser.ts: Strongly typed method signatures
- property-extractor.ts: Typed extraction methods
- 30+ method signatures improved

## Strategic Pattern
- Strong types in public method signatures (caller type safety)
- Strategic `as any` assertions for internal union type access
- Pattern: const desc = description as any; // Access union properties

## Benefits
- Better IDE support and auto-complete
- Compile-time safety at call sites
- Type-based documentation
- Zero compilation errors
- Bug prevention (would have caught v2.17.4 baseDescription issue)

## Test Updates
- All test files updated with `as any` for mock objects
- Zero compilation errors maintained

## Known Limitations
- ~70% type coverage (signatures typed, internal logic uses assertions)
- Union types (INodeTypeBaseDescription vs INodeTypeDescription) not fully resolved
- Future work: Conditional types or overloads for 100% type safety

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-07 22:16:59 +02:00
czlonkowski
66f5d74e42 feat: implement node parser and property extractor with versioned node support 2025-06-12 18:45:20 +02:00