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 🙏

© 2025 – Pkg Stats / Ryan Hefner

git-data

v0.2.8

Published

High-level wrapper for GitHub's Git Database API

Readme

git-data.js

High-level wrapper for GitHub's Git Database API.

Features

Install

$ npm install git-data

Compatibility

git-data.js requires a Promise implementation. If you are targeting older browsers, you should make a Promise polyfill available globally. See here for details.

API

git-data.js exposes a GitHub object that wraps the Git Data API, as well as a Repo object that provides the high-level filesystem API. To use the library, you will need a GitHub access token. For testing purposes, you can generate a personal access token here.

const GitHub = require('git-data')

const g = new GitHub({
  token: 'your access token here'
})

const repo = g.repo({
  owner: 'nucleartide', // required
  repo: 'git-data.js',  // required
  branch: 'master',     // required
  commitPrefix: '[fix]' // optional, prepended to every commit message
})

repo.createFile(path, FileType)

Create a file. If the file exists, the existing file will be returned instead.

Params

Param | Type | Description --- | --- | --- path | String | FileType | Class | Optional. Pass in a class that extends Blob to override file type detection. See JSONBlob for an example.

Example
const readme = await repo.createFile('Readme.md')
const packageJson = await repo.createFile('package.json')
const yamlFile = await repo.createFile('test.yaml', YAMLBlob)

repo.readFile(path, FileType)

Read a file. If the file doesn't exist, an error will be thrown.

Params

Param | Type | Description --- | --- | --- path | String | FileType | Class | Optional. Pass in a class that extends Blob to override file type detection. See JSONBlob for an example.

Example
const testFile = await repo.readFile('a/b/c/test.txt')
const config = await repo.readFile('.eslintrc', JSONBlob)

Update files

This depends on the blob type. For the built-in Blob types, you may only set strings on Blobs, and you can set any JSON on JSONBlobs.

readme.content = 'this is a readme'

packageJson.content = {
  "dependencies": {
    "git-data": "0.1.0"
  }
}

repo.deleteFile(path)

Delete a file. Deleted files may not be updated. If the file doesn't exist, an error will be thrown.

Note that you may only delete files (Git blobs), not directories.

Params

Param | Type | Description --- | --- | --- path | String |

Example
await repo.deleteFile('a/b/c/test.txt')
await repo.deleteFile('.eslintrc')

repo.commit(message)

Commit all repo changes. If the repo was updated since you first started making file changes, GitHub will return a 409 conflict error.

Params

Param | Type | Description --- | --- | --- message | String | commit message

Example
try {
  await repo.commit('this is a commit message')
} catch (err) {
  if (err.status === 409) repo.invalidate()
  console.error(err.stack)
}

repo.invalidate()

Invalidate all file changes and clear the repo's cached tree and commit SHA. Use this in the case of commit conflicts.

Note that all Blobs returned by the repo may no longer be updated.

repo.invalidate()

License

MIT