From 9d9167ca40556251945f4bfb1b6a5a14e712df19 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 5 Jun 2026 16:12:25 +0000 Subject: [PATCH 1/2] refactor(electron-info): replace date-fns with native Date API Remove the date-fns dependency from electron-info. The only usage was two functions (sub, isAfter) for a simple 24-hour cache freshness check, which is trivially expressible with built-in Date methods. --- packages/electron-info/package.json | 1 - packages/electron-info/src/FileService.ts | 6 +++--- yarn.lock | 8 -------- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/packages/electron-info/package.json b/packages/electron-info/package.json index 5628a9c2..c2016022 100644 --- a/packages/electron-info/package.json +++ b/packages/electron-info/package.json @@ -4,7 +4,6 @@ "dependencies": { "chalk": "5.6.2", "commander": "15.0.0", - "date-fns": "4.4.0", "logdown": "3.3.1", "semver": "7.8.1", "table": "6.9.0" diff --git a/packages/electron-info/src/FileService.ts b/packages/electron-info/src/FileService.ts index 851ac593..9f355515 100644 --- a/packages/electron-info/src/FileService.ts +++ b/packages/electron-info/src/FileService.ts @@ -1,4 +1,3 @@ -import {isAfter as isAfterDate, sub as subtractDate} from 'date-fns'; import logdown from 'logdown'; import {promises as fs, constants as fsConstants} from 'node:fs'; import os from 'node:os'; @@ -89,8 +88,9 @@ export class FileService { const {mtime: fileModifiedDate} = await fs.stat(fileName); this.logger.log(`File "${fileName}" is from "${fileModifiedDate.toString()}"`); - const yesterday = subtractDate(new Date(), {days: 1}); - return isAfterDate(fileModifiedDate, yesterday); + const yesterday = new Date(); + yesterday.setDate(yesterday.getDate() - 1); + return fileModifiedDate > yesterday; } private async isPathReadable(filePath: string): Promise { diff --git a/yarn.lock b/yarn.lock index 1e04287e..843f7eb3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4656,13 +4656,6 @@ __metadata: languageName: node linkType: hard -"date-fns@npm:4.4.0": - version: 4.4.0 - resolution: "date-fns@npm:4.4.0" - checksum: 10c0/988f0a13db183f5dfc85c36bbb6847a9c135a9225888bbea4005876ec15539a8613c21a07370a4e7ea543918d5a1cafb423c528b42cdbbde5fdfddb178126b21 - languageName: node - linkType: hard - "debug@npm:4, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" @@ -4924,7 +4917,6 @@ __metadata: "@types/semver": "npm:7.7.1" chalk: "npm:5.6.2" commander: "npm:15.0.0" - date-fns: "npm:4.4.0" http-status-codes: "npm:2.3.0" logdown: "npm:3.3.1" nock: "npm:14.0.15" From a569bc1ebb9639c0076e5e043cae2adc265df18f Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 5 Jun 2026 16:27:22 +0000 Subject: [PATCH 2/2] refactor(electron-info): extract isWithinLastDay and add tests Move the 24-hour freshness check into an exported function with an injectable `now` parameter, and add unit tests for it. --- .../electron-info/src/FileService.test.ts | 28 +++++++++++++++++++ packages/electron-info/src/FileService.ts | 10 +++++-- 2 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 packages/electron-info/src/FileService.test.ts diff --git a/packages/electron-info/src/FileService.test.ts b/packages/electron-info/src/FileService.test.ts new file mode 100644 index 00000000..4469b0e3 --- /dev/null +++ b/packages/electron-info/src/FileService.test.ts @@ -0,0 +1,28 @@ +import {describe, expect, test} from 'vitest'; + +import {isWithinLastDay} from './FileService.js'; + +describe('isWithinLastDay', () => { + test('returns true when date is just after the same time yesterday', () => { + const now = new Date('2026-01-15T12:00:00.000Z'); + const justAfter = new Date('2026-01-14T12:00:00.001Z'); + expect(isWithinLastDay(justAfter, now)).toBe(true); + }); + + test('returns false when date is exactly the same time yesterday', () => { + const now = new Date('2026-01-15T12:00:00.000Z'); + const exactlyYesterday = new Date('2026-01-14T12:00:00.000Z'); + expect(isWithinLastDay(exactlyYesterday, now)).toBe(false); + }); + + test('returns false when date is before yesterday', () => { + const now = new Date('2026-01-15T12:00:00.000Z'); + const twoDaysAgo = new Date('2026-01-13T12:00:00.000Z'); + expect(isWithinLastDay(twoDaysAgo, now)).toBe(false); + }); + + test('returns true when date equals now', () => { + const now = new Date('2026-01-15T12:00:00.000Z'); + expect(isWithinLastDay(now, now)).toBe(true); + }); +}); diff --git a/packages/electron-info/src/FileService.ts b/packages/electron-info/src/FileService.ts index 9f355515..e0bb62f0 100644 --- a/packages/electron-info/src/FileService.ts +++ b/packages/electron-info/src/FileService.ts @@ -88,9 +88,7 @@ export class FileService { const {mtime: fileModifiedDate} = await fs.stat(fileName); this.logger.log(`File "${fileName}" is from "${fileModifiedDate.toString()}"`); - const yesterday = new Date(); - yesterday.setDate(yesterday.getDate() - 1); - return fileModifiedDate > yesterday; + return isWithinLastDay(fileModifiedDate); } private async isPathReadable(filePath: string): Promise { @@ -115,3 +113,9 @@ export class FileService { return releases; } } + +export function isWithinLastDay(date: Date, now = new Date()): boolean { + const yesterday = new Date(now); + yesterday.setUTCDate(yesterday.getUTCDate() - 1); + return date > yesterday; +}