* chore: move readme to `packages/toon/README.md` and symlink in the project root
* fix paths and exclude `packages/toon/README.md` from `eslint` to avoid double linting
* docs(readme): use themed badges
They will now match the logo theme
* fix license path
* chore: revert changes
---------
Co-authored-by: Johann Schopplich <mail@johannschopplich.com>
* chore: move readme to `packages/toon/README.md` and symlink in the project root
* fix paths and exclude `packages/toon/README.md` from `eslint` to avoid double linting
* fix: use relative paths
* fix link to readme benchmarks section
* 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>