UNPKG

eleventy-plugin-github-repos

Version:

An Eleventy plugin that creates a collection containing metadata from an account's GitHub repositories

74 lines (73 loc) 2.93 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const cli_logger_1 = __importDefault(require("cli-logger")); module.exports = function (eleventyConfig, _options = {}) { eleventyConfig.addCollection('githubRepos', async (collectionApi) => { const configDefaults = { apiKey: '', userAccount: '', debugMode: false, quitOnError: false }; const APP_NAME = 'Eleventy-Plugin-GitHub-Repos'; const durationStr = `[${APP_NAME}] Duration`; var conf = { console: true, level: cli_logger_1.default.INFO }; conf.prefix = function (record) { return `[${APP_NAME}]`; }; var log = (0, cli_logger_1.default)(conf); const config = Object.assign({}, configDefaults, _options); const debugMode = config.debugMode || false; log.level(debugMode ? log.DEBUG : log.INFO); log.debug('Debug mode enabled\n'); if (debugMode) console.dir(config); if (!config.userAccount) { log.error('Missing GitHub user account'); process.exit(1); } if (!config.apiKey) { log.error('No GitHub API key provided, using unauthenticated access'); if (config.quitOnError) process.exit(1); } var currentPage = 0; var done = false; var repoURL; var options = {}; var result = []; log.info(`Fetching GitHub repositories for ${config.userAccount}`); console.time(durationStr); while (!done) { currentPage += 1; if (config.apiKey) options.headers = { 'Authorization': `Bearer ${config.apiKey}` }; repoURL = `https://api.github.com/users/${config.userAccount}/repos?per_page=100&page=${currentPage}`; log.info(`Fetching ${repoURL}`); var response = await fetch(repoURL, options); var tempRes = await response.json(); if (response.status == 200) { if (tempRes.length === 0) { done = true; } else { log.debug(`Found ${tempRes.length} repos`); result = result.concat(tempRes); } } else { log.error(`\nError: ${response.status} - ${response.statusText}\n`); if (tempRes.message) log.info(tempRes.message, tempRes.documentation_url); if (config.quitOnError) process.exit(1); } } console.timeEnd(durationStr); log.info(`Retrieved repository metadata for ${result.length} repos`); return result; }); };