| 155 | const delay = (ms: number): Promise<void> => new Promise((r) => setTimeout(r, ms)); |
| 156 | |
| 157 | const parseVersionParts = (version: string): readonly number[] | null => { |
| 158 | const core = version.trim().split(/[+-]/, 1)[0]; |
| 159 | if (!core) return null; |
| 160 | const parts = core.split(".").map((part) => Number.parseInt(part, 10)); |
| 161 | return parts.every((part) => Number.isInteger(part) && part >= 0) ? parts : null; |
| 162 | }; |
| 163 | |
| 164 | const compareVersions = (left: string, right: string): number | null => { |
| 165 | const leftParts = parseVersionParts(left); |