(args: unknown[])
| 116 | // Zero dep version of Vitest's console formatter |
| 117 | // https://github.com/vitest-dev/vitest/blob/a2d650e00dbd8220397c5c25aef05c850100e446/packages/utils/src/display.ts#L129 |
| 118 | export function formatConsoleArgs(args: unknown[]): string { |
| 119 | if (args.length === 0) { |
| 120 | return '' |
| 121 | } |
| 122 | |
| 123 | if (typeof args[0] !== 'string') { |
| 124 | return args.map((arg) => stringifyConsoleArg(arg)).join(' ') |
| 125 | } |
| 126 | |
| 127 | const len = args.length |
| 128 | let i = 1 |
| 129 | let message = args[0].replace(/%[sdjifoOc%]/g, (specifier) => { |
| 130 | if (specifier === '%%') { |
| 131 | return '%' |
| 132 | } |
| 133 | if (i >= len) { |
| 134 | return specifier |
| 135 | } |
| 136 | |
| 137 | const arg = args[i++] |
| 138 | switch (specifier) { |
| 139 | case '%s': |
| 140 | if (typeof arg === 'bigint') { |
| 141 | return `${arg.toString()}n` |
| 142 | } |
| 143 | return typeof arg === 'object' && arg != null |
| 144 | ? stringifyConsoleArg(arg) |
| 145 | : String(arg) |
| 146 | case '%d': |
| 147 | if (typeof arg === 'bigint') { |
| 148 | return `${arg.toString()}n` |
| 149 | } |
| 150 | if (typeof arg === 'symbol') { |
| 151 | return 'NaN' |
| 152 | } |
| 153 | return Number(arg).toString() |
| 154 | case '%i': |
| 155 | if (typeof arg === 'bigint') { |
| 156 | return `${arg.toString()}n` |
| 157 | } |
| 158 | return Number.parseInt(String(arg), 10).toString() |
| 159 | case '%f': |
| 160 | return Number.parseFloat(String(arg)).toString() |
| 161 | case '%o': |
| 162 | case '%O': |
| 163 | return stringifyConsoleArg(arg) |
| 164 | case '%j': |
| 165 | try { |
| 166 | const serialized = JSON.stringify(arg) |
| 167 | return serialized ?? 'undefined' |
| 168 | } catch { |
| 169 | return '[Circular]' |
| 170 | } |
| 171 | case '%c': |
| 172 | return '' |
| 173 | default: |
| 174 | return specifier |
| 175 | } |
no test coverage detected