Skip to content

Commit 36ddd2e

Browse files
fix: encode mixed-format arrays at root level (fixes #202)
1 parent 2e992ae commit 36ddd2e

File tree

3 files changed

+18
-9
lines changed

3 files changed

+18
-9
lines changed

packages/toon/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,6 @@
3838
"test": "vitest"
3939
},
4040
"devDependencies": {
41-
"@toon-format/spec": "^2.0.0"
41+
"@toon-format/spec": "^2.0.1"
4242
}
4343
}

packages/toon/src/encode/encoders.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -361,9 +361,18 @@ function* encodeListItemValueLines(
361361
if (isJsonPrimitive(value)) {
362362
yield indentedListItem(depth, encodePrimitive(value, options.delimiter), options.indent)
363363
}
364-
else if (isJsonArray(value) && isArrayOfPrimitives(value)) {
365-
const arrayLine = encodeInlineArrayLine(value, options.delimiter)
366-
yield indentedListItem(depth, arrayLine, options.indent)
364+
else if (isJsonArray(value)) {
365+
if (isArrayOfPrimitives(value)) {
366+
const arrayLine = encodeInlineArrayLine(value, options.delimiter)
367+
yield indentedListItem(depth, arrayLine, options.indent)
368+
}
369+
else {
370+
const header = formatHeader(value.length, { delimiter: options.delimiter })
371+
yield indentedListItem(depth, header, options.indent)
372+
for (const item of value) {
373+
yield* encodeListItemValueLines(item, depth + 1, options)
374+
}
375+
}
367376
}
368377
else if (isJsonObject(value)) {
369378
yield* encodeObjectAsListItemLines(value, depth, options)

pnpm-lock.yaml

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)