Execute oxfmt (#1166)
Ran pnpm oxfmt . This should get the web repo aligned so that we can better enforce oxfmt going forward.
This commit is contained in:
@@ -6,7 +6,12 @@ import { createFakeTransport } from "../../core/testing/createFakeTransport.ts";
|
||||
import { ChannelNumber } from "../../core/types.ts";
|
||||
import { InMemoryTelemetryRepository } from "./infrastructure/repositories/InMemoryTelemetryRepository.ts";
|
||||
|
||||
const dispatch = (client: MeshClient, from: number, ms: number, battery = 80): void => {
|
||||
const dispatch = (
|
||||
client: MeshClient,
|
||||
from: number,
|
||||
ms: number,
|
||||
battery = 80,
|
||||
): void => {
|
||||
client.events.onTelemetryPacket.dispatch({
|
||||
id: ms,
|
||||
from,
|
||||
@@ -18,7 +23,9 @@ const dispatch = (client: MeshClient, from: number, ms: number, battery = 80): v
|
||||
time: ms,
|
||||
variant: {
|
||||
case: "deviceMetrics",
|
||||
value: create(Protobuf.Telemetry.DeviceMetricsSchema, { batteryLevel: battery }),
|
||||
value: create(Protobuf.Telemetry.DeviceMetricsSchema, {
|
||||
batteryLevel: battery,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
});
|
||||
@@ -46,7 +53,9 @@ describe("TelemetryClient persistence", () => {
|
||||
nodeNum: 200,
|
||||
time: new Date(500),
|
||||
kind: "deviceMetrics",
|
||||
value: create(Protobuf.Telemetry.DeviceMetricsSchema, { batteryLevel: 60 }),
|
||||
value: create(Protobuf.Telemetry.DeviceMetricsSchema, {
|
||||
batteryLevel: 60,
|
||||
}),
|
||||
});
|
||||
|
||||
const { transport } = createFakeTransport();
|
||||
|
||||
@@ -21,7 +21,9 @@ describe("TelemetryClient", () => {
|
||||
time: 1000,
|
||||
variant: {
|
||||
case: "deviceMetrics",
|
||||
value: create(Protobuf.Telemetry.DeviceMetricsSchema, { batteryLevel: 80 }),
|
||||
value: create(Protobuf.Telemetry.DeviceMetricsSchema, {
|
||||
batteryLevel: 80,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
});
|
||||
@@ -36,7 +38,9 @@ describe("TelemetryClient", () => {
|
||||
time: 2000,
|
||||
variant: {
|
||||
case: "deviceMetrics",
|
||||
value: create(Protobuf.Telemetry.DeviceMetricsSchema, { batteryLevel: 70 }),
|
||||
value: create(Protobuf.Telemetry.DeviceMetricsSchema, {
|
||||
batteryLevel: 70,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
});
|
||||
|
||||
@@ -56,7 +56,11 @@ export class TelemetryClient {
|
||||
* repository. Caller is responsible for merging with the in-memory store
|
||||
* if it wants the result reflected in the `history(nodeNum)` signal.
|
||||
*/
|
||||
public loadBefore(nodeNum: number, cursor: Date, limit: number): Promise<TelemetryReading[]> {
|
||||
public loadBefore(
|
||||
nodeNum: number,
|
||||
cursor: Date,
|
||||
limit: number,
|
||||
): Promise<TelemetryReading[]> {
|
||||
return this.repository.loadBefore(nodeNum, cursor, limit);
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,11 @@ export interface TelemetryRetentionPolicy {
|
||||
*/
|
||||
export interface TelemetryRepository {
|
||||
loadRecent(nodeNum: number, limit: number): Promise<TelemetryReading[]>;
|
||||
loadBefore(nodeNum: number, cursor: Date, limit: number): Promise<TelemetryReading[]>;
|
||||
loadBefore(
|
||||
nodeNum: number,
|
||||
cursor: Date,
|
||||
limit: number,
|
||||
): Promise<TelemetryReading[]>;
|
||||
append(reading: TelemetryReading): Promise<void>;
|
||||
appendBatch(readings: ReadonlyArray<TelemetryReading>): Promise<void>;
|
||||
prune(policy: TelemetryRetentionPolicy): Promise<void>;
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
export { TelemetryClient } from "./TelemetryClient.ts";
|
||||
export type { TelemetryClientOptions } from "./TelemetryClient.ts";
|
||||
export type { TelemetryKind, TelemetryReading } from "./domain/TelemetryReading.ts";
|
||||
export type {
|
||||
TelemetryKind,
|
||||
TelemetryReading,
|
||||
} from "./domain/TelemetryReading.ts";
|
||||
export type {
|
||||
TelemetryRepository,
|
||||
TelemetryRetentionPolicy,
|
||||
|
||||
@@ -3,7 +3,9 @@ import type * as Protobuf from "@meshtastic/protobufs";
|
||||
import type { TelemetryReading } from "../domain/TelemetryReading.ts";
|
||||
|
||||
export const TelemetryMapper = {
|
||||
fromPacket(packet: PacketMetadata<Protobuf.Telemetry.Telemetry>): TelemetryReading {
|
||||
fromPacket(
|
||||
packet: PacketMetadata<Protobuf.Telemetry.Telemetry>,
|
||||
): TelemetryReading {
|
||||
return {
|
||||
nodeNum: packet.from,
|
||||
time: packet.rxTime,
|
||||
|
||||
+4
-1
@@ -36,7 +36,10 @@ describe("InMemoryTelemetryRepository", () => {
|
||||
|
||||
it("prune drops readings older than olderThanMs", async () => {
|
||||
const repo = new InMemoryTelemetryRepository();
|
||||
await repo.appendBatch([reading(1, Date.now() - 10_000_000), reading(1, Date.now() - 1_000)]);
|
||||
await repo.appendBatch([
|
||||
reading(1, Date.now() - 10_000_000),
|
||||
reading(1, Date.now() - 1_000),
|
||||
]);
|
||||
await repo.prune({ olderThanMs: 5_000_000 });
|
||||
const remaining = await repo.loadRecent(1, 10);
|
||||
expect(remaining).toHaveLength(1);
|
||||
|
||||
+12
-3
@@ -11,11 +11,18 @@ import type {
|
||||
export class InMemoryTelemetryRepository implements TelemetryRepository {
|
||||
private readonly buckets = new Map<number, TelemetryReading[]>();
|
||||
|
||||
async loadRecent(nodeNum: number, limit: number): Promise<TelemetryReading[]> {
|
||||
async loadRecent(
|
||||
nodeNum: number,
|
||||
limit: number,
|
||||
): Promise<TelemetryReading[]> {
|
||||
return (this.buckets.get(nodeNum) ?? []).slice(-limit);
|
||||
}
|
||||
|
||||
async loadBefore(nodeNum: number, cursor: Date, limit: number): Promise<TelemetryReading[]> {
|
||||
async loadBefore(
|
||||
nodeNum: number,
|
||||
cursor: Date,
|
||||
limit: number,
|
||||
): Promise<TelemetryReading[]> {
|
||||
const bucket = this.buckets.get(nodeNum) ?? [];
|
||||
const idx = bucket.findIndex((r) => r.time >= cursor);
|
||||
const end = idx === -1 ? bucket.length : idx;
|
||||
@@ -37,7 +44,9 @@ export class InMemoryTelemetryRepository implements TelemetryRepository {
|
||||
}
|
||||
|
||||
async prune(policy: TelemetryRetentionPolicy): Promise<void> {
|
||||
const cutoff = policy.olderThanMs ? Date.now() - policy.olderThanMs : undefined;
|
||||
const cutoff = policy.olderThanMs
|
||||
? Date.now() - policy.olderThanMs
|
||||
: undefined;
|
||||
for (const [nodeNum, bucket] of this.buckets.entries()) {
|
||||
let next = bucket;
|
||||
if (cutoff !== undefined) {
|
||||
|
||||
@@ -1,14 +1,26 @@
|
||||
import { type Signal, signal } from "@preact/signals-core";
|
||||
import { type ReadonlySignal, toReadonly } from "../../../core/signals/createStore.ts";
|
||||
import {
|
||||
type ReadonlySignal,
|
||||
toReadonly,
|
||||
} from "../../../core/signals/createStore.ts";
|
||||
import type { TelemetryReading } from "../domain/TelemetryReading.ts";
|
||||
|
||||
const MAX_HISTORY = 256;
|
||||
|
||||
export class TelemetryStore {
|
||||
private readonly latest = new Map<number, Signal<TelemetryReading | undefined>>();
|
||||
private readonly latestRead = new Map<number, ReadonlySignal<TelemetryReading | undefined>>();
|
||||
private readonly latest = new Map<
|
||||
number,
|
||||
Signal<TelemetryReading | undefined>
|
||||
>();
|
||||
private readonly latestRead = new Map<
|
||||
number,
|
||||
ReadonlySignal<TelemetryReading | undefined>
|
||||
>();
|
||||
private readonly history = new Map<number, Signal<TelemetryReading[]>>();
|
||||
private readonly historyRead = new Map<number, ReadonlySignal<TelemetryReading[]>>();
|
||||
private readonly historyRead = new Map<
|
||||
number,
|
||||
ReadonlySignal<TelemetryReading[]>
|
||||
>();
|
||||
|
||||
append(reading: TelemetryReading): void {
|
||||
const latestSig = this.ensureLatest(reading.nodeNum);
|
||||
|
||||
Reference in New Issue
Block a user