PluginProbe
Code Block Pro – Beautiful Syntax Highlighting / trunk
Code Block Pro – Beautiful Syntax Highlighting vtrunk
1.27.1 1.27.2 1.27.3 1.27.4 1.27.5 1.27.6 1.27.7 1.28.0 1.3.0 1.4.0 1.5.0 1.5.1 1.5.2 1.6.0 1.7.0 1.8.0 1.9.0 1.9.1 1.9.2 1.9.3 trunk 1.1.0 1.10.0 1.11.0 1.11.1 All 63 releases
code-block-pro / src / util / arrayHelpers.ts

arrayHelpers.ts in Code Block Pro – Beautiful Syntax Highlighting trunk, at src/util/arrayHelpers.ts

47 lines 1.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 export const parseJSONArrayWithRanges = (
2 lineNumbers: string,
3 startingLineNumber: string,
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 }
32 };
33
34 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;
46 };
47