(preview: ObjectPreview.ArrayPreview, characterBudget: number)
| 134 | } |
| 135 | |
| 136 | function renderArrayPreview(preview: ObjectPreview.ArrayPreview, characterBudget: number): string { |
| 137 | const builder = new BudgetStringBuilder(characterBudget); |
| 138 | let description = preview.description; |
| 139 | const match = description.match(/[^(]*\(([\d]+)\)/); |
| 140 | if (!match) return description; |
| 141 | const arrayLength = parseInt(match[1], 10); |
| 142 | |
| 143 | if (description.startsWith('Array(')) description = description.substring('Array'.length); |
| 144 | builder.append(stringUtils.trimEnd(description, builder.budget())); |
| 145 | builder.append(' '); |
| 146 | const propsBuilder = new BudgetStringBuilder(builder.budget() - 2, ', '); // for [] |
| 147 | |
| 148 | // Indexed |
| 149 | let lastIndex = -1; |
| 150 | for (const prop of preview.properties) { |
| 151 | if (!propsBuilder.checkBudget()) break; |
| 152 | if (isNaN(prop.name as unknown as number)) continue; |
| 153 | const index = parseInt(prop.name, 10); |
| 154 | if (index > lastIndex + 1) propsBuilder.appendEllipsis(); |
| 155 | lastIndex = index; |
| 156 | propsBuilder.append(renderPropertyPreview(prop, propsBuilder.budget())); |
| 157 | } |
| 158 | if (arrayLength > lastIndex + 1) propsBuilder.appendEllipsis(); |
| 159 | |
| 160 | // Named |
| 161 | for (const prop of preview.properties) { |
| 162 | if (!propsBuilder.checkBudget()) break; |
| 163 | if (!isNaN(prop.name as unknown as number)) continue; |
| 164 | propsBuilder.append(renderPropertyPreview(prop, propsBuilder.budget(), prop.name)); |
| 165 | } |
| 166 | if (preview.overflow) propsBuilder.appendEllipsis(); |
| 167 | builder.append('[' + propsBuilder.build() + ']'); |
| 168 | return builder.build(); |
| 169 | } |
| 170 | |
| 171 | function renderObjectPreview( |
| 172 | preview: ObjectPreview.PreviewAsObjectType, |
no test coverage detected