MCPcopy
hub / github.com/monkeytypegame/monkeytype / saveLocalResult

Function saveLocalResult

frontend/src/ts/db.ts:310–375  ·  view source on GitHub ↗
(data: SaveLocalResultData)

Source from the content-addressed store, hash-verified

308};
309
310export function saveLocalResult(data: SaveLocalResultData): void {
311 const snapshot = getSnapshot();
312 if (!snapshot) return;
313
314 if (data.result !== undefined) {
315 void insertLocalResult({ result: data.result });
316 setLastResult(data.result);
317 if (snapshot.testActivity !== undefined) {
318 snapshot.testActivity.increment(new Date(data.result.timestamp));
319 }
320 snapshot.typingStats ??= {
321 timeTyping: 0,
322 startedTests: 0,
323 completedTests: 0,
324 };
325
326 const time =
327 data.result.testDuration +
328 data.result.incompleteTestSeconds -
329 data.result.afkDuration;
330
331 snapshot.typingStats.timeTyping += time;
332 snapshot.typingStats.startedTests += data.result.restartCount + 1;
333 snapshot.typingStats.completedTests += 1;
334
335 if (data.isPb) {
336 saveLocalPB(
337 data.result.mode,
338 data.result.mode2,
339 data.result.punctuation,
340 data.result.numbers,
341 data.result.language,
342 data.result.difficulty,
343 data.result.lazyMode,
344 data.result.wpm,
345 data.result.acc,
346 data.result.rawWpm,
347 data.result.consistency,
348 );
349 }
350 }
351
352 if (data.xp !== undefined) {
353 snapshot.xp ??= 0;
354 snapshot.xp += data.xp;
355 }
356
357 if (data.streak !== undefined) {
358 snapshot.streak = data.streak;
359
360 if (snapshot.streak > snapshot.maxStreak) {
361 snapshot.maxStreak = snapshot.streak;
362 }
363 }
364
365 setSnapshot(snapshot, {
366 dispatchEvent: false,
367 });

Callers

nothing calls this directly

Calls 5

insertLocalResultFunction · 0.90
saveLocalPBFunction · 0.85
setSnapshotFunction · 0.85
incrementMethod · 0.80
getSnapshotFunction · 0.70

Tested by

no test coverage detected