Socket
Book a DemoInstallSign in
Socket

@wroud/github

Package Overview
Dependencies
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@wroud/github

A lightweight GitHub integration library for working with git history, co-authors, issues, and commit links. Supports extracting GitHub metadata, generating GitHub URLs, and managing commit trailers in TypeScript.

latest
npmnpm
Version
0.1.4
Version published
Maintainers
1
Created
Source

@wroud/github

ESM-only package NPM version

@wroud/github is a lightweight library designed to work with git history and GitHub-specific information like co-authors, issues, commit links, and GitHub references. It provides a structured way to parse commit messages, handle GitHub metadata, and generate proper GitHub URLs for issues and commits.

This library uses the IGitCommitInfo interface from @wroud/git. You can obtain git commits by using the getGitCommits function from @wroud/git.

Features

  • GitHub metadata: Extract co-authors, GitHub issue links, and commit references from git commits.
  • TypeScript: Written in TypeScript for type safety and modern JavaScript support.
  • GitHub URL generation: Easily generate URLs for issues and commits.
  • Pure ESM package

Installation

Install via npm:

npm install @wroud/github @wroud/git

Install via yarn:

yarn add @wroud/github @wroud/git

Documentation

For detailed usage and API reference, visit the documentation site.

Example

import { getGitCommits } from "@wroud/git";
import {
  getGithubTrailers,
  getGithubLink,
  gitGithubLinks,
} from "@wroud/github";

const REPOSITORY = "wroud/repository";

// Fetch commits using getGitCommits from @wroud/git
async function printCommitLinks() {
  for await (const commit of getGitCommits({
    from: "v1.0.0",
    to: "HEAD",
    customLinks: [...gitGithubLinks], // Pass gitGithubLinks to getGitCommits
  })) {
    let message = commit.message;

    // Extract GitHub trailers (including co-authors)
    const trailers = getGithubTrailers(commit);

    // Iterate through commit links and replace tokens with GitHub links
    for (const [token, link] of Object.entries(commit.links)) {
      const githubLink = getGithubLink(link, REPOSITORY);

      if (githubLink) {
        message = message.replaceAll(token, `[${token}](${githubLink})`);
      }
    }

    console.log(`Commit: ${commit.hash}`);
    console.log(`Message: ${message}`);
    if (trailers.coAuthors.length) {
      console.log(
        `Co-authors: ${trailers.coAuthors.map((coAuthor) => coAuthor.name).join(", ")}`,
      );
    }
  }
}

printCommitLinks();

API

Interfaces

IGithubCoAuthor

Represents information about a GitHub co-author.

interface IGithubCoAuthor {
  name: string;
  username?: string;
  usernameLink?: string;
  link?: string;
  email?: string;
}

IGithubTrailers

Contains metadata such as GitHub co-authors.

interface IGithubTrailers {
  coAuthors: IGithubCoAuthor[];
}

Functions

getGithubTrailers

Extracts GitHub trailers (such as co-authors) from a commit message.

function getGithubTrailers(
  commit: IGitCommitInfo,
  options?: { loadGithubUserNames?: boolean },
): IGithubTrailers;

Generates a GitHub link for a specific issue or commit.

function getGithubLink(link: IGitLink, repository: string): string | null;

Constants

A list of regular expressions to match GitHub issue and PR references.

const gitGithubLinks = [
  /[^\w](?<token>#(?<link>\d+)(?<gh>))/gi,
  /[^\w](?<token>GH-(?<link>\d+)(?<gh>))/g,
  /[^\w](?<token>(?<repository>[^\/\s]+\/[^\/\s]+)#(?<link>\d+)(?<gh>))/gi,
];

GithubURL

Utility to generate GitHub issue and commit URLs.

const GithubURL = {
  issue: (repository: string, issue: number) =>
    `https://github.com/${repository}/issues/${issue}`,
  commit: (repository: string, hash: string) =>
    `https://github.com/${repository}/commit/${hash}`,
};

Changelog

All notable changes to this project will be documented in the CHANGELOG file.

License

This project is licensed under the MIT License. See the LICENSE file for details.

Keywords

GitHub

FAQs

Package last updated on 22 Sep 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts