(line: string)
| 25 | * malformed. |
| 26 | */ |
| 27 | export function extractProjectId(line: string): string | null { |
| 28 | const first = line.indexOf(PROJECT_ID_NEEDLE); |
| 29 | if (first < 0) return null; |
| 30 | |
| 31 | const second = line.indexOf(PROJECT_ID_NEEDLE, first + PROJECT_ID_NEEDLE.length); |
| 32 | if (second >= 0) { |
| 33 | try { |
| 34 | const obj = JSON.parse(line) as { project_id?: unknown }; |
| 35 | return typeof obj.project_id === 'string' ? obj.project_id : null; |
| 36 | } catch { |
| 37 | return null; |
| 38 | } |
| 39 | } |
| 40 | |
| 41 | const valueStart = first + PROJECT_ID_NEEDLE.length; |
| 42 | const valueEnd = line.indexOf('"', valueStart); |
| 43 | // valueEnd === valueStart means the value is empty (`"project_id":""`) |
| 44 | // — treat as missing so we don't pollute pub/sub counts with an empty |
| 45 | // key. Matches the old regex's `[^"]+` (one-or-more) behavior. |
| 46 | if (valueEnd <= valueStart) return null; |
| 47 | return line.slice(valueStart, valueEnd); |
| 48 | } |
| 49 | |
| 50 | export class EventBuffer extends BaseBuffer { |
| 51 | private batchSize = process.env.EVENT_BUFFER_BATCH_SIZE |
no test coverage detected