* Serializes special JavaScript values (undefined, NaN, Infinity, Date) * @internal
(value: unknown)
| 89 | * @internal |
| 90 | */ |
| 91 | function serializeValue(value: unknown): unknown { |
| 92 | if (value === undefined) { |
| 93 | return { __type: `undefined` } |
| 94 | } |
| 95 | |
| 96 | if (typeof value === `number`) { |
| 97 | if (Number.isNaN(value)) { |
| 98 | return { __type: `nan` } |
| 99 | } |
| 100 | if (value === Number.POSITIVE_INFINITY) { |
| 101 | return { __type: `infinity`, sign: 1 } |
| 102 | } |
| 103 | if (value === Number.NEGATIVE_INFINITY) { |
| 104 | return { __type: `infinity`, sign: -1 } |
| 105 | } |
| 106 | } |
| 107 | |
| 108 | if ( |
| 109 | value === null || |
| 110 | typeof value === `string` || |
| 111 | typeof value === `number` || |
| 112 | typeof value === `boolean` |
| 113 | ) { |
| 114 | return value |
| 115 | } |
| 116 | |
| 117 | if (value instanceof Date) { |
| 118 | return { __type: `date`, value: value.toJSON() } |
| 119 | } |
| 120 | |
| 121 | if (Array.isArray(value)) { |
| 122 | return value.map((item) => serializeValue(item)) |
| 123 | } |
| 124 | |
| 125 | if (typeof value === `object`) { |
| 126 | return Object.fromEntries( |
| 127 | Object.entries(value as Record<string, unknown>).map(([key, val]) => [ |
| 128 | key, |
| 129 | serializeValue(val), |
| 130 | ]), |
| 131 | ) |
| 132 | } |
| 133 | |
| 134 | return value |
| 135 | } |
no test coverage detected