mirror of
https://github.com/voson-wang/toon.git
synced 2026-01-29 15:24:10 +08:00
* fix: support quoted keys with array syntax
Fixes parsing of quoted keys followed by array syntax like:
"x-codeSamples"[1]{lang,label,source}:
Previously, parseArrayHeaderLine would skip any line starting with
a quoted key. This caused large OpenAPI specs (like Hetzner Cloud API)
to fail decoding.
Changes:
- Modified parseArrayHeaderLine to handle quoted keys
- Added logic to find bracket start after closing quote
- Unescape quoted keys properly
- Added 3 test cases for the new functionality
Closes #62
* fix: handle empty list items and nested objects in list items
This commit fixes two critical decoder bugs that prevented complex
OpenAPI specs (like DigitalOcean's 638 schemas) from being decoded:
1. Empty list items: Items encoded as just `-` (without space) were
not recognized. The decoder only checked for `LIST_ITEM_PREFIX = '- '`.
Fixed by adding check for both `- ` and `-` patterns.
2. Nested objects in list items: When a list item contains an object
with nested properties (e.g., `allOf[2]: - properties: state: ...`),
the decoder was looking for nested content at the wrong depth level.
List items add one level of indentation, so nested content should be
at baseDepth + 2, not baseDepth + 1.
Fixed by creating `decodeKeyValueForListItem()` that correctly handles
the extra nesting while maintaining proper followDepth for siblings.
Changes:
- Added `decodeKeyValueForListItem()` function to handle list item nesting
- Updated `decodeObjectFromListItem()` to use new function
- Added empty item detection in `decodeListArray()`
- Added comprehensive unit tests for both bugs
- Added integration test with real DigitalOcean OpenAPI spec (638 schemas)
- Gitignored large fixture files, added README with download instructions
Tests:
- 5 new unit tests in list-item-bugs.test.ts
- 1 integration test in digitalocean-decode.test.ts (skips if fixture missing)
- All 309 existing tests still pass
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* perf: calculate depth on demand
* chore: move tests to test suite
* chore: test against new tests
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Johann Schopplich <mail@johannschopplich.com>