Commit 003e5e24 authored by anuraghazra's avatar anuraghazra
Browse files

feat: initial commit

parents
Loading
Loading
Loading
Loading

.gitignore

0 → 100644
+3 −0
Original line number Diff line number Diff line
.vercel
.env
node_modules
 No newline at end of file

.vercelignore

0 → 100644
+1 −0
Original line number Diff line number Diff line
.env
 No newline at end of file

api/index.js

0 → 100644
+76 −0
Original line number Diff line number Diff line
const axios = require("axios");
require("dotenv").config();

async function fetchStats(username) {
  const res = await axios({
    url: "https://api.github.com/graphql",
    method: "post",
    headers: {
      Authorization: `bearer ${process.env.GITHUB_TOKEN}`,
    },
    data: {
      query: `
        query userInfo($login: String!) {
          user(login: $login) {
            name
            repositoriesContributedTo(first: 100, contributionTypes: [COMMIT, ISSUE, PULL_REQUEST, REPOSITORY]) {
              totalCount
            }
            pullRequests(first: 100) {
              totalCount
            }
            repositories(first: 100) {
              nodes {
                stargazers {
                  totalCount
                }
              }
            }
          }
        }
      `,
      variables: {
        login: username,
      },
    },
  });

  const stats = { totalStars: 0, contributedTo: 0, name: "", totalPRs: 0 };
  if (res.data.error) return stats;

  const user = res.data.data.user;
  stats.totalStars = user.repositories.nodes.reduce((prev, curr) => {
    return prev + curr.stargazers.totalCount;
  }, 0);

  stats.totalPRs = user.pullRequests.totalCount;
  stats.contributedTo = user.repositoriesContributedTo.totalCount;
  stats.name = user.name;
  return stats;
}

module.exports = async (req, res) => {
  const username = req.query.username;
  let { name, totalStars, totalPRs, contributedTo } = await fetchStats(
    username
  );

  res.setHeader("Content-Type", "image/svg+xml");
  res.send(`
    <svg width="495" height="130" viewBox="0 0 495 130" fill="none" xmlns="http://www.w3.org/2000/svg">
    <style>
    .header { font: 600 18px 'Segoe UI'; fill: #2F80ED }
    .stat { font: 600 14px 'Segoe UI'; fill: #333 }
    .bold { font-weight: 700 }
    </style>
    <rect x="0.5" y="0.5" width="494" height="99%" rx="4.5" fill="#FFFEFE" stroke="#E4E2E2"/>
    <text x="25" y="35" class="header">${name}'s github stats</text>
    <text x="25" y="70" class="stat bold">Total Stars:</text>
    <text x="135" y="70" class="stat">${totalStars}</text>
    <text x="25" y="90" class="stat bold">Total PRs:</text>
    <text x="135" y="90" class="stat">${totalPRs}</text>
    <text x="25" y="110" class="stat bold">Contributed to:</text>
    <text x="135" y="110" class="stat">${contributedTo} repos</text>
    </svg>
  `);
};

package-lock.json

0 → 100644
+46 −0
Original line number Diff line number Diff line
{
  "name": "github-readme-stats",
  "version": "1.0.0",
  "lockfileVersion": 1,
  "requires": true,
  "dependencies": {
    "axios": {
      "version": "0.19.2",
      "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz",
      "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==",
      "dev": true,
      "requires": {
        "follow-redirects": "1.5.10"
      }
    },
    "debug": {
      "version": "3.1.0",
      "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
      "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
      "dev": true,
      "requires": {
        "ms": "2.0.0"
      }
    },
    "dotenv": {
      "version": "8.2.0",
      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
      "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw=="
    },
    "follow-redirects": {
      "version": "1.5.10",
      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
      "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
      "dev": true,
      "requires": {
        "debug": "=3.1.0"
      }
    },
    "ms": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
      "dev": true
    }
  }
}

package.json

0 → 100644
+17 −0
Original line number Diff line number Diff line
{
  "name": "github-readme-stats",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Anurag Hazra",
  "license": "MIT",
  "devDependencies": {
    "axios": "^0.19.2"
  },
  "dependencies": {
    "dotenv": "^8.2.0"
  }
}