diff --git a/src/lib/ChartUtils.ts b/src/lib/ChartUtils.ts index de4cf94..746c0fa 100644 --- a/src/lib/ChartUtils.ts +++ b/src/lib/ChartUtils.ts @@ -43,7 +43,7 @@ export const ticks = (values: number[], opts: TickOptions = {}): number[] => { n += tickSpacing; } if (max > niceMax) result.push(n); - while (min < result[0]) result.unshift(result[0] - tickSpacing); + while (result[0] && min < result[0]) result.unshift(result[0] - tickSpacing); if (!result.length) { return [0, 100]; diff --git a/src/lib/Details.svelte b/src/lib/Details.svelte index 47938eb..34ef8d5 100644 --- a/src/lib/Details.svelte +++ b/src/lib/Details.svelte @@ -67,7 +67,7 @@ 80 ? 'red' : ChartColours.DutyCycle }, { label: 'Motor Current', value: `${data.current_motor} A`, color: ChartColours.CurrentMotor }, - ...(data.current_field_weakening - ? [{ label: 'Field Weakening', value: `${data.current_field_weakening} A`, color: ChartColours.CurrentMotor }] - : []), + ...(Number.isNaN(data.current_field_weakening) + ? [] + : [ + { + label: 'Field Weakening', + value: `${data.current_field_weakening} A`, + color: ChartColours.CurrentMotor, + }, + ]), '-', { label: 'Temp Motor', value: `${data.temp_motor}°C`, color: ChartColours.TempMotor }, { label: 'Temp Controller', value: `${data.temp_mosfet}°C`, color: ChartColours.TempMosfet }, diff --git a/src/lib/parse/floaty.test.ts b/src/lib/parse/floaty.test.ts index 8d7d132..c966562 100644 --- a/src/lib/parse/floaty.test.ts +++ b/src/lib/parse/floaty.test.ts @@ -8,11 +8,11 @@ describe(parseFloatyJson.name, () => { expect(units).toEqual('metric'); expect(data).toHaveLength(3); - expect(data[0].gps_latitude).toBe(-1.0); - expect(data[0].gps_longitude).toBe(1.5); - expect(data[1].gps_latitude).toBe(-1.1); - expect(data[1].gps_longitude).toBe(1.6); - expect(data[2].gps_latitude).toBe(-1.1); - expect(data[2].gps_longitude).toBe(1.6); + expect(data[0]!.gps_latitude).toBe(-1.0); + expect(data[0]!.gps_longitude).toBe(1.5); + expect(data[1]!.gps_latitude).toBe(-1.1); + expect(data[1]!.gps_longitude).toBe(1.6); + expect(data[2]!.gps_latitude).toBe(-1.1); + expect(data[2]!.gps_longitude).toBe(1.6); }); }); diff --git a/src/lib/parse/floaty.ts b/src/lib/parse/floaty.ts index ea7d6dd..cd89ca8 100644 --- a/src/lib/parse/floaty.ts +++ b/src/lib/parse/floaty.ts @@ -5,7 +5,7 @@ import { stateCodeMap, type Row } from './types'; function rowsFromFloatyJson(json: ZFloatyJson): Row[] { const rows: Row[] = []; - const map = (log: ZLog, location: ZLocation) => ({ + const map = (log: ZLog, location: ZLocation): Row => ({ adc1: log.adc1, adc2: log.adc2, ah_charged: NaN, @@ -36,7 +36,7 @@ function rowsFromFloatyJson(json: ZFloatyJson): Row[] { setpoint: NaN, speed: log.speed, state_raw: log.state, - state: stateCodeMap[log.state], + state: stateCodeMap[log.state] ?? '??', temp_battery: NaN, temp_mosfet: log.controllerTemp, temp_motor: log.motorTemp, @@ -50,10 +50,10 @@ function rowsFromFloatyJson(json: ZFloatyJson): Row[] { const { logs, locations } = json; let locationIdx = 0; for (let i = 0; i < logs.length; ++i) { - const log = logs[i]; - let location = locations[locationIdx]; + const log = logs[i]!; + let location = locations[locationIdx]!; if (location.timestamp < log.timestamp && locations[locationIdx + 1]) { - location = locations[++locationIdx]; + location = locations[++locationIdx]!; } rows.push(map(log, location)); diff --git a/tsconfig.json b/tsconfig.json index 26443a3..e70d115 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,8 +16,7 @@ "isolatedModules": true, "strict": true, "noUnusedLocals": true, - // TODO: enable - "noUncheckedIndexedAccess": false, + "noUncheckedIndexedAccess": true, "moduleDetection": "force" }, "include": ["src/**/*.ts", "src/**/*.js", "src/**/*.svelte"],