rxstack/rxstack

View on GitHub
packages/utils/src/parse-range.ts

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
export function parseRange(raw: string, size: number): { start: number, end: number, chunkSize: number } {
  const parts = raw.split(/bytes=([0-9]*)-([0-9]*)/);
  const start = parseInt(parts[1], 10);
  const end = parseInt(parts[2], 10);
  const result = { start: 0, end: 0, chunkSize: 0 };

  result.start = isNaN(start) ? 0 : start;
  result.end = isNaN(end) ? size - 1 : end;

  if (!isNaN(start) && isNaN(end)) {
    result.start = start;
    result.end = size - 1;
  }

  if (isNaN(start) && !isNaN(end)) {
    result.start =  size - end;
    result.end =  size - 1;
  }

  if (start >= size || end >= size) {
    return null;
  }
  result.chunkSize = (result.end - result.start) + 1;
  return result;
}