GitHub.js

/**
 * @file
 * @copyright  2013 Michael Aufreiter (Development Seed) and 2016 Yahoo Inc.
 * @license    Licensed under {@link https://spdx.org/licenses/BSD-3-Clause-Clear.html BSD-3-Clause-Clear}.
 *             Github.js is freely distributable.
 */
/* eslint valid-jsdoc: ["error", {"requireReturnDescription": false}] */

import Gist from './Gist';
import User from './User';
import Issue from './Issue';
import Search from './Search';
import RateLimit from './RateLimit';
import Repository from './Repository';
import Organization from './Organization';
import Team from './Team';
import Markdown from './Markdown';
import Project from './Project';

/**
 * GitHub encapsulates the functionality to create various API wrapper objects.
 */
class GitHub {
   /**
    * Create a new GitHub.
    * @param {Requestable.auth} [auth] - the credentials to authenticate to Github. If auth is
    *                                  not provided requests will be made unauthenticated
    * @param {string} [apiBase=https://api.github.com] - the base Github API URL
    */
   constructor(auth, apiBase = 'https://api.github.com') {
      this.__apiBase = apiBase;
      this.__auth = auth || {};
   }

   /**
    * Create a new Gist wrapper
    * @param {number} [id] - the id for the gist, leave undefined when creating a new gist
    * @return {Gist}
    */
   getGist(id) {
      return new Gist(id, this.__auth, this.__apiBase);
   }

   /**
    * Create a new User wrapper
    * @param {string} [user] - the name of the user to get information about
    *                        leave undefined for the authenticated user
    * @return {User}
    */
   getUser(user) {
      return new User(user, this.__auth, this.__apiBase);
   }

   /**
    * Create a new Organization wrapper
    * @param {string} organization - the name of the organization
    * @return {Organization}
    */
   getOrganization(organization) {
      return new Organization(organization, this.__auth, this.__apiBase);
   }

   /**
    * create a new Team wrapper
    * @param {string} teamId - the name of the team
    * @return {team}
    */
   getTeam(teamId) {
      return new Team(teamId, this.__auth, this.__apiBase);
   }

   /**
    * Create a new Repository wrapper
    * @param {string} user - the user who owns the respository
    * @param {string} repo - the name of the repository
    * @return {Repository}
    */
   getRepo(user, repo) {
      return new Repository(this._getFullName(user, repo), this.__auth, this.__apiBase);
   }

   /**
    * Create a new Issue wrapper
    * @param {string} user - the user who owns the respository
    * @param {string} repo - the name of the repository
    * @return {Issue}
    */
   getIssues(user, repo) {
      return new Issue(this._getFullName(user, repo), this.__auth, this.__apiBase);
   }

   /**
    * Create a new Search wrapper
    * @param {string} query - the query to search for
    * @return {Search}
    */
   search(query) {
      return new Search(query, this.__auth, this.__apiBase);
   }

   /**
    * Create a new RateLimit wrapper
    * @return {RateLimit}
    */
   getRateLimit() {
      return new RateLimit(this.__auth, this.__apiBase);
   }

   /**
    * Create a new Markdown wrapper
    * @return {Markdown}
    */
   getMarkdown() {
      return new Markdown(this.__auth, this.__apiBase);
   }

   /**
    * Create a new Project wrapper
    * @param {string} id - the id of the project
    * @return {Markdown}
    */
   getProject(id) {
      return new Project(id, this.__auth, this.__apiBase);
   }

   /**
    * Computes the full repository name
    * @param {string} user - the username (or the full name)
    * @param {string} repo - the repository name, must not be passed if `user` is the full name
    * @return {string} the repository's full name
    */
   _getFullName(user, repo) {
      let fullname = user;

      if (repo) {
         fullname = `${user}/${repo}`;
      }

      return fullname;
   }
}

module.exports = GitHub;

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy