Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(docs,blog): last update timestamp should be in milliseconds instead of seconds #9963

Merged
merged 1 commit into from Mar 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -539,7 +539,7 @@ describe('last update', () => {
'website-blog-with-last-update',
);

const lastUpdateFor = (date: string) => new Date(date).getTime() / 1000;
const lastUpdateFor = (date: string) => new Date(date).getTime();

it('author and time', async () => {
const plugin = await getPlugin(
Expand Down
Expand Up @@ -8,7 +8,12 @@
import {jest} from '@jest/globals';
import path from 'path';
import {loadContext} from '@docusaurus/core/src/server/site';
import {createSlugger, posixPath, DEFAULT_PLUGIN_ID} from '@docusaurus/utils';
import {
createSlugger,
posixPath,
DEFAULT_PLUGIN_ID,
GIT_FALLBACK_LAST_UPDATE_DATE,
} from '@docusaurus/utils';
import {createSidebarsUtils} from '../sidebars/utils';
import {
processDocMetadata,
Expand Down Expand Up @@ -474,7 +479,7 @@ describe('simple site', () => {
custom_edit_url: 'https://github.com/customUrl/docs/lorem.md',
unrelated_front_matter: "won't be part of metadata",
},
lastUpdatedAt: 1539502055,
lastUpdatedAt: GIT_FALLBACK_LAST_UPDATE_DATE,
lastUpdatedBy: 'Author',
tags: [],
unlisted: false,
Expand Down Expand Up @@ -571,7 +576,7 @@ describe('simple site', () => {
},
title: 'Custom Last Update',
},
lastUpdatedAt: new Date('1/1/2000').getTime() / 1000,
lastUpdatedAt: new Date('1/1/2000').getTime(),
lastUpdatedBy: 'Custom Author (processed by parseFrontMatter)',
sidebarPosition: undefined,
tags: [],
Expand Down Expand Up @@ -609,7 +614,7 @@ describe('simple site', () => {
},
title: 'Last Update Author Only',
},
lastUpdatedAt: 1539502055,
lastUpdatedAt: GIT_FALLBACK_LAST_UPDATE_DATE,
lastUpdatedBy: 'Custom Author (processed by parseFrontMatter)',
sidebarPosition: undefined,
tags: [],
Expand Down Expand Up @@ -647,7 +652,7 @@ describe('simple site', () => {
},
title: 'Last Update Date Only',
},
lastUpdatedAt: new Date('1/1/2000').getTime() / 1000,
lastUpdatedAt: new Date('1/1/2000').getTime(),
lastUpdatedBy: 'Author',
sidebarPosition: undefined,
tags: [],
Expand Down
Expand Up @@ -16,7 +16,7 @@ function LastUpdatedAtDate({
}: {
lastUpdatedAt: number;
}): JSX.Element {
const atDate = new Date(lastUpdatedAt * 1000);
const atDate = new Date(lastUpdatedAt);

const dateTimeFormat = useDateTimeFormat({
day: 'numeric',
Expand Down
Expand Up @@ -23,7 +23,7 @@ import type {
} from '@docusaurus/plugin-content-blog';
import type {DocusaurusConfig} from '@docusaurus/types';

const convertDate = (dateMs: number) => new Date(dateMs * 1000).toISOString();
const convertDate = (dateMs: number) => new Date(dateMs).toISOString();

function getBlogPost(
blogPostContent: PropBlogPostContent,
Expand Down
16 changes: 8 additions & 8 deletions packages/docusaurus-utils/src/__tests__/gitUtils.test.ts
Expand Up @@ -52,27 +52,27 @@ describe('getFileCommitDate', () => {
getFileCommitDate(path.join(repoDir, 'test.txt'), {}),
).resolves.toEqual({
date: new Date('2020-06-19'),
timestamp: new Date('2020-06-19').getTime() / 1000,
timestamp: new Date('2020-06-19').getTime(),
});
await expect(
getFileCommitDate(path.join(repoDir, 'dest.txt'), {}),
).resolves.toEqual({
date: new Date('2020-09-13'),
timestamp: new Date('2020-09-13').getTime() / 1000,
timestamp: new Date('2020-09-13').getTime(),
});
});
it('returns latest commit date', async () => {
await expect(
getFileCommitDate(path.join(repoDir, 'test.txt'), {age: 'newest'}),
).resolves.toEqual({
date: new Date('2020-09-13'),
timestamp: new Date('2020-09-13').getTime() / 1000,
timestamp: new Date('2020-09-13').getTime(),
});
await expect(
getFileCommitDate(path.join(repoDir, 'dest.txt'), {age: 'newest'}),
).resolves.toEqual({
date: new Date('2020-11-13'),
timestamp: new Date('2020-11-13').getTime() / 1000,
timestamp: new Date('2020-11-13').getTime(),
});
});
it('returns latest commit date with author', async () => {
Expand All @@ -83,7 +83,7 @@ describe('getFileCommitDate', () => {
}),
).resolves.toEqual({
date: new Date('2020-06-19'),
timestamp: new Date('2020-06-19').getTime() / 1000,
timestamp: new Date('2020-06-19').getTime(),
author: 'Caroline',
});
await expect(
Expand All @@ -93,7 +93,7 @@ describe('getFileCommitDate', () => {
}),
).resolves.toEqual({
date: new Date('2020-09-13'),
timestamp: new Date('2020-09-13').getTime() / 1000,
timestamp: new Date('2020-09-13').getTime(),
author: 'Caroline',
});
});
Expand All @@ -105,7 +105,7 @@ describe('getFileCommitDate', () => {
}),
).resolves.toEqual({
date: new Date('2020-09-13'),
timestamp: new Date('2020-09-13').getTime() / 1000,
timestamp: new Date('2020-09-13').getTime(),
author: 'Caroline',
});
await expect(
Expand All @@ -115,7 +115,7 @@ describe('getFileCommitDate', () => {
}),
).resolves.toEqual({
date: new Date('2020-11-13'),
timestamp: new Date('2020-11-13').getTime() / 1000,
timestamp: new Date('2020-11-13').getTime(),
author: 'Josh-Cena',
});
});
Expand Down
Expand Up @@ -103,7 +103,7 @@ describe('getFileLastUpdate', () => {

describe('readLastUpdateData', () => {
const testDate = '2021-01-01';
const testDateTime = new Date(testDate).getTime() / 1000;
const testTimestamp = new Date(testDate).getTime();
const testAuthor = 'ozaki';

it('read last time show author time', async () => {
Expand All @@ -112,7 +112,7 @@ describe('readLastUpdateData', () => {
{showLastUpdateAuthor: true, showLastUpdateTime: true},
{date: testDate},
);
expect(lastUpdatedAt).toEqual(testDateTime);
expect(lastUpdatedAt).toEqual(testTimestamp);
expect(lastUpdatedBy).toBe(GIT_FALLBACK_LAST_UPDATE_AUTHOR);
});

Expand All @@ -133,7 +133,7 @@ describe('readLastUpdateData', () => {
{author: testAuthor, date: testDate},
);
expect(lastUpdatedBy).toEqual(testAuthor);
expect(lastUpdatedAt).toEqual(testDateTime);
expect(lastUpdatedAt).toEqual(testTimestamp);
});

it('read last default show none', async () => {
Expand Down Expand Up @@ -191,7 +191,7 @@ describe('readLastUpdateData', () => {
{date: testDate},
);
expect(lastUpdatedBy).toBeUndefined();
expect(lastUpdatedAt).toEqual(testDateTime);
expect(lastUpdatedAt).toEqual(testTimestamp);
});

it('read last author show time', async () => {
Expand All @@ -211,7 +211,7 @@ describe('readLastUpdateData', () => {
{author: testAuthor, date: testDate},
);
expect(lastUpdatedBy).toBeUndefined();
expect(lastUpdatedAt).toEqual(testDateTime);
expect(lastUpdatedAt).toEqual(testTimestamp);
});

it('read last author show author only - both front matter', async () => {
Expand Down
9 changes: 5 additions & 4 deletions packages/docusaurus-utils/src/gitUtils.ts
Expand Up @@ -39,7 +39,7 @@ export async function getFileCommitDate(
): Promise<{
/** Relevant commit date. */
date: Date;
/** Timestamp in **seconds**, as returned from git. */
/** Timestamp returned from git, converted to **milliseconds**. */
timestamp: number;
}>;
/**
Expand All @@ -66,7 +66,7 @@ export async function getFileCommitDate(
): Promise<{
/** Relevant commit date. */
date: Date;
/** Timestamp in **seconds**, as returned from git. */
/** Timestamp returned from git, converted to **milliseconds**. */
timestamp: number;
/** The author's name, as returned from git. */
author: string;
Expand Down Expand Up @@ -150,8 +150,9 @@ export async function getFileCommitDate(
);
}

const timestamp = Number(match.groups!.timestamp);
const date = new Date(timestamp * 1000);
const timestampInSeconds = Number(match.groups!.timestamp);
const timestamp = timestampInSeconds * 1_000;
const date = new Date(timestamp);

if (includeAuthor) {
return {date, timestamp, author: match.groups!.author!};
Expand Down
8 changes: 4 additions & 4 deletions packages/docusaurus-utils/src/lastUpdateUtils.ts
Expand Up @@ -14,7 +14,7 @@ import {
} from './gitUtils';
import type {PluginOptions} from '@docusaurus/types';

export const GIT_FALLBACK_LAST_UPDATE_DATE = 1539502055;
export const GIT_FALLBACK_LAST_UPDATE_DATE = 1539502055000;

export const GIT_FALLBACK_LAST_UPDATE_AUTHOR = 'Author';

Expand All @@ -31,9 +31,9 @@ async function getGitLastUpdate(filePath: string): Promise<LastUpdateData> {
}

export type LastUpdateData = {
/** A timestamp in **seconds**, directly acquired from `git log`. */
/** A timestamp in **milliseconds**, usually read from `git log` */
lastUpdatedAt?: number;
/** The author's name directly acquired from `git log`. */
/** The author's name, usually coming from `git log` */
lastUpdatedBy?: string;
};

Expand Down Expand Up @@ -105,7 +105,7 @@ export async function readLastUpdateData(

const frontMatterAuthor = lastUpdateFrontMatter?.author;
const frontMatterTimestamp = lastUpdateFrontMatter?.date
? new Date(lastUpdateFrontMatter.date).getTime() / 1000
? new Date(lastUpdateFrontMatter.date).getTime()
: undefined;

// We try to minimize git last update calls
Expand Down