0.4.8 • Published 8 months ago

@vighnesh153/github-gist v0.4.8

Weekly downloads
-
License
MIT
Repository
github
Last release
8 months ago

GitHub Gist REST API Wrapper

npm npm bundle size (scoped) npm (scoped) GitHub GitHub issues

A simple promise-based wrapper over the GitHub's REST API to play with GitHub Gists.

Installation

npm install @vighnesh153/github-gist

# Peer dependency
npm install axios

Before you begin

To interact with the gist in your GitHub account, you need to create a Personal Access Token with the gist scope.

Usage

Importing

  • Import/Export
import { GithubGist } from "@vighnesh153/github-gist";
  • Require
const { GithubGist } = require("@vighnesh153/github-gist");
  • As a script tag (UMD modules)
<!--More on JS Deliver: https://www.jsdelivr.com/-->
<script
  src="https://cdn.jsdelivr.net/npm/@vighnesh153/github-gist/dist/main.umd.js"
></script>

<script>
  const GithubGist = GithubGistUmd.GithubGist;

  // rest of the code below
</script>

Instantiation

const gist = await GithubGist.initializeUsingGistId({
  // Required
  personalAccessToken: "<GITHUB_PERSONAL_ACCESS_TOKEN>",

  // Required
  gistId: "<YOUR-GIST-ID>",

  // --- OPTIONAL PARAMS BELOW ---

  // Since the gist is also commit based, we can cache the GET urls because git guarantees that
  // if the content changes, its SHA will also change which will lead to a new URL for latest content
  // If you have lot of gists and you think that caching all the files will be heavy, you can disable
  // caching by setting it to false
  enableRequestCaching: true,

  // Whether the Gist will be a public gist or a secret gist. Note that secret gists are still
  // accessible via URLs
  isPublic: false,

  // Content GET url is CORS protected and we cannot use it directly on the frontend. So, by default,
  // we add a Proxy configuration to bypass CORS protection
  //
  // If you are running this on a server/backend, you can set it to `{ type: 'none' }`
  //
  // If you want to configure CORS manually, you can use the third type:
  // `{ type: 'custom', customRequestConfig: (url) => AxiosRequestConfig }`
  //
  corsConfig: { type: "default" },
});

Files in Gist

A gist can have multiple files. To create a file, do the following:

You can only store string content in a file. So, if you are creating a JSON file, remember to stringify the content

const pikachuJson = gist.createNewFile("pikachu.json");

console.log(pikachuJson.content);
// ''

pikachuJson.content = JSON.stringify({ message: "Pikachu is the best" });

console.log(JSON.parse(pikachuJson.content));
// { message: "Pikachu is the best" }

Save a file

Just creating the file won't save it on your GitHub Gist. To save, you will have to invoke the save() method on it

// This will save the file on the Gist
await pikachuJson.save();

Save multiple files at once

If you have multiple new files or modified files, you can invoke save() on the gist itself to save all the files in a single HTTP request

const pikachuPython = gist.createNewFile("pikachu.py");
pikachuPython.content = `print("Pikachu is the best")`;

const pikachuJs = gist.createNewFile("pikachu.js");
pikachuJs.content = `console.log("Pikachu is the best")`;

// Saves all files in a single request
await gist.save();

Get an existing file

You can access the previously created file by doing the following

const existingPikachuJson = gist.getFileByName("pikachu.json");

Alternatively, you can also use createNewFile which will return the existing file, if it exists, else, create it and return it.

const existingPikachuJson = gist.createNewFile("pikachu.json");

Fetch the latest content of a gist

If you suspect that your local gist instance is out of date with the actual GitHub Gist, you can fetch the latest content

// Entire gist
await gist.fetchLatestContent();

// Specific file
await pikachuJson.fetchLatestContent();

Get all the files

const files = gist.files;

Get the owner of the gist

const ownerLogin = gist.owner;

Things to be aware of

Gist is an awesome way to store small amount data without having to spin up a database. But it does come with some caveats.

  • You cannot use it in a multi-threaded application because all the save requests are force pushes, and you could overwrite other thread's changes
  • Requests are not atomic
  • Don't invoke save in parallel. Wait for the previous Promise to resolve completely before starting the next one.
0.4.8

8 months ago

0.4.7

1 year ago

0.4.6

1 year ago

0.4.5-alpha03

2 years ago

0.4.5-alpha02

2 years ago

0.4.5-alpha04

2 years ago

0.4.5-alpha01

2 years ago

0.4.0-alpha-04

2 years ago

0.4.0-alpha-05

2 years ago

0.4.0-alpha-06

2 years ago

0.4.1-alpha-01

2 years ago

0.4.0-alpha-07

2 years ago

0.4.0-alpha-01

2 years ago

0.4.0-alpha-02

2 years ago

0.4.0-alpha-03

2 years ago

0.4.4

2 years ago

0.4.1

2 years ago

0.4.0

2 years ago

0.4.3

2 years ago

0.4.2

2 years ago

0.3.0

2 years ago

0.2.2

2 years ago

0.2.1

2 years ago

0.1.0

2 years ago