npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

gh-issues-for-comments

v0.1.0

Published

Automatically create Github issues to use as blog comments

Downloads

5

Readme

gh-issues-for-comments

Automatically open a Github issue as blog comments for every articles of your blog. It also creates a gh-comments.json file to keep track of created issues for future executions and to open issues only for new articles.

This package is useful if you have a statically generated blog, such as Jekyll or Metalsmith, and you want to use Github issues as comments instead of the evil Disqus. For more details read Replacing Disqus with Github Comments or Using GitHub Issues for Blog Comments

Install

npm install gh-issues-for-comments --save

Usage

import ghComments from 'gh-issues-for-comments';

// Array of articles with any shape you like, for example obtained from Markdown files. 
// If you use default options each article must have 'id' and 'title' properties
const articles = [
  { id: 1, title: 'Hello world' }, 
  { id: 2, title: 'Hello world 2' }
];

ghComments(articles, {
  username: 'jiayihu',
  repo: 'blog',
  token: '123GithubOAuthToken',
})
  .then(createdIssues => console.log(createdIssues))
  .catch(error => console.error('Error with issues creation', error));

API

ghComments(articles, options): Promise

Create a Github issue for every article without a comments issue yet. Returns a Promise with the updated map with <article, issueId> pairs. It's the same object saved in gh-comments.json.

articles is an Array of articles objects with any shape. Each article will be used to return the data for its issue in getIssue(article) option.

options has the following shape:

  • options.username (required)

    Type: string

    Github username

  • options.repo (required)

    Type: string

    Github repository name

  • options.token (required)

    Type: string

    Github OAuth access token. Read here for more details. The only scope needed by the package is public_repo.

  • options.idProperty (optional)

    Type: string

    Default value: id

    Article property to use as unique id

  • options.jsonPath (optional)

    Type: string

    Default value: gh-comments.json

    Path to the JSON file where articles issue ids are stored

  • options.getIssue (optional)

    Type: Function

    Default value:

    function getIssue(article) {
      return {
        title: `Comments: ${article.title}`,
        body: `This issue is reserved for comments to **${article.title}**. Leave a comment below and it will be shown in the blog page.`,
        labels: ['comments'],
      };
    }

    Returns the issue data based on the article