mirror of
https://github.com/LukeHagar/vercel.git
synced 2025-12-06 12:57:46 +00:00
* Add API for frameworks and examples * Adjust headers * Update frameworks list * Always use latest * Add types * Use now repo for downloading and listing * Use .existsSync * Remove unused packages * Use 307 for redirect * Add examples * Update tsconfig.json Co-Authored-By: Steven <steven@ceriously.com> * Make examples unique * Remove detectors from frameworks API * Use /api instead of Next.js * Install dependencies * Rename project * Change name * Empty * Change name * Update api/tsconfig.json Co-Authored-By: Steven <steven@ceriously.com> * Update examples Co-authored-by: Steven <steven@ceriously.com>
71 lines
1.9 KiB
TypeScript
71 lines
1.9 KiB
TypeScript
import fetch from 'node-fetch';
|
|
import { Repo } from '../types';
|
|
import { getExampleList } from './example-list';
|
|
|
|
/**
|
|
* Fetch the meta info of a public github repo
|
|
* @param {object} repo parsed by the `parse-github-url` package
|
|
*/
|
|
export async function getGitHubRepoInfo(repo: Repo) {
|
|
const response = await fetch(`https://api.github.com/repos/${repo.repo}`, {
|
|
headers: {
|
|
Accept: 'application/vnd.github.machine-man-preview+json',
|
|
},
|
|
});
|
|
|
|
if (response.status !== 200) {
|
|
console.log(`Non-200 response code from GitHub: ${response.status}`);
|
|
console.log(await response.text());
|
|
return null;
|
|
}
|
|
|
|
const parsed = await response.json();
|
|
|
|
if (parsed.full_name !== repo.repo) {
|
|
console.log(`Invalid response from GitHub`);
|
|
console.log(`Received:`, parsed);
|
|
return null;
|
|
}
|
|
|
|
const data: { [key: string]: any } = {
|
|
id: parsed.full_name,
|
|
name: parsed.name,
|
|
url: parsed.html_url,
|
|
owner: parsed.owner.login,
|
|
description: parsed.description,
|
|
homepage: parsed.homepage,
|
|
size: parsed.size,
|
|
createdAt: parsed.created_at,
|
|
updatedAt: parsed.updated_at,
|
|
stars: parsed.stargazers_count,
|
|
branch: repo.branch,
|
|
};
|
|
|
|
const subdirPath = repo.repo + '/tree/' + repo.branch + '/';
|
|
|
|
if (repo.path.startsWith(subdirPath)) {
|
|
// subdir
|
|
data.subdir = repo.path.slice(subdirPath.length).split('/');
|
|
}
|
|
|
|
if (data.id === 'zeit/now-examples' && data.subdir) {
|
|
// from our examples, add `homepage` and `description` fields
|
|
const example = data.subdir[0];
|
|
const exampleList = await getExampleList();
|
|
|
|
for (const item of exampleList) {
|
|
if (item.path === `/${example}`) {
|
|
data.homepage = item.demo;
|
|
data.description = item.description;
|
|
data.exampleName = item.example;
|
|
data.icon = item.icon;
|
|
data.tagline = item.tagline;
|
|
data.framework = item.framework;
|
|
return data;
|
|
}
|
|
}
|
|
}
|
|
|
|
return data;
|
|
}
|