diff --git a/src/encoders.ts b/src/encoders.ts index 01895b8..9075d2f 100644 --- a/src/encoders.ts +++ b/src/encoders.ts @@ -140,15 +140,8 @@ export function encodeInlinePrimitiveArray( depth: Depth, options: ResolvedEncodeOptions, ): void { - const header = formatHeader(values.length, prefix ? { key: prefix } : undefined) - const joinedValue = joinEncodedValues(values, options.delimiter) - // Only add space if there are values - if (values.length === 0) { - writer.push(depth, header) - } - else { - writer.push(depth, `${header} ${joinedValue}`) - } + const formatted = formatInlineArray(values, options.delimiter, prefix) + writer.push(depth, formatted) } // #endregion @@ -173,8 +166,8 @@ export function encodeArrayOfArraysAsListItems( } } -export function formatInlineArray(values: readonly JsonPrimitive[], delimiter: string): string { - const header = formatHeader(values.length) +export function formatInlineArray(values: readonly JsonPrimitive[], delimiter: string, prefix?: string): string { + const header = formatHeader(values.length, prefix ? { key: prefix } : undefined) const joinedValue = joinEncodedValues(values, delimiter) // Only add space if there are values if (values.length === 0) { diff --git a/src/normalize.ts b/src/normalize.ts index edd4f39..018eb64 100644 --- a/src/normalize.ts +++ b/src/normalize.ts @@ -46,12 +46,12 @@ export function normalizeValue(value: unknown): JsonValue { // Array if (Array.isArray(value)) { - return normalizeArray(value) + return value.map(normalizeValue) } // Set → array if (value instanceof Set) { - return normalizeArray(Array.from(value)) + return Array.from(value).map(normalizeValue) } // Map → object @@ -63,37 +63,21 @@ export function normalizeValue(value: unknown): JsonValue { // Plain object if (isPlainObject(value)) { - return normalizeObject(value) + const result: Record = {} + + for (const key in value) { + if (Object.prototype.hasOwnProperty.call(value, key)) { + result[key] = normalizeValue(value[key]) + } + } + + return result } // Fallback: function, symbol, undefined, or other → null return null } -export function normalizeArray(value: unknown): JsonArray { - if (!Array.isArray(value)) { - return [] - } - - return value.map(item => normalizeValue(item)) -} - -export function normalizeObject(value: unknown): JsonObject { - if (!isPlainObject(value)) { - return {} - } - - const result: Record = {} - - for (const key in value) { - if (Object.prototype.hasOwnProperty.call(value, key)) { - result[key] = normalizeValue(value[key]) - } - } - - return result -} - // #endregion // #region Type guards