From a2e23341ac72b524c1ffc141855e5817721978b8 Mon Sep 17 00:00:00 2001 From: dev Date: Mon, 1 Jun 2026 15:48:52 -0500 Subject: [PATCH] refactor(pure): share MS_PER_DAY with tests and document pruneHistory --- src/pure.js | 10 +++++++++- tests/pure.test.js | 4 ++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/pure.js b/src/pure.js index 6f610aa..773696a 100644 --- a/src/pure.js +++ b/src/pure.js @@ -1,5 +1,5 @@ const SUFFIXES = { k: 1e3, m: 1e6, b: 1e9, t: 1e12 }; -const MS_PER_DAY = 86_400_000; +export const MS_PER_DAY = 86_400_000; export function parseTarget(input) { if (input === null || input === undefined || input === '') return null; @@ -53,6 +53,14 @@ export function computeEstimate(current, target, perTrain, perDay) { const THIRTY_DAYS_MS = 30 * MS_PER_DAY; +/** + * Returns a new array of entries from the last 30 days, with the 30-day + * boundary treated as exclusive (an entry exactly 30 days old is dropped). + * Does not mutate the input. + * @param {{ts:number, delta:number}[]} entries + * @param {number} [now] Reference time in ms (defaults to Date.now()). + * @returns {{ts:number, delta:number}[]} + */ export function pruneHistory(entries, now = Date.now()) { const cutoff = now - THIRTY_DAYS_MS; return entries.filter((e) => e.ts > cutoff); diff --git a/tests/pure.test.js b/tests/pure.test.js index 76f5cb2..ba75bb7 100644 --- a/tests/pure.test.js +++ b/tests/pure.test.js @@ -1,8 +1,8 @@ import { test } from 'node:test'; import assert from 'node:assert/strict'; -import { parseTarget, computeEstimate, pruneHistory } from '../src/pure.js'; +import { parseTarget, computeEstimate, pruneHistory, MS_PER_DAY } from '../src/pure.js'; -const DAY = 86_400_000; +const DAY = MS_PER_DAY; const NOW = 1_700_000_000_000; // fixed reference test('parseTarget: integer numbers', () => {