(
rows: $ReadOnlyArray<MessageSQLResultRow>,
derivedMessages: $ReadOnlyMap<
string,
RawComposableMessageInfo | RawRobotextMessageInfo,
>,
viewer?: Viewer,
)
| 158 | +rows: $ReadOnlyArray<MessageSQLResultRow>, |
| 159 | }>; |
| 160 | function parseMessageSQLResult( |
| 161 | rows: $ReadOnlyArray<MessageSQLResultRow>, |
| 162 | derivedMessages: $ReadOnlyMap< |
| 163 | string, |
| 164 | RawComposableMessageInfo | RawRobotextMessageInfo, |
| 165 | >, |
| 166 | viewer?: Viewer, |
| 167 | ): MessageSQLResult { |
| 168 | const rowsByID = new Map<string, Array<MessageSQLResultRow>>(); |
| 169 | for (const row of rows) { |
| 170 | if (!row.id) { |
| 171 | continue; |
| 172 | } |
| 173 | const id = row.id.toString(); |
| 174 | const currentRowsForID = rowsByID.get(id); |
| 175 | if (currentRowsForID) { |
| 176 | currentRowsForID.push(row); |
| 177 | } else { |
| 178 | rowsByID.set(id, [row]); |
| 179 | } |
| 180 | } |
| 181 | |
| 182 | const messages = []; |
| 183 | for (const messageRows of rowsByID.values()) { |
| 184 | const rawMessageInfo = rawMessageInfoFromRows( |
| 185 | messageRows, |
| 186 | viewer, |
| 187 | derivedMessages, |
| 188 | ); |
| 189 | if (rawMessageInfo) { |
| 190 | messages.push({ rawMessageInfo, rows: messageRows }); |
| 191 | } |
| 192 | } |
| 193 | |
| 194 | return messages; |
| 195 | } |
| 196 | |
| 197 | function assertSingleRow(rows: $ReadOnlyArray<Object>): Object { |
| 198 | if (rows.length === 0) { |
no test coverage detected