Node utility functions for Docusaurus packages providing URL handling, file operations, Git integration, i18n, Markdown processing, content visibility, and build utilities.
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Git utilities for retrieving commit information, file history, and repository metadata. These utilities provide integration with Git repositories to extract file modification dates, author information, and handle Git-related errors gracefully.
/**
* Custom error thrown when git is not found in PATH
*/
class GitNotFoundError extends Error {
constructor(message?: string);
}
/**
* Custom error thrown when file is not tracked by git
*/
class FileNotTrackedError extends Error {
constructor(message?: string);
}/**
* Last update information with timestamp and author
*/
type LastUpdateData = {
lastUpdatedAt: number | undefined | null;
lastUpdatedBy: string | undefined | null;
};
/**
* Front matter format for last update information
*/
type FrontMatterLastUpdate = {
author?: string;
date?: Date | string;
};/**
* Fallback last update data for development/testing
*/
const LAST_UPDATE_FALLBACK: LastUpdateData;getFileCommitDate (without author)Gets git commit date for a file without author information.
/**
* Gets git commit date for a file without author information
* @param file - Absolute path to the file
* @param args - Options for commit retrieval
* @param args.age - "oldest" for first commit, "newest" for last commit
* @param args.includeAuthor - Must be false or undefined for this overload
* @returns Promise resolving to commit data with date and timestamp
* @throws GitNotFoundError when git is not found
* @throws FileNotTrackedError when file is not tracked by git
*/
function getFileCommitDate(
file: string,
args: {
age?: "oldest" | "newest";
includeAuthor?: false;
}
): Promise<{
date: Date;
timestamp: number;
}>;getFileCommitDate (with author)Gets git commit date for a file with author information.
/**
* Gets git commit date for a file with author information
* @param file - Absolute path to the file
* @param args - Options for commit retrieval
* @param args.age - "oldest" for first commit, "newest" for last commit
* @param args.includeAuthor - Must be true for this overload
* @returns Promise resolving to commit data with date, timestamp, and author
* @throws GitNotFoundError when git is not found
* @throws FileNotTrackedError when file is not tracked by git
*/
function getFileCommitDate(
file: string,
args: {
age?: "oldest" | "newest";
includeAuthor: true;
}
): Promise<{
date: Date;
timestamp: number;
author: string;
}>;Usage Examples:
import {
getFileCommitDate,
GitNotFoundError,
FileNotTrackedError
} from "@docusaurus/utils";
try {
// Get last commit date without author
const lastCommit = await getFileCommitDate("/path/to/file.md", {
age: "newest",
includeAuthor: false,
});
console.log(`Last modified: ${lastCommit.date.toISOString()}`);
console.log(`Timestamp: ${lastCommit.timestamp}`);
// Get first commit date with author
const firstCommit = await getFileCommitDate("/path/to/file.md", {
age: "oldest",
includeAuthor: true,
});
console.log(`Created by: ${firstCommit.author}`);
console.log(`Created on: ${firstCommit.date.toISOString()}`);
console.log(`Timestamp: ${firstCommit.timestamp}`);
} catch (error) {
if (error instanceof GitNotFoundError) {
console.error("Git is not installed or not found in PATH");
} else if (error instanceof FileNotTrackedError) {
console.error("File is not tracked by git");
} else {
console.error("Git command failed:", error.message);
}
}getGitLastUpdateGets last update data from git for a specific file path.
/**
* Gets last update data from git for a specific file path
* @param filePath - Path to the file
* @returns Promise resolving to last update data or null if not available
*/
function getGitLastUpdate(filePath: string): Promise<LastUpdateData | null>;getLastUpdateGets last update data, using fallback in development or when disabled.
/**
* Gets last update data, using fallback in development or when disabled
* @param filePath - Path to the file
* @returns Promise resolving to last update data or null
*/
function getLastUpdate(filePath: string): Promise<LastUpdateData | null>;readLastUpdateDataReads last update data combining git information with front matter overrides.
/**
* Reads last update data combining git information with front matter overrides
* @param filePath - Path to the file
* @param options - Last update display options
* @param options.showLastUpdateAuthor - Whether to include author information
* @param options.showLastUpdateTime - Whether to include timestamp information
* @param lastUpdateFrontMatter - Front matter override data (optional)
* @returns Promise resolving to combined last update data
*/
function readLastUpdateData(
filePath: string,
options: {
showLastUpdateAuthor?: boolean;
showLastUpdateTime?: boolean;
},
lastUpdateFrontMatter?: FrontMatterLastUpdate
): Promise<LastUpdateData>;Usage Examples:
import {
getGitLastUpdate,
getLastUpdate,
readLastUpdateData,
LAST_UPDATE_FALLBACK
} from "@docusaurus/utils";
// Get git last update
const gitUpdate = await getGitLastUpdate("/docs/intro.md");
if (gitUpdate) {
console.log(`Last updated: ${new Date(gitUpdate.lastUpdatedAt).toISOString()}`);
console.log(`Author: ${gitUpdate.lastUpdatedBy}`);
} else {
console.log("No git history available");
}
// Get last update with fallback
const lastUpdate = await getLastUpdate("/docs/intro.md");
// Will use LAST_UPDATE_FALLBACK in development or when git is unavailable
// Read last update with front matter override
const frontMatterOverride = {
author: "John Doe",
date: "2023-12-01",
};
const combinedUpdate = await readLastUpdateData(
"/docs/intro.md",
{
showLastUpdateAuthor: true,
showLastUpdateTime: true,
},
frontMatterOverride
);
console.log("Combined update data:", combinedUpdate);
// Front matter values take precedence over git data
// Using the fallback constant
console.log("Fallback data:", LAST_UPDATE_FALLBACK);
// Provides default values when git information is unavailableimport {
getFileCommitDate,
GitNotFoundError,
FileNotTrackedError
} from "@docusaurus/utils";
async function safeGetCommitDate(filePath: string) {
try {
return await getFileCommitDate(filePath, {
age: "newest",
includeAuthor: true
});
} catch (error) {
if (error instanceof GitNotFoundError) {
// Handle missing git installation
console.warn("Git not found, using current date");
return {
date: new Date(),
timestamp: Date.now(),
author: "Unknown",
};
} else if (error instanceof FileNotTrackedError) {
// Handle untracked files
console.warn(`File ${filePath} not tracked by git`);
return null;
} else {
// Handle other git errors
console.error(`Git error for ${filePath}:`, error.message);
throw error;
}
}
}Install with Tessl CLI
npx tessl i tessl/npm-docusaurus--utils