| @@ -1,46 +1,47 @@ | ||
| 1 | 1 | export const parseJSONArrayWithRanges = ( |
| 2 | - lineNumbers: string, | |
| 3 | - startingLineNumber: string, | |
| 2 | + lineNumbers: string, | |
| 3 | + startingLineNumber: string, | |
| 4 | 4 | ) => { |
| 5 | - try { | |
| 6 | - return ( | |
| 7 | - JSON.parse(`[${lineNumbers ?? ''}]`) | |
| 8 | - .map((inner: number | number[]) => { | |
| 9 | - // offset by startingLineNumber | |
| 10 | - const offset = Number.isNaN(Number(startingLineNumber)) | |
| 11 | - ? 0 | |
| 12 | - : Math.max(Number(startingLineNumber) - 1, 0); | |
| 13 | - // incoming might look like 1, 3, or [4, 8] | |
| 14 | - if (typeof inner === 'number') return inner - offset; | |
| 15 | - return Array.from( | |
| 16 | - { length: inner[1] - inner[0] + 1 }, | |
| 17 | - (_, i) => inner[0] + i - offset, | |
| 18 | - ); | |
| 19 | - }) | |
| 20 | - // filter out empty arrays | |
| 21 | - .filter((inner: number | number[]) => | |
| 22 | - Array.isArray(inner) ? inner?.length > 0 : true, | |
| 23 | - ) | |
| 24 | - .flat() | |
| 25 | - // filter out negative numbers | |
| 26 | - .filter((inner: number) => inner >= 0) | |
| 27 | - ); | |
| 28 | - } catch (e) { | |
| 29 | - console.error(e); | |
| 30 | - return []; | |
| 31 | - } | |
| 5 | + try { | |
| 6 | + return ( | |
| 7 | + JSON.parse(`[${lineNumbers ?? ''}]`) | |
| 8 | + .map((inner: number | number[]) => { | |
| 9 | + // offset by startingLineNumber | |
| 10 | + const offset = isNaN(Number(startingLineNumber)) | |
| 11 | + ? 0 | |
| 12 | + : Math.max(Number(startingLineNumber) - 1, 0); | |
| 13 | + // incoming might look like 1, 3, or [4, 8] | |
| 14 | + if (typeof inner === 'number') return inner - offset; | |
| 15 | + return Array.from( | |
| 16 | + { length: inner[1] - inner[0] + 1 }, | |
| 17 | + (_, i) => inner[0] + i - offset, | |
| 18 | + ); | |
| 19 | + }) | |
| 20 | + // filter out empty arrays | |
| 21 | + .filter((inner: number | number[]) => | |
| 22 | + Array.isArray(inner) ? inner?.length > 0 : true, | |
| 23 | + ) | |
| 24 | + .flat() | |
| 25 | + // filter out negative numbers | |
| 26 | + .filter((inner: number) => inner >= 0) | |
| 27 | + ); | |
| 28 | + } catch (e) { | |
| 29 | + return []; | |
| 30 | + } | |
| 32 | 31 | }; |
| 33 | 32 | |
| 34 | 33 | export const parseStringArrayWithSingleNestedArray = (lineNumbers?: string) => { |
| 35 | - const nums = JSON.parse(`[${lineNumbers ?? ''}]`); | |
| 36 | - // Checking for nested arrays | |
| 37 | - const nested = nums.filter((n: number | number[]) => Array.isArray(n)); | |
| 38 | - const doubly = nested.some((n: number[]) => n.some((k) => Array.isArray(k))); | |
| 39 | - if (doubly) { | |
| 40 | - throw new Error('Nested arrays not allowed'); | |
| 41 | - } | |
| 42 | - if (nested.some((n: number[]) => n[0] >= n[1])) { | |
| 43 | - throw new Error('Nested arrays must be in order'); | |
| 44 | - } | |
| 45 | - return true; | |
| 34 | + const nums = JSON.parse(`[${lineNumbers ?? ''}]`); | |
| 35 | + // Checking for nested arrays | |
| 36 | + const nested = nums.filter((n: number | number[]) => Array.isArray(n)); | |
| 37 | + const doubly = nested.some((n: number[]) => | |
| 38 | + n.some((k) => Array.isArray(k)), | |
| 39 | + ); | |
| 40 | + if (doubly) { | |
| 41 | + throw new Error('Nested arrays not allowed'); | |
| 42 | + } | |
| 43 | + if (nested.some((n: number[]) => n[0] >= n[1])) { | |
| 44 | + throw new Error('Nested arrays must be in order'); | |
| 45 | + } | |
| 46 | + return true; | |
| 46 | 47 | }; |