From 0241369826fa4eba4605f9738f3c8db5f67e3c2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Chalk?= Date: Tue, 23 Jan 2024 10:27:27 +0100 Subject: [PATCH 1/3] fix(utils): set fixed locale for date in report.md --- packages/utils/src/lib/formatting.ts | 10 ++++++++++ packages/utils/src/lib/formatting.unit.test.ts | 14 ++++++++++++++ .../generate-md-report.integration.test.ts.snap | 2 +- .../utils/src/lib/reports/generate-md-report.ts | 5 +++-- 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/packages/utils/src/lib/formatting.ts b/packages/utils/src/lib/formatting.ts index 682beeccd..5d785414b 100644 --- a/packages/utils/src/lib/formatting.ts +++ b/packages/utils/src/lib/formatting.ts @@ -52,6 +52,16 @@ export function formatDuration(duration: number): string { return `${(duration / 1000).toFixed(2)} s`; } +export function formatDate(date: Date): string { + const locale = 'en-US'; // fixed locale to ensure consistency + return date + .toLocaleString(locale, { + dateStyle: 'medium', + timeStyle: 'short', + }) + .replace(/\u202F/g, ' '); // see https://github.com/nodejs/node/issues/45171 +} + export function truncateText(text: string, maxChars: number): string { if (text.length <= maxChars) { return text; diff --git a/packages/utils/src/lib/formatting.unit.test.ts b/packages/utils/src/lib/formatting.unit.test.ts index f9bec2635..d3b1c5206 100644 --- a/packages/utils/src/lib/formatting.unit.test.ts +++ b/packages/utils/src/lib/formatting.unit.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it } from 'vitest'; import { formatBytes, + formatDate, formatDuration, pluralize, pluralizeToken, @@ -75,6 +76,19 @@ describe('formatDuration', () => { }); }); +describe('formatDate', () => { + it('should produce human-readable date and time in English', () => { + expect(formatDate(new Date('2024-01-23T09:50:09.606Z'))).toBe( + 'Jan 23, 2024, 9:50 AM', + ); + }); + + // see https://github.com/nodejs/node/issues/45171 + it('should not include narrow non-breaking space', () => { + expect(formatDate(new Date())).not.toMatch(' '); + }); +}); + describe('truncateText', () => { it('should replace overflowing text with ellipsis', () => { expect(truncateText('All work and no play makes Jack a dull boy', 32)).toBe( diff --git a/packages/utils/src/lib/reports/__snapshots__/generate-md-report.integration.test.ts.snap b/packages/utils/src/lib/reports/__snapshots__/generate-md-report.integration.test.ts.snap index 78f0fe639..95e2483c3 100644 --- a/packages/utils/src/lib/reports/__snapshots__/generate-md-report.integration.test.ts.snap +++ b/packages/utils/src/lib/reports/__snapshots__/generate-md-report.integration.test.ts.snap @@ -421,7 +421,7 @@ ESLint rule **prefer-arrow-callback**. [📖 Docs](https://eslint.org/docs/lates ## About -Report was created by [Code PushUp](https://github.com/flowup/quality-metrics-cli#readme) on Wed Sep 15 2021 00:00:00 GMT+0000 (Coordinated Universal Time). +Report was created by [Code PushUp](https://github.com/flowup/quality-metrics-cli#readme) on Sep 15, 2021, 12:00 AM. |Commit|Version|Duration|Plugins|Categories|Audits| |:--|:--:|:--:|:--:|:--:|:--:| diff --git a/packages/utils/src/lib/reports/generate-md-report.ts b/packages/utils/src/lib/reports/generate-md-report.ts index a9a867f7e..702946b96 100644 --- a/packages/utils/src/lib/reports/generate-md-report.ts +++ b/packages/utils/src/lib/reports/generate-md-report.ts @@ -1,5 +1,5 @@ import { AuditReport, CategoryConfig, Issue } from '@code-pushup/models'; -import { formatDuration, slugify } from '../formatting'; +import { formatDate, formatDuration, slugify } from '../formatting'; import { CommitData } from '../git'; import { NEW_LINE } from './constants'; import { @@ -229,7 +229,8 @@ function reportToAboutSection( report: ScoredReport, commitData: CommitData | null, ): string { - const date = new Date().toString(); + const date = formatDate(new Date()); + const { duration, version, plugins, categories } = report; const commitInfo = commitData ? `${commitData.message} (${commitData.hash.slice(0, 7)})` From 9866f65f30b74960ae38e00328ec2efc3cbc7e1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Chalk?= Date: Tue, 23 Jan 2024 15:19:17 +0100 Subject: [PATCH 2/3] feat(utils): include timezone in report.md --- packages/utils/src/lib/formatting.ts | 9 +++++++-- packages/utils/src/lib/formatting.unit.test.ts | 2 +- .../generate-md-report.integration.test.ts.snap | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/utils/src/lib/formatting.ts b/packages/utils/src/lib/formatting.ts index 5d785414b..990434230 100644 --- a/packages/utils/src/lib/formatting.ts +++ b/packages/utils/src/lib/formatting.ts @@ -56,8 +56,13 @@ export function formatDate(date: Date): string { const locale = 'en-US'; // fixed locale to ensure consistency return date .toLocaleString(locale, { - dateStyle: 'medium', - timeStyle: 'short', + weekday: 'short', + month: 'short', + day: 'numeric', + year: 'numeric', + hour: 'numeric', + minute: '2-digit', + timeZoneName: 'short', }) .replace(/\u202F/g, ' '); // see https://github.com/nodejs/node/issues/45171 } diff --git a/packages/utils/src/lib/formatting.unit.test.ts b/packages/utils/src/lib/formatting.unit.test.ts index d3b1c5206..843221fd9 100644 --- a/packages/utils/src/lib/formatting.unit.test.ts +++ b/packages/utils/src/lib/formatting.unit.test.ts @@ -79,7 +79,7 @@ describe('formatDuration', () => { describe('formatDate', () => { it('should produce human-readable date and time in English', () => { expect(formatDate(new Date('2024-01-23T09:50:09.606Z'))).toBe( - 'Jan 23, 2024, 9:50 AM', + 'Tue, Jan 23, 2024, 9:50 AM UTC', ); }); diff --git a/packages/utils/src/lib/reports/__snapshots__/generate-md-report.integration.test.ts.snap b/packages/utils/src/lib/reports/__snapshots__/generate-md-report.integration.test.ts.snap index 95e2483c3..368c93d26 100644 --- a/packages/utils/src/lib/reports/__snapshots__/generate-md-report.integration.test.ts.snap +++ b/packages/utils/src/lib/reports/__snapshots__/generate-md-report.integration.test.ts.snap @@ -421,7 +421,7 @@ ESLint rule **prefer-arrow-callback**. [📖 Docs](https://eslint.org/docs/lates ## About -Report was created by [Code PushUp](https://github.com/flowup/quality-metrics-cli#readme) on Sep 15, 2021, 12:00 AM. +Report was created by [Code PushUp](https://github.com/flowup/quality-metrics-cli#readme) on Wed, Sep 15, 2021, 12:00 AM UTC. |Commit|Version|Duration|Plugins|Categories|Audits| |:--|:--:|:--:|:--:|:--:|:--:| From 3dc2d08f9eede1309c275fe0d9b328aefe4ae62d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Chalk?= <34691111+matejchalk@users.noreply.github.com> Date: Wed, 24 Jan 2024 17:53:35 +0100 Subject: [PATCH 3/3] docs(utils): explain fixed locale Co-authored-by: Michael Hladky <10064416+BioPhoton@users.noreply.github.com> --- packages/utils/src/lib/formatting.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/utils/src/lib/formatting.ts b/packages/utils/src/lib/formatting.ts index 990434230..c2909ab6f 100644 --- a/packages/utils/src/lib/formatting.ts +++ b/packages/utils/src/lib/formatting.ts @@ -53,7 +53,7 @@ export function formatDuration(duration: number): string { } export function formatDate(date: Date): string { - const locale = 'en-US'; // fixed locale to ensure consistency + const locale = 'en-US'; // fixed locale to ensure consistency across local defaults execution return date .toLocaleString(locale, { weekday: 'short',