//Setup export default async function({login, data, graphql, q, imports, queries, account}, {enabled = false} = {}) { //Plugin execution try { //Check if plugin is enabled and requirements are met if ((!enabled) || (!q.gists)) return null //Load inputs imports.metadata.plugins.gists.inputs({data, account, q}) //Query gists from GitHub API const gists = [] { //Iterate through gists let cursor = null let pushed = 0 do { console.debug(`metrics/compute/${login}/plugins > gists > retrieving gists after ${cursor}`) const {user: {gists: {edges, nodes, totalCount}}} = await graphql(queries.gists({login, after: cursor ? `after: "${cursor}"` : ""})) cursor = edges?.[edges?.length - 1]?.cursor gists.push(...nodes) gists.totalCount = totalCount pushed = nodes.length } while ((pushed) && (cursor)) console.debug(`metrics/compute/${login}/plugins > gists > loaded ${gists.length} gists`) } //Iterate through gists console.debug(`metrics/compute/${login}/plugins > gists > processing ${gists.length} gists`) let comments = 0, files = 0, forks = 0, stargazers = 0 for (const gist of gists) { //Skip forks if (gist.isFork) continue //Compute stars, forks, comments and files count stargazers += gist.stargazerCount forks += gist.forks.totalCount comments += gist.comments.totalCount files += gist.files.length } //Results return {totalCount: gists.totalCount, stargazers, forks, files, comments} } //Handle errors catch (error) { if (error.error?.message) throw error throw {error: {message: "An error occured", instance: error}} } }