'use strict'; const shell = require('shelljs'); const githubUsername = require('github-username'); const nameCache = new Map(); const emailCache = new Map(); /** * @mixin * @alias actions/user */ const user = module.exports; user.git = {}; user.github = {}; /** * Retrieves user's name from Git in the global scope or the project scope * (it'll take what Git will use in the current context) * @return {String} configured git name or undefined */ user.git.name = () => { let name = nameCache.get(process.cwd()); if (name) { return name; } if (shell.which('git')) { name = shell.exec('git config --get user.name', {silent: true}).stdout.trim(); nameCache.set(process.cwd(), name); } return name; }; /** * Retrieves user's email from Git in the global scope or the project scope * (it'll take what Git will use in the current context) * @return {String} configured git email or undefined */ user.git.email = () => { let email = emailCache.get(process.cwd()); if (email) { return email; } if (shell.which('git')) { email = shell.exec('git config --get user.email', {silent: true}).stdout.trim(); emailCache.set(process.cwd(), email); } return email; }; /** * Retrieves GitHub's username from the GitHub API * @return {Promise} Resolved with the GitHub username or rejected if unable to * get the information */ user.github.username = () => githubUsername(user.git.email());