( headers: IncomingHttpHeaders, payloadSize: number, )
| 233 | } |
| 234 | |
| 235 | function parseUploadResumeOffset( |
| 236 | headers: IncomingHttpHeaders, |
| 237 | payloadSize: number, |
| 238 | ): number | undefined { |
| 239 | const explicitOffset = parseNonNegativeIntegerHeader( |
| 240 | headers['x-upload-offset'] ?? headers['upload-offset'], |
| 241 | ); |
| 242 | if (explicitOffset !== undefined) { |
| 243 | return Math.min(explicitOffset, payloadSize); |
| 244 | } |
| 245 | |
| 246 | const range = firstHeaderValue(headers.range); |
| 247 | const match = range?.match(/^bytes=0-(\d+)$/); |
| 248 | if (!match) return undefined; |
| 249 | const endOffset = Number(match[1]); |
| 250 | if (!Number.isSafeInteger(endOffset) || endOffset < 0) return undefined; |
| 251 | return Math.min(endOffset + 1, payloadSize); |
| 252 | } |
| 253 | |
| 254 | function parseNonNegativeIntegerHeader(value: string | string[] | undefined): number | undefined { |
| 255 | const raw = firstHeaderValue(value); |
no test coverage detected
searching dependent graphs…