//Setup export default async function({login, data, graphql, q, queries, imports, account}, {enabled = false} = {}) { //Plugin execution try { //Check if plugin is enabled and requirements are met if ((!enabled) || (!q.stars)) return null //Load inputs let {limit} = imports.metadata.plugins.stars.inputs({data, account, q}) //Retrieve user stars from graphql api console.debug(`metrics/compute/${login}/plugins > stars > querying api`) const {user: {starredRepositories: {edges: repositories}}} = await graphql(queries.stars({login, limit})) //Format starred repositories for (const edge of repositories) { //Format date const time = (Date.now() - new Date(edge.starredAt).getTime()) / (24 * 60 * 60 * 1000) let updated = new Date(edge.starredAt).toDateString().substring(4) if (time < 1) updated = `${Math.ceil(time * 24)} hour${Math.ceil(time * 24) >= 2 ? "s" : ""} ago` else if (time < 30) updated = `${Math.floor(time)} day${time >= 2 ? "s" : ""} ago` edge.starred = updated } //Results return {repositories} } //Handle errors catch (error) { if (error.error?.message) throw error throw {error: {message: "An error occured", instance: error}} } }