UNPKG

github-automated-repos

Version:

A powerful React library that automatically displays and updates your GitHub repositories on your portfolio or personal website. Use simple React hooks to sync your GitHub projects and keep your developer portfolio always up to date.

51 lines (50 loc) 2.67 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; export const fetchGitHubBanner = (gitHubUsername, repositoryName) => __awaiter(void 0, void 0, void 0, function* () { try { const response = yield fetch(`https://api.github.com/repos/${gitHubUsername}/${repositoryName}/contents/public`); if (!response.ok) { if (response.status === 404) { const notFoundFolder = { success: false, message: `⚠️📂 In the repository >${repositoryName}< the "public" folder was not found.`, details: { suggestion: 'Create a "public" folder and insert your banner (e.g: /public/bannerXYZ.svg - bannerABC.png - bannerEFG.jpg)', status: 404, }, }; console.warn(`${notFoundFolder.message} ℹ️${notFoundFolder.details.suggestion}`); return notFoundFolder; } throw new Error(`Error ${response.status}: ${response.statusText}`); } const jsonData = (yield response.json()); const validExtensions = ['.png', '.jpg', '.jpeg', '.svg']; const hasBanner = jsonData.some((item) => item.type === 'file' && item.name.toLowerCase().includes('banner') && validExtensions.some((ext) => item.name.toLowerCase().endsWith(ext))); if (!hasBanner) { const noBannerFound = { success: false, message: `⚠️🖼️ In repository >${repositoryName}< no banner file was found in folder "public".`, details: { suggestion: 'Insert an image that contains the name "banner" and is png, jpg, jpeg or svg', status: 200, }, }; console.warn(`${noBannerFound.message} ℹ️${noBannerFound.details.suggestion}`); return noBannerFound; } return jsonData; } catch (err) { return err; } });