diff --git a/.github/scripts/build.mjs b/.github/scripts/build.mjs index 04dbf4cc..8874c692 100644 --- a/.github/scripts/build.mjs +++ b/.github/scripts/build.mjs @@ -1,12 +1,12 @@ //Imports -import ejs from "ejs" import fs from "fs/promises" +import ejs from "ejs" import fss from "fs" -import paths from "path" -import url from "url" -import sgit from "simple-git" -import metadata from "../../source/app/metrics/metadata.mjs" import yaml from "js-yaml" +import paths from "path" +import sgit from "simple-git" +import url from "url" +import metadata from "../../source/app/metrics/metadata.mjs" //Mode const [mode = "dryrun"] = process.argv.slice(2) @@ -25,34 +25,36 @@ const __test_secrets = paths.join(paths.join(__metrics, "tests/secrets.json")) //Git setup const git = sgit(__metrics) const staged = new Set() -const secrets = Object.assign(JSON.parse(`${await fs.readFile(__test_secrets)}`), {$regex:/\$\{\{\s*secrets\.(?\w+)\s*\}\}/}) -const {plugins, templates} = await metadata({log:false, diff:true}) +const secrets = Object.assign(JSON.parse(`${await fs.readFile(__test_secrets)}`), { $regex: /\$\{\{\s*secrets\.(?\w+)\s*\}\}/ }) +const { plugins, templates } = await metadata({ log: false, diff: true }) const workflow = [] //Config and general documentation auto-generation for (const step of ["config", "documentation"]) { switch (step) { case "config": - await update({source:paths.join(__action, "action.yml"), output:"action.yml"}) - await update({source:paths.join(__web, "settings.example.json"), output:"settings.example.json"}) + await update({ source: paths.join(__action, "action.yml"), output: "action.yml" }) + await update({ source: paths.join(__web, "settings.example.json"), output: "settings.example.json" }) break case "documentation": - await update({source:paths.join(__readme, "README.md"), output:"README.md", options:{root:__readme}}) - await update({source:paths.join(__readme, "partials/documentation/plugins.md"), output:"source/plugins/README.md"}) - await update({source:paths.join(__readme, "partials/documentation/templates.md"), output:"source/templates/README.md"}) + await update({ source: paths.join(__readme, "README.md"), output: "README.md", options: { root: __readme } }) + await update({ source: paths.join(__readme, "partials/documentation/plugins.md"), output: "source/plugins/README.md" }) + await update({ source: paths.join(__readme, "partials/documentation/templates.md"), output: "source/templates/README.md" }) break } } //Plugins for (const id of Object.keys(plugins)) { - const {examples, options, readme, tests, header} = await plugin(id) + const { examples, options, readme, tests, header } = await plugin(id) //Readme - await fs.writeFile(readme.path, readme.content - .replace(/()[\s\S]*()/g, `$1\n${header}\n$2`) - .replace(/()[\s\S]*()/g, `$1\n${examples.map(({test, prod, ...step}) => ["```yaml", yaml.dump(step), "```"].join("\n")).join("\n")}\n$2`) - .replace(/()[\s\S]*()/g, `$1\n${options}\n$2`) + await fs.writeFile( + readme.path, + readme.content + .replace(/()[\s\S]*()/g, `$1\n${header}\n$2`) + .replace(/()[\s\S]*()/g, `$1\n${examples.map(({ test, prod, ...step }) => ["```yaml", yaml.dump(step), "```"].join("\n")).join("\n")}\n$2`) + .replace(/()[\s\S]*()/g, `$1\n${options}\n$2`), ) console.log(`Generating source/plugins/${id}/README.md`) @@ -64,12 +66,14 @@ for (const id of Object.keys(plugins)) { //Templates for (const id of Object.keys(templates)) { - const {examples, readme, tests, header} = await template(id) + const { examples, readme, tests, header } = await template(id) //Readme - await fs.writeFile(readme.path, readme.content - .replace(/()[\s\S]*()/g, `$1\n${header}\n$2`) - .replace(/()[\s\S]*()/g, `$1\n${examples.map(({test, prod, ...step}) => ["```yaml", yaml.dump(step), "```"].join("\n")).join("\n")}\n$2`) + await fs.writeFile( + readme.path, + readme.content + .replace(/()[\s\S]*()/g, `$1\n${header}\n$2`) + .replace(/()[\s\S]*()/g, `$1\n${examples.map(({ test, prod, ...step }) => ["```yaml", yaml.dump(step), "```"].join("\n")).join("\n")}\n$2`), ) console.log(`Generating source/templates/${id}/README.md`) @@ -80,7 +84,7 @@ for (const id of Object.keys(templates)) { } //Example workflows -await update({source:paths.join(__metrics, ".github/scripts/files/examples.yml"), output:".github/workflows/examples.yml", context:{steps:yaml.dump(workflow)}}) +await update({ source: paths.join(__metrics, ".github/scripts/files/examples.yml"), output: ".github/workflows/examples.yml", context: { steps: yaml.dump(workflow) } }) //Commit and push if (mode === "publish") { @@ -98,10 +102,10 @@ console.log("Success!") //================================================================================== //Update generated files -async function update({source, output, context = {}, options = {}}) { +async function update({ source, output, context = {}, options = {} }) { console.log(`Generating ${output}`) - const {plugins, templates, packaged, descriptor} = await metadata({log:false}) - const content = await ejs.renderFile(source, {plugins, templates, packaged, descriptor, ...context}, {async:true, ...options}) + const { plugins, templates, packaged, descriptor } = await metadata({ log: false }) + const content = await ejs.renderFile(source, { plugins, templates, packaged, descriptor, ...context }, { async: true, ...options }) const file = paths.join(__metrics, output) await fs.writeFile(file, content) staged.add(file) @@ -114,16 +118,16 @@ async function plugin(id) { const examples = paths.join(path, "examples.yml") const tests = paths.join(__test_cases, `${id}.plugin.yml`) return { - readme:{ - path:readme, - content:`${await fs.readFile(readme)}` + readme: { + path: readme, + content: `${await fs.readFile(readme)}`, }, - tests:{ - path:tests + tests: { + path: tests, }, - examples:fss.existsSync(examples) ? yaml.load(await fs.readFile(examples), "utf8") ?? [] : [], - options:plugins[id].readme.table, - header:plugins[id].readme.header + examples: fss.existsSync(examples) ? yaml.load(await fs.readFile(examples), "utf8") ?? [] : [], + options: plugins[id].readme.table, + header: plugins[id].readme.header, } } @@ -134,45 +138,45 @@ async function template(id) { const examples = paths.join(path, "examples.yml") const tests = paths.join(__test_cases, `${id}.template.yml`) return { - readme:{ - path:readme, - content:`${await fs.readFile(readme)}` + readme: { + path: readme, + content: `${await fs.readFile(readme)}`, }, - tests:{ - path:tests + tests: { + path: tests, }, - examples:fss.existsSync(examples) ? yaml.load(await fs.readFile(examples), "utf8") ?? [] : [], - header:templates[id].readme.header + examples: fss.existsSync(examples) ? yaml.load(await fs.readFile(examples), "utf8") ?? [] : [], + header: templates[id].readme.header, } } //Testcase generator function testcase(name, env, args) { - const {prod = {}, test = {}, ...step} = JSON.parse(JSON.stringify(args)) - const context = {prod, test}[env] ?? {} + const { prod = {}, test = {}, ...step } = JSON.parse(JSON.stringify(args)) + const context = { prod, test }[env] ?? {} if (context.skip) return null Object.assign(step.with, context.with ?? {}) delete context.with - const result = {...step, ...context, name:`${name} - ${step.name ?? "(unnamed)"}`} + const result = { ...step, ...context, name: `${name} - ${step.name ?? "(unnamed)"}` } for (const [k, v] of Object.entries(result.with)) { - if ((env === "test")&&(secrets.$regex.test(v))) + if ((env === "test") && (secrets.$regex.test(v))) result.with[k] = v.replace(secrets.$regex, secrets[v.match(secrets.$regex)?.groups?.secret]) } if (env === "prod") { result.if = "${{ success() || failure() }}" result.uses = "lowlighter/metrics@master" - Object.assign(result.with, {plugins_errors_fatal:"yes", output_action:"none", delay:120}) + Object.assign(result.with, { plugins_errors_fatal: "yes", output_action: "none", delay: 120 }) } if (env === "test") { if (!result.with.base) delete result.with.base delete result.with.filename - Object.assign(result.with, {use_mocked_data:"yes", verify:"yes"}) + Object.assign(result.with, { use_mocked_data: "yes", verify: "yes" }) } return result -} \ No newline at end of file +} diff --git a/.github/scripts/markdown_example.mjs b/.github/scripts/markdown_example.mjs index 5f1c8246..fa2c4d90 100644 --- a/.github/scripts/markdown_example.mjs +++ b/.github/scripts/markdown_example.mjs @@ -3,19 +3,19 @@ import puppeteer from "puppeteer" //Setup browser const browser = await puppeteer.launch({ - headless:true, - executablePath:process.env.PUPPETEER_BROWSER_PATH, - args:["--no-sandbox", "--disable-extensions", "--disable-setuid-sandbox", "--disable-dev-shm-usage"], - ignoreDefaultArgs:["--disable-extensions"], + headless: true, + executablePath: process.env.PUPPETEER_BROWSER_PATH, + args: ["--no-sandbox", "--disable-extensions", "--disable-setuid-sandbox", "--disable-dev-shm-usage"], + ignoreDefaultArgs: ["--disable-extensions"], }) const page = await browser.newPage() //Select markdown example and take screenshoot -await page.setViewport({width:600, height:600}) +await page.setViewport({ width: 600, height: 600 }) await page.goto("https://github.com/lowlighter/metrics/blob/examples/metrics.markdown.md") const clip = await page.evaluate(() => { - const {x, y, width, height} = document.querySelector("#readme").getBoundingClientRect() - return {x, y, width, height} + const { x, y, width, height } = document.querySelector("#readme").getBoundingClientRect() + return { x, y, width, height } }) -await page.screenshot({type:"png", path:"metrics.markdown.png", clip, omitBackground:true}) +await page.screenshot({ type: "png", path: "metrics.markdown.png", clip, omitBackground: true }) await browser.close() diff --git a/.github/scripts/preview.mjs b/.github/scripts/preview.mjs index c2069eaa..303c7403 100644 --- a/.github/scripts/preview.mjs +++ b/.github/scripts/preview.mjs @@ -19,27 +19,28 @@ const __preview_templates_ = paths.join(__preview, ".templates_") const __preview_about = paths.join(__preview, "about/.statics") //Extract from web server -const {conf, Templates} = await setup({nosettings:true, log:false}) -const templates = Object.entries(Templates).map(([name]) => ({name, enabled:true})) -const metadata = Object.fromEntries(Object.entries(conf.metadata.plugins) - .map(([key, value]) => [key, Object.fromEntries(Object.entries(value).filter(([key]) => ["name", "icon", "category", "web", "supports"].includes(key)))]) - .map(([key, value]) => [key, key === "core" ? {...value, web:Object.fromEntries(Object.entries(value.web).filter(([key]) => /^config[.]/.test(key)).map(([key, value]) => [key.replace(/^config[.]/, ""), value]))} : value])) - +const { conf, Templates } = await setup({ nosettings: true, log: false }) +const templates = Object.entries(Templates).map(([name]) => ({ name, enabled: true })) +const metadata = Object.fromEntries( + Object.entries(conf.metadata.plugins) + .map(([key, value]) => [key, Object.fromEntries(Object.entries(value).filter(([key]) => ["name", "icon", "category", "web", "supports"].includes(key)))]) + .map(([key, value]) => [key, key === "core" ? { ...value, web: Object.fromEntries(Object.entries(value.web).filter(([key]) => /^config[.]/.test(key)).map(([key, value]) => [key.replace(/^config[.]/, ""), value])) } : value]), +) //Directories -await fs.mkdir(__preview, {recursive:true}) -await fs.mkdir(__preview_js, {recursive:true}) -await fs.mkdir(__preview_css, {recursive:true}) -await fs.mkdir(__preview_templates, {recursive:true}) -await fs.mkdir(__preview_templates_, {recursive:true}) -await fs.mkdir(__preview_about, {recursive:true}) +await fs.mkdir(__preview, { recursive: true }) +await fs.mkdir(__preview_js, { recursive: true }) +await fs.mkdir(__preview_css, { recursive: true }) +await fs.mkdir(__preview_templates, { recursive: true }) +await fs.mkdir(__preview_templates_, { recursive: true }) +await fs.mkdir(__preview_about, { recursive: true }) //Web fs.copyFile(paths.join(__web, "index.html"), paths.join(__preview, "index.html")) fs.copyFile(paths.join(__web, "favicon.png"), paths.join(__preview, ".favicon.png")) fs.copyFile(paths.join(__web, "opengraph.png"), paths.join(__preview, ".opengraph.png")) //Plugins and templates -fs.writeFile(paths.join(__preview, ".plugins"), JSON.stringify(Object.entries(metadata).filter(([_name, {category}]) => category !== "core").map(([name]) => ({name, enabled:false})))) +fs.writeFile(paths.join(__preview, ".plugins"), JSON.stringify(Object.entries(metadata).filter(([_name, { category }]) => category !== "core").map(([name]) => ({ name, enabled: false })))) fs.writeFile(paths.join(__preview, ".plugins.base"), JSON.stringify(conf.settings.plugins.base.parts)) fs.writeFile(paths.join(__preview, ".plugins.metadata"), JSON.stringify(metadata)) fs.writeFile(paths.join(__preview, ".templates__"), JSON.stringify(templates)) @@ -47,7 +48,7 @@ for (const template in conf.templates) { fs.writeFile(paths.join(__preview_templates_, template), JSON.stringify(conf.templates[template])) const __partials = paths.join(__templates, template, "partials") const __preview_partials = paths.join(__preview_templates, template, "partials") - await fs.mkdir(__preview_partials, {recursive:true}) + await fs.mkdir(__preview_partials, { recursive: true }) for (const file of await fs.readdir(__partials)) fs.copyFile(paths.join(__partials, file), paths.join(__preview_partials, file)) } @@ -71,9 +72,10 @@ fs.copyFile(paths.join(__node_modules, "prismjs/components/prism-markdown.min.js fs.copyFile(paths.join(__node_modules, "clipboard/dist/clipboard.min.js"), paths.join(__preview_js, "clipboard.min.js")) //Meta fs.writeFile(paths.join(__preview, ".version"), JSON.stringify(`${conf.package.version}-preview`)) -fs.writeFile(paths.join(__preview, ".hosted"), JSON.stringify({by:"metrics", link:"https://github.com/lowlighter/metrics"})) +fs.writeFile(paths.join(__preview, ".hosted"), JSON.stringify({ by: "metrics", link: "https://github.com/lowlighter/metrics" })) //About fs.copyFile(paths.join(__web, "about", "index.html"), paths.join(__preview, "about", "index.html")) -for (const file of await fs.readdir(__web_about)) +for (const file of await fs.readdir(__web_about)) { if (file !== ".statics") fs.copyFile(paths.join(__web_about, file), paths.join(__preview_about, file)) +} diff --git a/.github/scripts/release.mjs b/.github/scripts/release.mjs index 71c147fc..1da51460 100644 --- a/.github/scripts/release.mjs +++ b/.github/scripts/release.mjs @@ -1,8 +1,8 @@ //Imports import github from "@actions/github" import paths from "path" -import url from "url" import sgit from "simple-git" +import url from "url" //Git setup const __metrics = paths.join(paths.dirname(url.fileURLToPath(import.meta.url)), "../..") @@ -18,7 +18,7 @@ const repository = process.env.GITHUB_REPOSITORY.match(/^(?[\s\S]+)[/](?< const version = process.env.GITHUB_COMMIT_MESSAGE.match(/(?v\d+[.]\d+)/)?.groups?.version ?? null //Check arguments -if ((!repository)||(!repository.name)||(!repository.owner)) +if ((!repository) || (!repository.name) || (!repository.owner)) throw new Error(`Could not parse repository "${process.env.GITHUB_REPOSITORY}"`) console.log(`Repository: ${repository.owner}/${repository.name}`) if (!version) @@ -26,8 +26,8 @@ if (!version) console.log(`Version: ${version}`) //Load related pr -const {data:{items:prs}} = await rest.search.issuesAndPullRequests({ - q:`repo:${repository.owner}/${repository.name} is:pr is:merged author:${maintainer} assignee:${maintainer} Release ${version} in:title` +const { data: { items: prs } } = await rest.search.issuesAndPullRequests({ + q: `repo:${repository.owner}/${repository.name} is:pr is:merged author:${maintainer} assignee:${maintainer} Release ${version} in:title`, }) //Ensure that there is exactly one pr matching @@ -40,17 +40,17 @@ console.log(`Using pr#${patchnote.number}: ${patchnote.title}`) //Check whether release already exists try { - const {data:{id}} = await rest.repos.getReleaseByTag({owner:repository.owner, repo:repository.name, tag:version}) + const { data: { id } } = await rest.repos.getReleaseByTag({ owner: repository.owner, repo: repository.name, tag: version }) console.log(`Release ${version} already exists (#${id}), will replace it`) - await rest.repos.deleteRelease({owner:repository.owner, repo:repository.name, release_id:id}) + await rest.repos.deleteRelease({ owner: repository.owner, repo: repository.name, release_id: id }) console.log(`Deleting tag ${version}`) await git.push(["--delete", "origin", version]) - await new Promise(solve => setTimeout(solve, 15*1000)) + await new Promise(solve => setTimeout(solve, 15 * 1000)) } catch { console.log(`Release ${version} does not exists yet, will create it`) } //Publish release -await rest.repos.createRelease({owner:repository.owner, repo:repository.name, tag_name:version, name:`Version ${version.replace(/^v/g, "")}`, body:patchnote.body}) +await rest.repos.createRelease({ owner: repository.owner, repo: repository.name, tag_name: version, name: `Version ${version.replace(/^v/g, "")}`, body: patchnote.body }) console.log(`Successfully published`) diff --git a/source/app/action/index.mjs b/source/app/action/index.mjs index 674eff22..2707f50a 100644 --- a/source/app/action/index.mjs +++ b/source/app/action/index.mjs @@ -3,12 +3,12 @@ import core from "@actions/core" import github from "@actions/github" import octokit from "@octokit/graphql" import fs from "fs/promises" +import processes from "child_process" import paths from "path" import sgit from "simple-git" -import processes from "child_process" +import mocks from "../../../tests/mocks/index.mjs" import metrics from "../metrics/index.mjs" import setup from "../metrics/setup.mjs" -import mocks from "../../../tests/mocks/index.mjs" process.on("unhandledRejection", error => { throw error }) @@ -278,8 +278,8 @@ async function retry(func, {retries = 1, delay = 0} = {}) { try { await new Promise(async (solve, reject) => { let stdout = "" - setTimeout(() => reject("Timeout while waiting for Insights webserver"), 5*60*1000) - const web = await processes.spawn("node", ["/metrics/source/app/web/index.mjs"], {env:{...process.env, NO_SETTINGS: true }}) + setTimeout(() => reject("Timeout while waiting for Insights webserver"), 5 * 60 * 1000) + const web = await processes.spawn("node", ["/metrics/source/app/web/index.mjs"], {env:{...process.env, NO_SETTINGS:true}}) web.stdout.on("data", data => (console.debug(`web > ${data}`), stdout += data, /Server ready !/.test(stdout) ? solve() : null)) web.stderr.on("data", data => console.debug(`web > ${data}`)) }) @@ -339,7 +339,7 @@ async function retry(func, {retries = 1, delay = 0} = {}) { info.break() info.section("Saving") info("Output condition", _output_condition) - if ((_output_condition === "data-changed")&&((committer.commit) || (committer.pr))) { + if ((_output_condition === "data-changed") && ((committer.commit) || (committer.pr))) { const {svg} = await import("../metrics/utils.mjs") let data = "" await retry(async () => { @@ -485,6 +485,7 @@ async function retry(func, {retries = 1, delay = 0} = {}) { } else throw error + } info("Pull request number", number) }, {retries:retries_output_action, delay:retries_delay_output_action}) @@ -532,7 +533,7 @@ async function retry(func, {retries = 1, delay = 0} = {}) { if (delay) { info.break() info("Delay before ending job", `${delay}s`) - await new Promise(solve => setTimeout(solve, delay*1000)) + await new Promise(solve => setTimeout(solve, delay * 1000)) } //Success diff --git a/source/app/metrics/index.mjs b/source/app/metrics/index.mjs index e7062d89..36f2ee24 100644 --- a/source/app/metrics/index.mjs +++ b/source/app/metrics/index.mjs @@ -78,11 +78,11 @@ export default async function metrics({login, q}, {graphql, rest, plugins, conf, console.debug(`metrics/compute/${login} > json output`) const cache = new WeakSet() const rendered = JSON.parse(JSON.stringify(data, (key, value) => { - if ((value instanceof Set)||(Array.isArray(value))) + if ((value instanceof Set) || (Array.isArray(value))) return [...value] if (value instanceof Map) return Object.fromEntries(value) - if ((typeof value === "object")&&(value)) { + if ((typeof value === "object") && (value)) { if (cache.has(value)) return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, cache.has(v) ? "[Circular]" : v])) cache.add(value) @@ -227,14 +227,23 @@ metrics.insights = async function({login}, {graphql, rest, conf}, {Plugins, Temp "habits.days":7, "habits.facts":false, "habits.charts":true, - introduction:true + introduction:true, + } + const plugins = { + achievements:{enabled:true}, + isocalendar:{enabled:true}, + languages:{enabled:true, extras:false}, + activity:{enabled:true, markdown:"extended"}, + notable:{enabled:true}, + followup:{enabled:true}, + habits:{enabled:true, extras:false}, + introduction:{enabled:true}, } - const plugins = {achievements:{enabled:true}, isocalendar:{enabled:true}, languages:{enabled:true, extras:false}, activity:{enabled:true, markdown:"extended"}, notable:{enabled:true}, followup:{enabled:true}, habits:{enabled:true, extras:false}, introduction:{enabled:true}} return metrics({login, q}, {graphql, rest, plugins, conf, convert:"json"}, {Plugins, Templates}) } //Metrics insights static render -metrics.insights.output = async function ({login, imports, conf}, {graphql, rest, Plugins, Templates}) { +metrics.insights.output = async function({login, imports, conf}, {graphql, rest, Plugins, Templates}) { //Server console.debug(`metrics/compute/${login} > insights`) const server = `http://localhost:${conf.settings.port}` @@ -248,7 +257,7 @@ metrics.insights.output = async function ({login, imports, conf}, {graphql, rest await page.goto(`${server}/about/${login}?embed=1&localstorage=1`) await page.evaluate(async json => localStorage.setItem("local.metrics", json), json) //eslint-disable-line no-undef await page.goto(`${server}/about/${login}?embed=1&localstorage=1`) - await page.waitForSelector(".container .user", {timeout:10*60*1000}) + await page.waitForSelector(".container .user", {timeout:10 * 60 * 1000}) //Rendering console.debug(`metrics/compute/${login} > insights > rendering data`) @@ -266,4 +275,4 @@ metrics.insights.output = async function ({login, imports, conf}, {graphql, rest ` await browser.close() return {mime:"text/html", rendered} -} \ No newline at end of file +} diff --git a/source/app/metrics/metadata.mjs b/source/app/metrics/metadata.mjs index bdef5114..66c7bae6 100644 --- a/source/app/metrics/metadata.mjs +++ b/source/app/metrics/metadata.mjs @@ -1,10 +1,10 @@ //Imports import fs from "fs" import yaml from "js-yaml" +import {marked} from "marked" +import fetch from "node-fetch" import path from "path" import url from "url" -import fetch from "node-fetch" -import {marked} from "marked" //Defined categories const categories = ["core", "github", "social", "community"] @@ -293,23 +293,25 @@ metadata.plugin = async function({__plugins, __templates, name, logger}) { ` ${Object.entries(compatibility).filter(([_, value]) => value).map(([id]) => `${templates[id].name ?? ""}`).join(" ")}`, " ", " ", - ` ${[ - meta.supports?.includes("user") ? "👤 Users" : "", - meta.supports?.includes("organization") ? "👥 Organizations" : "", - meta.supports?.includes("repository") ? "📓 Repositories" : "" - ].filter(v => v).join(" ")}`, + ` ${ + [ + meta.supports?.includes("user") ? "👤 Users" : "", + meta.supports?.includes("organization") ? "👥 Organizations" : "", + meta.supports?.includes("repository") ? "📓 Repositories" : "", + ].filter(v => v).join(" ") + }`, " ", " ", ` ${[ ...(meta.scopes ?? []).map(scope => `🔑 ${{public_access:"(scopeless)"}[scope] ?? scope}`), ...Object.entries(inputs).filter(([_, {type}]) => type === "token").map(([token]) => `🗝️ ${token}`), - ...(meta.scopes?.length ? ["read:org", "read:user", "repo"].map(scope => !meta.scopes.includes(scope) ? `${scope} (optional)` : null).filter(v => v) : []) + ...(meta.scopes?.length ? ["read:org", "read:user", "repo"].map(scope => !meta.scopes.includes(scope) ? `${scope} (optional)` : null).filter(v => v) : []), ].filter(v => v).join(" ") || "No tokens are required for this plugin"}`, " ", " ", demos({colspan:2, wrap:name === "base", examples:meta.examples}), " ", - "" + "", ].join("\n") //Options table @@ -339,14 +341,14 @@ metadata.plugin = async function({__plugins, __templates, name, logger}) { cell.push(`(${Array.isArray(o.format) ? o.format[0] : o.format})`) if ("min" in o) cell.push(`(${o.min} ≤`) - if (("min" in o)||("max" in o)) + if (("min" in o) || ("max" in o)) cell.push(`${"min" in o ? "" : "("}𝑥${"max" in o ? "" : ")"}`) if ("max" in o) cell.push(`≤ ${o.max})`) cell.push("
") if ("zero" in o) cell.push(`zero behaviour: ${o.zero}
`) - if (("default" in o)&&(o.default !== "")) { + if (("default" in o) && (o.default !== "")) { let text = o.default if (o.default === ".user.login") text = "→ User login" @@ -414,26 +416,30 @@ metadata.template = async function({__templates, name, plugins, logger}) { ` ${Object.entries(compatibility).filter(([_, value]) => value).map(([id]) => `${plugins[id].icon}`).join(" ")}${meta.formats?.includes("markdown") ? " ✓ embed()" : ""}`, " ", " ", - ` ${[ - meta.supports?.includes("user") ? "👤 Users" : "", - meta.supports?.includes("organization") ? "👥 Organizations" : "", - meta.supports?.includes("repository") ? "📓 Repositories" : "" - ].filter(v => v).join(" ")}`, + ` ${ + [ + meta.supports?.includes("user") ? "👤 Users" : "", + meta.supports?.includes("organization") ? "👥 Organizations" : "", + meta.supports?.includes("repository") ? "📓 Repositories" : "", + ].filter(v => v).join(" ") + }`, " ", " ", - ` ${[ - meta.formats?.includes("svg") ? "*️⃣ SVG" : "", - meta.formats?.includes("png") ? "*️⃣ PNG" : "", - meta.formats?.includes("jpeg") ? "*️⃣ JPEG" : "", - meta.formats?.includes("json") ? "#️⃣ JSON" : "", - meta.formats?.includes("markdown") ? "🔠 Markdown" : "", - meta.formats?.includes("markdown-pdf") ? "🔠 Markdown (PDF)" : "", - ].filter(v => v).join(" ")}`, + ` ${ + [ + meta.formats?.includes("svg") ? "*️⃣ SVG" : "", + meta.formats?.includes("png") ? "*️⃣ PNG" : "", + meta.formats?.includes("jpeg") ? "*️⃣ JPEG" : "", + meta.formats?.includes("json") ? "#️⃣ JSON" : "", + meta.formats?.includes("markdown") ? "🔠 Markdown" : "", + meta.formats?.includes("markdown-pdf") ? "🔠 Markdown (PDF)" : "", + ].filter(v => v).join(" ") + }`, " ", " ", demos({colspan:2, examples:meta.examples}), " ", - "" + "", ].join("\n") //Result @@ -448,9 +454,9 @@ metadata.template = async function({__templates, name, plugins, logger}) { compatibility:{ ...Object.fromEntries(Object.entries(compatibility).filter(([_, value]) => value)), ...Object.fromEntries(Object.entries(compatibility).filter(([_, value]) => !value).map(([key, value]) => [key, meta.formats?.includes("markdown") ? "embed" : value])), - base:true + base:true, }, - header + header, }, check({q, account = "bypass", format = null}) { //Support check @@ -481,31 +487,33 @@ metadata.to = { //Demo for main and individual readmes function demos({colspan = null, wrap = false, examples = {}} = {}) { - if (("default1" in examples)&&("default2" in examples)) { + if (("default1" in examples) && ("default2" in examples)) { return [ wrap ? '' : "", '", '", wrap ? "
', - ``, + ``, "', - ``, + ``, "
" : "", ].filter(v => v).join("\n") } return [ ` `, - `${Object.entries(examples).map(([text, link]) => { - let img = `` - if (text !== "default") { - const open = text.charAt(0) === "+" ? " open" : "" - text = open ? text.substring(1) : text - text = `${text.charAt(0).toLocaleUpperCase()}${text.substring(1)}` - img = `${text}${img}` - } - return ` ${img}` - }).join("\n")}`, + `${ + Object.entries(examples).map(([text, link]) => { + let img = `` + if (text !== "default") { + const open = text.charAt(0) === "+" ? " open" : "" + text = open ? text.substring(1) : text + text = `${text.charAt(0).toLocaleUpperCase()}${text.substring(1)}` + img = `${text}${img}` + } + return ` ${img}` + }).join("\n") + }`, ' ', - " " + " ", ].filter(v => v).join("\n") } diff --git a/source/app/metrics/utils.mjs b/source/app/metrics/utils.mjs index e22da2cc..c8719ac4 100644 --- a/source/app/metrics/utils.mjs +++ b/source/app/metrics/utils.mjs @@ -3,38 +3,38 @@ import fs from "fs/promises" import prism_lang from "prismjs/components/index.js" import axios from "axios" import processes from "child_process" +import crypto from "crypto" +import {minify as csso} from "csso" +import emoji from "emoji-name-map" import fss from "fs" import GIFEncoder from "gifencoder" import jimp from "jimp" +import linguist from "linguist-js" import {marked} from "marked" +import minimatch from "minimatch" import nodechartist from "node-chartist" +import fetch from "node-fetch" import opengraph from "open-graph-scraper" import os from "os" import paths from "path" import PNG from "png-js" import prism from "prismjs" import _puppeteer from "puppeteer" +import purgecss from "purgecss" +import readline from "readline" import rss from "rss-parser" import htmlsanitize from "sanitize-html" import git from "simple-git" +import SVGO from "svgo" import twemojis from "twemoji-parser" import url from "url" import util from "util" -import fetch from "node-fetch" -import readline from "readline" -import emoji from "emoji-name-map" -import minimatch from "minimatch" -import crypto from "crypto" -import linguist from "linguist-js" -import purgecss from "purgecss" -import {minify as csso} from "csso" -import SVGO from "svgo" import xmlformat from "xml-formatter" prism_lang() //Exports -export {axios, fs, git, jimp, opengraph, os, paths, processes, rss, url, fetch, util, emoji, minimatch} +export {axios, emoji, fetch, fs, git, jimp, minimatch, opengraph, os, paths, processes, rss, url, util} /**Returns module __dirname */ export function __module(module) { @@ -81,7 +81,7 @@ export function formatters({timeZone} = {}) { } /**Bytes formatter */ - format.bytes = function (n) { + format.bytes = function(n) { for (const {u, v} of [{u:"E", v:10 ** 18}, {u:"P", v:10 ** 15}, {u:"T", v:10 ** 12}, {u:"G", v:10 ** 9}, {u:"M", v:10 ** 6}, {u:"k", v:10 ** 3}]) { if (n / v >= 1) return `${(n / v).toFixed(2).substr(0, 4).replace(/[.]0*$/, "")} ${u}B` @@ -90,7 +90,7 @@ export function formatters({timeZone} = {}) { } /**Percentage formatter */ - format.percentage = function (n, {rescale = true} = {}) { + format.percentage = function(n, {rescale = true} = {}) { return `${ (n * (rescale ? 100 : 1)).toFixed(2) .replace(/(?<=[.])(?[1-9]*)0+$/, "$") @@ -166,7 +166,7 @@ export async function chartist() { } /**Language analyzer (single file) */ -export async function language({filename, patch, prefix = "", timeout = 20*1000}) { +export async function language({filename, patch, prefix = "", timeout = 20 * 1000}) { const path = paths.join(os.tmpdir(), `${prefix}-${Math.random()}`.replace(/[^\w-]/g, "")) return new Promise(async (solve, reject) => { setTimeout(() => { @@ -222,9 +222,9 @@ export async function run(command, options, {prefixed = true, log = true} = {}) } /**Spawn command (use this to execute commands and process output on the fly) */ -export async function spawn(command, args = [], options = {}, {prefixed = true, timeout = 300*1000, stdout} = {}) { //eslint-disable-line max-params +export async function spawn(command, args = [], options = {}, {prefixed = true, timeout = 300 * 1000, stdout} = {}) { //eslint-disable-line max-params const prefix = {win32:"wsl"}[process.platform] ?? "" - if ((prefixed)&&(prefix)) { + if ((prefixed) && (prefix)) { args.unshift(command) command = prefix } @@ -403,7 +403,7 @@ export const svg = { if (Number.isFinite(Number(absolute))) padding.absolute[dimension] = Number(absolute) if (Number.isFinite(Number(relative))) - padding[dimension] = 1 + Number(relative/100) + padding[dimension] = 1 + Number(relative / 100) } console.debug(`metrics/svg/resize > padding width*${padding.width}+${padding.absolute.width}, height*${padding.height}+${padding.absolute.height}`) //Render through browser and resize height @@ -433,7 +433,7 @@ export const svg = { console.debug(`bounds after applying padding width=${width} (*${padding.width}+${padding.absolute.width}), height=${height} (*${padding.height}+${padding.absolute.height})`) //Resize svg if (document.querySelector("svg").getAttribute("height") === "auto") - console.debug("skipped height resizing because it was set to \"auto\"") + console.debug('skipped height resizing because it was set to "auto"') else document.querySelector("svg").setAttribute("height", height) //Enable animations @@ -575,8 +575,8 @@ export const svg = { if (error) throw new Error(`Could not optimize SVG: \n${error}`) return optimized - } - } + }, + }, } /**Wait */ diff --git a/source/app/web/instance.mjs b/source/app/web/instance.mjs index bbdfa4b6..e3aa6fb0 100644 --- a/source/app/web/instance.mjs +++ b/source/app/web/instance.mjs @@ -6,9 +6,9 @@ import express from "express" import ratelimit from "express-rate-limit" import cache from "memory-cache" import util from "util" +import mocks from "../../../tests/mocks/index.mjs" import metrics from "../metrics/index.mjs" import setup from "../metrics/setup.mjs" -import mocks from "../../../tests/mocks/index.mjs" /**App */ export default async function({mock, nosettings} = {}) { diff --git a/source/app/web/statics/app.js b/source/app/web/statics/app.js index 83348246..d685ba94 100644 --- a/source/app/web/statics/app.js +++ b/source/app/web/statics/app.js @@ -31,8 +31,8 @@ //Plugins (async () => { const { data: plugins } = await axios.get("/.plugins") - this.plugins.list = plugins.filter(({name}) => metadata[name]?.supports.includes("user") || metadata[name]?.supports.includes("organization")) - const categories = [...new Set(this.plugins.list.map(({category}) => category))] + this.plugins.list = plugins.filter(({ name }) => metadata[name]?.supports.includes("user") || metadata[name]?.supports.includes("organization")) + const categories = [...new Set(this.plugins.list.map(({ category }) => category))] this.plugins.categories = Object.fromEntries(categories.map(category => [category, this.plugins.list.filter(value => category === value.category)])) })(), //Base @@ -68,8 +68,10 @@ tab: { immediate: true, handler(current) { - if (current === 'action') this.clipboard = new ClipboardJS('.copy-action') - else this.clipboard?.destroy() + if (current === "action") + this.clipboard = new ClipboardJS(".copy-action") + else + this.clipboard?.destroy() }, }, palette: { @@ -181,7 +183,7 @@ scopes() { return new Set([ ...Object.entries(this.plugins.enabled).filter(([key, value]) => (key !== "base") && (value)).flatMap(([key]) => metadata[key].scopes), - ...(Object.entries(this.plugins.enabled.base).filter(([key, value]) => value).length ? metadata.base.scopes : []) + ...(Object.entries(this.plugins.enabled.base).filter(([key, value]) => value).length ? metadata.base.scopes : []), ]) }, //GitHub action auto-generated code @@ -201,17 +203,19 @@ ` steps:`, ` - uses: lowlighter/metrics@latest`, ` with:`, - ...(this.scopes.size ? [ - ` # Your GitHub token`, - ` # The following scopes are required:`, - ...[...this.scopes].map(scope => ` # - ${scope}${scope === "public_access" ? " (default scope)" : ""}`), - ` # The following additional scopes may be required:`, - ` # - read:org (for organization related metrics)`, - ` # - read:user (for user related data)`, - ` # - repo (optional, if you want to include private repositories)` - ] : [ - ` # Current configuration doesn't require a GitHub token`, - ]), + ...(this.scopes.size + ? [ + ` # Your GitHub token`, + ` # The following scopes are required:`, + ...[...this.scopes].map(scope => ` # - ${scope}${scope === "public_access" ? " (default scope)" : ""}`), + ` # The following additional scopes may be required:`, + ` # - read:org (for organization related metrics)`, + ` # - read:user (for user related data)`, + ` # - repo (optional, if you want to include private repositories)`, + ] + : [ + ` # Current configuration doesn't require a GitHub token`, + ]), ` token: ${this.scopes.size ? `${"$"}{{ secrets.METRICS_TOKEN }}` : "NOT_NEEDED"}`, ``, ` # Options`, @@ -252,7 +256,7 @@ methods: { //Refresh computed properties async refresh() { - const keys = {action:["scopes", "action"], markdown:["url", "embed"]}[this.tab] + const keys = { action: ["scopes", "action"], markdown: ["url", "embed"] }[this.tab] if (keys) { for (const key of keys) this._computedWatchers[key]?.run() diff --git a/source/app/web/statics/app.placeholder.js b/source/app/web/statics/app.placeholder.js index aedb04d0..afd92284 100644 --- a/source/app/web/statics/app.placeholder.js +++ b/source/app/web/statics/app.placeholder.js @@ -51,7 +51,7 @@ return await ejs.render(partial, data, { async: true, rmWhitespace: true }) }, //Meta-data - meta: { version: set.version, author: "lowlighter", generated:new Date().toGMTString().replace(/GMT$/g, "").trim() }, + meta: { version: set.version, author: "lowlighter", generated: new Date().toGMTString().replace(/GMT$/g, "").trim() }, //Animated animated: false, //Display size @@ -60,14 +60,14 @@ //Config config: set.config, //Extras - extras:{css:options["extras.css"] ?? ""}, + extras: { css: options["extras.css"] ?? "" }, //Base elements base: set.plugins.enabled.base, //Computed elements computed: { commits: faker.datatype.number(10000), sponsorships: faker.datatype.number(10), - licenses: { favorite: [""], used: { MIT: 1 }, about:{} }, + licenses: { favorite: [""], used: { MIT: 1 }, about: {} }, token: { scopes: [] }, repositories: { watchers: faker.datatype.number(1000), @@ -193,7 +193,7 @@ drafts: faker.datatype.number(this.drafts), skipped: faker.datatype.number(this.skipped), } - } + }, }, pr: { get count() { @@ -210,7 +210,7 @@ merged: faker.datatype.number(this.skipped), drafts: faker.datatype.number(this.drafts), } - } + }, }, user: { issues: { @@ -232,7 +232,7 @@ drafts: faker.datatype.number(100), }, }, - indepth:options["followup.indepth"] ? {} : null + indepth: options["followup.indepth"] ? {} : null, }, }) : null), @@ -240,7 +240,10 @@ ...(set.plugins.enabled.notable ? ({ notable: { - contributions: new Array(2 + faker.datatype.number(2)).fill(null).map(_ => ({ name: `${options["notable.repositories"] ? `${faker.lorem.slug()}/` : ""}${faker.lorem.slug()}`, avatar: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mOcOnfpfwAGfgLYttYINwAAAABJRU5ErkJggg==" })), + contributions: new Array(2 + faker.datatype.number(2)).fill(null).map(_ => ({ + name: `${options["notable.repositories"] ? `${faker.lorem.slug()}/` : ""}${faker.lorem.slug()}`, + avatar: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mOcOnfpfwAGfgLYttYINwAAAABJRU5ErkJggg==", + })), }, }) : null), @@ -335,7 +338,7 @@ unlock: null, text: faker.lorem.sentence(), get icon() { - const colors = {S:["#FF0000", "#FF8500"], A:["#B59151", "#FFD576"], B:["#7D6CFF", "#B2A8FF"], C:["#2088FF", "#79B8FF"], $:["#FF48BD", "#FF92D8"], X:["#7A7A7A", "#B0B0B0"]} + const colors = { S: ["#FF0000", "#FF8500"], A: ["#B59151", "#FFD576"], B: ["#7D6CFF", "#B2A8FF"], C: ["#2088FF", "#79B8FF"], $: ["#FF48BD", "#FF92D8"], X: ["#7A7A7A", "#B0B0B0"] } return `` .replace(/#primary/g, colors[this.rank][0]) .replace(/#secondary/g, colors[this.rank][1]) @@ -362,20 +365,21 @@ }) : null), //Code snippet - ...(set.plugins.enabled.code + ...(set.plugins.enabled.code ? ({ code: { snippet: { sha: faker.git.shortSha(), message: faker.lorem.sentence(), - filename: 'docs/specifications.html', + filename: "docs/specifications.html", status: "modified", additions: faker.datatype.number(50), deletions: faker.datatype.number(50), - patch: `@@ -0,0 +1,5 @@
//Imports
+ import app from "./src/app.mjs"
- import app from "./src/app.js"
//Start app
await app()
\\ No newline at end of file`, + patch: + `@@ -0,0 +1,5 @@
//Imports
+ import app from "./src/app.mjs"
- import app from "./src/app.js"
//Start app
await app()
\\ No newline at end of file`, repo: `${faker.random.word()}/${faker.random.word()}`, }, - } + }, }) : null), //Sponsors @@ -392,10 +396,10 @@ count: faker.datatype.number(100), goal: { progress: faker.datatype.number(100), - title: `$${faker.datatype.number(100)*10} per month`, - description: "Invest in the software that powers your world" - } - } + title: `$${faker.datatype.number(100) * 10} per month`, + description: "Invest in the software that powers your world", + }, + }, }) : null), //Languages @@ -412,7 +416,7 @@ get stats() { return Object.fromEntries(Object.entries(this.favorites).map(([key, { value }]) => [key, value])) }, - ["stats.recent"]:{ + ["stats.recent"]: { total: faker.datatype.number(10000), get lines() { return Object.fromEntries(Object.entries(this.favorites).map(([key, { value }]) => [key, value])) @@ -420,9 +424,9 @@ get stats() { return Object.fromEntries(Object.entries(this.favorites).map(([key, { value }]) => [key, value])) }, - commits:faker.datatype.number(500), - files:faker.datatype.number(1000), - days:Number(options["languages.recent.days"]) + commits: faker.datatype.number(500), + files: faker.datatype.number(1000), + days: Number(options["languages.recent.days"]), }, favorites: distribution(7).map((value, index, array) => ({ name: faker.lorem.word(), color: faker.internet.color(), value, size: faker.datatype.number(1000000), x: array.slice(0, index).reduce((a, b) => a + b, 0) })), recent: distribution(7).map((value, index, array) => ({ name: faker.lorem.word(), color: faker.internet.color(), value, size: faker.datatype.number(1000000), x: array.slice(0, index).reduce((a, b) => a + b, 0) })), @@ -470,8 +474,8 @@ trim: options["habits.trim"], lines: { average: { - chars: faker.datatype.number(1000)/10, - } + chars: faker.datatype.number(1000) / 10, + }, }, commits: { get hour() { @@ -655,10 +659,10 @@ ? ({ discussions: { categories: { - stats: { '🙏 Q&A': faker.datatype.number(100), '📣 Announcements': faker.datatype.number(100), '💡 Ideas': faker.datatype.number(100), '💬 General': faker.datatype.number(100) }, - favorite: '📣 Announcements' + stats: { "🙏 Q&A": faker.datatype.number(100), "📣 Announcements": faker.datatype.number(100), "💡 Ideas": faker.datatype.number(100), "💬 General": faker.datatype.number(100) }, + favorite: "📣 Announcements", }, - upvotes: { discussions:faker.datatype.number(1000), comments: faker.datatype.number(1000) }, + upvotes: { discussions: faker.datatype.number(1000), comments: faker.datatype.number(1000) }, started: faker.datatype.number(1000), comments: faker.datatype.number(1000), answers: faker.datatype.number(1000), @@ -753,9 +757,11 @@ description: faker.lorem.sentence(), count: faker.datatype.number(100), repositories: new Array(Number(options["starlists.limit.repositories"])).fill(null).map((_, i) => ({ - description: !i ? "📊 An image generator with 20+ metrics about your GitHub account such as activity, community, repositories, coding habits, website performances, music played, starred topics, etc. that you can put on your profile or elsewhere !" : faker.lorem.sentence(), + description: !i + ? "📊 An image generator with 20+ metrics about your GitHub account such as activity, community, repositories, coding habits, website performances, music played, starred topics, etc. that you can put on your profile or elsewhere !" + : faker.lorem.sentence(), name: !i ? "lowlighter/metrics" : `${faker.random.word()}/${faker.random.word()}`, - })) + })), })), }, }) @@ -1062,7 +1068,7 @@ ? ({ support: { stats: { solutions: faker.datatype.number(100), posts: faker.datatype.number(1000), topics: faker.datatype.number(1000), received: faker.datatype.number(1000), hearts: faker.datatype.number(1000) }, - badges: { uniques: [ ], multiples: [], count: faker.datatype.number(1000) } + badges: { uniques: [], multiples: [], count: faker.datatype.number(1000) }, }, }) : null), @@ -1070,7 +1076,7 @@ ...(set.plugins.enabled.screenshot ? ({ screenshot: { - image:"data:image/jpg;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mOcOnfpfwAGfgLYttYINwAAAABJRU5ErkJggg==", + image: "data:image/jpg;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mOcOnfpfwAGfgLYttYINwAAAABJRU5ErkJggg==", title: options["screenshot.title"], height: 440, width: 454, @@ -1081,10 +1087,10 @@ ...(set.plugins.enabled.skyline ? ({ skyline: { - animation:"data:image/jpg;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mOcOnfpfwAGfgLYttYINwAAAABJRU5ErkJggg==", + animation: "data:image/jpg;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mOcOnfpfwAGfgLYttYINwAAAABJRU5ErkJggg==", width: 454, height: 284, - compatibility: false + compatibility: false, }, }) : null), @@ -1175,11 +1181,11 @@ data.f.date = function(string, options) { if (options.date) { delete options.date - Object.assign(options, {day:"numeric", month:"short", year:"numeric"}) + Object.assign(options, { day: "numeric", month: "short", year: "numeric" }) } if (options.time) { delete options.time - Object.assign(options, {hour:"2-digit", minute:"2-digit", second:"2-digit"}) + Object.assign(options, { hour: "2-digit", minute: "2-digit", second: "2-digit" }) } return new Intl.DateTimeFormat("en-GB", options).format(new Date(string)) } diff --git a/source/plugins/achievements/list/organizations.mjs b/source/plugins/achievements/list/organizations.mjs index f1f6b3b1..a924528c 100644 --- a/source/plugins/achievements/list/organizations.mjs +++ b/source/plugins/achievements/list/organizations.mjs @@ -143,7 +143,7 @@ export default async function({list, login, data, computed, imports, graphql, qu //Member { - const { years: value } = computed.registered + const {years:value} = computed.registered const unlock = null list.push({ diff --git a/source/plugins/achievements/list/users.mjs b/source/plugins/achievements/list/users.mjs index caa69bf3..a4b33192 100644 --- a/source/plugins/achievements/list/users.mjs +++ b/source/plugins/achievements/list/users.mjs @@ -219,7 +219,7 @@ export default async function({list, login, data, computed, imports, graphql, qu //Member { - const { years: value } = computed.registered + const {years:value} = computed.registered const unlock = null list.push({ diff --git a/source/plugins/base/index.mjs b/source/plugins/base/index.mjs index 13da408f..94664bf3 100644 --- a/source/plugins/base/index.mjs +++ b/source/plugins/base/index.mjs @@ -95,7 +95,7 @@ export default async function({login, graphql, rest, data, q, queries, imports}, } catch (error) { console.debug(`metrics/compute/${login}/base > failed to retrieve ${_batch} repositories after ${cursor}, this is probably due to an API timeout, halving batch`) - _batch = Math.floor(_batch/2) + _batch = Math.floor(_batch / 2) if (_batch < 1) { console.debug(`metrics/compute/${login}/base > failed to retrieve repositories, cannot halve batch anymore`) throw error diff --git a/source/plugins/code/index.mjs b/source/plugins/code/index.mjs index baf3a822..c5c2633d 100644 --- a/source/plugins/code/index.mjs +++ b/source/plugins/code/index.mjs @@ -3,7 +3,7 @@ export default async function({login, q, imports, data, rest, account}, {enabled //Plugin execution try { //Check if plugin is enabled and requirements are met - if ((!enabled)||(!q.code)) + if ((!enabled) || (!q.code)) return null //Context @@ -25,15 +25,22 @@ export default async function({login, q, imports, data, rest, account}, {enabled try { for (let page = 1; page <= pages; page++) { console.debug(`metrics/compute/${login}/plugins > code > loading page ${page}/${pages}`) - events.push(...[...await Promise.all([...(context.mode === "repository" ? await rest.activity.listRepoEvents({owner:context.owner, repo:context.repo}) : await rest.activity.listEventsForAuthenticatedUser({username:login, per_page:100, page})).data - .filter(({type}) => type === "PushEvent") - .filter(({actor}) => account === "organization" ? true : actor.login?.toLocaleLowerCase() === login.toLocaleLowerCase()) - .filter(({repo:{name:repo}}) => !((skipped.includes(repo.split("/").pop())) || (skipped.includes(repo)))) - .filter(event => visibility === "public" ? event.public : true) - .flatMap(({payload}) => Promise.all(payload.commits.map(async commit => (await rest.request(commit.url)).data)))])] - .flat() - .filter(({parents}) => parents.length <= 1) - .filter(({author}) => data.shared["commits.authoring"].filter(authoring => author?.login?.toLocaleLowerCase().includes(authoring)||author?.email?.toLocaleLowerCase().includes(authoring)||author?.name?.toLocaleLowerCase().includes(authoring)).length) + events.push( + ...[ + ...await Promise.all([ + ...(context.mode === "repository" + ? await rest.activity.listRepoEvents({owner:context.owner, repo:context.repo}) + : await rest.activity.listEventsForAuthenticatedUser({username:login, per_page:100, page})).data + .filter(({type}) => type === "PushEvent") + .filter(({actor}) => account === "organization" ? true : actor.login?.toLocaleLowerCase() === login.toLocaleLowerCase()) + .filter(({repo:{name:repo}}) => !((skipped.includes(repo.split("/").pop())) || (skipped.includes(repo)))) + .filter(event => visibility === "public" ? event.public : true) + .flatMap(({payload}) => Promise.all(payload.commits.map(async commit => (await rest.request(commit.url)).data))), + ]), + ] + .flat() + .filter(({parents}) => parents.length <= 1) + .filter(({author}) => data.shared["commits.authoring"].filter(authoring => author?.login?.toLocaleLowerCase().includes(authoring) || author?.email?.toLocaleLowerCase().includes(authoring) || author?.name?.toLocaleLowerCase().includes(authoring)).length), ) } } @@ -48,8 +55,8 @@ export default async function({login, q, imports, data, rest, account}, {enabled .filter(({patch}) => (patch ? (patch.match(/\n/mg)?.length ?? 1) : Infinity) < lines) for (const file of files) file.language = await imports.language({...file, prefix:login}).catch(() => "unknown") - files = files.filter(({language}) => (!languages.length)||(languages.includes(language.toLocaleLowerCase()))) - const snippet = files[Math.floor(Math.random()*files.length)] ?? null + files = files.filter(({language}) => (!languages.length) || (languages.includes(language.toLocaleLowerCase()))) + const snippet = files[Math.floor(Math.random() * files.length)] ?? null if (snippet) { //Trim common indent from content and change line feed if (!snippet.patch.split("\n").shift().endsWith("@@")) @@ -68,4 +75,4 @@ export default async function({login, q, imports, data, rest, account}, {enabled catch (error) { throw {error:{message:"An error occured", instance:error}} } -} \ No newline at end of file +} diff --git a/source/plugins/contributors/index.mjs b/source/plugins/contributors/index.mjs index c7ad5082..0b474d92 100644 --- a/source/plugins/contributors/index.mjs +++ b/source/plugins/contributors/index.mjs @@ -69,7 +69,7 @@ export default async function({login, q, imports, data, rest, graphql, queries, //Contributions categories const types = Object.fromEntries([...new Set(Object.keys(categories))].map(type => [type, new Set()])) - if ((sections.includes("categories"))&&(extras)) { + if ((sections.includes("categories")) && (extras)) { //Temporary directory const repository = `${repo.owner}/${repo.repo}` const path = imports.paths.join(imports.os.tmpdir(), `${repository.replace(/[^\w]/g, "_")}`) @@ -90,10 +90,11 @@ export default async function({login, q, imports, data, rest, graphql, queries, stdout(line) { if (line.trim().length) files.push(line) - } + }, }) //Search for contributions type in specified categories - filesloop: for (const file of files) { + filesloop: + for (const file of files) { for (const [category, globs] of Object.entries(categories)) { for (const glob of [globs].flat(Infinity)) { if (imports.minimatch(file, glob, {nocase:true})) { diff --git a/source/plugins/core/index.mjs b/source/plugins/core/index.mjs index ebe92a87..4a857ea4 100644 --- a/source/plugins/core/index.mjs +++ b/source/plugins/core/index.mjs @@ -16,7 +16,13 @@ export default async function({login, q}, {conf, data, rest, graphql, plugins, q } //Init - const computed = {commits:0, sponsorships:0, licenses:{favorite:"", used:{}, about:{}}, token:{}, repositories:{watchers:0, stargazers:0, issues_open:0, issues_closed:0, pr_open:0, pr_closed:0, pr_merged:0, forks:0, forked:0, releases:0, deployments:0, environments:0}} + const computed = { + commits:0, + sponsorships:0, + licenses:{favorite:"", used:{}, about:{}}, + token:{}, + repositories:{watchers:0, stargazers:0, issues_open:0, issues_closed:0, pr_open:0, pr_closed:0, pr_merged:0, forks:0, forked:0, releases:0, deployments:0, environments:0}, + } const avatar = imports.imgb64(data.user.avatarUrl) data.computed = computed console.debug(`metrics/compute/${login} > formatting common metrics`) @@ -38,6 +44,7 @@ export default async function({login, q}, {conf, data, rest, graphql, plugins, q else if (process?.env?.TZ) data.config.timezone = {name:process.env.TZ, offset} + //Display data.large = display === "large" data.columns = display === "columns" @@ -101,7 +108,7 @@ export default async function({login, q}, {conf, data, rest, graphql, plugins, q const months = diff.getUTCMonth() - new Date(0).getUTCMonth() const days = diff.getUTCDate() - new Date(0).getUTCDate() - computed.registered = {years: years + days / 365.25, months} + computed.registered = {years:years + days / 365.25, months} computed.registration = years ? `${years} year${imports.s(years)} ago` : months ? `${months} month${imports.s(months)} ago` : `${days} day${imports.s(days)} ago` computed.cakeday = (years >= 1 && months === 0 && days === 0) ? true : false @@ -124,7 +131,7 @@ export default async function({login, q}, {conf, data, rest, graphql, plugins, q data.meta = { version:conf.package.version, author:conf.package.author, - generated:imports.format.date(new Date(), {date:true, time:true}) + generated:imports.format.date(new Date(), {date:true, time:true}), } //Debug flags diff --git a/source/plugins/discussions/index.mjs b/source/plugins/discussions/index.mjs index c4ade8f8..dcf2d059 100644 --- a/source/plugins/discussions/index.mjs +++ b/source/plugins/discussions/index.mjs @@ -1,69 +1,69 @@ //Setup - export default async function({login, q, imports, graphql, queries, data, account}, {enabled = false} = {}) { - //Plugin execution - try { - //Check if plugin is enabled and requirements are met - if ((!enabled)||(!q.discussions)) - return null +export default async function({login, q, imports, graphql, queries, data, account}, {enabled = false} = {}) { + //Plugin execution + try { + //Check if plugin is enabled and requirements are met + if ((!enabled) || (!q.discussions)) + return null - //Load inputs - const {categories:_categories, "categories.limit":_categories_limit} = imports.metadata.plugins.discussions.inputs({data, account, q}) - const discussions = {categories:{}, upvotes:{discussions:0, comments:0}} - discussions.display = {categories:_categories ? {limit:_categories_limit || Infinity} : null} + //Load inputs + const {categories:_categories, "categories.limit":_categories_limit} = imports.metadata.plugins.discussions.inputs({data, account, q}) + const discussions = {categories:{}, upvotes:{discussions:0, comments:0}} + discussions.display = {categories:_categories ? {limit:_categories_limit || Infinity} : null} - //Fetch general statistics - const stats = Object.fromEntries(Object.entries((await graphql(queries.discussions.statistics({login}))).user).map(([key, value]) => [key, value.totalCount])) - Object.assign(discussions, stats) + //Fetch general statistics + const stats = Object.fromEntries(Object.entries((await graphql(queries.discussions.statistics({login}))).user).map(([key, value]) => [key, value.totalCount])) + Object.assign(discussions, stats) - //Load started discussions - { - const fetched = [] - const categories = {} - let cursor = null - let pushed = 0 - do { - console.debug(`metrics/compute/${login}/discussions > retrieving discussions after ${cursor}`) - const {user:{repositoryDiscussions:{edges = [], nodes = []} = {}}} = await graphql(queries.discussions.categories({login, after:cursor ? `after: "${cursor}"` : ""})) - cursor = edges?.[edges?.length - 1]?.cursor - fetched.push(...nodes) - pushed = nodes.length - console.debug(`metrics/compute/${login}/discussions > retrieved ${pushed} discussions after ${cursor}`) - } while ((pushed) && (cursor)) + //Load started discussions + { + const fetched = [] + const categories = {} + let cursor = null + let pushed = 0 + do { + console.debug(`metrics/compute/${login}/discussions > retrieving discussions after ${cursor}`) + const {user:{repositoryDiscussions:{edges = [], nodes = []} = {}}} = await graphql(queries.discussions.categories({login, after:cursor ? `after: "${cursor}"` : ""})) + cursor = edges?.[edges?.length - 1]?.cursor + fetched.push(...nodes) + pushed = nodes.length + console.debug(`metrics/compute/${login}/discussions > retrieved ${pushed} discussions after ${cursor}`) + } while ((pushed) && (cursor)) - //Compute upvotes - fetched.map(({upvoteCount}) => discussions.upvotes.discussions += upvoteCount) + //Compute upvotes + fetched.map(({upvoteCount}) => discussions.upvotes.discussions += upvoteCount) - //Compute favorite category - for (const category of [...fetched.map(({category:{emoji, name}}) => `${imports.emoji.get(emoji) ?? emoji} ${name}`)]) - categories[category] = (categories[category] ?? 0) + 1 - const categoryEntries = Object.entries(categories).sort((a, b) => b[1] - a[1]) - discussions.categories.stats = Object.fromEntries(categoryEntries) - discussions.categories.favorite = categoryEntries[0]?.[0] ?? null - } + //Compute favorite category + for (const category of [...fetched.map(({category:{emoji, name}}) => `${imports.emoji.get(emoji) ?? emoji} ${name}`)]) + categories[category] = (categories[category] ?? 0) + 1 + const categoryEntries = Object.entries(categories).sort((a, b) => b[1] - a[1]) + discussions.categories.stats = Object.fromEntries(categoryEntries) + discussions.categories.favorite = categoryEntries[0]?.[0] ?? null + } - //Load comments - { - const fetched = [] - let cursor = null - let pushed = 0 - do { - console.debug(`metrics/compute/${login}/discussions > retrieving comments after ${cursor}`) - const {user:{repositoryDiscussionComments:{edges = [], nodes = []} = {}}} = await graphql(queries.discussions.comments({login, after:cursor ? `after: "${cursor}"` : ""})) - cursor = edges?.[edges?.length - 1]?.cursor - fetched.push(...nodes) - pushed = nodes.length - console.debug(`metrics/compute/${login}/discussions > retrieved ${pushed} comments after ${cursor}`) - } while ((pushed) && (cursor)) + //Load comments + { + const fetched = [] + let cursor = null + let pushed = 0 + do { + console.debug(`metrics/compute/${login}/discussions > retrieving comments after ${cursor}`) + const {user:{repositoryDiscussionComments:{edges = [], nodes = []} = {}}} = await graphql(queries.discussions.comments({login, after:cursor ? `after: "${cursor}"` : ""})) + cursor = edges?.[edges?.length - 1]?.cursor + fetched.push(...nodes) + pushed = nodes.length + console.debug(`metrics/compute/${login}/discussions > retrieved ${pushed} comments after ${cursor}`) + } while ((pushed) && (cursor)) - //Compute upvotes - fetched.map(({upvoteCount}) => discussions.upvotes.comments += upvoteCount) - } + //Compute upvotes + fetched.map(({upvoteCount}) => discussions.upvotes.comments += upvoteCount) + } - //Results - return discussions - } - //Handle errors - catch (error) { - throw {error:{message:"An error occured", instance:error}} - } + //Results + return discussions } + //Handle errors + catch (error) { + throw {error:{message:"An error occured", instance:error}} + } +} diff --git a/source/plugins/followup/index.mjs b/source/plugins/followup/index.mjs index 6c08e289..27a7393c 100644 --- a/source/plugins/followup/index.mjs +++ b/source/plugins/followup/index.mjs @@ -29,7 +29,7 @@ export default async function({login, data, computed, imports, q, graphql, queri closed:0, drafts:0, skipped:0, - } + }, }, pr:{ get count() { @@ -50,13 +50,12 @@ export default async function({login, data, computed, imports, q, graphql, queri closed:0, merged:0, drafts:0, - } + }, }, } //Extras features if (extras) { - //Indepth mode if (indepth) { console.debug(`metrics/compute/${login}/plugins > followup > indepth`) @@ -90,7 +89,7 @@ export default async function({login, data, computed, imports, q, graphql, queri } //Load user issues and pull requests - if ((account === "user")&&(sections.includes("user"))) { + if ((account === "user") && (sections.includes("user"))) { const search = await graphql(queries.followup.user({login})) followup.user = { issues:{ diff --git a/source/plugins/habits/index.mjs b/source/plugins/habits/index.mjs index 1257980f..259dec3e 100644 --- a/source/plugins/habits/index.mjs +++ b/source/plugins/habits/index.mjs @@ -1,5 +1,5 @@ //Legacy import -import { recent as recent_analyzer } from "./../languages/analyzers.mjs" +import {recent as recent_analyzer} from "./../languages/analyzers.mjs" //Setup export default async function({login, data, rest, imports, q, account}, {enabled = false, extras = false, ...defaults} = {}) { @@ -45,7 +45,7 @@ export default async function({login, data, rest, imports, q, account}, {enabled ...await Promise.allSettled( commits .flatMap(({payload}) => payload.commits) - .filter(({author}) => data.shared["commits.authoring"].filter(authoring => author?.login?.toLocaleLowerCase().includes(authoring)||author?.email?.toLocaleLowerCase().includes(authoring)||author?.name?.toLocaleLowerCase().includes(authoring)).length) + .filter(({author}) => data.shared["commits.authoring"].filter(authoring => author?.login?.toLocaleLowerCase().includes(authoring) || author?.email?.toLocaleLowerCase().includes(authoring) || author?.name?.toLocaleLowerCase().includes(authoring)).length) .map(async commit => (await rest.request(commit)).data.files), ), ] @@ -93,22 +93,23 @@ export default async function({login, data, rest, imports, q, account}, {enabled //Compute average number of characters per line of code fetched console.debug(`metrics/compute/${login}/plugins > habits > computing average number of characters per line of code`) const lines = patches.flatMap(({patch}) => patch.split("\n").map(line => line.length)) - habits.lines.average.chars = lines.reduce((a, b) => a + b, 0)/lines.length + habits.lines.average.chars = lines.reduce((a, b) => a + b, 0) / lines.length } //Linguist - if ((extras)&&(charts)) { + if ((extras) && (charts)) { //Check if linguist exists console.debug(`metrics/compute/${login}/plugins > habits > searching recently used languages using linguist`) if (patches.length) { //Call language analyzer (note: using content from other plugin is usually disallowed, this is mostly for legacy purposes) habits.linguist.available = true const {total, stats} = await recent_analyzer({login, data, imports, rest, account}, {days, load:from || 1000, tempdir:"habits"}) - habits.linguist.languages = Object.fromEntries(Object.entries(stats).map(([language, value]) => [language, value/total])) + habits.linguist.languages = Object.fromEntries(Object.entries(stats).map(([language, value]) => [language, value / total])) habits.linguist.ordered = Object.entries(habits.linguist.languages).sort(([_an, a], [_bn, b]) => b - a) } else console.debug(`metrics/compute/${login}/plugins > habits > linguist not available`) + } //Results diff --git a/source/plugins/isocalendar/index.mjs b/source/plugins/isocalendar/index.mjs index dcff35ae..e6ac07d4 100644 --- a/source/plugins/isocalendar/index.mjs +++ b/source/plugins/isocalendar/index.mjs @@ -114,4 +114,4 @@ async function statistics({login, graphql, queries, start, end, calendar}) { //Compute average average = (values.reduce((a, b) => a + b, 0) / values.length).toFixed(2).replace(/[.]0+$/, "") return {streak, max, average} -} \ No newline at end of file +} diff --git a/source/plugins/languages/analyzers.mjs b/source/plugins/languages/analyzers.mjs index 3daa5641..c280532a 100644 --- a/source/plugins/languages/analyzers.mjs +++ b/source/plugins/languages/analyzers.mjs @@ -61,15 +61,16 @@ export async function recent({login, data, imports, rest, account}, {skipped = [ //Get user recent activity console.debug(`metrics/compute/${login}/plugins > languages > querying api`) - const commits = [], pages = Math.ceil(load/100), results = {total:0, lines:{}, stats:{}, colors:{}, commits:0, files:0, missed:0, days} + const commits = [], pages = Math.ceil(load / 100), results = {total:0, lines:{}, stats:{}, colors:{}, commits:0, files:0, missed:0, days} try { for (let page = 1; page <= pages; page++) { console.debug(`metrics/compute/${login}/plugins > languages > loading page ${page}`) - commits.push(...(await rest.activity.listEventsForAuthenticatedUser({username:login, per_page:100, page})).data - .filter(({type}) => type === "PushEvent") - .filter(({actor}) => account === "organization" ? true : actor.login?.toLocaleLowerCase() === login.toLocaleLowerCase()) - .filter(({repo:{name:repo}}) => (!skipped.includes(repo.toLocaleLowerCase())) && (!skipped.includes(repo.toLocaleLowerCase().split("/").pop()))) - .filter(({created_at}) => new Date(created_at) > new Date(Date.now() - days * 24 * 60 * 60 * 1000)) + commits.push( + ...(await rest.activity.listEventsForAuthenticatedUser({username:login, per_page:100, page})).data + .filter(({type}) => type === "PushEvent") + .filter(({actor}) => account === "organization" ? true : actor.login?.toLocaleLowerCase() === login.toLocaleLowerCase()) + .filter(({repo:{name:repo}}) => (!skipped.includes(repo.toLocaleLowerCase())) && (!skipped.includes(repo.toLocaleLowerCase().split("/").pop()))) + .filter(({created_at}) => new Date(created_at) > new Date(Date.now() - days * 24 * 60 * 60 * 1000)), ) } } @@ -86,17 +87,17 @@ export async function recent({login, data, imports, rest, account}, {skipped = [ ...await Promise.allSettled( commits .flatMap(({payload}) => payload.commits) - .filter(({author}) => data.shared["commits.authoring"].filter(authoring => author?.login?.toLocaleLowerCase().includes(authoring)||author?.email?.toLocaleLowerCase().includes(authoring)||author?.name?.toLocaleLowerCase().includes(authoring)).length) + .filter(({author}) => data.shared["commits.authoring"].filter(authoring => author?.login?.toLocaleLowerCase().includes(authoring) || author?.email?.toLocaleLowerCase().includes(authoring) || author?.name?.toLocaleLowerCase().includes(authoring)).length) .map(commit => commit.url) .map(async commit => (await rest.request(commit)).data), - ) + ), ] - .filter(({status}) => status === "fulfilled") - .map(({value}) => value) - .filter(({parents}) => parents.length <= 1) - .map(({files}) => files) - .flatMap(files => files.map(file => ({name:imports.paths.basename(file.filename), directory:imports.paths.dirname(file.filename), patch:file.patch ?? "", repo:file.raw_url?.match(/(?<=^https:..github.com\/)(?.*)(?=\/raw)/)?.groups.repo ?? "_"}))) - .map(({name, directory, patch, repo}) => ({name, directory:`${repo.replace(/[/]/g, "@")}/${directory}`, patch:patch.split("\n").filter(line => /^[+]/.test(line)).map(line => line.substring(1)).join("\n")})) + .filter(({status}) => status === "fulfilled") + .map(({value}) => value) + .filter(({parents}) => parents.length <= 1) + .map(({files}) => files) + .flatMap(files => files.map(file => ({name:imports.paths.basename(file.filename), directory:imports.paths.dirname(file.filename), patch:file.patch ?? "", repo:file.raw_url?.match(/(?<=^https:..github.com\/)(?.*)(?=\/raw)/)?.groups.repo ?? "_"}))) + .map(({name, directory, patch, repo}) => ({name, directory:`${repo.replace(/[/]/g, "@")}/${directory}`, patch:patch.split("\n").filter(line => /^[+]/.test(line)).map(line => line.substring(1)).join("\n")})) //Temporary directory const path = imports.paths.join(imports.os.tmpdir(), `${data.user.databaseId}-${tempdir}`) @@ -164,13 +165,13 @@ async function analyze({login, imports, data}, {results, path, categories = ["pr console.debug(`metrics/compute/${login}/plugins > languages > indepth > checking git log`) for (let page = 0; ; page++) { try { - console.debug(`metrics/compute/${login}/plugins > languages > indepth > processing commits ${page*per_page} from ${(page+1)*per_page}`) + console.debug(`metrics/compute/${login}/plugins > languages > indepth > processing commits ${page * per_page} from ${(page + 1) * per_page}`) let empty = true, file = null, lang = null - await imports.spawn("git", ["log", ...data.shared["commits.authoring"].map(authoring => `--author="${authoring}"`), "--regexp-ignore-case", "--format=short", "--patch", `--max-count=${per_page}`, `--skip=${page*per_page}`], {cwd:path}, { + await imports.spawn("git", ["log", ...data.shared["commits.authoring"].map(authoring => `--author="${authoring}"`), "--regexp-ignore-case", "--format=short", "--patch", `--max-count=${per_page}`, `--skip=${page * per_page}`], {cwd:path}, { stdout(line) { try { //Unflag empty output - if ((empty)&&(line.trim().length)) + if ((empty) && (line.trim().length)) empty = false //Commits counter if (/^commit [0-9a-f]{40}$/.test(line)) { @@ -178,13 +179,13 @@ async function analyze({login, imports, data}, {results, path, categories = ["pr return } //Ignore empty lines or unneeded lines - if ((!/^[+]/.test(line))||(!line.length)) + if ((!/^[+]/.test(line)) || (!line.length)) return //File marker if (/^[+]{3}\sb[/](?[\s\S]+)$/.test(line)) { file = `${path}/${line.match(/^[+]{3}\sb[/](?[\s\S]+)$/)?.groups?.file}`.replace(/\\/g, "/") lang = files[file] ?? null - if ((lang)&&(!categories.includes(languageResults[lang].type))) + if ((lang) && (!categories.includes(languageResults[lang].type))) lang = null edited.add(file) return @@ -203,7 +204,7 @@ async function analyze({login, imports, data}, {results, path, categories = ["pr catch (error) { console.debug(`metrics/compute/${login}/plugins > languages > indepth > an error occured while processing line (${error.message}), skipping...`) } - } + }, }) if (empty) { console.debug(`metrics/compute/${login}/plugins > languages > indepth > no more commits`) @@ -223,7 +224,7 @@ if (/languages.analyzers.mjs$/.test(process.argv[1])) { (async function() { //Parse inputs const [_authoring, path] = process.argv.slice(2) - if ((!_authoring)||(!path)) { + if ((!_authoring) || (!path)) { console.log("Usage is:\n npm run indepth -- \n\n") process.exit(1) } @@ -235,7 +236,7 @@ if (/languages.analyzers.mjs$/.test(process.argv[1])) { //Prepare call const imports = await import("../../app/metrics/utils.mjs") const results = {total:0, lines:{}, colors:{}, stats:{}, missed:0} - console.debug = log => /exited with code null/.test(log) ? console.error(log.replace(/^.*--max-count=(?\d+) --skip=(?\d+).*$/, (_, step, start) => `error: skipped commits ${start} from ${Number(start)+Number(step)}`)) : null + console.debug = log => /exited with code null/.test(log) ? console.error(log.replace(/^.*--max-count=(?\d+) --skip=(?\d+).*$/, (_, step, start) => `error: skipped commits ${start} from ${Number(start) + Number(step)}`)) : null //Analyze repository console.log(`commits authoring | ${authoring}\nrepository path | ${path}\n`) diff --git a/source/plugins/languages/index.mjs b/source/plugins/languages/index.mjs index 5ccee37f..4df0cbc8 100644 --- a/source/plugins/languages/index.mjs +++ b/source/plugins/languages/index.mjs @@ -17,7 +17,11 @@ export default async function({login, data, imports, q, rest, account}, {enabled } //Load inputs - let {ignored, skipped, colors, aliases, details, threshold, limit, indepth, "analysis.timeout":timeout, sections, categories, "recent.categories":_recent_categories, "recent.load":_recent_load, "recent.days":_recent_days} = imports.metadata.plugins.languages.inputs({data, account, q}) + let {ignored, skipped, colors, aliases, details, threshold, limit, indepth, "analysis.timeout":timeout, sections, categories, "recent.categories":_recent_categories, "recent.load":_recent_load, "recent.days":_recent_days} = imports.metadata.plugins.languages.inputs({ + data, + account, + q, + }) threshold = (Number(threshold.replace(/%$/, "")) || 0) / 100 skipped.push(...data.shared["repositories.skipped"]) if (!limit) @@ -59,7 +63,7 @@ export default async function({login, data, imports, q, rest, account}, {enabled //Extras features if (extras) { //Recently used languages - if ((sections.includes("recently-used"))&&(context.mode === "user")) { + if ((sections.includes("recently-used")) && (context.mode === "user")) { try { console.debug(`metrics/compute/${login}/plugins > languages > using recent analyzer`) languages["stats.recent"] = await recent_analyzer({login, data, imports, rest, account}, {skipped, categories:_recent_categories ?? categories, days:_recent_days, load:_recent_load, timeout}) @@ -102,7 +106,8 @@ export default async function({login, data, imports, q, rest, account}, {enabled //Compute languages stats for (const {section, stats = {}, lines = {}, total = 0} of [{section:"favorites", stats:languages.stats, lines:languages.lines, total:languages.total}, {section:"recent", ...languages["stats.recent"]}]) { console.debug(`metrics/compute/${login}/plugins > languages > computing stats ${section}`) - languages[section] = Object.entries(stats).filter(([name]) => !ignored.includes(name.toLocaleLowerCase())).sort(([_an, a], [_bn, b]) => b - a).slice(0, limit).map(([name, value]) => ({name, value, size:value, color:languages.colors[name], x:0})).filter(({value}) => value / total > threshold) + languages[section] = Object.entries(stats).filter(([name]) => !ignored.includes(name.toLocaleLowerCase())).sort(([_an, a], [_bn, b]) => b - a).slice(0, limit).map(([name, value]) => ({name, value, size:value, color:languages.colors[name], x:0})).filter(({value}) => value / total > threshold + ) const visible = {total:Object.values(languages[section]).map(({size}) => size).reduce((a, b) => a + b, 0)} for (let i = 0; i < languages[section].length; i++) { const {name} = languages[section][i] diff --git a/source/plugins/lines/index.mjs b/source/plugins/lines/index.mjs index c4b2aec1..accf1cef 100644 --- a/source/plugins/lines/index.mjs +++ b/source/plugins/lines/index.mjs @@ -23,7 +23,8 @@ export default async function({login, data, imports, rest, q, account}, {enabled //Get contributors stats from repositories console.debug(`metrics/compute/${login}/plugins > lines > querying api`) const lines = {added:0, deleted:0} - const response = [...await Promise.allSettled(repositories.map(({repo, owner}) => (skipped.includes(repo.toLocaleLowerCase())) || (skipped.includes(`${owner}/${repo}`.toLocaleLowerCase())) ? {} : rest.repos.getContributorsStats({owner, repo})))].filter(({status}) => status === "fulfilled").map(({value}) => value) + const response = [...await Promise.allSettled(repositories.map(({repo, owner}) => (skipped.includes(repo.toLocaleLowerCase())) || (skipped.includes(`${owner}/${repo}`.toLocaleLowerCase())) ? {} : rest.repos.getContributorsStats({owner, repo})))].filter(({status}) => status === "fulfilled" + ).map(({value}) => value) //Compute changed lines console.debug(`metrics/compute/${login}/plugins > lines > computing total diff`) diff --git a/source/plugins/music/index.mjs b/source/plugins/music/index.mjs index 17fd26dc..b7f8b3ba 100644 --- a/source/plugins/music/index.mjs +++ b/source/plugins/music/index.mjs @@ -132,11 +132,11 @@ export default async function({login, imports, data, q, account}, {enabled = fal //Parse tracklist tracks = [ ...await frame.evaluate(() => [...document.querySelectorAll("ytmusic-playlist-shelf-renderer ytmusic-responsive-list-item-renderer")].map(item => ({ - name:item.querySelector("yt-formatted-string.title > a")?.innerText ?? "", - artist:item.querySelector(".secondary-flex-columns > yt-formatted-string > a")?.innerText ?? "", - artwork:item.querySelector("img").src, - }) - )), + name:item.querySelector("yt-formatted-string.title > a")?.innerText ?? "", + artist:item.querySelector(".secondary-flex-columns > yt-formatted-string > a")?.innerText ?? "", + artwork:item.querySelector("img").src, + })) + ), ] break } @@ -257,12 +257,11 @@ export default async function({login, imports, data, q, account}, {enabled = fal try { //Request access token console.debug(`metrics/compute/${login}/plugins > music > requesting access token with youtube refresh token`) - const res = await imports.axios.post("https://music.youtube.com/youtubei/v1/browse?alt=json&key=AIzaSyC9XL3ZjWddXya6X74dJoCTL-WEYFDNX30", - { + const res = await imports.axios.post("https://music.youtube.com/youtubei/v1/browse?alt=json&key=AIzaSyC9XL3ZjWddXya6X74dJoCTL-WEYFDNX30", { browseEndpointContextSupportedConfigs:{ - browseEndpointContextMusicConfig:{ - pageType:"MUSIC_PAGE_TYPE_PLAYLIST", - } + browseEndpointContextMusicConfig:{ + pageType:"MUSIC_PAGE_TYPE_PLAYLIST", + }, }, context:{ client:{ @@ -272,9 +271,8 @@ export default async function({login, imports, data, q, account}, {enabled = fal hl:"en", }, }, - browseId:"FEmusic_history" - }, - { + browseId:"FEmusic_history", + }, { headers:{ Authorization:SAPISIDHASH, Cookie:token, @@ -337,14 +335,14 @@ export default async function({login, imports, data, q, account}, {enabled = fal Object.defineProperty(modes, "top", { get() { return `Top played artists ${time_msg}` - } + }, }) } else { Object.defineProperty(modes, "top", { get() { return `Top played tracks ${time_msg}` - } + }, }) } @@ -355,7 +353,7 @@ export default async function({login, imports, data, q, account}, {enabled = fal //Prepare credentials const [client_id, client_secret, refresh_token] = token.split(",").map(part => part.trim()) if ((!client_id) || (!client_secret) || (!refresh_token)) - throw { error: { message: "Spotify token must contain client id/secret and refresh token" } } + throw {error:{message:"Spotify token must contain client id/secret and refresh token"}} else if (limit > 50) throw {error:{message:"Spotify top limit cannot be greater than 50"}} @@ -372,40 +370,39 @@ export default async function({login, imports, data, q, account}, {enabled = fal //Retrieve tracks console.debug(`metrics/compute/${login}/plugins > music > querying spotify api`) tracks = [] - const loaded = - top_type === "artists" - ? ( - await imports.axios.get( - `https://api.spotify.com/v1/me/top/artists?time_range=${time_range}_term&limit=${limit}`, - { - headers: { - "Content-Type": "application/json", - Accept: "application/json", - Authorization: `Bearer ${access}`, - }, - } - ) - ).data.items.map(({ name, genres, images }) => ({ - name, - artist: genres.join(" • "), - artwork: images[0].url, - })) - : ( - await imports.axios.get( - `https://api.spotify.com/v1/me/top/tracks?time_range=${time_range}_term&limit=${limit}`, - { - headers: { - "Content-Type": "application/json", - Accept: "application/json", - Authorization: `Bearer ${access}`, - }, - } - ) - ).data.items.map(({ name, artists, album }) => ({ - name, - artist: artists[0].name, - artwork: album.images[0].url, - })) + const loaded = top_type === "artists" + ? ( + await imports.axios.get( + `https://api.spotify.com/v1/me/top/artists?time_range=${time_range}_term&limit=${limit}`, + { + headers:{ + "Content-Type":"application/json", + Accept:"application/json", + Authorization:`Bearer ${access}`, + }, + }, + ) + ).data.items.map(({name, genres, images}) => ({ + name, + artist:genres.join(" • "), + artwork:images[0].url, + })) + : ( + await imports.axios.get( + `https://api.spotify.com/v1/me/top/tracks?time_range=${time_range}_term&limit=${limit}`, + { + headers:{ + "Content-Type":"application/json", + Accept:"application/json", + Authorization:`Bearer ${access}`, + }, + }, + ) + ).data.items.map(({name, artists, album}) => ({ + name, + artist:artists[0].name, + artwork:album.images[0].url, + })) //Ensure no duplicate are added for (const track of loaded) { if (!tracks.map(({name}) => name).includes(track.name)) @@ -431,38 +428,37 @@ export default async function({login, imports, data, q, account}, {enabled = fal try { console.debug(`metrics/compute/${login}/plugins > music > querying lastfm api`) const period = time_range === "short" ? "1month" : time_range === "medium" ? "6month" : "overall" - tracks = - top_type === "artists" - ? ( - await imports.axios.get( - `https://ws.audioscrobbler.com/2.0/?method=user.gettopartists&user=${user}&api_key=${token}&limit=${limit}&period=${period}&format=json`, - { - headers: { - "User-Agent": "lowlighter/metrics", - Accept: "application/json", - }, - } - ) - ).data.topartists.artist.map(artist => ({ - name: artist.name, - artist: `Play count: ${artist.playcount}`, - artwork: artist.image.reverse()[0]["#text"], - })) - : ( - await imports.axios.get( - `https://ws.audioscrobbler.com/2.0/?method=user.gettoptracks&user=${user}&api_key=${token}&limit=${limit}&period=${period}&format=json`, - { - headers: { - "User-Agent": "lowlighter/metrics", - Accept: "application/json", - }, - } - ) - ).data.toptracks.track.map(track => ({ - name: track.name, - artist: track.artist.name, - artwork: track.image.reverse()[0]["#text"], - })) + tracks = top_type === "artists" + ? ( + await imports.axios.get( + `https://ws.audioscrobbler.com/2.0/?method=user.gettopartists&user=${user}&api_key=${token}&limit=${limit}&period=${period}&format=json`, + { + headers:{ + "User-Agent":"lowlighter/metrics", + Accept:"application/json", + }, + }, + ) + ).data.topartists.artist.map(artist => ({ + name:artist.name, + artist:`Play count: ${artist.playcount}`, + artwork:artist.image.reverse()[0]["#text"], + })) + : ( + await imports.axios.get( + `https://ws.audioscrobbler.com/2.0/?method=user.gettoptracks&user=${user}&api_key=${token}&limit=${limit}&period=${period}&format=json`, + { + headers:{ + "User-Agent":"lowlighter/metrics", + Accept:"application/json", + }, + }, + ) + ).data.toptracks.track.map(track => ({ + name:track.name, + artist:track.artist.name, + artwork:track.image.reverse()[0]["#text"], + })) } //Handle errors catch (error) { @@ -526,4 +522,4 @@ function get_all_with_key(obj, key) { result.push(...get_all_with_key(obj[i], key)) } return result -} \ No newline at end of file +} diff --git a/source/plugins/notable/index.mjs b/source/plugins/notable/index.mjs index a3a3adb9..cc15a35d 100644 --- a/source/plugins/notable/index.mjs +++ b/source/plugins/notable/index.mjs @@ -55,11 +55,11 @@ export default async function({login, q, imports, rest, graphql, data, account, //Save user data contribution.user = { commits, - percentage:commits/contribution.history, + percentage:commits / contribution.history, maintainer:maintainers.includes(login), get stars() { - return this.maintainer ? stars : this.percentage*stars - } + return this.maintainer ? stars : this.percentage * stars + }, } console.debug(`metrics/compute/${login}/plugins > notable > indepth > successfully processed ${owner}/${repo}`) } @@ -91,6 +91,7 @@ export default async function({login, q, imports, rest, graphql, data, account, } else aggregated.set(key, {name:key, handle, avatar, organization, stars, aggregated:1, ..._extras}) + } contributions = [...aggregated.values()] if (extras) { @@ -100,7 +101,6 @@ export default async function({login, q, imports, rest, graphql, data, account, contributions = contributions.sort((a, b) => ((b.user?.percentage + b.user?.maintainer) || 0) - ((a.user?.percentage + a.user?.maintainer) || 0)) } - //Results return {contributions} } diff --git a/source/plugins/poopmap/index.mjs b/source/plugins/poopmap/index.mjs index 77c41320..900d90a6 100644 --- a/source/plugins/poopmap/index.mjs +++ b/source/plugins/poopmap/index.mjs @@ -3,10 +3,11 @@ export default async function({q, imports, data, account}, {enabled = false, tok //Plugin execution try { //Check if plugin is enabled and requirements are met - if ((!enabled)||(!q.poopmap)) + if ((!enabled) || (!q.poopmap)) return null - if (!token) return {poops:[], days:7} + if (!token) + return {poops:[], days:7} const {days} = imports.metadata.plugins.poopmap.inputs({data, account, q}) const {data:{poops}} = await imports.axios.get(`https://api.poopmap.net/api/v1/public_links/${token}`) @@ -33,4 +34,4 @@ export default async function({q, imports, data, account}, {enabled = false, tok catch (error) { throw {error:{message:"An error occured", instance:error}} } -} \ No newline at end of file +} diff --git a/source/plugins/repositories/index.mjs b/source/plugins/repositories/index.mjs index 163bdd46..5e767c08 100644 --- a/source/plugins/repositories/index.mjs +++ b/source/plugins/repositories/index.mjs @@ -3,7 +3,7 @@ export default async function({login, q, imports, graphql, queries, data, accoun //Plugin execution try { //Check if plugin is enabled and requirements are met - if ((!enabled)||(!q.repositories)) + if ((!enabled) || (!q.repositories)) return null //Load inputs @@ -35,4 +35,4 @@ export default async function({login, q, imports, graphql, queries, data, accoun catch (error) { throw {error:{message:"An error occured", instance:error}} } -} \ No newline at end of file +} diff --git a/source/plugins/sponsors/index.mjs b/source/plugins/sponsors/index.mjs index 8cb251e8..ffe89402 100644 --- a/source/plugins/sponsors/index.mjs +++ b/source/plugins/sponsors/index.mjs @@ -3,7 +3,7 @@ export default async function({login, q, imports, data, graphql, queries, accoun //Plugin execution try { //Check if plugin is enabled and requirements are met - if ((!enabled)||(!q.sponsors)) + if ((!enabled) || (!q.sponsors)) return null //Load inputs diff --git a/source/plugins/stargazers/index.mjs b/source/plugins/stargazers/index.mjs index d2ad2e85..96e6e379 100644 --- a/source/plugins/stargazers/index.mjs +++ b/source/plugins/stargazers/index.mjs @@ -31,7 +31,7 @@ export default async function({login, graphql, data, imports, q, queries, accoun console.debug(`metrics/compute/${login}/plugins > stargazers > loaded ${dates.length} stargazers in total`) //Compute stargazers increments - const days = 14 * (1 + data.large/2) + const days = 14 * (1 + data.large / 2) const increments = {dates:Object.fromEntries([...new Array(days).fill(null).map((_, i) => [new Date(Date.now() - i * 24 * 60 * 60 * 1000).toISOString().slice(0, 10), 0]).reverse()]), max:NaN, min:NaN} dates .map(date => date.toISOString().slice(0, 10)) diff --git a/source/plugins/starlists/index.mjs b/source/plugins/starlists/index.mjs index 2d5b1971..a2b00c2b 100644 --- a/source/plugins/starlists/index.mjs +++ b/source/plugins/starlists/index.mjs @@ -3,7 +3,7 @@ export default async function({login, q, imports, data, account}, {enabled = fal //Plugin execution try { //Check if plugin is enabled and requirements are met - if ((!enabled)||(!q.starlists)) + if ((!enabled) || (!q.starlists)) return null //Load inputs @@ -19,17 +19,18 @@ export default async function({login, q, imports, data, account}, {enabled = fal console.debug(`metrics/compute/${login}/plugins > starlists > fetching lists`) await page.goto(`https://github.com/${login}?tab=stars`) let lists = (await page.evaluate(() => [...document.querySelectorAll("[href^='/stars/lowlighter/lists']")].map(element => ({ - link:element.href, - name:element.querySelector("h3")?.innerText ?? "", - description:element.querySelector("span")?.innerText ?? "", - count:Number(element.querySelector("div")?.innerText.match(/(?\d+)/)?.groups.count), - repositories:[] - })))) + link:element.href, + name:element.querySelector("h3")?.innerText ?? "", + description:element.querySelector("span")?.innerText ?? "", + count:Number(element.querySelector("div")?.innerText.match(/(?\d+)/)?.groups.count), + repositories:[], + })) + )) const count = lists.length console.debug(`metrics/compute/${login}/plugins > starlists > found [${lists.map(({name}) => name)}]`) lists = lists .filter(({name}) => name) - .filter(({name}) => (!only.length)||(only.includes(name.toLocaleLowerCase()))) + .filter(({name}) => (!only.length) || (only.includes(name.toLocaleLowerCase()))) .filter(({name}) => !ignored.includes(name.toLocaleLowerCase())) .slice(0, limit) console.debug(`metrics/compute/${login}/plugins > starlists > extracted ${lists.length} lists`) @@ -39,9 +40,10 @@ export default async function({login, q, imports, data, account}, {enabled = fal console.debug(`metrics/compute/${login}/plugins > starlists > fetching ${list.name}`) await page.goto(list.link) const repositories = await page.evaluate(() => [...document.querySelectorAll("#user-list-repositories > div")].map(element => ({ - name:element.querySelector("div:first-child")?.innerText.replace(" / ", "/") ?? "", - description:element.querySelector(".py-1")?.innerText ?? "" - }))) + name:element.querySelector("div:first-child")?.innerText.replace(" / ", "/") ?? "", + description:element.querySelector(".py-1")?.innerText ?? "", + })) + ) list.repositories.push(...repositories) if (_shuffle) list.repositories = imports.shuffle(list.repositories) @@ -59,4 +61,4 @@ export default async function({login, q, imports, data, account}, {enabled = fal catch (error) { throw {error:{message:"An error occured", instance:error}} } -} \ No newline at end of file +} diff --git a/source/plugins/traffic/index.mjs b/source/plugins/traffic/index.mjs index c8faec40..752ec6ef 100644 --- a/source/plugins/traffic/index.mjs +++ b/source/plugins/traffic/index.mjs @@ -16,7 +16,8 @@ export default async function({login, imports, data, rest, q, account}, {enabled //Get views stats from repositories console.debug(`metrics/compute/${login}/plugins > traffic > querying api`) const views = {count:0, uniques:0} - const response = [...await Promise.allSettled(repositories.map(({repo, owner}) => (skipped.includes(repo.toLocaleLowerCase())) || (skipped.includes(`${owner}/${repo}`.toLocaleLowerCase())) ? {} : rest.repos.getViews({owner, repo})))].filter(({status}) => status === "fulfilled").map(({value}) => value) + const response = [...await Promise.allSettled(repositories.map(({repo, owner}) => (skipped.includes(repo.toLocaleLowerCase())) || (skipped.includes(`${owner}/${repo}`.toLocaleLowerCase())) ? {} : rest.repos.getViews({owner, repo})))].filter(({status}) => status === "fulfilled" + ).map(({value}) => value) //Compute views console.debug(`metrics/compute/${login}/plugins > traffic > computing stats`) diff --git a/tests/metrics.test.js b/tests/metrics.test.js index 01a640e2..45a83dca 100644 --- a/tests/metrics.test.js +++ b/tests/metrics.test.js @@ -70,7 +70,7 @@ placeholder.run = async vars => { //Setup beforeAll(async () => { //Clean community template - await fs.promises.rm(path.join(__dirname, "../source/templates/@classic"), { recursive: true, force:true }) + await fs.promises.rm(path.join(__dirname, "../source/templates/@classic"), { recursive: true, force: true }) //Start web instance await web.start() }) @@ -79,7 +79,7 @@ afterAll(async () => { //Stop web instance await web.stop() //Clean community template - await fs.promises.rm(path.join(__dirname, "../source/templates/@classic"), { recursive: true, force:true }) + await fs.promises.rm(path.join(__dirname, "../source/templates/@classic"), { recursive: true, force: true }) }) //Load metadata (as jest doesn't support ESM modules, we use this dirty hack) diff --git a/tests/mocks/api/axios/get/lastfm.mjs b/tests/mocks/api/axios/get/lastfm.mjs index d4cb6f0a..0906c23a 100644 --- a/tests/mocks/api/axios/get/lastfm.mjs +++ b/tests/mocks/api/axios/get/lastfm.mjs @@ -1,5 +1,5 @@ /**Mocked data */ -export default function({faker, url, options, login = faker.internet.userName()}) { +export default function({ faker, url, options, login = faker.internet.userName() }) { //Last.fm api if (/^https:..ws.audioscrobbler.com.*$/.test(url)) { //Get recently played tracks @@ -10,146 +10,146 @@ export default function({faker, url, options, login = faker.internet.userName()} const track = faker.random.words(5) const date = faker.date.recent() return ({ - status:200, - data:{ - recenttracks:{ - "@attr":{ - page:"1", - perPage:"1", - user:"RJ", - total:"100", - pages:"100", + status: 200, + data: { + recenttracks: { + "@attr": { + page: "1", + perPage: "1", + user: "RJ", + total: "100", + pages: "100", }, - track:[ + track: [ { - artist:{ - mbid:"", - "#text":artist, + artist: { + mbid: "", + "#text": artist, }, - album:{ - mbid:"", - "#text":album, + album: { + mbid: "", + "#text": album, }, - image:[ + image: [ { - size:"small", - "#text":faker.image.abstract(), + size: "small", + "#text": faker.image.abstract(), }, { - size:"medium", - "#text":faker.image.abstract(), + size: "medium", + "#text": faker.image.abstract(), }, { - size:"large", - "#text":faker.image.abstract(), + size: "large", + "#text": faker.image.abstract(), }, { - size:"extralarge", - "#text":faker.image.abstract(), + size: "extralarge", + "#text": faker.image.abstract(), }, ], - streamable:"0", - date:{ - uts:Math.floor(date.getTime() / 1000), - "#text":date.toUTCString().slice(5, 22), + streamable: "0", + date: { + uts: Math.floor(date.getTime() / 1000), + "#text": date.toUTCString().slice(5, 22), }, - url:faker.internet.url(), - name:track, - mbid:"", + url: faker.internet.url(), + name: track, + mbid: "", }, ], }, }, }) } - else if (/user.gettoptracks/.test(url)) { + else if (/user.gettoptracks/.test(url)) { console.debug(`metrics/compute/mocks > mocking lastfm api result > ${url}`) const artist = faker.random.word() const track = faker.random.words(5) return ({ - status:200, - data:{ - toptracks:{ - "@attr":{ - page:"1", - perPage:"1", - user:"RJ", - total:"100", - pages:"100", + status: 200, + data: { + toptracks: { + "@attr": { + page: "1", + perPage: "1", + user: "RJ", + total: "100", + pages: "100", }, - track:[ + track: [ { - artist:{ - mbid:"", - name:artist, + artist: { + mbid: "", + name: artist, }, - image:[ + image: [ { - size:"small", - "#text":faker.image.abstract(), + size: "small", + "#text": faker.image.abstract(), }, { - size:"medium", - "#text":faker.image.abstract(), + size: "medium", + "#text": faker.image.abstract(), }, { - size:"large", - "#text":faker.image.abstract(), + size: "large", + "#text": faker.image.abstract(), }, { - size:"extralarge", - "#text":faker.image.abstract(), + size: "extralarge", + "#text": faker.image.abstract(), }, ], - url:faker.internet.url(), - name:track, - mbid:"", + url: faker.internet.url(), + name: track, + mbid: "", }, ], }, }, }) } - else if (/user.gettopartists/.test(url)) { + else if (/user.gettopartists/.test(url)) { console.debug(`metrics/compute/mocks > mocking lastfm api result > ${url}`) const artist = faker.random.word() const playcount = faker.random.number() return ({ - status:200, - data:{ - topartists:{ - "@attr":{ - page:"1", - perPage:"1", - user:"RJ", - total:"100", - pages:"100", + status: 200, + data: { + topartists: { + "@attr": { + page: "1", + perPage: "1", + user: "RJ", + total: "100", + pages: "100", }, - artist:[ + artist: [ { - image:[ + image: [ { - size:"small", - "#text":faker.image.abstract(), + size: "small", + "#text": faker.image.abstract(), }, { - size:"medium", - "#text":faker.image.abstract(), + size: "medium", + "#text": faker.image.abstract(), }, { - size:"large", - "#text":faker.image.abstract(), + size: "large", + "#text": faker.image.abstract(), }, { - size:"extralarge", - "#text":faker.image.abstract(), + size: "extralarge", + "#text": faker.image.abstract(), }, ], - streamable:"0", + streamable: "0", playcount, - url:faker.internet.url(), - name:artist, - mbid:"", + url: faker.internet.url(), + name: artist, + mbid: "", }, ], }, diff --git a/tests/mocks/api/axios/get/nightscout.mjs b/tests/mocks/api/axios/get/nightscout.mjs index 859f5684..f1843b7e 100644 --- a/tests/mocks/api/axios/get/nightscout.mjs +++ b/tests/mocks/api/axios/get/nightscout.mjs @@ -1,27 +1,27 @@ /**Mocked data */ -export default function({faker, url}) { +export default function({ faker, url }) { //Last.fm api if (/^https:..testapp.herokuapp.com.*$/.test(url)) { //Get Nightscout Data console.debug(`metrics/compute/mocks > mocking nightscout api result > ${url}`) const lastInterval = Math.floor(new Date() / 300000) * 300000 return ({ - status:200, - data:new Array(12).fill(null).map(_ => ({ - _id:faker.git.commitSha().substring(0, 23), - device:"xDrip-DexcomG5", - date:lastInterval, - dateString:new Date(lastInterval).toISOString(), - sgv:faker.datatype.number({min:40, max:400}), - delta:faker.datatype.number({min:-10, max:10}), - direction:faker.random.arrayElement(["SingleUp", "DoubleUp", "FortyFiveUp", "Flat", "FortyFiveDown", "SingleDown", "DoubleDown"]), - type:"sgv", - filtered:0, - unfiltered:0, - rssi:100, - noise:1, - sysTime:new Date(lastInterval).toISOString(), - utcOffset:faker.datatype.number({min:-12, max:14}) * 60, + status: 200, + data: new Array(12).fill(null).map(_ => ({ + _id: faker.git.commitSha().substring(0, 23), + device: "xDrip-DexcomG5", + date: lastInterval, + dateString: new Date(lastInterval).toISOString(), + sgv: faker.datatype.number({ min: 40, max: 400 }), + delta: faker.datatype.number({ min: -10, max: 10 }), + direction: faker.random.arrayElement(["SingleUp", "DoubleUp", "FortyFiveUp", "Flat", "FortyFiveDown", "SingleDown", "DoubleDown"]), + type: "sgv", + filtered: 0, + unfiltered: 0, + rssi: 100, + noise: 1, + sysTime: new Date(lastInterval).toISOString(), + utcOffset: faker.datatype.number({ min: -12, max: 14 }) * 60, })), }) } diff --git a/tests/mocks/api/axios/get/pagespeed.mjs b/tests/mocks/api/axios/get/pagespeed.mjs index 10f0fc9c..45444827 100644 --- a/tests/mocks/api/axios/get/pagespeed.mjs +++ b/tests/mocks/api/axios/get/pagespeed.mjs @@ -1,5 +1,5 @@ /**Mocked data */ -export default function({faker, url, options, login = faker.internet.userName()}) { +export default function({ faker, url, options, login = faker.internet.userName() }) { //Tested url const tested = url.match(/&url=(?.*?)(?:&|$)/)?.groups?.tested ?? faker.internet.url() //Pagespeed api @@ -8,96 +8,96 @@ export default function({faker, url, options, login = faker.internet.userName()} if (/v5.runPagespeed.*&key=MOCKED_TOKEN/.test(url)) { console.debug(`metrics/compute/mocks > mocking pagespeed api result > ${url}`) return ({ - status:200, - data:{ - captchaResult:"CAPTCHA_NOT_NEEDED", - id:tested, - lighthouseResult:{ - requestedUrl:tested, - finalUrl:tested, - lighthouseVersion:"6.3.0", - audits:{ - "final-screenshot":{ - id:"final-screenshot", - title:"Final Screenshot", - score:null, - details:{ - data:null, - type:"screenshot", - timestamp:Date.now(), + status: 200, + data: { + captchaResult: "CAPTCHA_NOT_NEEDED", + id: tested, + lighthouseResult: { + requestedUrl: tested, + finalUrl: tested, + lighthouseVersion: "6.3.0", + audits: { + "final-screenshot": { + id: "final-screenshot", + title: "Final Screenshot", + score: null, + details: { + data: null, + type: "screenshot", + timestamp: Date.now(), }, }, - metrics:{ - id:"metrics", - title:"Metrics", - score:null, - details:{ - items:[ + metrics: { + id: "metrics", + title: "Metrics", + score: null, + details: { + items: [ { - observedFirstContentfulPaint:faker.datatype.number(500), - observedFirstVisualChangeTs:faker.time.recent(), - observedFirstContentfulPaintTs:faker.time.recent(), - firstContentfulPaint:faker.datatype.number(500), - observedDomContentLoaded:faker.datatype.number(500), - observedFirstMeaningfulPaint:faker.datatype.number(1000), - maxPotentialFID:faker.datatype.number(500), - observedLoad:faker.datatype.number(500), - firstMeaningfulPaint:faker.datatype.number(500), - observedCumulativeLayoutShift:faker.datatype.float({max:1}), - observedSpeedIndex:faker.datatype.number(1000), - observedSpeedIndexTs:faker.time.recent(), - observedTimeOriginTs:faker.time.recent(), - observedLargestContentfulPaint:faker.datatype.number(1000), - cumulativeLayoutShift:faker.datatype.float({max:1}), - observedFirstPaintTs:faker.time.recent(), - observedTraceEndTs:faker.time.recent(), - largestContentfulPaint:faker.datatype.number(2000), - observedTimeOrigin:faker.datatype.number(10), - speedIndex:faker.datatype.number(1000), - observedTraceEnd:faker.datatype.number(2000), - observedDomContentLoadedTs:faker.time.recent(), - observedFirstPaint:faker.datatype.number(500), - totalBlockingTime:faker.datatype.number(500), - observedLastVisualChangeTs:faker.time.recent(), - observedFirstVisualChange:faker.datatype.number(500), - observedLargestContentfulPaintTs:faker.time.recent(), - estimatedInputLatency:faker.datatype.number(100), - observedLoadTs:faker.time.recent(), - observedLastVisualChange:faker.datatype.number(1000), - firstCPUIdle:faker.datatype.number(1000), - interactive:faker.datatype.number(1000), - observedNavigationStartTs:faker.time.recent(), - observedNavigationStart:faker.datatype.number(10), - observedFirstMeaningfulPaintTs:faker.time.recent(), + observedFirstContentfulPaint: faker.datatype.number(500), + observedFirstVisualChangeTs: faker.time.recent(), + observedFirstContentfulPaintTs: faker.time.recent(), + firstContentfulPaint: faker.datatype.number(500), + observedDomContentLoaded: faker.datatype.number(500), + observedFirstMeaningfulPaint: faker.datatype.number(1000), + maxPotentialFID: faker.datatype.number(500), + observedLoad: faker.datatype.number(500), + firstMeaningfulPaint: faker.datatype.number(500), + observedCumulativeLayoutShift: faker.datatype.float({ max: 1 }), + observedSpeedIndex: faker.datatype.number(1000), + observedSpeedIndexTs: faker.time.recent(), + observedTimeOriginTs: faker.time.recent(), + observedLargestContentfulPaint: faker.datatype.number(1000), + cumulativeLayoutShift: faker.datatype.float({ max: 1 }), + observedFirstPaintTs: faker.time.recent(), + observedTraceEndTs: faker.time.recent(), + largestContentfulPaint: faker.datatype.number(2000), + observedTimeOrigin: faker.datatype.number(10), + speedIndex: faker.datatype.number(1000), + observedTraceEnd: faker.datatype.number(2000), + observedDomContentLoadedTs: faker.time.recent(), + observedFirstPaint: faker.datatype.number(500), + totalBlockingTime: faker.datatype.number(500), + observedLastVisualChangeTs: faker.time.recent(), + observedFirstVisualChange: faker.datatype.number(500), + observedLargestContentfulPaintTs: faker.time.recent(), + estimatedInputLatency: faker.datatype.number(100), + observedLoadTs: faker.time.recent(), + observedLastVisualChange: faker.datatype.number(1000), + firstCPUIdle: faker.datatype.number(1000), + interactive: faker.datatype.number(1000), + observedNavigationStartTs: faker.time.recent(), + observedNavigationStart: faker.datatype.number(10), + observedFirstMeaningfulPaintTs: faker.time.recent(), }, ], }, }, }, - categories:{ - "best-practices":{ - id:"best-practices", - title:"Best Practices", - score:faker.datatype.float({max:1}), + categories: { + "best-practices": { + id: "best-practices", + title: "Best Practices", + score: faker.datatype.float({ max: 1 }), }, - seo:{ - id:"seo", - title:"SEO", - score:faker.datatype.float({max:1}), + seo: { + id: "seo", + title: "SEO", + score: faker.datatype.float({ max: 1 }), }, - accessibility:{ - id:"accessibility", - title:"Accessibility", - score:faker.datatype.float({max:1}), + accessibility: { + id: "accessibility", + title: "Accessibility", + score: faker.datatype.float({ max: 1 }), }, - performance:{ - id:"performance", - title:"Performance", - score:faker.datatype.float({max:1}), + performance: { + id: "performance", + title: "Performance", + score: faker.datatype.float({ max: 1 }), }, }, }, - analysisUTCTimestamp:`${faker.date.recent()}`, + analysisUTCTimestamp: `${faker.date.recent()}`, }, }) } diff --git a/tests/mocks/api/axios/get/poopmap.mjs b/tests/mocks/api/axios/get/poopmap.mjs index 2b1c23b5..5b313deb 100644 --- a/tests/mocks/api/axios/get/poopmap.mjs +++ b/tests/mocks/api/axios/get/poopmap.mjs @@ -1,24 +1,24 @@ /**Mocked data */ -export default function({faker, url, options, login = faker.internet.userName()}) { +export default function({ faker, url, options, login = faker.internet.userName() }) { //Wakatime api if (/^https:..api.poopmap.net$/.test(url)) { //Get user profile if (/public_links\/MOCKED_TOKEN/.test(url)) { console.debug(`metrics/compute/mocks > mocking poopmap api result > ${url}`) return ({ - status:200, - data:{ - poops:new Array(12 + faker.datatype.number(6)).fill(null).map(_ => ({ - id:79744699, - latitude:faker.address.latitude(), - longitude:faker.address.longitude(), - created_at:faker.date.past().toISOString(), - note:"", - place:"", - rating:faker.datatype.number(5), - followers_count:faker.datatype.number(100), - comments_count:faker.datatype.number(12) - })) + status: 200, + data: { + poops: new Array(12 + faker.datatype.number(6)).fill(null).map(_ => ({ + id: 79744699, + latitude: faker.address.latitude(), + longitude: faker.address.longitude(), + created_at: faker.date.past().toISOString(), + note: "", + place: "", + rating: faker.datatype.number(5), + followers_count: faker.datatype.number(100), + comments_count: faker.datatype.number(12), + })), }, }) } diff --git a/tests/mocks/api/axios/get/spotify.mjs b/tests/mocks/api/axios/get/spotify.mjs index ace55daf..405281ff 100644 --- a/tests/mocks/api/axios/get/spotify.mjs +++ b/tests/mocks/api/axios/get/spotify.mjs @@ -1,5 +1,5 @@ /**Mocked data */ -export default function({faker, url, options, login = faker.internet.userName()}) { +export default function({ faker, url, options, login = faker.internet.userName() }) { //Spotify api if (/^https:..api.spotify.com.*$/.test(url)) { //Get recently played tracks @@ -8,140 +8,140 @@ export default function({faker, url, options, login = faker.internet.userName()} const artist = faker.random.words() const track = faker.random.words(5) return ({ - status:200, - data:{ - items:[ + status: 200, + data: { + items: [ { - track:{ - album:{ - album_type:"single", - artists:[ + track: { + album: { + album_type: "single", + artists: [ { - name:artist, - type:"artist", + name: artist, + type: "artist", }, ], - images:[ + images: [ { - height:640, - url:faker.image.abstract(), - width:640, + height: 640, + url: faker.image.abstract(), + width: 640, }, { - height:300, - url:faker.image.abstract(), - width:300, + height: 300, + url: faker.image.abstract(), + width: 300, }, { - height:64, - url:faker.image.abstract(), - width:64, + height: 64, + url: faker.image.abstract(), + width: 64, }, ], - name:track, - release_date:`${faker.date.past()}`.substring(0, 10), - type:"album", + name: track, + release_date: `${faker.date.past()}`.substring(0, 10), + type: "album", }, - artists:[ + artists: [ { - name:artist, - type:"artist", + name: artist, + type: "artist", }, ], - name:track, - preview_url:faker.internet.url(), - type:"track", + name: track, + preview_url: faker.internet.url(), + type: "track", }, - played_at:`${faker.date.recent()}`, - context:{ - type:"album", + played_at: `${faker.date.recent()}`, + context: { + type: "album", }, }, ], }, }) } - else if (/me.top.tracks/.test(url) && (options?.headers?.Authorization === "Bearer MOCKED_TOKEN_ACCESS")) { + else if (/me.top.tracks/.test(url) && (options?.headers?.Authorization === "Bearer MOCKED_TOKEN_ACCESS")) { console.debug(`metrics/compute/mocks > mocking spotify api result > ${url}`) const artist = faker.random.words() const track = faker.random.words(5) return ({ - status:200, - data:{ - items:[ + status: 200, + data: { + items: [ { - album:{ - album_type:"single", - artists:[ + album: { + album_type: "single", + artists: [ { - name:artist, - type:"artist", + name: artist, + type: "artist", }, ], - images:[ + images: [ { - height:640, - url:faker.image.abstract(), - width:640, + height: 640, + url: faker.image.abstract(), + width: 640, }, { - height:300, - url:faker.image.abstract(), - width:300, + height: 300, + url: faker.image.abstract(), + width: 300, }, { - height:64, - url:faker.image.abstract(), - width:64, + height: 64, + url: faker.image.abstract(), + width: 64, }, ], - name:track, - release_date:`${faker.date.past()}`.substring(0, 10), - type:"album", + name: track, + release_date: `${faker.date.past()}`.substring(0, 10), + type: "album", }, - artists:[ + artists: [ { - name:artist, - type:"artist", + name: artist, + type: "artist", }, ], - name:track, - preview_url:faker.internet.url(), - type:"track", + name: track, + preview_url: faker.internet.url(), + type: "track", }, ], }, }) } - else if (/me.top.artists/.test(url) && (options?.headers?.Authorization === "Bearer MOCKED_TOKEN_ACCESS")) { + else if (/me.top.artists/.test(url) && (options?.headers?.Authorization === "Bearer MOCKED_TOKEN_ACCESS")) { console.debug(`metrics/compute/mocks > mocking spotify api result > ${url}`) const genre = faker.random.words() const track = faker.random.words(5) return ({ - status:200, - data:{ - items:[ + status: 200, + data: { + items: [ { genres: [genre], - images:[ + images: [ { - height:640, - url:faker.image.abstract(), - width:640, + height: 640, + url: faker.image.abstract(), + width: 640, }, { - height:300, - url:faker.image.abstract(), - width:300, + height: 300, + url: faker.image.abstract(), + width: 300, }, { - height:64, - url:faker.image.abstract(), - width:64, + height: 64, + url: faker.image.abstract(), + width: 64, }, ], - name:track, - type:"artist", + name: track, + type: "artist", }, ], }, diff --git a/tests/mocks/api/axios/get/stackoverflow.mjs b/tests/mocks/api/axios/get/stackoverflow.mjs index 3ec561d8..4446984e 100644 --- a/tests/mocks/api/axios/get/stackoverflow.mjs +++ b/tests/mocks/api/axios/get/stackoverflow.mjs @@ -1,5 +1,5 @@ /**Mocked data */ -export default function({faker, url, options, login = faker.internet.userName()}) { +export default function({ faker, url, options, login = faker.internet.userName() }) { //Stackoverflow api if (/^https:..api.stackexchange.com.2.2.*$/.test(url)) { //Extract user id @@ -9,24 +9,24 @@ export default function({faker, url, options, login = faker.internet.userName()} if (/users[/]\d+[/][?]site=stackoverflow$/.test(url)) { console.debug(`metrics/compute/mocks > mocking stackoverflow api result > ${url}`) return ({ - status:200, - data:{ - items:[ + status: 200, + data: { + items: [ { - badge_counts:{bronze:faker.datatype.number(500), silver:faker.datatype.number(300), gold:faker.datatype.number(100)}, - accept_rate:faker.datatype.number(100), - answer_count:faker.datatype.number(1000), - question_count:faker.datatype.number(1000), - view_count:faker.datatype.number(10000), - creation_date:faker.date.past(), - display_name:faker.internet.userName(), + badge_counts: { bronze: faker.datatype.number(500), silver: faker.datatype.number(300), gold: faker.datatype.number(100) }, + accept_rate: faker.datatype.number(100), + answer_count: faker.datatype.number(1000), + question_count: faker.datatype.number(1000), + view_count: faker.datatype.number(10000), + creation_date: faker.date.past(), + display_name: faker.internet.userName(), user_id, - reputation:faker.datatype.number(100000), + reputation: faker.datatype.number(100000), }, ], - has_more:false, - quota_max:300, - quota_remaining:faker.datatype.number(300), + has_more: false, + quota_max: 300, + quota_remaining: faker.datatype.number(300), }, }) } @@ -34,9 +34,9 @@ export default function({faker, url, options, login = faker.internet.userName()} if (/[?]site=stackoverflow&filter=total$/.test(url)) { console.debug(`metrics/compute/mocks > mocking stackoverflow api result > ${url}`) return ({ - status:200, - data:{ - total:faker.datatype.number(10000), + status: 200, + data: { + total: faker.datatype.number(10000), }, }) } @@ -44,29 +44,29 @@ export default function({faker, url, options, login = faker.internet.userName()} if ((/questions[?]site=stackoverflow/.test(url)) || (/questions[/][\d;]+[?]site=stackoverflow/.test(url))) { console.debug(`metrics/compute/mocks > mocking stackoverflow api result > ${url}`) return ({ - status:200, - data:{ - items:new Array(pagesize).fill(null).map(_ => ({ - tags:new Array(5).fill(null).map(_ => faker.lorem.slug()), - owner:{display_name:faker.internet.userName()}, - is_answered:faker.datatype.boolean(), - view_count:faker.datatype.number(10000), - accepted_answer_id:faker.datatype.number(1000000), - answer_count:faker.datatype.number(100), - score:faker.datatype.number(1000), - creation_date:faker.time.recent(), - down_vote_count:faker.datatype.number(1000), - up_vote_count:faker.datatype.number(1000), - comment_count:faker.datatype.number(1000), - favorite_count:faker.datatype.number(1000), - title:faker.lorem.sentence(), - body_markdown:faker.lorem.paragraphs(), - link:faker.internet.url(), - question_id:faker.datatype.number(1000000), + status: 200, + data: { + items: new Array(pagesize).fill(null).map(_ => ({ + tags: new Array(5).fill(null).map(_ => faker.lorem.slug()), + owner: { display_name: faker.internet.userName() }, + is_answered: faker.datatype.boolean(), + view_count: faker.datatype.number(10000), + accepted_answer_id: faker.datatype.number(1000000), + answer_count: faker.datatype.number(100), + score: faker.datatype.number(1000), + creation_date: faker.time.recent(), + down_vote_count: faker.datatype.number(1000), + up_vote_count: faker.datatype.number(1000), + comment_count: faker.datatype.number(1000), + favorite_count: faker.datatype.number(1000), + title: faker.lorem.sentence(), + body_markdown: faker.lorem.paragraphs(), + link: faker.internet.url(), + question_id: faker.datatype.number(1000000), })), - has_more:false, - quota_max:300, - quota_remaining:faker.datatype.number(300), + has_more: false, + quota_max: 300, + quota_remaining: faker.datatype.number(300), }, }) } @@ -74,24 +74,24 @@ export default function({faker, url, options, login = faker.internet.userName()} if ((/answers[?]site=stackoverflow/.test(url)) || (/answers[/][\d;]+[?]site=stackoverflow/.test(url))) { console.debug(`metrics/compute/mocks > mocking stackoverflow api result > ${url}`) return ({ - status:200, - data:{ - items:new Array(pagesize).fill(null).map(_ => ({ - owner:{display_name:faker.internet.userName()}, - link:faker.internet.url(), - is_accepted:faker.datatype.boolean(), - score:faker.datatype.number(1000), - down_vote_count:faker.datatype.number(1000), - up_vote_count:faker.datatype.number(1000), - comment_count:faker.datatype.number(1000), - creation_date:faker.time.recent(), - question_id:faker.datatype.number(1000000), - body_markdown:faker.lorem.paragraphs(), - answer_id:faker.datatype.number(1000000), + status: 200, + data: { + items: new Array(pagesize).fill(null).map(_ => ({ + owner: { display_name: faker.internet.userName() }, + link: faker.internet.url(), + is_accepted: faker.datatype.boolean(), + score: faker.datatype.number(1000), + down_vote_count: faker.datatype.number(1000), + up_vote_count: faker.datatype.number(1000), + comment_count: faker.datatype.number(1000), + creation_date: faker.time.recent(), + question_id: faker.datatype.number(1000000), + body_markdown: faker.lorem.paragraphs(), + answer_id: faker.datatype.number(1000000), })), - has_more:false, - quota_max:300, - quota_remaining:faker.datatype.number(300), + has_more: false, + quota_max: 300, + quota_remaining: faker.datatype.number(300), }, }) } diff --git a/tests/mocks/api/axios/get/twitter.mjs b/tests/mocks/api/axios/get/twitter.mjs index a75761e1..6d256a80 100644 --- a/tests/mocks/api/axios/get/twitter.mjs +++ b/tests/mocks/api/axios/get/twitter.mjs @@ -1,5 +1,5 @@ /**Mocked data */ -export default function({faker, url, options, login = faker.internet.userName()}) { +export default function({ faker, url, options, login = faker.internet.userName() }) { //Twitter api if (/^https:..api.twitter.com.*$/.test(url)) { //Get user profile @@ -7,13 +7,13 @@ export default function({faker, url, options, login = faker.internet.userName()} console.debug(`metrics/compute/mocks > mocking twitter api result > ${url}`) const username = url.match(/username[/](?.*?)[?]/)?.groups?.username ?? faker.internet.userName() return ({ - status:200, - data:{ - data:{ - profile_image_url:faker.image.people(), - name:faker.name.findName(), - verified:faker.datatype.boolean(), - id:faker.datatype.number(1000000).toString(), + status: 200, + data: { + data: { + profile_image_url: faker.image.people(), + name: faker.name.findName(), + verified: faker.datatype.boolean(), + id: faker.datatype.number(1000000).toString(), username, }, }, @@ -23,39 +23,39 @@ export default function({faker, url, options, login = faker.internet.userName()} if ((/tweets.search.recent/.test(url)) && (options?.headers?.Authorization === "Bearer MOCKED_TOKEN")) { console.debug(`metrics/compute/mocks > mocking twitter api result > ${url}`) return ({ - status:200, - data:{ - data:[ + status: 200, + data: { + data: [ { - id:faker.datatype.number(100000000000000).toString(), - created_at:`${faker.date.recent()}`, - entities:{ - mentions:[ - {start:22, end:33, username:"lowlighter"}, + id: faker.datatype.number(100000000000000).toString(), + created_at: `${faker.date.recent()}`, + entities: { + mentions: [ + { start: 22, end: 33, username: "lowlighter" }, ], }, - text:"Checkout metrics from @lowlighter ! #GitHub", + text: "Checkout metrics from @lowlighter ! #GitHub", }, { - id:faker.datatype.number(100000000000000).toString(), - created_at:`${faker.date.recent()}`, - text:faker.lorem.paragraph(), + id: faker.datatype.number(100000000000000).toString(), + created_at: `${faker.date.recent()}`, + text: faker.lorem.paragraph(), }, ], - includes:{ - users:[ + includes: { + users: [ { - id:faker.datatype.number(100000000000000).toString(), - name:"lowlighter", - username:"lowlighter", + id: faker.datatype.number(100000000000000).toString(), + name: "lowlighter", + username: "lowlighter", }, ], }, - meta:{ - newest_id:faker.datatype.number(100000000000000).toString(), - oldest_id:faker.datatype.number(100000000000000).toString(), - result_count:2, - next_token:"MOCKED_CURSOR", + meta: { + newest_id: faker.datatype.number(100000000000000).toString(), + oldest_id: faker.datatype.number(100000000000000).toString(), + result_count: 2, + next_token: "MOCKED_CURSOR", }, }, }) diff --git a/tests/mocks/api/axios/get/wakatime.mjs b/tests/mocks/api/axios/get/wakatime.mjs index 042dfbbf..920b77eb 100644 --- a/tests/mocks/api/axios/get/wakatime.mjs +++ b/tests/mocks/api/axios/get/wakatime.mjs @@ -1,5 +1,5 @@ /**Mocked data */ -export default function({faker, url, options, login = faker.internet.userName()}) { +export default function({ faker, url, options, login = faker.internet.userName() }) { //Wakatime api if (/^https:..wakatime.com.api.v1.users..*.stats.*$/.test(url)) { //Get user profile @@ -11,13 +11,13 @@ export default function({faker, url, options, login = faker.internet.userName()} get digital() { return `${this.hours}:${this.minutes}` }, - hours:faker.datatype.number(1000), - minutes:faker.datatype.number(1000), - name:array ? faker.random.arrayElement(array) : faker.random.words(2).replace(/ /g, "-").toLocaleLowerCase(), - percent:0, - total_seconds:faker.datatype.number(1000000), + hours: faker.datatype.number(1000), + minutes: faker.datatype.number(1000), + name: array ? faker.random.arrayElement(array) : faker.random.words(2).replace(/ /g, "-").toLocaleLowerCase(), + percent: 0, + total_seconds: faker.datatype.number(1000000), })) - results = results.filter(({name}) => elements.includes(name) ? false : (elements.push(name), true)) + results = results.filter(({ name }) => elements.includes(name) ? false : (elements.push(name), true)) let percents = 100 for (const result of results) { result.percent = 1 + faker.datatype.number(percents - 1) @@ -26,26 +26,26 @@ export default function({faker, url, options, login = faker.internet.userName()} return results } return ({ - status:200, - data:{ - data:{ - best_day:{ - created_at:faker.date.recent(), - date:`${faker.date.recent()}`.substring(0, 10), - total_seconds:faker.datatype.number(1000000), + status: 200, + data: { + data: { + best_day: { + created_at: faker.date.recent(), + date: `${faker.date.recent()}`.substring(0, 10), + total_seconds: faker.datatype.number(1000000), }, - categories:stats(), - daily_average:faker.datatype.number(12 * 60 * 60), - daily_average_including_other_language:faker.datatype.number(12 * 60 * 60), - dependencies:stats(), - editors:stats(["VS Code", "Chrome", "IntelliJ", "PhpStorm", "WebStorm", "Android Studio", "Visual Studio", "Sublime Text", "PyCharm", "Vim", "Atom", "Xcode"]), - languages:stats(["JavaScript", "TypeScript", "PHP", "Java", "Python", "Vue.js", "HTML", "C#", "JSON", "Dart", "SCSS", "Kotlin", "JSX", "Go", "Ruby", "YAML"]), - machines:stats(), - operating_systems:stats(["Mac", "Windows", "Linux"]), - project:null, - projects:/api_key=MOCKED_TOKEN_NO_PROJECTS/.test(url) ? null : stats(), - total_seconds:faker.datatype.number(1000000000), - total_seconds_including_other_language:faker.datatype.number(1000000000), + categories: stats(), + daily_average: faker.datatype.number(12 * 60 * 60), + daily_average_including_other_language: faker.datatype.number(12 * 60 * 60), + dependencies: stats(), + editors: stats(["VS Code", "Chrome", "IntelliJ", "PhpStorm", "WebStorm", "Android Studio", "Visual Studio", "Sublime Text", "PyCharm", "Vim", "Atom", "Xcode"]), + languages: stats(["JavaScript", "TypeScript", "PHP", "Java", "Python", "Vue.js", "HTML", "C#", "JSON", "Dart", "SCSS", "Kotlin", "JSX", "Go", "Ruby", "YAML"]), + machines: stats(), + operating_systems: stats(["Mac", "Windows", "Linux"]), + project: null, + projects: /api_key=MOCKED_TOKEN_NO_PROJECTS/.test(url) ? null : stats(), + total_seconds: faker.datatype.number(1000000000), + total_seconds_including_other_language: faker.datatype.number(1000000000), }, }, }) diff --git a/tests/mocks/api/axios/get/yahoo.mjs b/tests/mocks/api/axios/get/yahoo.mjs index b4b6dfe0..76fd9345 100644 --- a/tests/mocks/api/axios/get/yahoo.mjs +++ b/tests/mocks/api/axios/get/yahoo.mjs @@ -1,32 +1,32 @@ /**Mocked data */ -export default function({faker, url, options, login = faker.internet.userName()}) { +export default function({ faker, url, options, login = faker.internet.userName() }) { //Wakatime api if (/^https:..apidojo-yahoo-finance-v1.p.rapidapi.com.stock.v2.*$/.test(url)) { //Get company profile if (/get-profile/.test(url)) { console.debug(`metrics/compute/mocks > mocking yahoo finance api result > ${url}`) return ({ - status:200, - data:{ - price:{ - marketCap:{ - raw:faker.datatype.number(1000000000), + status: 200, + data: { + price: { + marketCap: { + raw: faker.datatype.number(1000000000), }, - symbol:"OCTO", + symbol: "OCTO", }, - quoteType:{ - shortName:faker.company.companyName(), - longName:faker.company.companyName(), - exchangeTimezoneName:faker.address.timeZone(), - symbol:"OCTO", + quoteType: { + shortName: faker.company.companyName(), + longName: faker.company.companyName(), + exchangeTimezoneName: faker.address.timeZone(), + symbol: "OCTO", }, - calendarEvents:{}, - summaryDetail:{}, - symbol:"OCTO", - assetProfile:{ - fullTimeEmployees:faker.datatype.number(10000), - city:faker.address.city(), - country:faker.address.country(), + calendarEvents: {}, + summaryDetail: {}, + symbol: "OCTO", + assetProfile: { + fullTimeEmployees: faker.datatype.number(10000), + city: faker.address.city(), + country: faker.address.country(), }, }, }) @@ -35,23 +35,23 @@ export default function({faker, url, options, login = faker.internet.userName()} if (/get-chart/.test(url)) { console.debug(`metrics/compute/mocks > mocking yahoo finance api result > ${url}`) return ({ - status:200, - data:{ - chart:{ - result:[ + status: 200, + data: { + chart: { + result: [ { - meta:{ - currency:"USD", - symbol:"OCTO", - regularMarketPrice:faker.datatype.number(10000) / 100, - chartPreviousClose:faker.datatype.number(10000) / 100, - previousClose:faker.datatype.number(10000) / 100, + meta: { + currency: "USD", + symbol: "OCTO", + regularMarketPrice: faker.datatype.number(10000) / 100, + chartPreviousClose: faker.datatype.number(10000) / 100, + previousClose: faker.datatype.number(10000) / 100, }, - timestamp:new Array(1000).fill(Date.now()).map((x, i) => x + i * 60000), - indicators:{ - quote:[ + timestamp: new Array(1000).fill(Date.now()).map((x, i) => x + i * 60000), + indicators: { + quote: [ { - close:new Array(1000).fill(null).map(_ => faker.datatype.number(10000) / 100), + close: new Array(1000).fill(null).map(_ => faker.datatype.number(10000) / 100), get low() { return this.close }, @@ -61,7 +61,7 @@ export default function({faker, url, options, login = faker.internet.userName()} get open() { return this.close }, - volume:[], + volume: [], }, ], }, diff --git a/tests/mocks/api/axios/post/anilist.mjs b/tests/mocks/api/axios/post/anilist.mjs index c36b3315..03b6dbb8 100644 --- a/tests/mocks/api/axios/post/anilist.mjs +++ b/tests/mocks/api/axios/post/anilist.mjs @@ -1,45 +1,45 @@ /**Mocked data */ -export default function({faker, url, body, login = faker.internet.userName()}) { +export default function({ faker, url, body, login = faker.internet.userName() }) { if (/^https:..graphql.anilist.co.*$/.test(url)) { //Initialization and media generator - const {query} = body - const media = ({type}) => ({ - title:{romaji:faker.lorem.words(), english:faker.lorem.words(), native:faker.lorem.words()}, - description:faker.lorem.paragraphs(), + const { query } = body + const media = ({ type }) => ({ + title: { romaji: faker.lorem.words(), english: faker.lorem.words(), native: faker.lorem.words() }, + description: faker.lorem.paragraphs(), type, - status:faker.random.arrayElement(["FINISHED", "RELEASING", "NOT_YET_RELEASED", "CANCELLED", "HIATUS"]), - episodes:100 + faker.datatype.number(100), - volumes:faker.datatype.number(100), - chapters:100 + faker.datatype.number(1000), - averageScore:faker.datatype.number(100), - countryOfOrigin:"JP", - genres:new Array(6).fill(null).map(_ => faker.lorem.word()), - coverImage:{medium:null}, - startDate:{year:faker.date.past(20).getFullYear()}, + status: faker.random.arrayElement(["FINISHED", "RELEASING", "NOT_YET_RELEASED", "CANCELLED", "HIATUS"]), + episodes: 100 + faker.datatype.number(100), + volumes: faker.datatype.number(100), + chapters: 100 + faker.datatype.number(1000), + averageScore: faker.datatype.number(100), + countryOfOrigin: "JP", + genres: new Array(6).fill(null).map(_ => faker.lorem.word()), + coverImage: { medium: null }, + startDate: { year: faker.date.past(20).getFullYear() }, }) //User statistics query if (/^query Statistics /.test(query)) { console.debug("metrics/compute/mocks > mocking anilist api result > Statistics") return ({ - status:200, - data:{ - data:{ - User:{ - id:faker.datatype.number(100000), - name:faker.internet.userName(), - about:null, - statistics:{ - anime:{ - count:faker.datatype.number(1000), - minutesWatched:faker.datatype.number(100000), - episodesWatched:faker.datatype.number(10000), - genres:new Array(4).fill(null).map(_ => ({genre:faker.lorem.word()})), + status: 200, + data: { + data: { + User: { + id: faker.datatype.number(100000), + name: faker.internet.userName(), + about: null, + statistics: { + anime: { + count: faker.datatype.number(1000), + minutesWatched: faker.datatype.number(100000), + episodesWatched: faker.datatype.number(10000), + genres: new Array(4).fill(null).map(_ => ({ genre: faker.lorem.word() })), }, - manga:{ - count:faker.datatype.number(1000), - chaptersRead:faker.datatype.number(100000), - volumesRead:faker.datatype.number(10000), - genres:new Array(4).fill(null).map(_ => ({genre:faker.lorem.word()})), + manga: { + count: faker.datatype.number(1000), + chaptersRead: faker.datatype.number(100000), + volumesRead: faker.datatype.number(10000), + genres: new Array(4).fill(null).map(_ => ({ genre: faker.lorem.word() })), }, }, }, @@ -51,17 +51,17 @@ export default function({faker, url, body, login = faker.internet.userName()}) { if (/^query FavoritesCharacters /.test(query)) { console.debug("metrics/compute/mocks > mocking anilist api result > Favorites characters") return ({ - status:200, - data:{ - data:{ - User:{ - favourites:{ - characters:{ - nodes:new Array(2 + faker.datatype.number(16)).fill(null).map(_ => ({ - name:{full:faker.name.findName(), native:faker.name.findName()}, - image:{medium:null}, + status: 200, + data: { + data: { + User: { + favourites: { + characters: { + nodes: new Array(2 + faker.datatype.number(16)).fill(null).map(_ => ({ + name: { full: faker.name.findName(), native: faker.name.findName() }, + image: { medium: null }, })), - pageInfo:{currentPage:1, hasNextPage:false}, + pageInfo: { currentPage: 1, hasNextPage: false }, }, }, }, @@ -74,14 +74,14 @@ export default function({faker, url, body, login = faker.internet.userName()}) { console.debug("metrics/compute/mocks > mocking anilist api result > Favorites") const type = /anime[(]/.test(query) ? "ANIME" : /manga[(]/.test(query) ? "MANGA" : "OTHER" return ({ - status:200, - data:{ - data:{ - User:{ - favourites:{ - [type.toLocaleLowerCase()]:{ - nodes:new Array(16).fill(null).map(_ => media({type})), - pageInfo:{currentPage:1, hasNextPage:false}, + status: 200, + data: { + data: { + User: { + favourites: { + [type.toLocaleLowerCase()]: { + nodes: new Array(16).fill(null).map(_ => media({ type })), + pageInfo: { currentPage: 1, hasNextPage: false }, }, }, }, @@ -92,24 +92,24 @@ export default function({faker, url, body, login = faker.internet.userName()}) { //Medias query if (/^query Medias /.test(query)) { console.debug("metrics/compute/mocks > mocking anilist api result > Medias") - const {type} = body.variables + const { type } = body.variables return ({ - status:200, - data:{ - data:{ - MediaListCollection:{ - lists:[ + status: 200, + data: { + data: { + MediaListCollection: { + lists: [ { - name:{ANIME:"Watching", MANGA:"Reading", OTHER:"Completed"}[type], - isCustomList:false, - entries:new Array(16).fill(null).map(_ => ({ - status:faker.random.arrayElement(["CURRENT", "PLANNING", "COMPLETED", "DROPPED", "PAUSED", "REPEATING"]), - progress:faker.datatype.number(100), - progressVolumes:null, - score:0, - startedAt:{year:null, month:null, day:null}, - completedAt:{year:null, month:null, day:null}, - media:media({type}), + name: { ANIME: "Watching", MANGA: "Reading", OTHER: "Completed" }[type], + isCustomList: false, + entries: new Array(16).fill(null).map(_ => ({ + status: faker.random.arrayElement(["CURRENT", "PLANNING", "COMPLETED", "DROPPED", "PAUSED", "REPEATING"]), + progress: faker.datatype.number(100), + progressVolumes: null, + score: 0, + startedAt: { year: null, month: null, day: null }, + completedAt: { year: null, month: null, day: null }, + media: media({ type }), })), }, ], diff --git a/tests/mocks/api/axios/post/hashnode.mjs b/tests/mocks/api/axios/post/hashnode.mjs index 53e3a68f..4c93e43f 100644 --- a/tests/mocks/api/axios/post/hashnode.mjs +++ b/tests/mocks/api/axios/post/hashnode.mjs @@ -1,18 +1,18 @@ /**Mocked data */ -export default function({faker, url, body, login = faker.internet.userName()}) { +export default function({ faker, url, body, login = faker.internet.userName() }) { if (/^https:..api.hashnode.com.*$/.test(url)) { console.debug(`metrics/compute/mocks > mocking hashnode result > ${url}`) return ({ - status:200, - data:{ - data:{ - user:{ - publication:{ - posts:new Array(30).fill(null).map(_ => ({ - title:faker.lorem.sentence(), - brief:faker.lorem.paragraph(), - coverImage:null, - dateAdded:faker.date.recent(), + status: 200, + data: { + data: { + user: { + publication: { + posts: new Array(30).fill(null).map(_ => ({ + title: faker.lorem.sentence(), + brief: faker.lorem.paragraph(), + coverImage: null, + dateAdded: faker.date.recent(), })), }, }, diff --git a/tests/mocks/api/axios/post/spotify.mjs b/tests/mocks/api/axios/post/spotify.mjs index 3b07b784..9f6a3d8e 100644 --- a/tests/mocks/api/axios/post/spotify.mjs +++ b/tests/mocks/api/axios/post/spotify.mjs @@ -2,19 +2,19 @@ import urls from "url" /**Mocked data */ -export default function({faker, url, body, login = faker.internet.userName()}) { +export default function({ faker, url, body, login = faker.internet.userName() }) { if (/^https:..accounts.spotify.com.api.token.*$/.test(url)) { //Access token generator const params = new urls.URLSearchParams(body) if ((params.get("grant_type") === "refresh_token") && (params.get("client_id") === "MOCKED_CLIENT_ID") && (params.get("client_secret") === "MOCKED_CLIENT_SECRET") && (params.get("refresh_token") === "MOCKED_REFRESH_TOKEN")) { console.debug(`metrics/compute/mocks > mocking spotify api result > ${url}`) return ({ - status:200, - data:{ - access_token:"MOCKED_TOKEN_ACCESS", - token_type:"Bearer", - expires_in:3600, - scope:"user-read-recently-played user-read-private", + status: 200, + data: { + access_token: "MOCKED_TOKEN_ACCESS", + token_type: "Bearer", + expires_in: 3600, + scope: "user-read-recently-played user-read-private", }, }) } diff --git a/tests/mocks/api/axios/post/youtubemusic.mjs b/tests/mocks/api/axios/post/youtubemusic.mjs index 8210176a..91a1c5cb 100644 --- a/tests/mocks/api/axios/post/youtubemusic.mjs +++ b/tests/mocks/api/axios/post/youtubemusic.mjs @@ -1,59 +1,58 @@ /**Mocked data */ -export default function({faker, url, options, login = faker.internet.userName()}) { - if (/^https:..music.youtube.com.youtubei.v1.*$/.test(url)) { - //Get recently played tracks - if (/browse/.test(url)) { - console.debug(`metrics/compute/mocks > mocking yt music api result > ${url}`) - const artist = faker.random.word() - const track = faker.random.words(5) - const artwork = faker.image.imageUrl() - return ({ - contents:{ - singleColumnBrowseResultsRenderer:{ - tabs:[{ - tabRenderer:{ - content:{ - sectionListRenderer:{ - contents:[{ - contents:[{ - musicResponsiveListItemRenderer:{ - thumbnail:{ - musicThumbnailRenderer:{ - thumbnail:{ - thumbnails:[{ - url:artwork, - }] - }, - } - }, - flexColumns:[{ - musicResponsiveListItemFlexColumnRenderer:{ - text:{ - runs:[{ - text:track, - }] - }, - } - }, - { - musicResponsiveListItemFlexColumnRenderer:{ - text:{ - runs:[{ - text:artist, - }] - }, - } - }], - } - }], - }], - }, +export default function({ faker, url, options, login = faker.internet.userName() }) { + if (/^https:..music.youtube.com.youtubei.v1.*$/.test(url)) { + //Get recently played tracks + if (/browse/.test(url)) { + console.debug(`metrics/compute/mocks > mocking yt music api result > ${url}`) + const artist = faker.random.word() + const track = faker.random.words(5) + const artwork = faker.image.imageUrl() + return ({ + contents: { + singleColumnBrowseResultsRenderer: { + tabs: [{ + tabRenderer: { + content: { + sectionListRenderer: { + contents: [{ + contents: [{ + musicResponsiveListItemRenderer: { + thumbnail: { + musicThumbnailRenderer: { + thumbnail: { + thumbnails: [{ + url: artwork, + }], }, + }, }, + flexColumns: [{ + musicResponsiveListItemFlexColumnRenderer: { + text: { + runs: [{ + text: track, + }], + }, + }, + }, { + musicResponsiveListItemFlexColumnRenderer: { + text: { + runs: [{ + text: artist, + }], + }, + }, + }], + }, }], + }], }, + }, }, - }) - } + }], + }, + }, + }) + } } -} \ No newline at end of file +} diff --git a/tests/mocks/api/github/graphql/achievements.default.mjs b/tests/mocks/api/github/graphql/achievements.default.mjs index da64b140..edc792f8 100644 --- a/tests/mocks/api/github/graphql/achievements.default.mjs +++ b/tests/mocks/api/github/graphql/achievements.default.mjs @@ -1,70 +1,70 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > achievements/metrics") return ({ - user:{ - repositories:{ - nodes:[ + user: { + repositories: { + nodes: [ { - createdAt:faker.date.recent(), - nameWithOwner:`${faker.internet.userName()}/${faker.lorem.slug()}`, + createdAt: faker.date.recent(), + nameWithOwner: `${faker.internet.userName()}/${faker.lorem.slug()}`, }, ], - totalCount:faker.datatype.number(100), + totalCount: faker.datatype.number(100), }, - forks:{ - nodes:[ + forks: { + nodes: [ { - createdAt:faker.date.recent(), - nameWithOwner:`${faker.internet.userName()}/${faker.lorem.slug()}`, + createdAt: faker.date.recent(), + nameWithOwner: `${faker.internet.userName()}/${faker.lorem.slug()}`, }, ], - totalCount:faker.datatype.number(100), + totalCount: faker.datatype.number(100), }, - popular:{ - nodes:[{stargazers:{totalCount:faker.datatype.number(50000)}}], + popular: { + nodes: [{ stargazers: { totalCount: faker.datatype.number(50000) } }], }, - pullRequests:{ - nodes:[ + pullRequests: { + nodes: [ { - createdAt:faker.date.recent(), - title:faker.lorem.sentence(), - repository:{nameWithOwner:`${faker.internet.userName()}/${faker.lorem.slug()}`}, + createdAt: faker.date.recent(), + title: faker.lorem.sentence(), + repository: { nameWithOwner: `${faker.internet.userName()}/${faker.lorem.slug()}` }, }, ], - totalCount:faker.datatype.number(50000), + totalCount: faker.datatype.number(50000), }, - contributionsCollection:{ - pullRequestReviewContributions:{ - nodes:[ + contributionsCollection: { + pullRequestReviewContributions: { + nodes: [ { - occurredAt:faker.date.recent(), - pullRequest:{ - title:faker.lorem.sentence(), - number:faker.datatype.number(1000), - repository:{nameWithOwner:`${faker.internet.userName()}/${faker.lorem.slug()}`}, + occurredAt: faker.date.recent(), + pullRequest: { + title: faker.lorem.sentence(), + number: faker.datatype.number(1000), + repository: { nameWithOwner: `${faker.internet.userName()}/${faker.lorem.slug()}` }, }, }, ], - totalCount:faker.datatype.number(1000), + totalCount: faker.datatype.number(1000), }, }, - projects:{totalCount:faker.datatype.number(100)}, - packages:{totalCount:faker.datatype.number(100)}, - organizations:{nodes:[], totalCount:faker.datatype.number(5)}, - gists:{ - nodes:[{createdAt:faker.date.recent(), name:faker.lorem.slug()}], - totalCount:faker.datatype.number(1000), + projects: { totalCount: faker.datatype.number(100) }, + packages: { totalCount: faker.datatype.number(100) }, + organizations: { nodes: [], totalCount: faker.datatype.number(5) }, + gists: { + nodes: [{ createdAt: faker.date.recent(), name: faker.lorem.slug() }], + totalCount: faker.datatype.number(1000), }, - starredRepositories:{totalCount:faker.datatype.number(1000)}, - followers:{totalCount:faker.datatype.number(10000)}, - following:{totalCount:faker.datatype.number(10000)}, - bio:faker.lorem.sentence(), - status:{message:faker.lorem.paragraph()}, - sponsorshipsAsSponsor:{totalCount:faker.datatype.number(100)}, - discussionsStarted:{totalCount:faker.datatype.number(1000)}, - discussionsComments:{totalCount:faker.datatype.number(1000)}, - discussionAnswers:{totalCount:faker.datatype.number(1000)}, + starredRepositories: { totalCount: faker.datatype.number(1000) }, + followers: { totalCount: faker.datatype.number(10000) }, + following: { totalCount: faker.datatype.number(10000) }, + bio: faker.lorem.sentence(), + status: { message: faker.lorem.paragraph() }, + sponsorshipsAsSponsor: { totalCount: faker.datatype.number(100) }, + discussionsStarted: { totalCount: faker.datatype.number(1000) }, + discussionsComments: { totalCount: faker.datatype.number(1000) }, + discussionAnswers: { totalCount: faker.datatype.number(1000) }, }, }) } diff --git a/tests/mocks/api/github/graphql/achievements.metrics.mjs b/tests/mocks/api/github/graphql/achievements.metrics.mjs index 83334bc7..f57b264b 100644 --- a/tests/mocks/api/github/graphql/achievements.metrics.mjs +++ b/tests/mocks/api/github/graphql/achievements.metrics.mjs @@ -1,8 +1,8 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > achievements/metrics") return ({ - repository:{viewerHasStarred:faker.datatype.boolean()}, - viewer:{login}, + repository: { viewerHasStarred: faker.datatype.boolean() }, + viewer: { login }, }) } diff --git a/tests/mocks/api/github/graphql/achievements.octocat.mjs b/tests/mocks/api/github/graphql/achievements.octocat.mjs index 149ab7f0..60bcc16e 100644 --- a/tests/mocks/api/github/graphql/achievements.octocat.mjs +++ b/tests/mocks/api/github/graphql/achievements.octocat.mjs @@ -1,8 +1,8 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > achievements/octocat") return ({ - user:{viewerIsFollowing:faker.datatype.boolean()}, - viewer:{login}, + user: { viewerIsFollowing: faker.datatype.boolean() }, + viewer: { login }, }) } diff --git a/tests/mocks/api/github/graphql/achievements.organizations.mjs b/tests/mocks/api/github/graphql/achievements.organizations.mjs index b42ae751..decb5070 100644 --- a/tests/mocks/api/github/graphql/achievements.organizations.mjs +++ b/tests/mocks/api/github/graphql/achievements.organizations.mjs @@ -1,33 +1,33 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > achievements/organizations") return ({ - organization:{ - repositories:{ - nodes:[ + organization: { + repositories: { + nodes: [ { - createdAt:faker.date.recent(), - nameWithOwner:`${faker.internet.userName()}/${faker.lorem.slug()}`, + createdAt: faker.date.recent(), + nameWithOwner: `${faker.internet.userName()}/${faker.lorem.slug()}`, }, ], - totalCount:faker.datatype.number(100), + totalCount: faker.datatype.number(100), }, - forks:{ - nodes:[ + forks: { + nodes: [ { - createdAt:faker.date.recent(), - nameWithOwner:`${faker.internet.userName()}/${faker.lorem.slug()}`, + createdAt: faker.date.recent(), + nameWithOwner: `${faker.internet.userName()}/${faker.lorem.slug()}`, }, ], - totalCount:faker.datatype.number(100), + totalCount: faker.datatype.number(100), }, - popular:{ - nodes:[{stargazers:{totalCount:faker.datatype.number(50000)}}], + popular: { + nodes: [{ stargazers: { totalCount: faker.datatype.number(50000) } }], }, - projects:{totalCount:faker.datatype.number(100)}, - packages:{totalCount:faker.datatype.number(100)}, - membersWithRole:{totalCount:faker.datatype.number(100)}, - sponsorshipsAsSponsor:{totalCount:faker.datatype.number(100)}, + projects: { totalCount: faker.datatype.number(100) }, + packages: { totalCount: faker.datatype.number(100) }, + membersWithRole: { totalCount: faker.datatype.number(100) }, + sponsorshipsAsSponsor: { totalCount: faker.datatype.number(100) }, }, }) } diff --git a/tests/mocks/api/github/graphql/achievements.ranking.mjs b/tests/mocks/api/github/graphql/achievements.ranking.mjs index 6a5acef3..c5f3fa75 100644 --- a/tests/mocks/api/github/graphql/achievements.ranking.mjs +++ b/tests/mocks/api/github/graphql/achievements.ranking.mjs @@ -1,12 +1,12 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > achievements/ranking") return ({ - repo_rank:{repositoryCount:faker.datatype.number(100000)}, - forks_rank:{repositoryCount:faker.datatype.number(100000)}, - created_rank:{userCount:faker.datatype.number(100000)}, - user_rank:{userCount:faker.datatype.number(100000)}, - repo_total:{repositoryCount:faker.datatype.number(100000)}, - user_total:{userCount:faker.datatype.number(100000)}, + repo_rank: { repositoryCount: faker.datatype.number(100000) }, + forks_rank: { repositoryCount: faker.datatype.number(100000) }, + created_rank: { userCount: faker.datatype.number(100000) }, + user_rank: { userCount: faker.datatype.number(100000) }, + repo_total: { repositoryCount: faker.datatype.number(100000) }, + user_total: { userCount: faker.datatype.number(100000) }, }) } diff --git a/tests/mocks/api/github/graphql/base.calendar.mjs b/tests/mocks/api/github/graphql/base.calendar.mjs index cd084d8d..65610073 100644 --- a/tests/mocks/api/github/graphql/base.calendar.mjs +++ b/tests/mocks/api/github/graphql/base.calendar.mjs @@ -1,36 +1,36 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > base/user") return ({ - user:{ - calendar:{ - contributionCalendar:{ - weeks:[ + user: { + calendar: { + contributionCalendar: { + weeks: [ { - contributionDays:[ - {color:faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"])}, - {color:faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"])}, - {color:faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"])}, - {color:faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"])}, - {color:faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"])}, + contributionDays: [ + { color: faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"]) }, + { color: faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"]) }, + { color: faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"]) }, + { color: faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"]) }, + { color: faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"]) }, ], }, { - contributionDays:[ - {color:faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"])}, - {color:faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"])}, - {color:faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"])}, - {color:faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"])}, - {color:faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"])}, - {color:faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"])}, - {color:faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"])}, + contributionDays: [ + { color: faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"]) }, + { color: faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"]) }, + { color: faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"]) }, + { color: faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"]) }, + { color: faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"]) }, + { color: faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"]) }, + { color: faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"]) }, ], }, { - contributionDays:[ - {color:faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"])}, - {color:faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"])}, - {color:faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"])}, + contributionDays: [ + { color: faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"]) }, + { color: faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"]) }, + { color: faker.random.arrayElement(["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"]) }, ], }, ], diff --git a/tests/mocks/api/github/graphql/base.contributions.mjs b/tests/mocks/api/github/graphql/base.contributions.mjs index d1b8db50..98bdc8ad 100644 --- a/tests/mocks/api/github/graphql/base.contributions.mjs +++ b/tests/mocks/api/github/graphql/base.contributions.mjs @@ -1,15 +1,15 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > base/user") return ({ - user:{ - contributionsCollection:{ - totalRepositoriesWithContributedCommits:faker.datatype.number(100), - totalCommitContributions:faker.datatype.number(10000), - restrictedContributionsCount:faker.datatype.number(10000), - totalIssueContributions:faker.datatype.number(100), - totalPullRequestContributions:faker.datatype.number(1000), - totalPullRequestReviewContributions:faker.datatype.number(1000), + user: { + contributionsCollection: { + totalRepositoriesWithContributedCommits: faker.datatype.number(100), + totalCommitContributions: faker.datatype.number(10000), + restrictedContributionsCount: faker.datatype.number(10000), + totalIssueContributions: faker.datatype.number(100), + totalPullRequestContributions: faker.datatype.number(1000), + totalPullRequestReviewContributions: faker.datatype.number(1000), }, }, }) diff --git a/tests/mocks/api/github/graphql/base.field.mjs b/tests/mocks/api/github/graphql/base.field.mjs index 84321107..afb05439 100644 --- a/tests/mocks/api/github/graphql/base.field.mjs +++ b/tests/mocks/api/github/graphql/base.field.mjs @@ -1,18 +1,18 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > base/user") return ({ - user:{ - packages:{totalCount:faker.datatype.number(10)}, - starredRepositories:{totalCount:faker.datatype.number(1000)}, - watching:{totalCount:faker.datatype.number(100)}, - sponsorshipsAsSponsor:{totalCount:faker.datatype.number(10)}, - sponsorshipsAsMaintainer:{totalCount:faker.datatype.number(10)}, - repositoriesContributedTo:{totalCount:faker.datatype.number(100)}, - followers:{totalCount:faker.datatype.number(1000)}, - following:{totalCount:faker.datatype.number(1000)}, - issueComments:{totalCount:faker.datatype.number(1000)}, - organizations:{totalCount:faker.datatype.number(10)}, + user: { + packages: { totalCount: faker.datatype.number(10) }, + starredRepositories: { totalCount: faker.datatype.number(1000) }, + watching: { totalCount: faker.datatype.number(100) }, + sponsorshipsAsSponsor: { totalCount: faker.datatype.number(10) }, + sponsorshipsAsMaintainer: { totalCount: faker.datatype.number(10) }, + repositoriesContributedTo: { totalCount: faker.datatype.number(100) }, + followers: { totalCount: faker.datatype.number(1000) }, + following: { totalCount: faker.datatype.number(1000) }, + issueComments: { totalCount: faker.datatype.number(1000) }, + organizations: { totalCount: faker.datatype.number(10) }, }, }) } diff --git a/tests/mocks/api/github/graphql/base.field.repositories.mjs b/tests/mocks/api/github/graphql/base.field.repositories.mjs index 35a049e3..f39817ac 100644 --- a/tests/mocks/api/github/graphql/base.field.repositories.mjs +++ b/tests/mocks/api/github/graphql/base.field.repositories.mjs @@ -1,9 +1,9 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > base/user") return ({ - user:{ - repositories:{totalCount:faker.datatype.number(100), totalDiskUsage:faker.datatype.number(100000)}, + user: { + repositories: { totalCount: faker.datatype.number(100), totalDiskUsage: faker.datatype.number(100000) }, }, }) } diff --git a/tests/mocks/api/github/graphql/base.repositories.mjs b/tests/mocks/api/github/graphql/base.repositories.mjs index bddab232..284fe838 100644 --- a/tests/mocks/api/github/graphql/base.repositories.mjs +++ b/tests/mocks/api/github/graphql/base.repositories.mjs @@ -1,56 +1,56 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > base/repositories") return /after: "MOCKED_CURSOR"/m.test(query) ? ({ - user:{ + user: { get repositoriesContributedTo() { return this.repositories }, - repositories:{ - edges:[], - nodes:[], + repositories: { + edges: [], + nodes: [], }, }, }) : ({ - user:{ + user: { get repositoriesContributedTo() { return this.repositories }, - repositories:{ - edges:[ + repositories: { + edges: [ { - cursor:"MOCKED_CURSOR", + cursor: "MOCKED_CURSOR", }, ], - nodes:[ + nodes: [ { - name:faker.random.words(), - watchers:{totalCount:faker.datatype.number(1000)}, - stargazers:{totalCount:faker.datatype.number(10000)}, - owner:{login}, - languages:{ - edges:[ - {size:faker.datatype.number(100000), node:{color:faker.internet.color(), name:faker.lorem.word()}}, - {size:faker.datatype.number(100000), node:{color:faker.internet.color(), name:faker.lorem.word()}}, - {size:faker.datatype.number(100000), node:{color:faker.internet.color(), name:faker.lorem.word()}}, - {size:faker.datatype.number(100000), node:{color:faker.internet.color(), name:faker.lorem.word()}}, - {size:faker.datatype.number(100000), node:{color:faker.internet.color(), name:faker.lorem.word()}}, - {size:faker.datatype.number(100000), node:{color:faker.internet.color(), name:faker.lorem.word()}}, - {size:faker.datatype.number(100000), node:{color:faker.internet.color(), name:faker.lorem.word()}}, + name: faker.random.words(), + watchers: { totalCount: faker.datatype.number(1000) }, + stargazers: { totalCount: faker.datatype.number(10000) }, + owner: { login }, + languages: { + edges: [ + { size: faker.datatype.number(100000), node: { color: faker.internet.color(), name: faker.lorem.word() } }, + { size: faker.datatype.number(100000), node: { color: faker.internet.color(), name: faker.lorem.word() } }, + { size: faker.datatype.number(100000), node: { color: faker.internet.color(), name: faker.lorem.word() } }, + { size: faker.datatype.number(100000), node: { color: faker.internet.color(), name: faker.lorem.word() } }, + { size: faker.datatype.number(100000), node: { color: faker.internet.color(), name: faker.lorem.word() } }, + { size: faker.datatype.number(100000), node: { color: faker.internet.color(), name: faker.lorem.word() } }, + { size: faker.datatype.number(100000), node: { color: faker.internet.color(), name: faker.lorem.word() } }, ], }, - issues_open:{totalCount:faker.datatype.number(100)}, - issues_closed:{totalCount:faker.datatype.number(100)}, - pr_open:{totalCount:faker.datatype.number(100)}, - pr_closed:{totalCount:faker.datatype.number(100)}, - pr_merged:{totalCount:faker.datatype.number(100)}, - releases:{totalCount:faker.datatype.number(100)}, - forkCount:faker.datatype.number(100), - licenseInfo:{spdxId:"MIT"}, - deployments:{totalCount:faker.datatype.number(100)}, - environments:{totalCount:faker.datatype.number(100)}, + issues_open: { totalCount: faker.datatype.number(100) }, + issues_closed: { totalCount: faker.datatype.number(100) }, + pr_open: { totalCount: faker.datatype.number(100) }, + pr_closed: { totalCount: faker.datatype.number(100) }, + pr_merged: { totalCount: faker.datatype.number(100) }, + releases: { totalCount: faker.datatype.number(100) }, + forkCount: faker.datatype.number(100), + licenseInfo: { spdxId: "MIT" }, + deployments: { totalCount: faker.datatype.number(100) }, + environments: { totalCount: faker.datatype.number(100) }, }, ], }, diff --git a/tests/mocks/api/github/graphql/base.repository.mjs b/tests/mocks/api/github/graphql/base.repository.mjs index c700a7f8..5f50a318 100644 --- a/tests/mocks/api/github/graphql/base.repository.mjs +++ b/tests/mocks/api/github/graphql/base.repository.mjs @@ -1,37 +1,37 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > base/repository") return ({ - user:{ - repository:{ - name:"metrics", - owner:{login}, - createdAt:new Date().toISOString(), - diskUsage:Math.floor(Math.random() * 10000), - homepageUrl:faker.internet.url(), - watchers:{totalCount:faker.datatype.number(1000)}, - stargazers:{totalCount:faker.datatype.number(10000)}, - languages:{ - edges:[ - {size:faker.datatype.number(100000), node:{color:faker.internet.color(), name:faker.lorem.word()}}, - {size:faker.datatype.number(100000), node:{color:faker.internet.color(), name:faker.lorem.word()}}, - {size:faker.datatype.number(100000), node:{color:faker.internet.color(), name:faker.lorem.word()}}, - {size:faker.datatype.number(100000), node:{color:faker.internet.color(), name:faker.lorem.word()}}, - {size:faker.datatype.number(100000), node:{color:faker.internet.color(), name:faker.lorem.word()}}, - {size:faker.datatype.number(100000), node:{color:faker.internet.color(), name:faker.lorem.word()}}, - {size:faker.datatype.number(100000), node:{color:faker.internet.color(), name:faker.lorem.word()}}, + user: { + repository: { + name: "metrics", + owner: { login }, + createdAt: new Date().toISOString(), + diskUsage: Math.floor(Math.random() * 10000), + homepageUrl: faker.internet.url(), + watchers: { totalCount: faker.datatype.number(1000) }, + stargazers: { totalCount: faker.datatype.number(10000) }, + languages: { + edges: [ + { size: faker.datatype.number(100000), node: { color: faker.internet.color(), name: faker.lorem.word() } }, + { size: faker.datatype.number(100000), node: { color: faker.internet.color(), name: faker.lorem.word() } }, + { size: faker.datatype.number(100000), node: { color: faker.internet.color(), name: faker.lorem.word() } }, + { size: faker.datatype.number(100000), node: { color: faker.internet.color(), name: faker.lorem.word() } }, + { size: faker.datatype.number(100000), node: { color: faker.internet.color(), name: faker.lorem.word() } }, + { size: faker.datatype.number(100000), node: { color: faker.internet.color(), name: faker.lorem.word() } }, + { size: faker.datatype.number(100000), node: { color: faker.internet.color(), name: faker.lorem.word() } }, ], }, - issues_open:{totalCount:faker.datatype.number(100)}, - issues_closed:{totalCount:faker.datatype.number(100)}, - pr_open:{totalCount:faker.datatype.number(100)}, - pr_closed:{totalCount:faker.datatype.number(100)}, - pr_merged:{totalCount:faker.datatype.number(100)}, - releases:{totalCount:faker.datatype.number(100)}, - forkCount:faker.datatype.number(100), - licenseInfo:{spdxId:"MIT"}, - deployments:{totalCount:faker.datatype.number(100)}, - environments:{totalCount:faker.datatype.number(100)}, + issues_open: { totalCount: faker.datatype.number(100) }, + issues_closed: { totalCount: faker.datatype.number(100) }, + pr_open: { totalCount: faker.datatype.number(100) }, + pr_closed: { totalCount: faker.datatype.number(100) }, + pr_merged: { totalCount: faker.datatype.number(100) }, + releases: { totalCount: faker.datatype.number(100) }, + forkCount: faker.datatype.number(100), + licenseInfo: { spdxId: "MIT" }, + deployments: { totalCount: faker.datatype.number(100) }, + environments: { totalCount: faker.datatype.number(100) }, }, }, }) diff --git a/tests/mocks/api/github/graphql/base.user.mjs b/tests/mocks/api/github/graphql/base.user.mjs index 28c4d991..3e34631e 100644 --- a/tests/mocks/api/github/graphql/base.user.mjs +++ b/tests/mocks/api/github/graphql/base.user.mjs @@ -1,16 +1,16 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > base/user") return ({ - user:{ - databaseId:faker.datatype.number(10000000), - name:faker.name.findName(), + user: { + databaseId: faker.datatype.number(10000000), + name: faker.name.findName(), login, - createdAt:`${faker.date.past(10)}`, - avatarUrl:faker.image.people(), - websiteUrl:faker.internet.url(), - isHireable:faker.datatype.boolean(), - twitterUsername:login, + createdAt: `${faker.date.past(10)}`, + avatarUrl: faker.image.people(), + websiteUrl: faker.internet.url(), + isHireable: faker.datatype.boolean(), + twitterUsername: login, }, }) } diff --git a/tests/mocks/api/github/graphql/contributors.commit.mjs b/tests/mocks/api/github/graphql/contributors.commit.mjs index 8382f467..32be655d 100644 --- a/tests/mocks/api/github/graphql/contributors.commit.mjs +++ b/tests/mocks/api/github/graphql/contributors.commit.mjs @@ -1,13 +1,13 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > contributors/commit") return ({ - repository:{ - object:{ - oid:"MOCKED_SHA", - abbreviatedOid:"MOCKED_SHA", - messageHeadline:faker.lorem.sentence(), - committedDate:faker.date.recent(), + repository: { + object: { + oid: "MOCKED_SHA", + abbreviatedOid: "MOCKED_SHA", + messageHeadline: faker.lorem.sentence(), + committedDate: faker.date.recent(), }, }, }) diff --git a/tests/mocks/api/github/graphql/discussions.categories.mjs b/tests/mocks/api/github/graphql/discussions.categories.mjs index 00d35092..173cb818 100644 --- a/tests/mocks/api/github/graphql/discussions.categories.mjs +++ b/tests/mocks/api/github/graphql/discussions.categories.mjs @@ -1,27 +1,26 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > discussions/categories") return /after: "MOCKED_CURSOR"/m.test(query) ? ({ - user:{ - repositoryDiscussions:{ - edges:[], - nodes:[], - } - } + user: { + repositoryDiscussions: { + edges: [], + nodes: [], + }, + }, }) : ({ - user:{ - repositoryDiscussions:{ - edges:new Array(100).fill(null).map(_ => ({cursor:"MOCKED_CURSOR"})), - nodes:new Array(100).fill(null).map(_ => ({ - category:{ - emoji:faker.random.arrayElement([":chart_with_upwards_trend:", ":chart_with_downwards_trend:", ":bar_char:"]), - name:faker.lorem.slug() - } - })) - } - } + user: { + repositoryDiscussions: { + edges: new Array(100).fill(null).map(_ => ({ cursor: "MOCKED_CURSOR" })), + nodes: new Array(100).fill(null).map(_ => ({ + category: { + emoji: faker.random.arrayElement([":chart_with_upwards_trend:", ":chart_with_downwards_trend:", ":bar_char:"]), + name: faker.lorem.slug(), + }, + })), + }, + }, }) } - diff --git a/tests/mocks/api/github/graphql/discussions.comments.mjs b/tests/mocks/api/github/graphql/discussions.comments.mjs index 303194b2..60d0499d 100644 --- a/tests/mocks/api/github/graphql/discussions.comments.mjs +++ b/tests/mocks/api/github/graphql/discussions.comments.mjs @@ -1,22 +1,21 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > discussions/comments") return /after: "MOCKED_CURSOR"/m.test(query) ? ({ - user:{ - repositoryDiscussionsComments:{ - edges:[], - nodes:[], - } - } + user: { + repositoryDiscussionsComments: { + edges: [], + nodes: [], + }, + }, }) : ({ - user:{ - repositoryDiscussionsComments:{ - edges:new Array(100).fill(null).map(_ => ({cursor:"MOCKED_CURSOR"})), - nodes:new Array(100).fill(null).map(_ => ({upvoteCount: faker.datatype.number(10)})) - } - } + user: { + repositoryDiscussionsComments: { + edges: new Array(100).fill(null).map(_ => ({ cursor: "MOCKED_CURSOR" })), + nodes: new Array(100).fill(null).map(_ => ({ upvoteCount: faker.datatype.number(10) })), + }, + }, }) } - diff --git a/tests/mocks/api/github/graphql/discussions.statistics.mjs b/tests/mocks/api/github/graphql/discussions.statistics.mjs index 69dcf57f..f3f9e514 100644 --- a/tests/mocks/api/github/graphql/discussions.statistics.mjs +++ b/tests/mocks/api/github/graphql/discussions.statistics.mjs @@ -1,11 +1,11 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > discussions/statistics") return ({ - user:{ - started:{totalCount:faker.datatype.number(1000)}, - comments:{totalCount:faker.datatype.number(1000)}, - answers:{totalCount:faker.datatype.number(1000)} - } + user: { + started: { totalCount: faker.datatype.number(1000) }, + comments: { totalCount: faker.datatype.number(1000) }, + answers: { totalCount: faker.datatype.number(1000) }, + }, }) -} \ No newline at end of file +} diff --git a/tests/mocks/api/github/graphql/followup.repository.collaborators.mjs b/tests/mocks/api/github/graphql/followup.repository.collaborators.mjs index a5f1beb4..96bb277b 100644 --- a/tests/mocks/api/github/graphql/followup.repository.collaborators.mjs +++ b/tests/mocks/api/github/graphql/followup.repository.collaborators.mjs @@ -1,11 +1,11 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > followup/repository/collaborators") return ({ - repository:{ - collaborators:{ - nodes:["github-user"] - } + repository: { + collaborators: { + nodes: ["github-user"], + }, }, }) } diff --git a/tests/mocks/api/github/graphql/followup.repository.mjs b/tests/mocks/api/github/graphql/followup.repository.mjs index 6baef9fe..2bc26743 100644 --- a/tests/mocks/api/github/graphql/followup.repository.mjs +++ b/tests/mocks/api/github/graphql/followup.repository.mjs @@ -1,14 +1,14 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > followup/repository") return ({ - issues_open:{issueCount:faker.datatype.number(100)}, - issues_drafts:{issueCount:faker.datatype.number(100)}, - issues_skipped:{issueCount:faker.datatype.number(100)}, - issues_closed:{issueCount:faker.datatype.number(100)}, - pr_open:{issueCount:faker.datatype.number(100)}, - pr_drafts:{issueCount:faker.datatype.number(100)}, - pr_closed:{issueCount:faker.datatype.number(100)}, - pr_merged:{issueCount:faker.datatype.number(100)}, + issues_open: { issueCount: faker.datatype.number(100) }, + issues_drafts: { issueCount: faker.datatype.number(100) }, + issues_skipped: { issueCount: faker.datatype.number(100) }, + issues_closed: { issueCount: faker.datatype.number(100) }, + pr_open: { issueCount: faker.datatype.number(100) }, + pr_drafts: { issueCount: faker.datatype.number(100) }, + pr_closed: { issueCount: faker.datatype.number(100) }, + pr_merged: { issueCount: faker.datatype.number(100) }, }) } diff --git a/tests/mocks/api/github/graphql/followup.user.mjs b/tests/mocks/api/github/graphql/followup.user.mjs index e3458ce6..e2ace64d 100644 --- a/tests/mocks/api/github/graphql/followup.user.mjs +++ b/tests/mocks/api/github/graphql/followup.user.mjs @@ -1,14 +1,14 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > followup/user") return ({ - issues_open:{issueCount:faker.datatype.number(100)}, - issues_drafts:{issueCount:faker.datatype.number(100)}, - issues_skipped:{issueCount:faker.datatype.number(100)}, - issues_closed:{issueCount:faker.datatype.number(100)}, - pr_open:{issueCount:faker.datatype.number(100)}, - pr_drafts:{issueCount:faker.datatype.number(100)}, - pr_closed:{issueCount:faker.datatype.number(100)}, - pr_merged:{issueCount:faker.datatype.number(100)}, + issues_open: { issueCount: faker.datatype.number(100) }, + issues_drafts: { issueCount: faker.datatype.number(100) }, + issues_skipped: { issueCount: faker.datatype.number(100) }, + issues_closed: { issueCount: faker.datatype.number(100) }, + pr_open: { issueCount: faker.datatype.number(100) }, + pr_drafts: { issueCount: faker.datatype.number(100) }, + pr_closed: { issueCount: faker.datatype.number(100) }, + pr_merged: { issueCount: faker.datatype.number(100) }, }) } diff --git a/tests/mocks/api/github/graphql/gists.default.mjs b/tests/mocks/api/github/graphql/gists.default.mjs index c56595cf..164f860b 100644 --- a/tests/mocks/api/github/graphql/gists.default.mjs +++ b/tests/mocks/api/github/graphql/gists.default.mjs @@ -1,38 +1,38 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > gists/default") return /after: "MOCKED_CURSOR"/m.test(query) ? ({ - user:{ - gists:{ - edges:[], - nodes:[], + user: { + gists: { + edges: [], + nodes: [], }, }, }) : ({ - user:{ - gists:{ - edges:[ + user: { + gists: { + edges: [ { - cursor:"MOCKED_CURSOR", + cursor: "MOCKED_CURSOR", }, ], - totalCount:faker.datatype.number(100), - nodes:[ + totalCount: faker.datatype.number(100), + nodes: [ { - stargazerCount:faker.datatype.number(10), - isFork:false, - forks:{totalCount:faker.datatype.number(10)}, - files:[{name:faker.system.fileName()}], - comments:{totalCount:faker.datatype.number(10)}, + stargazerCount: faker.datatype.number(10), + isFork: false, + forks: { totalCount: faker.datatype.number(10) }, + files: [{ name: faker.system.fileName() }], + comments: { totalCount: faker.datatype.number(10) }, }, { - stargazerCount:faker.datatype.number(10), - isFork:false, - forks:{totalCount:faker.datatype.number(10)}, - files:[{name:faker.system.fileName()}], - comments:{totalCount:faker.datatype.number(10)}, + stargazerCount: faker.datatype.number(10), + isFork: false, + forks: { totalCount: faker.datatype.number(10) }, + files: [{ name: faker.system.fileName() }], + comments: { totalCount: faker.datatype.number(10) }, }, ], }, diff --git a/tests/mocks/api/github/graphql/introduction.organization.mjs b/tests/mocks/api/github/graphql/introduction.organization.mjs index 1b6ebd66..ba32c677 100644 --- a/tests/mocks/api/github/graphql/introduction.organization.mjs +++ b/tests/mocks/api/github/graphql/introduction.organization.mjs @@ -1,9 +1,9 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > introduction/organization") return ({ - organization:{ - description:faker.lorem.sentences(), + organization: { + description: faker.lorem.sentences(), }, }) } diff --git a/tests/mocks/api/github/graphql/introduction.repository.mjs b/tests/mocks/api/github/graphql/introduction.repository.mjs index 0a3aba92..eafe13e7 100644 --- a/tests/mocks/api/github/graphql/introduction.repository.mjs +++ b/tests/mocks/api/github/graphql/introduction.repository.mjs @@ -1,9 +1,9 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > introduction/repository") return ({ - repository:{ - description:faker.lorem.sentences(), + repository: { + description: faker.lorem.sentences(), }, }) } diff --git a/tests/mocks/api/github/graphql/introduction.user.mjs b/tests/mocks/api/github/graphql/introduction.user.mjs index 782dde47..3884f010 100644 --- a/tests/mocks/api/github/graphql/introduction.user.mjs +++ b/tests/mocks/api/github/graphql/introduction.user.mjs @@ -1,9 +1,9 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > introduction/user") return ({ - user:{ - bio:faker.lorem.sentences(), + user: { + bio: faker.lorem.sentences(), }, }) } diff --git a/tests/mocks/api/github/graphql/isocalendar.calendar.mjs b/tests/mocks/api/github/graphql/isocalendar.calendar.mjs index 45065a10..f7aa3f6d 100644 --- a/tests/mocks/api/github/graphql/isocalendar.calendar.mjs +++ b/tests/mocks/api/github/graphql/isocalendar.calendar.mjs @@ -1,5 +1,5 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > isocalendar/calendar") //Generate calendar const date = new Date(query.match(/from: "(?\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z)"/)?.groups?.date) @@ -9,21 +9,21 @@ export default function({faker, query, login = faker.internet.userName()}) { for (; date <= to; date.setDate(date.getDate() + 1)) { //Create new week on sunday if (date.getDay() === 0) { - weeks.push({contributionDays}) + weeks.push({ contributionDays }) contributionDays = [] } //Random contributions const contributionCount = Math.min(10, Math.max(0, faker.datatype.number(14) - 4)) contributionDays.push({ contributionCount, - color:["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"][Math.ceil(contributionCount / 10 / 0.25)], - date:date.toISOString().substring(0, 10), + color: ["#ebedf0", "#9be9a8", "#40c463", "#30a14e", "#216e39"][Math.ceil(contributionCount / 10 / 0.25)], + date: date.toISOString().substring(0, 10), }) } return ({ - user:{ - calendar:{ - contributionCalendar:{ + user: { + calendar: { + contributionCalendar: { weeks, }, }, diff --git a/tests/mocks/api/github/graphql/licenses.default.mjs b/tests/mocks/api/github/graphql/licenses.default.mjs index 67758a53..004127ad 100644 --- a/tests/mocks/api/github/graphql/licenses.default.mjs +++ b/tests/mocks/api/github/graphql/licenses.default.mjs @@ -1,276 +1,276 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > licenses/default") return ({ - licenses:[ + licenses: [ { - spdxId:"AGPL-3.0", - name:"GNU Affero General Public License v3.0", - nickname:"GNU AGPLv3", - key:"agpl-3.0", - limitations:[ - {key:"liability", label:"Liability"}, - {key:"warranty", label:"Warranty"}, + spdxId: "AGPL-3.0", + name: "GNU Affero General Public License v3.0", + nickname: "GNU AGPLv3", + key: "agpl-3.0", + limitations: [ + { key: "liability", label: "Liability" }, + { key: "warranty", label: "Warranty" }, ], - conditions:[ - {key:"include-copyright", label:"License and copyright notice"}, - {key:"document-changes", label:"State changes"}, - {key:"disclose-source", label:"Disclose source"}, - {key:"network-use-disclose", label:"Network use is distribution"}, - {key:"same-license", label:"Same license"}, + conditions: [ + { key: "include-copyright", label: "License and copyright notice" }, + { key: "document-changes", label: "State changes" }, + { key: "disclose-source", label: "Disclose source" }, + { key: "network-use-disclose", label: "Network use is distribution" }, + { key: "same-license", label: "Same license" }, ], - permissions:[ - {key:"commercial-use", label:"Commercial use"}, - {key:"modifications", label:"Modification"}, - {key:"distribution", label:"Distribution"}, - {key:"patent-use", label:"Patent use"}, - {key:"private-use", label:"Private use"}, + permissions: [ + { key: "commercial-use", label: "Commercial use" }, + { key: "modifications", label: "Modification" }, + { key: "distribution", label: "Distribution" }, + { key: "patent-use", label: "Patent use" }, + { key: "private-use", label: "Private use" }, ], }, { - spdxId:"Apache-2.0", - name:"Apache License 2.0", - nickname:null, - key:"apache-2.0", - limitations:[ - {key:"trademark-use", label:"Trademark use"}, - {key:"liability", label:"Liability"}, - {key:"warranty", label:"Warranty"}, + spdxId: "Apache-2.0", + name: "Apache License 2.0", + nickname: null, + key: "apache-2.0", + limitations: [ + { key: "trademark-use", label: "Trademark use" }, + { key: "liability", label: "Liability" }, + { key: "warranty", label: "Warranty" }, ], - conditions:[ - {key:"include-copyright", label:"License and copyright notice"}, - {key:"document-changes", label:"State changes"}, + conditions: [ + { key: "include-copyright", label: "License and copyright notice" }, + { key: "document-changes", label: "State changes" }, ], - permissions:[ - {key:"commercial-use", label:"Commercial use"}, - {key:"modifications", label:"Modification"}, - {key:"distribution", label:"Distribution"}, - {key:"patent-use", label:"Patent use"}, - {key:"private-use", label:"Private use"}, + permissions: [ + { key: "commercial-use", label: "Commercial use" }, + { key: "modifications", label: "Modification" }, + { key: "distribution", label: "Distribution" }, + { key: "patent-use", label: "Patent use" }, + { key: "private-use", label: "Private use" }, ], }, { - spdxId:"BSD-2-Clause", - name:'BSD 2-Clause "Simplified" License', - nickname:null, - key:"bsd-2-clause", - limitations:[ - {key:"liability", label:"Liability"}, - {key:"warranty", label:"Warranty"}, + spdxId: "BSD-2-Clause", + name: 'BSD 2-Clause "Simplified" License', + nickname: null, + key: "bsd-2-clause", + limitations: [ + { key: "liability", label: "Liability" }, + { key: "warranty", label: "Warranty" }, ], - conditions:[ - {key:"include-copyright", label:"License and copyright notice"}, + conditions: [ + { key: "include-copyright", label: "License and copyright notice" }, ], - permissions:[ - {key:"commercial-use", label:"Commercial use"}, - {key:"modifications", label:"Modification"}, - {key:"distribution", label:"Distribution"}, - {key:"private-use", label:"Private use"}, + permissions: [ + { key: "commercial-use", label: "Commercial use" }, + { key: "modifications", label: "Modification" }, + { key: "distribution", label: "Distribution" }, + { key: "private-use", label: "Private use" }, ], }, { - spdxId:"BSD-3-Clause", - name:'BSD 3-Clause "New" or "Revised" License', - nickname:null, - key:"bsd-3-clause", - limitations:[ - {key:"liability", label:"Liability"}, - {key:"warranty", label:"Warranty"}, + spdxId: "BSD-3-Clause", + name: 'BSD 3-Clause "New" or "Revised" License', + nickname: null, + key: "bsd-3-clause", + limitations: [ + { key: "liability", label: "Liability" }, + { key: "warranty", label: "Warranty" }, ], - conditions:[ - {key:"include-copyright", label:"License and copyright notice"}, + conditions: [ + { key: "include-copyright", label: "License and copyright notice" }, ], - permissions:[ - {key:"commercial-use", label:"Commercial use"}, - {key:"modifications", label:"Modification"}, - {key:"distribution", label:"Distribution"}, - {key:"private-use", label:"Private use"}, + permissions: [ + { key: "commercial-use", label: "Commercial use" }, + { key: "modifications", label: "Modification" }, + { key: "distribution", label: "Distribution" }, + { key: "private-use", label: "Private use" }, ], }, { - spdxId:"BSL-1.0", - name:"Boost Software License 1.0", - nickname:null, - key:"bsl-1.0", - limitations:[ - {key:"liability", label:"Liability"}, - {key:"warranty", label:"Warranty"}, + spdxId: "BSL-1.0", + name: "Boost Software License 1.0", + nickname: null, + key: "bsl-1.0", + limitations: [ + { key: "liability", label: "Liability" }, + { key: "warranty", label: "Warranty" }, ], - conditions:[ - {key:"include-copyright--source", label:"License and copyright notice for source"}, + conditions: [ + { key: "include-copyright--source", label: "License and copyright notice for source" }, ], - permissions:[ - {key:"commercial-use", label:"Commercial use"}, - {key:"modifications", label:"Modification"}, - {key:"distribution", label:"Distribution"}, - {key:"private-use", label:"Private use"}, + permissions: [ + { key: "commercial-use", label: "Commercial use" }, + { key: "modifications", label: "Modification" }, + { key: "distribution", label: "Distribution" }, + { key: "private-use", label: "Private use" }, ], }, { - spdxId:"CC0-1.0", - name:"Creative Commons Zero v1.0 Universal", - nickname:null, - key:"cc0-1.0", - limitations:[ - {key:"liability", label:"Liability"}, - {key:"trademark-use", label:"Trademark use"}, - {key:"patent-use", label:"Patent use"}, - {key:"warranty", label:"Warranty"}, + spdxId: "CC0-1.0", + name: "Creative Commons Zero v1.0 Universal", + nickname: null, + key: "cc0-1.0", + limitations: [ + { key: "liability", label: "Liability" }, + { key: "trademark-use", label: "Trademark use" }, + { key: "patent-use", label: "Patent use" }, + { key: "warranty", label: "Warranty" }, ], - conditions:[], - permissions:[ - {key:"commercial-use", label:"Commercial use"}, - {key:"modifications", label:"Modification"}, - {key:"distribution", label:"Distribution"}, - {key:"private-use", label:"Private use"}, + conditions: [], + permissions: [ + { key: "commercial-use", label: "Commercial use" }, + { key: "modifications", label: "Modification" }, + { key: "distribution", label: "Distribution" }, + { key: "private-use", label: "Private use" }, ], }, { - spdxId:"EPL-2.0", - name:"Eclipse Public License 2.0", - nickname:null, - key:"epl-2.0", - limitations:[ - {key:"liability", label:"Liability"}, - {key:"warranty", label:"Warranty"}, + spdxId: "EPL-2.0", + name: "Eclipse Public License 2.0", + nickname: null, + key: "epl-2.0", + limitations: [ + { key: "liability", label: "Liability" }, + { key: "warranty", label: "Warranty" }, ], - conditions:[ - {key:"disclose-source", label:"Disclose source"}, - {key:"include-copyright", label:"License and copyright notice"}, - {key:"same-license", label:"Same license"}, + conditions: [ + { key: "disclose-source", label: "Disclose source" }, + { key: "include-copyright", label: "License and copyright notice" }, + { key: "same-license", label: "Same license" }, ], - permissions:[ - {key:"commercial-use", label:"Commercial use"}, - {key:"distribution", label:"Distribution"}, - {key:"modifications", label:"Modification"}, - {key:"patent-use", label:"Patent use"}, - {key:"private-use", label:"Private use"}, + permissions: [ + { key: "commercial-use", label: "Commercial use" }, + { key: "distribution", label: "Distribution" }, + { key: "modifications", label: "Modification" }, + { key: "patent-use", label: "Patent use" }, + { key: "private-use", label: "Private use" }, ], }, { - spdxId:"GPL-2.0", - name:"GNU General Public License v2.0", - nickname:"GNU GPLv2", - key:"gpl-2.0", - limitations:[ - {key:"liability", label:"Liability"}, - {key:"warranty", label:"Warranty"}, + spdxId: "GPL-2.0", + name: "GNU General Public License v2.0", + nickname: "GNU GPLv2", + key: "gpl-2.0", + limitations: [ + { key: "liability", label: "Liability" }, + { key: "warranty", label: "Warranty" }, ], - conditions:[ - {key:"include-copyright", label:"License and copyright notice"}, - {key:"document-changes", label:"State changes"}, - {key:"disclose-source", label:"Disclose source"}, - {key:"same-license", label:"Same license"}, + conditions: [ + { key: "include-copyright", label: "License and copyright notice" }, + { key: "document-changes", label: "State changes" }, + { key: "disclose-source", label: "Disclose source" }, + { key: "same-license", label: "Same license" }, ], - permissions:[ - {key:"commercial-use", label:"Commercial use"}, - {key:"modifications", label:"Modification"}, - {key:"distribution", label:"Distribution"}, - {key:"private-use", label:"Private use"}, + permissions: [ + { key: "commercial-use", label: "Commercial use" }, + { key: "modifications", label: "Modification" }, + { key: "distribution", label: "Distribution" }, + { key: "private-use", label: "Private use" }, ], }, { - spdxId:"GPL-3.0", - name:"GNU General Public License v3.0", - nickname:"GNU GPLv3", - key:"gpl-3.0", - limitations:[ - {key:"liability", label:"Liability"}, - {key:"warranty", label:"Warranty"}, + spdxId: "GPL-3.0", + name: "GNU General Public License v3.0", + nickname: "GNU GPLv3", + key: "gpl-3.0", + limitations: [ + { key: "liability", label: "Liability" }, + { key: "warranty", label: "Warranty" }, ], - conditions:[ - {key:"include-copyright", label:"License and copyright notice"}, - {key:"document-changes", label:"State changes"}, - {key:"disclose-source", label:"Disclose source"}, - {key:"same-license", label:"Same license"}, + conditions: [ + { key: "include-copyright", label: "License and copyright notice" }, + { key: "document-changes", label: "State changes" }, + { key: "disclose-source", label: "Disclose source" }, + { key: "same-license", label: "Same license" }, ], - permissions:[ - {key:"commercial-use", label:"Commercial use"}, - {key:"modifications", label:"Modification"}, - {key:"distribution", label:"Distribution"}, - {key:"patent-use", label:"Patent use"}, - {key:"private-use", label:"Private use"}, + permissions: [ + { key: "commercial-use", label: "Commercial use" }, + { key: "modifications", label: "Modification" }, + { key: "distribution", label: "Distribution" }, + { key: "patent-use", label: "Patent use" }, + { key: "private-use", label: "Private use" }, ], }, { - spdxId:"LGPL-2.1", - name:"GNU Lesser General Public License v2.1", - nickname:"GNU LGPLv2.1", - key:"lgpl-2.1", - limitations:[ - {key:"liability", label:"Liability"}, - {key:"warranty", label:"Warranty"}, + spdxId: "LGPL-2.1", + name: "GNU Lesser General Public License v2.1", + nickname: "GNU LGPLv2.1", + key: "lgpl-2.1", + limitations: [ + { key: "liability", label: "Liability" }, + { key: "warranty", label: "Warranty" }, ], - conditions:[ - {key:"include-copyright", label:"License and copyright notice"}, - {key:"disclose-source", label:"Disclose source"}, - {key:"document-changes", label:"State changes"}, - {key:"same-license--library", label:"Same license (library)"}, + conditions: [ + { key: "include-copyright", label: "License and copyright notice" }, + { key: "disclose-source", label: "Disclose source" }, + { key: "document-changes", label: "State changes" }, + { key: "same-license--library", label: "Same license (library)" }, ], - permissions:[ - {key:"commercial-use", label:"Commercial use"}, - {key:"modifications", label:"Modification"}, - {key:"distribution", label:"Distribution"}, - {key:"private-use", label:"Private use"}, + permissions: [ + { key: "commercial-use", label: "Commercial use" }, + { key: "modifications", label: "Modification" }, + { key: "distribution", label: "Distribution" }, + { key: "private-use", label: "Private use" }, ], }, { - spdxId:"MIT", - name:"MIT License", - nickname:null, - key:"mit", - limitations:[ - {key:"liability", label:"Liability"}, - {key:"warranty", label:"Warranty"}, + spdxId: "MIT", + name: "MIT License", + nickname: null, + key: "mit", + limitations: [ + { key: "liability", label: "Liability" }, + { key: "warranty", label: "Warranty" }, ], - conditions:[ - {key:"include-copyright", label:"License and copyright notice"}, + conditions: [ + { key: "include-copyright", label: "License and copyright notice" }, ], - permissions:[ - {key:"commercial-use", label:"Commercial use"}, - {key:"modifications", label:"Modification"}, - {key:"distribution", label:"Distribution"}, - {key:"private-use", label:"Private use"}, + permissions: [ + { key: "commercial-use", label: "Commercial use" }, + { key: "modifications", label: "Modification" }, + { key: "distribution", label: "Distribution" }, + { key: "private-use", label: "Private use" }, ], }, { - spdxId:"MPL-2.0", - name:"Mozilla Public License 2.0", - nickname:null, - key:"mpl-2.0", - limitations:[ - {key:"liability", label:"Liability"}, - {key:"trademark-use", label:"Trademark use"}, - {key:"warranty", label:"Warranty"}, + spdxId: "MPL-2.0", + name: "Mozilla Public License 2.0", + nickname: null, + key: "mpl-2.0", + limitations: [ + { key: "liability", label: "Liability" }, + { key: "trademark-use", label: "Trademark use" }, + { key: "warranty", label: "Warranty" }, ], - conditions:[ - {key:"disclose-source", label:"Disclose source"}, - {key:"include-copyright", label:"License and copyright notice"}, - {key:"same-license--file", label:"Same license (file)"}, + conditions: [ + { key: "disclose-source", label: "Disclose source" }, + { key: "include-copyright", label: "License and copyright notice" }, + { key: "same-license--file", label: "Same license (file)" }, ], - permissions:[ - {key:"commercial-use", label:"Commercial use"}, - {key:"modifications", label:"Modification"}, - {key:"distribution", label:"Distribution"}, - {key:"patent-use", label:"Patent use"}, - {key:"private-use", label:"Private use"}, + permissions: [ + { key: "commercial-use", label: "Commercial use" }, + { key: "modifications", label: "Modification" }, + { key: "distribution", label: "Distribution" }, + { key: "patent-use", label: "Patent use" }, + { key: "private-use", label: "Private use" }, ], }, { - spdxId:"Unlicense", - name:"The Unlicense", - nickname:null, - key:"unlicense", - limitations:[ - {key:"liability", label:"Liability"}, - {key:"warranty", label:"Warranty"}, + spdxId: "Unlicense", + name: "The Unlicense", + nickname: null, + key: "unlicense", + limitations: [ + { key: "liability", label: "Liability" }, + { key: "warranty", label: "Warranty" }, ], - conditions:[], - permissions:[ - {key:"private-use", label:"Private use"}, - {key:"commercial-use", label:"Commercial use"}, - {key:"modifications", label:"Modification"}, - {key:"distribution", label:"Distribution"}, + conditions: [], + permissions: [ + { key: "private-use", label: "Private use" }, + { key: "commercial-use", label: "Commercial use" }, + { key: "modifications", label: "Modification" }, + { key: "distribution", label: "Distribution" }, ], }, ], diff --git a/tests/mocks/api/github/graphql/licenses.repository.mjs b/tests/mocks/api/github/graphql/licenses.repository.mjs index ed494cd2..8146ec7c 100644 --- a/tests/mocks/api/github/graphql/licenses.repository.mjs +++ b/tests/mocks/api/github/graphql/licenses.repository.mjs @@ -1,12 +1,12 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > licenses/repository") return ({ - user:{ - repository:{ - licenseInfo:{spdxId:"MIT", name:"MIT License", nickname:null, key:"mit"}, - url:"https://github.com/lowlighter/metrics", - databaseId:293860197, + user: { + repository: { + licenseInfo: { spdxId: "MIT", name: "MIT License", nickname: null, key: "mit" }, + url: "https://github.com/lowlighter/metrics", + databaseId: 293860197, }, }, }) diff --git a/tests/mocks/api/github/graphql/notable.contributions.mjs b/tests/mocks/api/github/graphql/notable.contributions.mjs index 70318e66..fd6fd7ab 100644 --- a/tests/mocks/api/github/graphql/notable.contributions.mjs +++ b/tests/mocks/api/github/graphql/notable.contributions.mjs @@ -1,30 +1,30 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > notable/contributions") return /after: "MOCKED_CURSOR"/m.test(query) ? ({ - user:{ - repositoriesContributedTo:{ - edges:[], + user: { + repositoriesContributedTo: { + edges: [], }, }, }) : ({ - user:{ - repositoriesContributedTo:{ - edges:[ + user: { + repositoriesContributedTo: { + edges: [ { - cursor:"MOCKED_CURSOR", - node:{ - isInOrganization:true, - owner:{ - login:faker.internet.userName(), - avatarUrl:null, + cursor: "MOCKED_CURSOR", + node: { + isInOrganization: true, + owner: { + login: faker.internet.userName(), + avatarUrl: null, }, - nameWithOwner:`${faker.internet.userName()}/${faker.lorem.slug()}`, - stargazers:{totalCount:faker.datatype.number(1000)}, - watchers:{totalCount:faker.datatype.number(1000)}, - forks:{totalCount:faker.datatype.number(1000)}, + nameWithOwner: `${faker.internet.userName()}/${faker.lorem.slug()}`, + stargazers: { totalCount: faker.datatype.number(1000) }, + watchers: { totalCount: faker.datatype.number(1000) }, + forks: { totalCount: faker.datatype.number(1000) }, }, }, ], diff --git a/tests/mocks/api/github/graphql/people.default.mjs b/tests/mocks/api/github/graphql/people.default.mjs index 560d3aa2..0ff7946d 100644 --- a/tests/mocks/api/github/graphql/people.default.mjs +++ b/tests/mocks/api/github/graphql/people.default.mjs @@ -1,23 +1,23 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > people/default") const type = query.match(/(?followers|following)[(]/)?.groups?.type ?? "(unknown type)" return /after: "MOCKED_CURSOR"/m.test(query) ? ({ - user:{ - [type]:{ - edges:[], + user: { + [type]: { + edges: [], }, }, }) : ({ - user:{ - [type]:{ - edges:new Array(Math.ceil(20 + 80 * Math.random())).fill(null).map((login = faker.internet.userName()) => ({ - cursor:"MOCKED_CURSOR", - node:{ + user: { + [type]: { + edges: new Array(Math.ceil(20 + 80 * Math.random())).fill(null).map((login = faker.internet.userName()) => ({ + cursor: "MOCKED_CURSOR", + node: { login, - avatarUrl:null, + avatarUrl: null, }, })), }, diff --git a/tests/mocks/api/github/graphql/people.repository.mjs b/tests/mocks/api/github/graphql/people.repository.mjs index a4994fdb..cd3be4bb 100644 --- a/tests/mocks/api/github/graphql/people.repository.mjs +++ b/tests/mocks/api/github/graphql/people.repository.mjs @@ -1,26 +1,26 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > people/repository") const type = query.match(/(?stargazers|watchers)[(]/)?.groups?.type ?? "(unknown type)" return /after: "MOCKED_CURSOR"/m.test(query) ? ({ - user:{ - repository:{ - [type]:{ - edges:[], + user: { + repository: { + [type]: { + edges: [], }, }, }, }) : ({ - user:{ - repository:{ - [type]:{ - edges:new Array(Math.ceil(20 + 80 * Math.random())).fill(null).map((login = faker.internet.userName()) => ({ - cursor:"MOCKED_CURSOR", - node:{ + user: { + repository: { + [type]: { + edges: new Array(Math.ceil(20 + 80 * Math.random())).fill(null).map((login = faker.internet.userName()) => ({ + cursor: "MOCKED_CURSOR", + node: { login, - avatarUrl:null, + avatarUrl: null, }, })), }, diff --git a/tests/mocks/api/github/graphql/people.sponsors.mjs b/tests/mocks/api/github/graphql/people.sponsors.mjs index f27fd8f6..0f7839f0 100644 --- a/tests/mocks/api/github/graphql/people.sponsors.mjs +++ b/tests/mocks/api/github/graphql/people.sponsors.mjs @@ -1,30 +1,30 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > people/sponsors") const type = query.match(/(?sponsorshipsAsSponsor|sponsorshipsAsMaintainer)[(]/)?.groups?.type ?? "(unknown type)" return /after: "MOCKED_CURSOR"/m.test(query) ? ({ - user:{ + user: { login, - [type]:{ - edges:[], + [type]: { + edges: [], }, }, }) : ({ - user:{ + user: { login, - [type]:{ - edges:new Array(Math.ceil(20 + 80 * Math.random())).fill(null).map((login = faker.internet.userName()) => ({ - cursor:"MOCKED_CURSOR", - node:{ - sponsorEntity:{ - login:faker.internet.userName(), - avatarUrl:null, + [type]: { + edges: new Array(Math.ceil(20 + 80 * Math.random())).fill(null).map((login = faker.internet.userName()) => ({ + cursor: "MOCKED_CURSOR", + node: { + sponsorEntity: { + login: faker.internet.userName(), + avatarUrl: null, }, - sponsorable:{ - login:faker.internet.userName(), - avatarUrl:null, + sponsorable: { + login: faker.internet.userName(), + avatarUrl: null, }, }, })), diff --git a/tests/mocks/api/github/graphql/projects.repository.mjs b/tests/mocks/api/github/graphql/projects.repository.mjs index d977cf2b..c7bd4597 100644 --- a/tests/mocks/api/github/graphql/projects.repository.mjs +++ b/tests/mocks/api/github/graphql/projects.repository.mjs @@ -1,18 +1,18 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > projects/repository") return ({ - user:{ - repository:{ - project:{ - name:"Repository project example", - updatedAt:`${faker.date.recent()}`, - body:faker.lorem.paragraph(), - progress:{ - doneCount:faker.datatype.number(10), - inProgressCount:faker.datatype.number(10), - todoCount:faker.datatype.number(10), - enabled:true, + user: { + repository: { + project: { + name: "Repository project example", + updatedAt: `${faker.date.recent()}`, + body: faker.lorem.paragraph(), + progress: { + doneCount: faker.datatype.number(10), + inProgressCount: faker.datatype.number(10), + todoCount: faker.datatype.number(10), + enabled: true, }, }, }, diff --git a/tests/mocks/api/github/graphql/projects.user.mjs b/tests/mocks/api/github/graphql/projects.user.mjs index fa24db1b..8564dab4 100644 --- a/tests/mocks/api/github/graphql/projects.user.mjs +++ b/tests/mocks/api/github/graphql/projects.user.mjs @@ -1,20 +1,20 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > projects/user") return ({ - user:{ - projects:{ - totalCount:1, - nodes:[ + user: { + projects: { + totalCount: 1, + nodes: [ { - name:"User-owned project", - updatedAt:`${faker.date.recent()}`, - body:faker.lorem.paragraph(), - progress:{ - doneCount:faker.datatype.number(10), - inProgressCount:faker.datatype.number(10), - todoCount:faker.datatype.number(10), - enabled:true, + name: "User-owned project", + updatedAt: `${faker.date.recent()}`, + body: faker.lorem.paragraph(), + progress: { + doneCount: faker.datatype.number(10), + inProgressCount: faker.datatype.number(10), + todoCount: faker.datatype.number(10), + enabled: true, }, }, ], diff --git a/tests/mocks/api/github/graphql/reactions.default.mjs b/tests/mocks/api/github/graphql/reactions.default.mjs index 2f2c2c21..d90908c0 100644 --- a/tests/mocks/api/github/graphql/reactions.default.mjs +++ b/tests/mocks/api/github/graphql/reactions.default.mjs @@ -1,27 +1,27 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > reactions/default") const type = query.match(/(?issues|issueComments)[(]/)?.groups?.type ?? "(unknown type)" return /after: "MOCKED_CURSOR"/m.test(query) ? ({ - user:{ - [type]:{ - edges:[], - nodes:[], + user: { + [type]: { + edges: [], + nodes: [], }, }, }) : ({ - user:{ - [type]:{ - edges:new Array(100).fill(null).map(_ => ({ - cursor:"MOCKED_CURSOR", - node:{ - createdAt:faker.date.recent(), - reactions:{ - nodes:new Array(50).fill(null).map(_ => ({ - user:{login:faker.internet.userName()}, - content:faker.random.arrayElement(["HEART", "THUMBS_UP", "THUMBS_DOWN", "LAUGH", "CONFUSED", "EYES", "ROCKET", "HOORAY"]), + user: { + [type]: { + edges: new Array(100).fill(null).map(_ => ({ + cursor: "MOCKED_CURSOR", + node: { + createdAt: faker.date.recent(), + reactions: { + nodes: new Array(50).fill(null).map(_ => ({ + user: { login: faker.internet.userName() }, + content: faker.random.arrayElement(["HEART", "THUMBS_UP", "THUMBS_DOWN", "LAUGH", "CONFUSED", "EYES", "ROCKET", "HOORAY"]), })), }, }, diff --git a/tests/mocks/api/github/graphql/repositories.repository.mjs b/tests/mocks/api/github/graphql/repositories.repository.mjs index 488dd422..a1bcc808 100644 --- a/tests/mocks/api/github/graphql/repositories.repository.mjs +++ b/tests/mocks/api/github/graphql/repositories.repository.mjs @@ -1,28 +1,28 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > stars/default") return ({ - repository:{ + repository: { createdAt: faker.date.past(), - description:"📊 An image generator with 20+ metrics about your GitHub account such as activity, community, repositories, coding habits, website performances, music played, starred topics, etc. that you can put on your profile or elsewhere !", - forkCount:faker.datatype.number(100), - isFork:false, - issues:{ - totalCount:faker.datatype.number(100), + description: "📊 An image generator with 20+ metrics about your GitHub account such as activity, community, repositories, coding habits, website performances, music played, starred topics, etc. that you can put on your profile or elsewhere !", + forkCount: faker.datatype.number(100), + isFork: false, + issues: { + totalCount: faker.datatype.number(100), }, - nameWithOwner:"lowlighter/metrics", - openGraphImageUrl:"https://repository-images.githubusercontent.com/293860197/7fd72080-496d-11eb-8fe0-238b38a0746a", - pullRequests:{ - totalCount:faker.datatype.number(100), + nameWithOwner: "lowlighter/metrics", + openGraphImageUrl: "https://repository-images.githubusercontent.com/293860197/7fd72080-496d-11eb-8fe0-238b38a0746a", + pullRequests: { + totalCount: faker.datatype.number(100), }, - stargazerCount:faker.datatype.number(10000), - licenseInfo:{ - nickname:null, - name:"MIT License", + stargazerCount: faker.datatype.number(10000), + licenseInfo: { + nickname: null, + name: "MIT License", }, - primaryLanguage:{ - color:"#f1e05a", - name:"JavaScript", + primaryLanguage: { + color: "#f1e05a", + name: "JavaScript", }, }, }) diff --git a/tests/mocks/api/github/graphql/sponsors.default.mjs b/tests/mocks/api/github/graphql/sponsors.default.mjs index 3f886807..b23a4165 100644 --- a/tests/mocks/api/github/graphql/sponsors.default.mjs +++ b/tests/mocks/api/github/graphql/sponsors.default.mjs @@ -1,28 +1,28 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > sponsors/default") return ({ - user:{ - sponsorsListing:{ - fullDescription:faker.lorem.sentences(), - activeGoal:{ - percentComplete:faker.datatype.number(100), - title:faker.lorem.sentence(), - description:faker.lorem.sentence(), - } + user: { + sponsorsListing: { + fullDescription: faker.lorem.sentences(), + activeGoal: { + percentComplete: faker.datatype.number(100), + title: faker.lorem.sentence(), + description: faker.lorem.sentence(), + }, }, - sponsorshipsAsMaintainer:{ - totalCount:faker.datatype.number(100), - nodes:new Array(10).fill(null).map(_ => ({ - sponsorEntity:{ - login:faker.internet.userName(), - avatarUrl:null, + sponsorshipsAsMaintainer: { + totalCount: faker.datatype.number(100), + nodes: new Array(10).fill(null).map(_ => ({ + sponsorEntity: { + login: faker.internet.userName(), + avatarUrl: null, }, - tier:{ - monthlyPriceInDollars:faker.datatype.number(10), - } - })) - } + tier: { + monthlyPriceInDollars: faker.datatype.number(10), + }, + })), + }, }, }) -} \ No newline at end of file +} diff --git a/tests/mocks/api/github/graphql/stargazers.default.mjs b/tests/mocks/api/github/graphql/stargazers.default.mjs index e5f2ac44..33882674 100644 --- a/tests/mocks/api/github/graphql/stargazers.default.mjs +++ b/tests/mocks/api/github/graphql/stargazers.default.mjs @@ -1,20 +1,20 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > stargazers/default") return /after: "MOCKED_CURSOR"/m.test(query) ? ({ - repository:{ - stargazers:{ - edges:[], + repository: { + stargazers: { + edges: [], }, }, }) : ({ - repository:{ - stargazers:{ - edges:new Array(faker.datatype.number({min:50, max:100})).fill(null).map(() => ({ - starredAt:`${faker.date.recent(30)}`, - cursor:"MOCKED_CURSOR", + repository: { + stargazers: { + edges: new Array(faker.datatype.number({ min: 50, max: 100 })).fill(null).map(() => ({ + starredAt: `${faker.date.recent(30)}`, + cursor: "MOCKED_CURSOR", })), }, }, diff --git a/tests/mocks/api/github/graphql/stars.default.mjs b/tests/mocks/api/github/graphql/stars.default.mjs index 675ae042..5152655e 100644 --- a/tests/mocks/api/github/graphql/stars.default.mjs +++ b/tests/mocks/api/github/graphql/stars.default.mjs @@ -1,32 +1,32 @@ /**Mocked data */ -export default function({faker, query, login = faker.internet.userName()}) { +export default function({ faker, query, login = faker.internet.userName() }) { console.debug("metrics/compute/mocks > mocking graphql api result > stars/default") return ({ - user:{ - starredRepositories:{ - edges:[ + user: { + starredRepositories: { + edges: [ { - starredAt:`${faker.date.recent(14)}`, - node:{ - description:"📊 An image generator with 20+ metrics about your GitHub account such as activity, community, repositories, coding habits, website performances, music played, starred topics, etc. that you can put on your profile or elsewhere !", - forkCount:faker.datatype.number(100), - isFork:false, - issues:{ - totalCount:faker.datatype.number(100), + starredAt: `${faker.date.recent(14)}`, + node: { + description: "📊 An image generator with 20+ metrics about your GitHub account such as activity, community, repositories, coding habits, website performances, music played, starred topics, etc. that you can put on your profile or elsewhere !", + forkCount: faker.datatype.number(100), + isFork: false, + issues: { + totalCount: faker.datatype.number(100), }, - nameWithOwner:"lowlighter/metrics", - openGraphImageUrl:"https://repository-images.githubusercontent.com/293860197/7fd72080-496d-11eb-8fe0-238b38a0746a", - pullRequests:{ - totalCount:faker.datatype.number(100), + nameWithOwner: "lowlighter/metrics", + openGraphImageUrl: "https://repository-images.githubusercontent.com/293860197/7fd72080-496d-11eb-8fe0-238b38a0746a", + pullRequests: { + totalCount: faker.datatype.number(100), }, - stargazerCount:faker.datatype.number(10000), - licenseInfo:{ - nickname:null, - name:"MIT License", + stargazerCount: faker.datatype.number(10000), + licenseInfo: { + nickname: null, + name: "MIT License", }, - primaryLanguage:{ - color:"#f1e05a", - name:"JavaScript", + primaryLanguage: { + color: "#f1e05a", + name: "JavaScript", }, }, }, diff --git a/tests/mocks/api/github/rest/activity/listEventsForAuthenticatedUser.mjs b/tests/mocks/api/github/rest/activity/listEventsForAuthenticatedUser.mjs index f0044356..d9a33eef 100644 --- a/tests/mocks/api/github/rest/activity/listEventsForAuthenticatedUser.mjs +++ b/tests/mocks/api/github/rest/activity/listEventsForAuthenticatedUser.mjs @@ -1,340 +1,340 @@ /**Mocked data */ -export default function({faker}, target, that, [{username:login, page, per_page}]) { +export default function({ faker }, target, that, [{ username: login, page, per_page }]) { console.debug("metrics/compute/mocks > mocking rest api result > rest.activity.listEventsForAuthenticatedUser") return ({ - status:200, - url:`https://api.github.com/users/${login}/events?per_page=${per_page}&page=${page}`, - headers:{ - server:"GitHub.com", - status:"200 OK", - "x-oauth-scopes":"repo", + status: 200, + url: `https://api.github.com/users/${login}/events?per_page=${per_page}&page=${page}`, + headers: { + server: "GitHub.com", + status: "200 OK", + "x-oauth-scopes": "repo", }, - data:page < 1 ? [] : [ + data: page < 1 ? [] : [ { - id:"10000000000", - type:"CommitCommentEvent", - actor:{ + id: "10000000000", + type: "CommitCommentEvent", + actor: { login, }, - repo:{ - name:`${faker.random.word()}/${faker.random.word()}`, + repo: { + name: `${faker.random.word()}/${faker.random.word()}`, }, - payload:{ - comment:{ - user:{ + payload: { + comment: { + user: { login, }, - path:faker.system.fileName(), - commit_id:"MOCKED_SHA", - body:faker.lorem.sentence(), + path: faker.system.fileName(), + commit_id: "MOCKED_SHA", + body: faker.lorem.sentence(), }, }, - created_at:faker.date.recent(7), - public:true, + created_at: faker.date.recent(7), + public: true, }, { - id:"10000000001", - type:"PullRequestReviewCommentEvent", - actor:{ + id: "10000000001", + type: "PullRequestReviewCommentEvent", + actor: { login, }, - repo:{ - name:`${faker.random.word()}/${faker.random.word()}`, + repo: { + name: `${faker.random.word()}/${faker.random.word()}`, }, - payload:{ - action:"created", - comment:{ - user:{ + payload: { + action: "created", + comment: { + user: { login, }, - body:faker.lorem.paragraph(), + body: faker.lorem.paragraph(), }, - pull_request:{ - title:faker.lorem.sentence(), - number:1, - user:{ - login:faker.internet.userName(), + pull_request: { + title: faker.lorem.sentence(), + number: 1, + user: { + login: faker.internet.userName(), }, - body:"", + body: "", }, }, - created_at:faker.date.recent(7), - public:true, + created_at: faker.date.recent(7), + public: true, }, { - id:"10000000002", - type:"IssuesEvent", - actor:{ + id: "10000000002", + type: "IssuesEvent", + actor: { login, }, - repo:{ - name:`${faker.random.word()}/${faker.random.word()}`, + repo: { + name: `${faker.random.word()}/${faker.random.word()}`, }, - payload:{ - action:faker.random.arrayElement(["opened", "closed", "reopened"]), - issue:{ - number:2, - title:faker.lorem.sentence(), - user:{ + payload: { + action: faker.random.arrayElement(["opened", "closed", "reopened"]), + issue: { + number: 2, + title: faker.lorem.sentence(), + user: { login, }, - body:faker.lorem.paragraph(), - performed_via_github_app:null, + body: faker.lorem.paragraph(), + performed_via_github_app: null, }, }, - created_at:faker.date.recent(7), - public:true, + created_at: faker.date.recent(7), + public: true, }, { - id:"10000000003", - type:"GollumEvent", - actor:{ + id: "10000000003", + type: "GollumEvent", + actor: { login, }, - repo:{ - name:`${faker.random.word()}/${faker.random.word()}`, + repo: { + name: `${faker.random.word()}/${faker.random.word()}`, }, - payload:{ - pages:[ + payload: { + pages: [ { - page_name:faker.lorem.sentence(), - title:faker.lorem.sentence(), - summary:null, - action:"created", - sha:"MOCKED_SHA", + page_name: faker.lorem.sentence(), + title: faker.lorem.sentence(), + summary: null, + action: "created", + sha: "MOCKED_SHA", }, ], }, - created_at:faker.date.recent(7), - public:true, + created_at: faker.date.recent(7), + public: true, }, { - id:"10000000004", - type:"IssueCommentEvent", - actor:{ + id: "10000000004", + type: "IssueCommentEvent", + actor: { login, }, - repo:{ - name:`${faker.random.word()}/${faker.random.word()}`, + repo: { + name: `${faker.random.word()}/${faker.random.word()}`, }, - payload:{ - action:"created", - issue:{ - number:3, - title:faker.lorem.sentence(), - user:{ + payload: { + action: "created", + issue: { + number: 3, + title: faker.lorem.sentence(), + user: { login, }, - labels:[ + labels: [ { - name:"lorem ipsum", - color:"d876e3", + name: "lorem ipsum", + color: "d876e3", }, ], - state:"open", + state: "open", }, - comment:{ - body:faker.lorem.paragraph(), - performed_via_github_app:null, + comment: { + body: faker.lorem.paragraph(), + performed_via_github_app: null, }, }, - created_at:faker.date.recent(7), - public:true, + created_at: faker.date.recent(7), + public: true, }, { - id:"10000000005", - type:"ForkEvent", - actor:{ + id: "10000000005", + type: "ForkEvent", + actor: { login, }, - repo:{ - name:`${faker.random.word()}/${faker.random.word()}`, + repo: { + name: `${faker.random.word()}/${faker.random.word()}`, }, - payload:{ - forkee:{ - name:faker.random.word(), - full_name:`${faker.random.word()}/${faker.random.word()}`, + payload: { + forkee: { + name: faker.random.word(), + full_name: `${faker.random.word()}/${faker.random.word()}`, }, }, - created_at:faker.date.recent(7), - public:true, + created_at: faker.date.recent(7), + public: true, }, { - id:"10000000006", - type:"PullRequestReviewEvent", - actor:{ + id: "10000000006", + type: "PullRequestReviewEvent", + actor: { login, }, - repo:{ - name:`${faker.random.word()}/${faker.random.word()}`, + repo: { + name: `${faker.random.word()}/${faker.random.word()}`, }, - payload:{ - action:"created", - review:{ - user:{ + payload: { + action: "created", + review: { + user: { login, }, - state:"approved", + state: "approved", }, - pull_request:{ - state:"open", - number:4, - locked:false, - title:faker.lorem.sentence(), - user:{ - login:faker.internet.userName(), + pull_request: { + state: "open", + number: 4, + locked: false, + title: faker.lorem.sentence(), + user: { + login: faker.internet.userName(), }, }, }, - created_at:faker.date.recent(7), - public:true, + created_at: faker.date.recent(7), + public: true, }, { - id:"10000000007", - type:"ReleaseEvent", - actor:{ + id: "10000000007", + type: "ReleaseEvent", + actor: { login, }, - repo:{ - name:`${faker.random.word()}/${faker.random.word()}`, + repo: { + name: `${faker.random.word()}/${faker.random.word()}`, }, - payload:{ - action:"published", - release:{ - tag_name:`v${faker.datatype.number()}.${faker.datatype.number()}`, - name:faker.random.words(4), - draft:faker.datatype.boolean(), - prerelease:faker.datatype.boolean(), + payload: { + action: "published", + release: { + tag_name: `v${faker.datatype.number()}.${faker.datatype.number()}`, + name: faker.random.words(4), + draft: faker.datatype.boolean(), + prerelease: faker.datatype.boolean(), }, }, - created_at:faker.date.recent(7), - public:true, + created_at: faker.date.recent(7), + public: true, }, { - id:"10000000008", - type:"CreateEvent", - actor:{ + id: "10000000008", + type: "CreateEvent", + actor: { login, }, - repo:{ - name:`${faker.random.word()}/${faker.random.word()}`, + repo: { + name: `${faker.random.word()}/${faker.random.word()}`, }, - payload:{ - ref:faker.lorem.slug(), - ref_type:faker.random.arrayElement(["tag", "branch"]), - master_branch:"master", + payload: { + ref: faker.lorem.slug(), + ref_type: faker.random.arrayElement(["tag", "branch"]), + master_branch: "master", }, - created_at:faker.date.recent(7), - public:true, + created_at: faker.date.recent(7), + public: true, }, { - id:"100000000009", - type:"WatchEvent", - actor:{ + id: "100000000009", + type: "WatchEvent", + actor: { login, }, - repo:{ - name:"lowlighter/metrics", + repo: { + name: "lowlighter/metrics", }, - payload:{action:"started"}, - created_at:faker.date.recent(7), - public:true, + payload: { action: "started" }, + created_at: faker.date.recent(7), + public: true, }, { - id:"10000000010", - type:"DeleteEvent", - actor:{ + id: "10000000010", + type: "DeleteEvent", + actor: { login, }, - repo:{ - name:`${faker.random.word()}/${faker.random.word()}`, + repo: { + name: `${faker.random.word()}/${faker.random.word()}`, }, - payload:{ - ref:faker.lorem.slug(), - ref_type:faker.random.arrayElement(["tag", "branch"]), + payload: { + ref: faker.lorem.slug(), + ref_type: faker.random.arrayElement(["tag", "branch"]), }, - created_at:faker.date.recent(7), - public:true, + created_at: faker.date.recent(7), + public: true, }, { - id:"10000000011", - type:"PushEvent", - actor:{ + id: "10000000011", + type: "PushEvent", + actor: { login, }, - repo:{ - name:`${faker.random.word()}/${faker.random.word()}`, + repo: { + name: `${faker.random.word()}/${faker.random.word()}`, }, - payload:{ - size:1, - ref:"refs/heads/master", - commits:[ + payload: { + size: 1, + ref: "refs/heads/master", + commits: [ { - sha:"MOCKED_SHA", - message:faker.lorem.sentence(), - url:"https://api.github.com/repos/lowlighter/metrics/commits/MOCKED_SHA", + sha: "MOCKED_SHA", + message: faker.lorem.sentence(), + url: "https://api.github.com/repos/lowlighter/metrics/commits/MOCKED_SHA", }, ], }, - created_at:faker.date.recent(7), - public:true, + created_at: faker.date.recent(7), + public: true, }, { - id:"10000000012", - type:"PullRequestEvent", - actor:{ + id: "10000000012", + type: "PullRequestEvent", + actor: { login, }, - repo:{ - name:`${faker.random.word()}/${faker.random.word()}`, + repo: { + name: `${faker.random.word()}/${faker.random.word()}`, }, - payload:{ - action:faker.random.arrayElement(["opened", "closed"]), - number:5, - pull_request:{ - user:{ + payload: { + action: faker.random.arrayElement(["opened", "closed"]), + number: 5, + pull_request: { + user: { login, }, - state:"open", - title:faker.lorem.sentence(), - additions:faker.datatype.number(1000), - deletions:faker.datatype.number(1000), - changed_files:faker.datatype.number(10), + state: "open", + title: faker.lorem.sentence(), + additions: faker.datatype.number(1000), + deletions: faker.datatype.number(1000), + changed_files: faker.datatype.number(10), }, }, - created_at:faker.date.recent(7), - public:true, + created_at: faker.date.recent(7), + public: true, }, { - id:"10000000013", - type:"MemberEvent", - actor:{ + id: "10000000013", + type: "MemberEvent", + actor: { login, }, - repo:{ - name:`${faker.random.word()}/${faker.random.word()}`, + repo: { + name: `${faker.random.word()}/${faker.random.word()}`, }, - payload:{ - member:{ - login:faker.internet.userName(), + payload: { + member: { + login: faker.internet.userName(), }, - action:"added", + action: "added", }, - created_at:faker.date.recent(7), - public:true, + created_at: faker.date.recent(7), + public: true, }, { - id:"10000000014", - type:"PublicEvent", - actor:{ + id: "10000000014", + type: "PublicEvent", + actor: { login, }, - repo:{ - name:`${faker.random.word()}/${faker.random.word()}`, + repo: { + name: `${faker.random.word()}/${faker.random.word()}`, }, - payload:{}, - created_at:faker.date.recent(7), - public:true, + payload: {}, + created_at: faker.date.recent(7), + public: true, }, ], }) diff --git a/tests/mocks/api/github/rest/activity/listRepoEvents.mjs b/tests/mocks/api/github/rest/activity/listRepoEvents.mjs index d328c1a5..139252cd 100644 --- a/tests/mocks/api/github/rest/activity/listRepoEvents.mjs +++ b/tests/mocks/api/github/rest/activity/listRepoEvents.mjs @@ -2,7 +2,7 @@ import listEventsForAuthenticatedUser from "./listEventsForAuthenticatedUser.mjs" /**Mocked data */ -export default function({faker}, target, that, [{username:login, page, per_page}]) { +export default function({ faker }, target, that, [{ username: login, page, per_page }]) { console.debug("metrics/compute/mocks > mocking rest api result > rest.activity.listRepoEvents") return listEventsForAuthenticatedUser(...arguments) } diff --git a/tests/mocks/api/github/rest/emojis/get.mjs b/tests/mocks/api/github/rest/emojis/get.mjs index 435eb042..d91dc51e 100644 --- a/tests/mocks/api/github/rest/emojis/get.mjs +++ b/tests/mocks/api/github/rest/emojis/get.mjs @@ -1,1814 +1,1814 @@ /**Mocked data */ -export default function({faker}, target, that) { +export default function({ faker }, target, that) { console.debug("metrics/compute/mocks > mocking rest api result > rest.emojis.get") return ({ - status:200, - url:"https://api.github.com/emojis", - headers:{ - server:"GitHub.com", - status:"200 OK", - "x-oauth-scopes":"repo", + status: 200, + url: "https://api.github.com/emojis", + headers: { + server: "GitHub.com", + status: "200 OK", + "x-oauth-scopes": "repo", }, - data:{ - "100":"https://github.githubassets.com/images/icons/emoji/unicode/1f4af.png?v8", - "1234":"https://github.githubassets.com/images/icons/emoji/unicode/1f522.png?v8", - "+1":"https://github.githubassets.com/images/icons/emoji/unicode/1f44d.png?v8", - "-1":"https://github.githubassets.com/images/icons/emoji/unicode/1f44e.png?v8", - "1st_place_medal":"https://github.githubassets.com/images/icons/emoji/unicode/1f947.png?v8", - "2nd_place_medal":"https://github.githubassets.com/images/icons/emoji/unicode/1f948.png?v8", - "3rd_place_medal":"https://github.githubassets.com/images/icons/emoji/unicode/1f949.png?v8", - "8ball":"https://github.githubassets.com/images/icons/emoji/unicode/1f3b1.png?v8", - a:"https://github.githubassets.com/images/icons/emoji/unicode/1f170.png?v8", - ab:"https://github.githubassets.com/images/icons/emoji/unicode/1f18e.png?v8", - abacus:"https://github.githubassets.com/images/icons/emoji/unicode/1f9ee.png?v8", - abc:"https://github.githubassets.com/images/icons/emoji/unicode/1f524.png?v8", - abcd:"https://github.githubassets.com/images/icons/emoji/unicode/1f521.png?v8", - accept:"https://github.githubassets.com/images/icons/emoji/unicode/1f251.png?v8", - adhesive_bandage:"https://github.githubassets.com/images/icons/emoji/unicode/1fa79.png?v8", - adult:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1.png?v8", - aerial_tramway:"https://github.githubassets.com/images/icons/emoji/unicode/1f6a1.png?v8", - afghanistan:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1eb.png?v8", - airplane:"https://github.githubassets.com/images/icons/emoji/unicode/2708.png?v8", - aland_islands:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1fd.png?v8", - alarm_clock:"https://github.githubassets.com/images/icons/emoji/unicode/23f0.png?v8", - albania:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1f1.png?v8", - alembic:"https://github.githubassets.com/images/icons/emoji/unicode/2697.png?v8", - algeria:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e9-1f1ff.png?v8", - alien:"https://github.githubassets.com/images/icons/emoji/unicode/1f47d.png?v8", - ambulance:"https://github.githubassets.com/images/icons/emoji/unicode/1f691.png?v8", - american_samoa:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1f8.png?v8", - amphora:"https://github.githubassets.com/images/icons/emoji/unicode/1f3fa.png?v8", - anchor:"https://github.githubassets.com/images/icons/emoji/unicode/2693.png?v8", - andorra:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1e9.png?v8", - angel:"https://github.githubassets.com/images/icons/emoji/unicode/1f47c.png?v8", - anger:"https://github.githubassets.com/images/icons/emoji/unicode/1f4a2.png?v8", - angola:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1f4.png?v8", - angry:"https://github.githubassets.com/images/icons/emoji/unicode/1f620.png?v8", - anguilla:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1ee.png?v8", - anguished:"https://github.githubassets.com/images/icons/emoji/unicode/1f627.png?v8", - ant:"https://github.githubassets.com/images/icons/emoji/unicode/1f41c.png?v8", - antarctica:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1f6.png?v8", - antigua_barbuda:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1ec.png?v8", - apple:"https://github.githubassets.com/images/icons/emoji/unicode/1f34e.png?v8", - aquarius:"https://github.githubassets.com/images/icons/emoji/unicode/2652.png?v8", - argentina:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1f7.png?v8", - aries:"https://github.githubassets.com/images/icons/emoji/unicode/2648.png?v8", - armenia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1f2.png?v8", - arrow_backward:"https://github.githubassets.com/images/icons/emoji/unicode/25c0.png?v8", - arrow_double_down:"https://github.githubassets.com/images/icons/emoji/unicode/23ec.png?v8", - arrow_double_up:"https://github.githubassets.com/images/icons/emoji/unicode/23eb.png?v8", - arrow_down:"https://github.githubassets.com/images/icons/emoji/unicode/2b07.png?v8", - arrow_down_small:"https://github.githubassets.com/images/icons/emoji/unicode/1f53d.png?v8", - arrow_forward:"https://github.githubassets.com/images/icons/emoji/unicode/25b6.png?v8", - arrow_heading_down:"https://github.githubassets.com/images/icons/emoji/unicode/2935.png?v8", - arrow_heading_up:"https://github.githubassets.com/images/icons/emoji/unicode/2934.png?v8", - arrow_left:"https://github.githubassets.com/images/icons/emoji/unicode/2b05.png?v8", - arrow_lower_left:"https://github.githubassets.com/images/icons/emoji/unicode/2199.png?v8", - arrow_lower_right:"https://github.githubassets.com/images/icons/emoji/unicode/2198.png?v8", - arrow_right:"https://github.githubassets.com/images/icons/emoji/unicode/27a1.png?v8", - arrow_right_hook:"https://github.githubassets.com/images/icons/emoji/unicode/21aa.png?v8", - arrow_up:"https://github.githubassets.com/images/icons/emoji/unicode/2b06.png?v8", - arrow_up_down:"https://github.githubassets.com/images/icons/emoji/unicode/2195.png?v8", - arrow_up_small:"https://github.githubassets.com/images/icons/emoji/unicode/1f53c.png?v8", - arrow_upper_left:"https://github.githubassets.com/images/icons/emoji/unicode/2196.png?v8", - arrow_upper_right:"https://github.githubassets.com/images/icons/emoji/unicode/2197.png?v8", - arrows_clockwise:"https://github.githubassets.com/images/icons/emoji/unicode/1f503.png?v8", - arrows_counterclockwise:"https://github.githubassets.com/images/icons/emoji/unicode/1f504.png?v8", - art:"https://github.githubassets.com/images/icons/emoji/unicode/1f3a8.png?v8", - articulated_lorry:"https://github.githubassets.com/images/icons/emoji/unicode/1f69b.png?v8", - artificial_satellite:"https://github.githubassets.com/images/icons/emoji/unicode/1f6f0.png?v8", - artist:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f3a8.png?v8", - aruba:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1fc.png?v8", - ascension_island:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1e8.png?v8", - asterisk:"https://github.githubassets.com/images/icons/emoji/unicode/002a-20e3.png?v8", - astonished:"https://github.githubassets.com/images/icons/emoji/unicode/1f632.png?v8", - astronaut:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f680.png?v8", - athletic_shoe:"https://github.githubassets.com/images/icons/emoji/unicode/1f45f.png?v8", - atm:"https://github.githubassets.com/images/icons/emoji/unicode/1f3e7.png?v8", - atom:"https://github.githubassets.com/images/icons/emoji/atom.png?v8", - atom_symbol:"https://github.githubassets.com/images/icons/emoji/unicode/269b.png?v8", - australia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1fa.png?v8", - austria:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1f9.png?v8", - auto_rickshaw:"https://github.githubassets.com/images/icons/emoji/unicode/1f6fa.png?v8", - avocado:"https://github.githubassets.com/images/icons/emoji/unicode/1f951.png?v8", - axe:"https://github.githubassets.com/images/icons/emoji/unicode/1fa93.png?v8", - azerbaijan:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1ff.png?v8", - b:"https://github.githubassets.com/images/icons/emoji/unicode/1f171.png?v8", - baby:"https://github.githubassets.com/images/icons/emoji/unicode/1f476.png?v8", - baby_bottle:"https://github.githubassets.com/images/icons/emoji/unicode/1f37c.png?v8", - baby_chick:"https://github.githubassets.com/images/icons/emoji/unicode/1f424.png?v8", - baby_symbol:"https://github.githubassets.com/images/icons/emoji/unicode/1f6bc.png?v8", - back:"https://github.githubassets.com/images/icons/emoji/unicode/1f519.png?v8", - bacon:"https://github.githubassets.com/images/icons/emoji/unicode/1f953.png?v8", - badger:"https://github.githubassets.com/images/icons/emoji/unicode/1f9a1.png?v8", - badminton:"https://github.githubassets.com/images/icons/emoji/unicode/1f3f8.png?v8", - bagel:"https://github.githubassets.com/images/icons/emoji/unicode/1f96f.png?v8", - baggage_claim:"https://github.githubassets.com/images/icons/emoji/unicode/1f6c4.png?v8", - baguette_bread:"https://github.githubassets.com/images/icons/emoji/unicode/1f956.png?v8", - bahamas:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1f8.png?v8", - bahrain:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1ed.png?v8", - balance_scale:"https://github.githubassets.com/images/icons/emoji/unicode/2696.png?v8", - bald_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f9b2.png?v8", - bald_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f9b2.png?v8", - ballet_shoes:"https://github.githubassets.com/images/icons/emoji/unicode/1fa70.png?v8", - balloon:"https://github.githubassets.com/images/icons/emoji/unicode/1f388.png?v8", - ballot_box:"https://github.githubassets.com/images/icons/emoji/unicode/1f5f3.png?v8", - ballot_box_with_check:"https://github.githubassets.com/images/icons/emoji/unicode/2611.png?v8", - bamboo:"https://github.githubassets.com/images/icons/emoji/unicode/1f38d.png?v8", - banana:"https://github.githubassets.com/images/icons/emoji/unicode/1f34c.png?v8", - bangbang:"https://github.githubassets.com/images/icons/emoji/unicode/203c.png?v8", - bangladesh:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1e9.png?v8", - banjo:"https://github.githubassets.com/images/icons/emoji/unicode/1fa95.png?v8", - bank:"https://github.githubassets.com/images/icons/emoji/unicode/1f3e6.png?v8", - bar_chart:"https://github.githubassets.com/images/icons/emoji/unicode/1f4ca.png?v8", - barbados:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1e7.png?v8", - barber:"https://github.githubassets.com/images/icons/emoji/unicode/1f488.png?v8", - baseball:"https://github.githubassets.com/images/icons/emoji/unicode/26be.png?v8", - basecamp:"https://github.githubassets.com/images/icons/emoji/basecamp.png?v8", - basecampy:"https://github.githubassets.com/images/icons/emoji/basecampy.png?v8", - basket:"https://github.githubassets.com/images/icons/emoji/unicode/1f9fa.png?v8", - basketball:"https://github.githubassets.com/images/icons/emoji/unicode/1f3c0.png?v8", - basketball_man:"https://github.githubassets.com/images/icons/emoji/unicode/26f9-2642.png?v8", - basketball_woman:"https://github.githubassets.com/images/icons/emoji/unicode/26f9-2640.png?v8", - bat:"https://github.githubassets.com/images/icons/emoji/unicode/1f987.png?v8", - bath:"https://github.githubassets.com/images/icons/emoji/unicode/1f6c0.png?v8", - bathtub:"https://github.githubassets.com/images/icons/emoji/unicode/1f6c1.png?v8", - battery:"https://github.githubassets.com/images/icons/emoji/unicode/1f50b.png?v8", - beach_umbrella:"https://github.githubassets.com/images/icons/emoji/unicode/1f3d6.png?v8", - bear:"https://github.githubassets.com/images/icons/emoji/unicode/1f43b.png?v8", - bearded_person:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d4.png?v8", - bed:"https://github.githubassets.com/images/icons/emoji/unicode/1f6cf.png?v8", - bee:"https://github.githubassets.com/images/icons/emoji/unicode/1f41d.png?v8", - beer:"https://github.githubassets.com/images/icons/emoji/unicode/1f37a.png?v8", - beers:"https://github.githubassets.com/images/icons/emoji/unicode/1f37b.png?v8", - beetle:"https://github.githubassets.com/images/icons/emoji/unicode/1f41e.png?v8", - beginner:"https://github.githubassets.com/images/icons/emoji/unicode/1f530.png?v8", - belarus:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1fe.png?v8", - belgium:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1ea.png?v8", - belize:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1ff.png?v8", - bell:"https://github.githubassets.com/images/icons/emoji/unicode/1f514.png?v8", - bellhop_bell:"https://github.githubassets.com/images/icons/emoji/unicode/1f6ce.png?v8", - benin:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1ef.png?v8", - bento:"https://github.githubassets.com/images/icons/emoji/unicode/1f371.png?v8", - bermuda:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1f2.png?v8", - beverage_box:"https://github.githubassets.com/images/icons/emoji/unicode/1f9c3.png?v8", - bhutan:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1f9.png?v8", - bicyclist:"https://github.githubassets.com/images/icons/emoji/unicode/1f6b4.png?v8", - bike:"https://github.githubassets.com/images/icons/emoji/unicode/1f6b2.png?v8", - biking_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f6b4-2642.png?v8", - biking_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f6b4-2640.png?v8", - bikini:"https://github.githubassets.com/images/icons/emoji/unicode/1f459.png?v8", - billed_cap:"https://github.githubassets.com/images/icons/emoji/unicode/1f9e2.png?v8", - biohazard:"https://github.githubassets.com/images/icons/emoji/unicode/2623.png?v8", - bird:"https://github.githubassets.com/images/icons/emoji/unicode/1f426.png?v8", - birthday:"https://github.githubassets.com/images/icons/emoji/unicode/1f382.png?v8", - black_circle:"https://github.githubassets.com/images/icons/emoji/unicode/26ab.png?v8", - black_flag:"https://github.githubassets.com/images/icons/emoji/unicode/1f3f4.png?v8", - black_heart:"https://github.githubassets.com/images/icons/emoji/unicode/1f5a4.png?v8", - black_joker:"https://github.githubassets.com/images/icons/emoji/unicode/1f0cf.png?v8", - black_large_square:"https://github.githubassets.com/images/icons/emoji/unicode/2b1b.png?v8", - black_medium_small_square:"https://github.githubassets.com/images/icons/emoji/unicode/25fe.png?v8", - black_medium_square:"https://github.githubassets.com/images/icons/emoji/unicode/25fc.png?v8", - black_nib:"https://github.githubassets.com/images/icons/emoji/unicode/2712.png?v8", - black_small_square:"https://github.githubassets.com/images/icons/emoji/unicode/25aa.png?v8", - black_square_button:"https://github.githubassets.com/images/icons/emoji/unicode/1f532.png?v8", - blond_haired_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f471-2642.png?v8", - blond_haired_person:"https://github.githubassets.com/images/icons/emoji/unicode/1f471.png?v8", - blond_haired_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f471-2640.png?v8", - blonde_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f471-2640.png?v8", - blossom:"https://github.githubassets.com/images/icons/emoji/unicode/1f33c.png?v8", - blowfish:"https://github.githubassets.com/images/icons/emoji/unicode/1f421.png?v8", - blue_book:"https://github.githubassets.com/images/icons/emoji/unicode/1f4d8.png?v8", - blue_car:"https://github.githubassets.com/images/icons/emoji/unicode/1f699.png?v8", - blue_heart:"https://github.githubassets.com/images/icons/emoji/unicode/1f499.png?v8", - blue_square:"https://github.githubassets.com/images/icons/emoji/unicode/1f7e6.png?v8", - blush:"https://github.githubassets.com/images/icons/emoji/unicode/1f60a.png?v8", - boar:"https://github.githubassets.com/images/icons/emoji/unicode/1f417.png?v8", - boat:"https://github.githubassets.com/images/icons/emoji/unicode/26f5.png?v8", - bolivia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1f4.png?v8", - bomb:"https://github.githubassets.com/images/icons/emoji/unicode/1f4a3.png?v8", - bone:"https://github.githubassets.com/images/icons/emoji/unicode/1f9b4.png?v8", - book:"https://github.githubassets.com/images/icons/emoji/unicode/1f4d6.png?v8", - bookmark:"https://github.githubassets.com/images/icons/emoji/unicode/1f516.png?v8", - bookmark_tabs:"https://github.githubassets.com/images/icons/emoji/unicode/1f4d1.png?v8", - books:"https://github.githubassets.com/images/icons/emoji/unicode/1f4da.png?v8", - boom:"https://github.githubassets.com/images/icons/emoji/unicode/1f4a5.png?v8", - boot:"https://github.githubassets.com/images/icons/emoji/unicode/1f462.png?v8", - bosnia_herzegovina:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1e6.png?v8", - botswana:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1fc.png?v8", - bouncing_ball_man:"https://github.githubassets.com/images/icons/emoji/unicode/26f9-2642.png?v8", - bouncing_ball_person:"https://github.githubassets.com/images/icons/emoji/unicode/26f9.png?v8", - bouncing_ball_woman:"https://github.githubassets.com/images/icons/emoji/unicode/26f9-2640.png?v8", - bouquet:"https://github.githubassets.com/images/icons/emoji/unicode/1f490.png?v8", - bouvet_island:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1fb.png?v8", - bow:"https://github.githubassets.com/images/icons/emoji/unicode/1f647.png?v8", - bow_and_arrow:"https://github.githubassets.com/images/icons/emoji/unicode/1f3f9.png?v8", - bowing_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f647-2642.png?v8", - bowing_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f647-2640.png?v8", - bowl_with_spoon:"https://github.githubassets.com/images/icons/emoji/unicode/1f963.png?v8", - bowling:"https://github.githubassets.com/images/icons/emoji/unicode/1f3b3.png?v8", - bowtie:"https://github.githubassets.com/images/icons/emoji/bowtie.png?v8", - boxing_glove:"https://github.githubassets.com/images/icons/emoji/unicode/1f94a.png?v8", - boy:"https://github.githubassets.com/images/icons/emoji/unicode/1f466.png?v8", - brain:"https://github.githubassets.com/images/icons/emoji/unicode/1f9e0.png?v8", - brazil:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1f7.png?v8", - bread:"https://github.githubassets.com/images/icons/emoji/unicode/1f35e.png?v8", - breast_feeding:"https://github.githubassets.com/images/icons/emoji/unicode/1f931.png?v8", - bricks:"https://github.githubassets.com/images/icons/emoji/unicode/1f9f1.png?v8", - bride_with_veil:"https://github.githubassets.com/images/icons/emoji/unicode/1f470.png?v8", - bridge_at_night:"https://github.githubassets.com/images/icons/emoji/unicode/1f309.png?v8", - briefcase:"https://github.githubassets.com/images/icons/emoji/unicode/1f4bc.png?v8", - british_indian_ocean_territory:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1f4.png?v8", - british_virgin_islands:"https://github.githubassets.com/images/icons/emoji/unicode/1f1fb-1f1ec.png?v8", - broccoli:"https://github.githubassets.com/images/icons/emoji/unicode/1f966.png?v8", - broken_heart:"https://github.githubassets.com/images/icons/emoji/unicode/1f494.png?v8", - broom:"https://github.githubassets.com/images/icons/emoji/unicode/1f9f9.png?v8", - brown_circle:"https://github.githubassets.com/images/icons/emoji/unicode/1f7e4.png?v8", - brown_heart:"https://github.githubassets.com/images/icons/emoji/unicode/1f90e.png?v8", - brown_square:"https://github.githubassets.com/images/icons/emoji/unicode/1f7eb.png?v8", - brunei:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1f3.png?v8", - bug:"https://github.githubassets.com/images/icons/emoji/unicode/1f41b.png?v8", - building_construction:"https://github.githubassets.com/images/icons/emoji/unicode/1f3d7.png?v8", - bulb:"https://github.githubassets.com/images/icons/emoji/unicode/1f4a1.png?v8", - bulgaria:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1ec.png?v8", - bullettrain_front:"https://github.githubassets.com/images/icons/emoji/unicode/1f685.png?v8", - bullettrain_side:"https://github.githubassets.com/images/icons/emoji/unicode/1f684.png?v8", - burkina_faso:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1eb.png?v8", - burrito:"https://github.githubassets.com/images/icons/emoji/unicode/1f32f.png?v8", - burundi:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1ee.png?v8", - bus:"https://github.githubassets.com/images/icons/emoji/unicode/1f68c.png?v8", - business_suit_levitating:"https://github.githubassets.com/images/icons/emoji/unicode/1f574.png?v8", - busstop:"https://github.githubassets.com/images/icons/emoji/unicode/1f68f.png?v8", - bust_in_silhouette:"https://github.githubassets.com/images/icons/emoji/unicode/1f464.png?v8", - busts_in_silhouette:"https://github.githubassets.com/images/icons/emoji/unicode/1f465.png?v8", - butter:"https://github.githubassets.com/images/icons/emoji/unicode/1f9c8.png?v8", - butterfly:"https://github.githubassets.com/images/icons/emoji/unicode/1f98b.png?v8", - cactus:"https://github.githubassets.com/images/icons/emoji/unicode/1f335.png?v8", - cake:"https://github.githubassets.com/images/icons/emoji/unicode/1f370.png?v8", - calendar:"https://github.githubassets.com/images/icons/emoji/unicode/1f4c6.png?v8", - call_me_hand:"https://github.githubassets.com/images/icons/emoji/unicode/1f919.png?v8", - calling:"https://github.githubassets.com/images/icons/emoji/unicode/1f4f2.png?v8", - cambodia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1ed.png?v8", - camel:"https://github.githubassets.com/images/icons/emoji/unicode/1f42b.png?v8", - camera:"https://github.githubassets.com/images/icons/emoji/unicode/1f4f7.png?v8", - camera_flash:"https://github.githubassets.com/images/icons/emoji/unicode/1f4f8.png?v8", - cameroon:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1f2.png?v8", - camping:"https://github.githubassets.com/images/icons/emoji/unicode/1f3d5.png?v8", - canada:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1e6.png?v8", - canary_islands:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1e8.png?v8", - cancer:"https://github.githubassets.com/images/icons/emoji/unicode/264b.png?v8", - candle:"https://github.githubassets.com/images/icons/emoji/unicode/1f56f.png?v8", - candy:"https://github.githubassets.com/images/icons/emoji/unicode/1f36c.png?v8", - canned_food:"https://github.githubassets.com/images/icons/emoji/unicode/1f96b.png?v8", - canoe:"https://github.githubassets.com/images/icons/emoji/unicode/1f6f6.png?v8", - cape_verde:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1fb.png?v8", - capital_abcd:"https://github.githubassets.com/images/icons/emoji/unicode/1f520.png?v8", - capricorn:"https://github.githubassets.com/images/icons/emoji/unicode/2651.png?v8", - car:"https://github.githubassets.com/images/icons/emoji/unicode/1f697.png?v8", - card_file_box:"https://github.githubassets.com/images/icons/emoji/unicode/1f5c3.png?v8", - card_index:"https://github.githubassets.com/images/icons/emoji/unicode/1f4c7.png?v8", - card_index_dividers:"https://github.githubassets.com/images/icons/emoji/unicode/1f5c2.png?v8", - caribbean_netherlands:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1f6.png?v8", - carousel_horse:"https://github.githubassets.com/images/icons/emoji/unicode/1f3a0.png?v8", - carrot:"https://github.githubassets.com/images/icons/emoji/unicode/1f955.png?v8", - cartwheeling:"https://github.githubassets.com/images/icons/emoji/unicode/1f938.png?v8", - cat:"https://github.githubassets.com/images/icons/emoji/unicode/1f431.png?v8", - cat2:"https://github.githubassets.com/images/icons/emoji/unicode/1f408.png?v8", - cayman_islands:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1fe.png?v8", - cd:"https://github.githubassets.com/images/icons/emoji/unicode/1f4bf.png?v8", - central_african_republic:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1eb.png?v8", - ceuta_melilla:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1e6.png?v8", - chad:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1e9.png?v8", - chains:"https://github.githubassets.com/images/icons/emoji/unicode/26d3.png?v8", - chair:"https://github.githubassets.com/images/icons/emoji/unicode/1fa91.png?v8", - champagne:"https://github.githubassets.com/images/icons/emoji/unicode/1f37e.png?v8", - chart:"https://github.githubassets.com/images/icons/emoji/unicode/1f4b9.png?v8", - chart_with_downwards_trend:"https://github.githubassets.com/images/icons/emoji/unicode/1f4c9.png?v8", - chart_with_upwards_trend:"https://github.githubassets.com/images/icons/emoji/unicode/1f4c8.png?v8", - checkered_flag:"https://github.githubassets.com/images/icons/emoji/unicode/1f3c1.png?v8", - cheese:"https://github.githubassets.com/images/icons/emoji/unicode/1f9c0.png?v8", - cherries:"https://github.githubassets.com/images/icons/emoji/unicode/1f352.png?v8", - cherry_blossom:"https://github.githubassets.com/images/icons/emoji/unicode/1f338.png?v8", - chess_pawn:"https://github.githubassets.com/images/icons/emoji/unicode/265f.png?v8", - chestnut:"https://github.githubassets.com/images/icons/emoji/unicode/1f330.png?v8", - chicken:"https://github.githubassets.com/images/icons/emoji/unicode/1f414.png?v8", - child:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d2.png?v8", - children_crossing:"https://github.githubassets.com/images/icons/emoji/unicode/1f6b8.png?v8", - chile:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1f1.png?v8", - chipmunk:"https://github.githubassets.com/images/icons/emoji/unicode/1f43f.png?v8", - chocolate_bar:"https://github.githubassets.com/images/icons/emoji/unicode/1f36b.png?v8", - chopsticks:"https://github.githubassets.com/images/icons/emoji/unicode/1f962.png?v8", - christmas_island:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1fd.png?v8", - christmas_tree:"https://github.githubassets.com/images/icons/emoji/unicode/1f384.png?v8", - church:"https://github.githubassets.com/images/icons/emoji/unicode/26ea.png?v8", - cinema:"https://github.githubassets.com/images/icons/emoji/unicode/1f3a6.png?v8", - circus_tent:"https://github.githubassets.com/images/icons/emoji/unicode/1f3aa.png?v8", - city_sunrise:"https://github.githubassets.com/images/icons/emoji/unicode/1f307.png?v8", - city_sunset:"https://github.githubassets.com/images/icons/emoji/unicode/1f306.png?v8", - cityscape:"https://github.githubassets.com/images/icons/emoji/unicode/1f3d9.png?v8", - cl:"https://github.githubassets.com/images/icons/emoji/unicode/1f191.png?v8", - clamp:"https://github.githubassets.com/images/icons/emoji/unicode/1f5dc.png?v8", - clap:"https://github.githubassets.com/images/icons/emoji/unicode/1f44f.png?v8", - clapper:"https://github.githubassets.com/images/icons/emoji/unicode/1f3ac.png?v8", - classical_building:"https://github.githubassets.com/images/icons/emoji/unicode/1f3db.png?v8", - climbing:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d7.png?v8", - climbing_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d7-2642.png?v8", - climbing_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d7-2640.png?v8", - clinking_glasses:"https://github.githubassets.com/images/icons/emoji/unicode/1f942.png?v8", - clipboard:"https://github.githubassets.com/images/icons/emoji/unicode/1f4cb.png?v8", - clipperton_island:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1f5.png?v8", - clock1:"https://github.githubassets.com/images/icons/emoji/unicode/1f550.png?v8", - clock10:"https://github.githubassets.com/images/icons/emoji/unicode/1f559.png?v8", - clock1030:"https://github.githubassets.com/images/icons/emoji/unicode/1f565.png?v8", - clock11:"https://github.githubassets.com/images/icons/emoji/unicode/1f55a.png?v8", - clock1130:"https://github.githubassets.com/images/icons/emoji/unicode/1f566.png?v8", - clock12:"https://github.githubassets.com/images/icons/emoji/unicode/1f55b.png?v8", - clock1230:"https://github.githubassets.com/images/icons/emoji/unicode/1f567.png?v8", - clock130:"https://github.githubassets.com/images/icons/emoji/unicode/1f55c.png?v8", - clock2:"https://github.githubassets.com/images/icons/emoji/unicode/1f551.png?v8", - clock230:"https://github.githubassets.com/images/icons/emoji/unicode/1f55d.png?v8", - clock3:"https://github.githubassets.com/images/icons/emoji/unicode/1f552.png?v8", - clock330:"https://github.githubassets.com/images/icons/emoji/unicode/1f55e.png?v8", - clock4:"https://github.githubassets.com/images/icons/emoji/unicode/1f553.png?v8", - clock430:"https://github.githubassets.com/images/icons/emoji/unicode/1f55f.png?v8", - clock5:"https://github.githubassets.com/images/icons/emoji/unicode/1f554.png?v8", - clock530:"https://github.githubassets.com/images/icons/emoji/unicode/1f560.png?v8", - clock6:"https://github.githubassets.com/images/icons/emoji/unicode/1f555.png?v8", - clock630:"https://github.githubassets.com/images/icons/emoji/unicode/1f561.png?v8", - clock7:"https://github.githubassets.com/images/icons/emoji/unicode/1f556.png?v8", - clock730:"https://github.githubassets.com/images/icons/emoji/unicode/1f562.png?v8", - clock8:"https://github.githubassets.com/images/icons/emoji/unicode/1f557.png?v8", - clock830:"https://github.githubassets.com/images/icons/emoji/unicode/1f563.png?v8", - clock9:"https://github.githubassets.com/images/icons/emoji/unicode/1f558.png?v8", - clock930:"https://github.githubassets.com/images/icons/emoji/unicode/1f564.png?v8", - closed_book:"https://github.githubassets.com/images/icons/emoji/unicode/1f4d5.png?v8", - closed_lock_with_key:"https://github.githubassets.com/images/icons/emoji/unicode/1f510.png?v8", - closed_umbrella:"https://github.githubassets.com/images/icons/emoji/unicode/1f302.png?v8", - cloud:"https://github.githubassets.com/images/icons/emoji/unicode/2601.png?v8", - cloud_with_lightning:"https://github.githubassets.com/images/icons/emoji/unicode/1f329.png?v8", - cloud_with_lightning_and_rain:"https://github.githubassets.com/images/icons/emoji/unicode/26c8.png?v8", - cloud_with_rain:"https://github.githubassets.com/images/icons/emoji/unicode/1f327.png?v8", - cloud_with_snow:"https://github.githubassets.com/images/icons/emoji/unicode/1f328.png?v8", - clown_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f921.png?v8", - clubs:"https://github.githubassets.com/images/icons/emoji/unicode/2663.png?v8", - cn:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1f3.png?v8", - coat:"https://github.githubassets.com/images/icons/emoji/unicode/1f9e5.png?v8", - cocktail:"https://github.githubassets.com/images/icons/emoji/unicode/1f378.png?v8", - coconut:"https://github.githubassets.com/images/icons/emoji/unicode/1f965.png?v8", - cocos_islands:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1e8.png?v8", - coffee:"https://github.githubassets.com/images/icons/emoji/unicode/2615.png?v8", - coffin:"https://github.githubassets.com/images/icons/emoji/unicode/26b0.png?v8", - cold_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f976.png?v8", - cold_sweat:"https://github.githubassets.com/images/icons/emoji/unicode/1f630.png?v8", - collision:"https://github.githubassets.com/images/icons/emoji/unicode/1f4a5.png?v8", - colombia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1f4.png?v8", - comet:"https://github.githubassets.com/images/icons/emoji/unicode/2604.png?v8", - comoros:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1f2.png?v8", - compass:"https://github.githubassets.com/images/icons/emoji/unicode/1f9ed.png?v8", - computer:"https://github.githubassets.com/images/icons/emoji/unicode/1f4bb.png?v8", - computer_mouse:"https://github.githubassets.com/images/icons/emoji/unicode/1f5b1.png?v8", - confetti_ball:"https://github.githubassets.com/images/icons/emoji/unicode/1f38a.png?v8", - confounded:"https://github.githubassets.com/images/icons/emoji/unicode/1f616.png?v8", - confused:"https://github.githubassets.com/images/icons/emoji/unicode/1f615.png?v8", - congo_brazzaville:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1ec.png?v8", - congo_kinshasa:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1e9.png?v8", - congratulations:"https://github.githubassets.com/images/icons/emoji/unicode/3297.png?v8", - construction:"https://github.githubassets.com/images/icons/emoji/unicode/1f6a7.png?v8", - construction_worker:"https://github.githubassets.com/images/icons/emoji/unicode/1f477.png?v8", - construction_worker_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f477-2642.png?v8", - construction_worker_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f477-2640.png?v8", - control_knobs:"https://github.githubassets.com/images/icons/emoji/unicode/1f39b.png?v8", - convenience_store:"https://github.githubassets.com/images/icons/emoji/unicode/1f3ea.png?v8", - cook:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f373.png?v8", - cook_islands:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1f0.png?v8", - cookie:"https://github.githubassets.com/images/icons/emoji/unicode/1f36a.png?v8", - cool:"https://github.githubassets.com/images/icons/emoji/unicode/1f192.png?v8", - cop:"https://github.githubassets.com/images/icons/emoji/unicode/1f46e.png?v8", - copyright:"https://github.githubassets.com/images/icons/emoji/unicode/00a9.png?v8", - corn:"https://github.githubassets.com/images/icons/emoji/unicode/1f33d.png?v8", - costa_rica:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1f7.png?v8", - cote_divoire:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1ee.png?v8", - couch_and_lamp:"https://github.githubassets.com/images/icons/emoji/unicode/1f6cb.png?v8", - couple:"https://github.githubassets.com/images/icons/emoji/unicode/1f46b.png?v8", - couple_with_heart:"https://github.githubassets.com/images/icons/emoji/unicode/1f491.png?v8", - couple_with_heart_man_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-2764-1f468.png?v8", - couple_with_heart_woman_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-2764-1f468.png?v8", - couple_with_heart_woman_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-2764-1f469.png?v8", - couplekiss:"https://github.githubassets.com/images/icons/emoji/unicode/1f48f.png?v8", - couplekiss_man_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-2764-1f48b-1f468.png?v8", - couplekiss_man_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-2764-1f48b-1f468.png?v8", - couplekiss_woman_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-2764-1f48b-1f469.png?v8", - cow:"https://github.githubassets.com/images/icons/emoji/unicode/1f42e.png?v8", - cow2:"https://github.githubassets.com/images/icons/emoji/unicode/1f404.png?v8", - cowboy_hat_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f920.png?v8", - crab:"https://github.githubassets.com/images/icons/emoji/unicode/1f980.png?v8", - crayon:"https://github.githubassets.com/images/icons/emoji/unicode/1f58d.png?v8", - credit_card:"https://github.githubassets.com/images/icons/emoji/unicode/1f4b3.png?v8", - crescent_moon:"https://github.githubassets.com/images/icons/emoji/unicode/1f319.png?v8", - cricket:"https://github.githubassets.com/images/icons/emoji/unicode/1f997.png?v8", - cricket_game:"https://github.githubassets.com/images/icons/emoji/unicode/1f3cf.png?v8", - croatia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ed-1f1f7.png?v8", - crocodile:"https://github.githubassets.com/images/icons/emoji/unicode/1f40a.png?v8", - croissant:"https://github.githubassets.com/images/icons/emoji/unicode/1f950.png?v8", - crossed_fingers:"https://github.githubassets.com/images/icons/emoji/unicode/1f91e.png?v8", - crossed_flags:"https://github.githubassets.com/images/icons/emoji/unicode/1f38c.png?v8", - crossed_swords:"https://github.githubassets.com/images/icons/emoji/unicode/2694.png?v8", - crown:"https://github.githubassets.com/images/icons/emoji/unicode/1f451.png?v8", - cry:"https://github.githubassets.com/images/icons/emoji/unicode/1f622.png?v8", - crying_cat_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f63f.png?v8", - crystal_ball:"https://github.githubassets.com/images/icons/emoji/unicode/1f52e.png?v8", - cuba:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1fa.png?v8", - cucumber:"https://github.githubassets.com/images/icons/emoji/unicode/1f952.png?v8", - cup_with_straw:"https://github.githubassets.com/images/icons/emoji/unicode/1f964.png?v8", - cupcake:"https://github.githubassets.com/images/icons/emoji/unicode/1f9c1.png?v8", - cupid:"https://github.githubassets.com/images/icons/emoji/unicode/1f498.png?v8", - curacao:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1fc.png?v8", - curling_stone:"https://github.githubassets.com/images/icons/emoji/unicode/1f94c.png?v8", - curly_haired_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f9b1.png?v8", - curly_haired_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f9b1.png?v8", - curly_loop:"https://github.githubassets.com/images/icons/emoji/unicode/27b0.png?v8", - currency_exchange:"https://github.githubassets.com/images/icons/emoji/unicode/1f4b1.png?v8", - curry:"https://github.githubassets.com/images/icons/emoji/unicode/1f35b.png?v8", - cursing_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f92c.png?v8", - custard:"https://github.githubassets.com/images/icons/emoji/unicode/1f36e.png?v8", - customs:"https://github.githubassets.com/images/icons/emoji/unicode/1f6c3.png?v8", - cut_of_meat:"https://github.githubassets.com/images/icons/emoji/unicode/1f969.png?v8", - cyclone:"https://github.githubassets.com/images/icons/emoji/unicode/1f300.png?v8", - cyprus:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1fe.png?v8", - czech_republic:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1ff.png?v8", - dagger:"https://github.githubassets.com/images/icons/emoji/unicode/1f5e1.png?v8", - dancer:"https://github.githubassets.com/images/icons/emoji/unicode/1f483.png?v8", - dancers:"https://github.githubassets.com/images/icons/emoji/unicode/1f46f.png?v8", - dancing_men:"https://github.githubassets.com/images/icons/emoji/unicode/1f46f-2642.png?v8", - dancing_women:"https://github.githubassets.com/images/icons/emoji/unicode/1f46f-2640.png?v8", - dango:"https://github.githubassets.com/images/icons/emoji/unicode/1f361.png?v8", - dark_sunglasses:"https://github.githubassets.com/images/icons/emoji/unicode/1f576.png?v8", - dart:"https://github.githubassets.com/images/icons/emoji/unicode/1f3af.png?v8", - dash:"https://github.githubassets.com/images/icons/emoji/unicode/1f4a8.png?v8", - date:"https://github.githubassets.com/images/icons/emoji/unicode/1f4c5.png?v8", - de:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e9-1f1ea.png?v8", - deaf_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f9cf-2642.png?v8", - deaf_person:"https://github.githubassets.com/images/icons/emoji/unicode/1f9cf.png?v8", - deaf_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f9cf-2640.png?v8", - deciduous_tree:"https://github.githubassets.com/images/icons/emoji/unicode/1f333.png?v8", - deer:"https://github.githubassets.com/images/icons/emoji/unicode/1f98c.png?v8", - denmark:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e9-1f1f0.png?v8", - department_store:"https://github.githubassets.com/images/icons/emoji/unicode/1f3ec.png?v8", - derelict_house:"https://github.githubassets.com/images/icons/emoji/unicode/1f3da.png?v8", - desert:"https://github.githubassets.com/images/icons/emoji/unicode/1f3dc.png?v8", - desert_island:"https://github.githubassets.com/images/icons/emoji/unicode/1f3dd.png?v8", - desktop_computer:"https://github.githubassets.com/images/icons/emoji/unicode/1f5a5.png?v8", - detective:"https://github.githubassets.com/images/icons/emoji/unicode/1f575.png?v8", - diamond_shape_with_a_dot_inside:"https://github.githubassets.com/images/icons/emoji/unicode/1f4a0.png?v8", - diamonds:"https://github.githubassets.com/images/icons/emoji/unicode/2666.png?v8", - diego_garcia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e9-1f1ec.png?v8", - disappointed:"https://github.githubassets.com/images/icons/emoji/unicode/1f61e.png?v8", - disappointed_relieved:"https://github.githubassets.com/images/icons/emoji/unicode/1f625.png?v8", - diving_mask:"https://github.githubassets.com/images/icons/emoji/unicode/1f93f.png?v8", - diya_lamp:"https://github.githubassets.com/images/icons/emoji/unicode/1fa94.png?v8", - dizzy:"https://github.githubassets.com/images/icons/emoji/unicode/1f4ab.png?v8", - dizzy_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f635.png?v8", - djibouti:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e9-1f1ef.png?v8", - dna:"https://github.githubassets.com/images/icons/emoji/unicode/1f9ec.png?v8", - do_not_litter:"https://github.githubassets.com/images/icons/emoji/unicode/1f6af.png?v8", - dog:"https://github.githubassets.com/images/icons/emoji/unicode/1f436.png?v8", - dog2:"https://github.githubassets.com/images/icons/emoji/unicode/1f415.png?v8", - dollar:"https://github.githubassets.com/images/icons/emoji/unicode/1f4b5.png?v8", - dolls:"https://github.githubassets.com/images/icons/emoji/unicode/1f38e.png?v8", - dolphin:"https://github.githubassets.com/images/icons/emoji/unicode/1f42c.png?v8", - dominica:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e9-1f1f2.png?v8", - dominican_republic:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e9-1f1f4.png?v8", - door:"https://github.githubassets.com/images/icons/emoji/unicode/1f6aa.png?v8", - doughnut:"https://github.githubassets.com/images/icons/emoji/unicode/1f369.png?v8", - dove:"https://github.githubassets.com/images/icons/emoji/unicode/1f54a.png?v8", - dragon:"https://github.githubassets.com/images/icons/emoji/unicode/1f409.png?v8", - dragon_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f432.png?v8", - dress:"https://github.githubassets.com/images/icons/emoji/unicode/1f457.png?v8", - dromedary_camel:"https://github.githubassets.com/images/icons/emoji/unicode/1f42a.png?v8", - drooling_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f924.png?v8", - drop_of_blood:"https://github.githubassets.com/images/icons/emoji/unicode/1fa78.png?v8", - droplet:"https://github.githubassets.com/images/icons/emoji/unicode/1f4a7.png?v8", - drum:"https://github.githubassets.com/images/icons/emoji/unicode/1f941.png?v8", - duck:"https://github.githubassets.com/images/icons/emoji/unicode/1f986.png?v8", - dumpling:"https://github.githubassets.com/images/icons/emoji/unicode/1f95f.png?v8", - dvd:"https://github.githubassets.com/images/icons/emoji/unicode/1f4c0.png?v8", - "e-mail":"https://github.githubassets.com/images/icons/emoji/unicode/1f4e7.png?v8", - eagle:"https://github.githubassets.com/images/icons/emoji/unicode/1f985.png?v8", - ear:"https://github.githubassets.com/images/icons/emoji/unicode/1f442.png?v8", - ear_of_rice:"https://github.githubassets.com/images/icons/emoji/unicode/1f33e.png?v8", - ear_with_hearing_aid:"https://github.githubassets.com/images/icons/emoji/unicode/1f9bb.png?v8", - earth_africa:"https://github.githubassets.com/images/icons/emoji/unicode/1f30d.png?v8", - earth_americas:"https://github.githubassets.com/images/icons/emoji/unicode/1f30e.png?v8", - earth_asia:"https://github.githubassets.com/images/icons/emoji/unicode/1f30f.png?v8", - ecuador:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1e8.png?v8", - egg:"https://github.githubassets.com/images/icons/emoji/unicode/1f95a.png?v8", - eggplant:"https://github.githubassets.com/images/icons/emoji/unicode/1f346.png?v8", - egypt:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1ec.png?v8", - eight:"https://github.githubassets.com/images/icons/emoji/unicode/0038-20e3.png?v8", - eight_pointed_black_star:"https://github.githubassets.com/images/icons/emoji/unicode/2734.png?v8", - eight_spoked_asterisk:"https://github.githubassets.com/images/icons/emoji/unicode/2733.png?v8", - eject_button:"https://github.githubassets.com/images/icons/emoji/unicode/23cf.png?v8", - el_salvador:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1fb.png?v8", - electric_plug:"https://github.githubassets.com/images/icons/emoji/unicode/1f50c.png?v8", - electron:"https://github.githubassets.com/images/icons/emoji/electron.png?v8", - elephant:"https://github.githubassets.com/images/icons/emoji/unicode/1f418.png?v8", - elf:"https://github.githubassets.com/images/icons/emoji/unicode/1f9dd.png?v8", - elf_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f9dd-2642.png?v8", - elf_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f9dd-2640.png?v8", - email:"https://github.githubassets.com/images/icons/emoji/unicode/2709.png?v8", - end:"https://github.githubassets.com/images/icons/emoji/unicode/1f51a.png?v8", - england:"https://github.githubassets.com/images/icons/emoji/unicode/1f3f4-e0067-e0062-e0065-e006e-e0067-e007f.png?v8", - envelope:"https://github.githubassets.com/images/icons/emoji/unicode/2709.png?v8", - envelope_with_arrow:"https://github.githubassets.com/images/icons/emoji/unicode/1f4e9.png?v8", - equatorial_guinea:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1f6.png?v8", - eritrea:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1f7.png?v8", - es:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1f8.png?v8", - estonia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1ea.png?v8", - ethiopia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1f9.png?v8", - eu:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1fa.png?v8", - euro:"https://github.githubassets.com/images/icons/emoji/unicode/1f4b6.png?v8", - european_castle:"https://github.githubassets.com/images/icons/emoji/unicode/1f3f0.png?v8", - european_post_office:"https://github.githubassets.com/images/icons/emoji/unicode/1f3e4.png?v8", - european_union:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1fa.png?v8", - evergreen_tree:"https://github.githubassets.com/images/icons/emoji/unicode/1f332.png?v8", - exclamation:"https://github.githubassets.com/images/icons/emoji/unicode/2757.png?v8", - exploding_head:"https://github.githubassets.com/images/icons/emoji/unicode/1f92f.png?v8", - expressionless:"https://github.githubassets.com/images/icons/emoji/unicode/1f611.png?v8", - eye:"https://github.githubassets.com/images/icons/emoji/unicode/1f441.png?v8", - eye_speech_bubble:"https://github.githubassets.com/images/icons/emoji/unicode/1f441-1f5e8.png?v8", - eyeglasses:"https://github.githubassets.com/images/icons/emoji/unicode/1f453.png?v8", - eyes:"https://github.githubassets.com/images/icons/emoji/unicode/1f440.png?v8", - face_with_head_bandage:"https://github.githubassets.com/images/icons/emoji/unicode/1f915.png?v8", - face_with_thermometer:"https://github.githubassets.com/images/icons/emoji/unicode/1f912.png?v8", - facepalm:"https://github.githubassets.com/images/icons/emoji/unicode/1f926.png?v8", - facepunch:"https://github.githubassets.com/images/icons/emoji/unicode/1f44a.png?v8", - factory:"https://github.githubassets.com/images/icons/emoji/unicode/1f3ed.png?v8", - factory_worker:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f3ed.png?v8", - fairy:"https://github.githubassets.com/images/icons/emoji/unicode/1f9da.png?v8", - fairy_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f9da-2642.png?v8", - fairy_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f9da-2640.png?v8", - falafel:"https://github.githubassets.com/images/icons/emoji/unicode/1f9c6.png?v8", - falkland_islands:"https://github.githubassets.com/images/icons/emoji/unicode/1f1eb-1f1f0.png?v8", - fallen_leaf:"https://github.githubassets.com/images/icons/emoji/unicode/1f342.png?v8", - family:"https://github.githubassets.com/images/icons/emoji/unicode/1f46a.png?v8", - family_man_boy:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f466.png?v8", - family_man_boy_boy:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f466-1f466.png?v8", - family_man_girl:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f467.png?v8", - family_man_girl_boy:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f467-1f466.png?v8", - family_man_girl_girl:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f467-1f467.png?v8", - family_man_man_boy:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f468-1f466.png?v8", - family_man_man_boy_boy:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f468-1f466-1f466.png?v8", - family_man_man_girl:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f468-1f467.png?v8", - family_man_man_girl_boy:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f468-1f467-1f466.png?v8", - family_man_man_girl_girl:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f468-1f467-1f467.png?v8", - family_man_woman_boy:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f469-1f466.png?v8", - family_man_woman_boy_boy:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f469-1f466-1f466.png?v8", - family_man_woman_girl:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f469-1f467.png?v8", - family_man_woman_girl_boy:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f469-1f467-1f466.png?v8", - family_man_woman_girl_girl:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f469-1f467-1f467.png?v8", - family_woman_boy:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f466.png?v8", - family_woman_boy_boy:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f466-1f466.png?v8", - family_woman_girl:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f467.png?v8", - family_woman_girl_boy:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f467-1f466.png?v8", - family_woman_girl_girl:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f467-1f467.png?v8", - family_woman_woman_boy:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f469-1f466.png?v8", - family_woman_woman_boy_boy:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f469-1f466-1f466.png?v8", - family_woman_woman_girl:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f469-1f467.png?v8", - family_woman_woman_girl_boy:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f469-1f467-1f466.png?v8", - family_woman_woman_girl_girl:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f469-1f467-1f467.png?v8", - farmer:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f33e.png?v8", - faroe_islands:"https://github.githubassets.com/images/icons/emoji/unicode/1f1eb-1f1f4.png?v8", - fast_forward:"https://github.githubassets.com/images/icons/emoji/unicode/23e9.png?v8", - fax:"https://github.githubassets.com/images/icons/emoji/unicode/1f4e0.png?v8", - fearful:"https://github.githubassets.com/images/icons/emoji/unicode/1f628.png?v8", - feelsgood:"https://github.githubassets.com/images/icons/emoji/feelsgood.png?v8", - feet:"https://github.githubassets.com/images/icons/emoji/unicode/1f43e.png?v8", - female_detective:"https://github.githubassets.com/images/icons/emoji/unicode/1f575-2640.png?v8", - female_sign:"https://github.githubassets.com/images/icons/emoji/unicode/2640.png?v8", - ferris_wheel:"https://github.githubassets.com/images/icons/emoji/unicode/1f3a1.png?v8", - ferry:"https://github.githubassets.com/images/icons/emoji/unicode/26f4.png?v8", - field_hockey:"https://github.githubassets.com/images/icons/emoji/unicode/1f3d1.png?v8", - fiji:"https://github.githubassets.com/images/icons/emoji/unicode/1f1eb-1f1ef.png?v8", - file_cabinet:"https://github.githubassets.com/images/icons/emoji/unicode/1f5c4.png?v8", - file_folder:"https://github.githubassets.com/images/icons/emoji/unicode/1f4c1.png?v8", - film_projector:"https://github.githubassets.com/images/icons/emoji/unicode/1f4fd.png?v8", - film_strip:"https://github.githubassets.com/images/icons/emoji/unicode/1f39e.png?v8", - finland:"https://github.githubassets.com/images/icons/emoji/unicode/1f1eb-1f1ee.png?v8", - finnadie:"https://github.githubassets.com/images/icons/emoji/finnadie.png?v8", - fire:"https://github.githubassets.com/images/icons/emoji/unicode/1f525.png?v8", - fire_engine:"https://github.githubassets.com/images/icons/emoji/unicode/1f692.png?v8", - fire_extinguisher:"https://github.githubassets.com/images/icons/emoji/unicode/1f9ef.png?v8", - firecracker:"https://github.githubassets.com/images/icons/emoji/unicode/1f9e8.png?v8", - firefighter:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f692.png?v8", - fireworks:"https://github.githubassets.com/images/icons/emoji/unicode/1f386.png?v8", - first_quarter_moon:"https://github.githubassets.com/images/icons/emoji/unicode/1f313.png?v8", - first_quarter_moon_with_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f31b.png?v8", - fish:"https://github.githubassets.com/images/icons/emoji/unicode/1f41f.png?v8", - fish_cake:"https://github.githubassets.com/images/icons/emoji/unicode/1f365.png?v8", - fishing_pole_and_fish:"https://github.githubassets.com/images/icons/emoji/unicode/1f3a3.png?v8", - fist:"https://github.githubassets.com/images/icons/emoji/unicode/270a.png?v8", - fist_left:"https://github.githubassets.com/images/icons/emoji/unicode/1f91b.png?v8", - fist_oncoming:"https://github.githubassets.com/images/icons/emoji/unicode/1f44a.png?v8", - fist_raised:"https://github.githubassets.com/images/icons/emoji/unicode/270a.png?v8", - fist_right:"https://github.githubassets.com/images/icons/emoji/unicode/1f91c.png?v8", - five:"https://github.githubassets.com/images/icons/emoji/unicode/0035-20e3.png?v8", - flags:"https://github.githubassets.com/images/icons/emoji/unicode/1f38f.png?v8", - flamingo:"https://github.githubassets.com/images/icons/emoji/unicode/1f9a9.png?v8", - flashlight:"https://github.githubassets.com/images/icons/emoji/unicode/1f526.png?v8", - flat_shoe:"https://github.githubassets.com/images/icons/emoji/unicode/1f97f.png?v8", - fleur_de_lis:"https://github.githubassets.com/images/icons/emoji/unicode/269c.png?v8", - flight_arrival:"https://github.githubassets.com/images/icons/emoji/unicode/1f6ec.png?v8", - flight_departure:"https://github.githubassets.com/images/icons/emoji/unicode/1f6eb.png?v8", - flipper:"https://github.githubassets.com/images/icons/emoji/unicode/1f42c.png?v8", - floppy_disk:"https://github.githubassets.com/images/icons/emoji/unicode/1f4be.png?v8", - flower_playing_cards:"https://github.githubassets.com/images/icons/emoji/unicode/1f3b4.png?v8", - flushed:"https://github.githubassets.com/images/icons/emoji/unicode/1f633.png?v8", - flying_disc:"https://github.githubassets.com/images/icons/emoji/unicode/1f94f.png?v8", - flying_saucer:"https://github.githubassets.com/images/icons/emoji/unicode/1f6f8.png?v8", - fog:"https://github.githubassets.com/images/icons/emoji/unicode/1f32b.png?v8", - foggy:"https://github.githubassets.com/images/icons/emoji/unicode/1f301.png?v8", - foot:"https://github.githubassets.com/images/icons/emoji/unicode/1f9b6.png?v8", - football:"https://github.githubassets.com/images/icons/emoji/unicode/1f3c8.png?v8", - footprints:"https://github.githubassets.com/images/icons/emoji/unicode/1f463.png?v8", - fork_and_knife:"https://github.githubassets.com/images/icons/emoji/unicode/1f374.png?v8", - fortune_cookie:"https://github.githubassets.com/images/icons/emoji/unicode/1f960.png?v8", - fountain:"https://github.githubassets.com/images/icons/emoji/unicode/26f2.png?v8", - fountain_pen:"https://github.githubassets.com/images/icons/emoji/unicode/1f58b.png?v8", - four:"https://github.githubassets.com/images/icons/emoji/unicode/0034-20e3.png?v8", - four_leaf_clover:"https://github.githubassets.com/images/icons/emoji/unicode/1f340.png?v8", - fox_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f98a.png?v8", - fr:"https://github.githubassets.com/images/icons/emoji/unicode/1f1eb-1f1f7.png?v8", - framed_picture:"https://github.githubassets.com/images/icons/emoji/unicode/1f5bc.png?v8", - free:"https://github.githubassets.com/images/icons/emoji/unicode/1f193.png?v8", - french_guiana:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1eb.png?v8", - french_polynesia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1eb.png?v8", - french_southern_territories:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1eb.png?v8", - fried_egg:"https://github.githubassets.com/images/icons/emoji/unicode/1f373.png?v8", - fried_shrimp:"https://github.githubassets.com/images/icons/emoji/unicode/1f364.png?v8", - fries:"https://github.githubassets.com/images/icons/emoji/unicode/1f35f.png?v8", - frog:"https://github.githubassets.com/images/icons/emoji/unicode/1f438.png?v8", - frowning:"https://github.githubassets.com/images/icons/emoji/unicode/1f626.png?v8", - frowning_face:"https://github.githubassets.com/images/icons/emoji/unicode/2639.png?v8", - frowning_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f64d-2642.png?v8", - frowning_person:"https://github.githubassets.com/images/icons/emoji/unicode/1f64d.png?v8", - frowning_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f64d-2640.png?v8", - fu:"https://github.githubassets.com/images/icons/emoji/unicode/1f595.png?v8", - fuelpump:"https://github.githubassets.com/images/icons/emoji/unicode/26fd.png?v8", - full_moon:"https://github.githubassets.com/images/icons/emoji/unicode/1f315.png?v8", - full_moon_with_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f31d.png?v8", - funeral_urn:"https://github.githubassets.com/images/icons/emoji/unicode/26b1.png?v8", - gabon:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1e6.png?v8", - gambia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1f2.png?v8", - game_die:"https://github.githubassets.com/images/icons/emoji/unicode/1f3b2.png?v8", - garlic:"https://github.githubassets.com/images/icons/emoji/unicode/1f9c4.png?v8", - gb:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1e7.png?v8", - gear:"https://github.githubassets.com/images/icons/emoji/unicode/2699.png?v8", - gem:"https://github.githubassets.com/images/icons/emoji/unicode/1f48e.png?v8", - gemini:"https://github.githubassets.com/images/icons/emoji/unicode/264a.png?v8", - genie:"https://github.githubassets.com/images/icons/emoji/unicode/1f9de.png?v8", - genie_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f9de-2642.png?v8", - genie_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f9de-2640.png?v8", - georgia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1ea.png?v8", - ghana:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1ed.png?v8", - ghost:"https://github.githubassets.com/images/icons/emoji/unicode/1f47b.png?v8", - gibraltar:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1ee.png?v8", - gift:"https://github.githubassets.com/images/icons/emoji/unicode/1f381.png?v8", - gift_heart:"https://github.githubassets.com/images/icons/emoji/unicode/1f49d.png?v8", - giraffe:"https://github.githubassets.com/images/icons/emoji/unicode/1f992.png?v8", - girl:"https://github.githubassets.com/images/icons/emoji/unicode/1f467.png?v8", - globe_with_meridians:"https://github.githubassets.com/images/icons/emoji/unicode/1f310.png?v8", - gloves:"https://github.githubassets.com/images/icons/emoji/unicode/1f9e4.png?v8", - goal_net:"https://github.githubassets.com/images/icons/emoji/unicode/1f945.png?v8", - goat:"https://github.githubassets.com/images/icons/emoji/unicode/1f410.png?v8", - goberserk:"https://github.githubassets.com/images/icons/emoji/goberserk.png?v8", - godmode:"https://github.githubassets.com/images/icons/emoji/godmode.png?v8", - goggles:"https://github.githubassets.com/images/icons/emoji/unicode/1f97d.png?v8", - golf:"https://github.githubassets.com/images/icons/emoji/unicode/26f3.png?v8", - golfing:"https://github.githubassets.com/images/icons/emoji/unicode/1f3cc.png?v8", - golfing_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f3cc-2642.png?v8", - golfing_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f3cc-2640.png?v8", - gorilla:"https://github.githubassets.com/images/icons/emoji/unicode/1f98d.png?v8", - grapes:"https://github.githubassets.com/images/icons/emoji/unicode/1f347.png?v8", - greece:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1f7.png?v8", - green_apple:"https://github.githubassets.com/images/icons/emoji/unicode/1f34f.png?v8", - green_book:"https://github.githubassets.com/images/icons/emoji/unicode/1f4d7.png?v8", - green_circle:"https://github.githubassets.com/images/icons/emoji/unicode/1f7e2.png?v8", - green_heart:"https://github.githubassets.com/images/icons/emoji/unicode/1f49a.png?v8", - green_salad:"https://github.githubassets.com/images/icons/emoji/unicode/1f957.png?v8", - green_square:"https://github.githubassets.com/images/icons/emoji/unicode/1f7e9.png?v8", - greenland:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1f1.png?v8", - grenada:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1e9.png?v8", - grey_exclamation:"https://github.githubassets.com/images/icons/emoji/unicode/2755.png?v8", - grey_question:"https://github.githubassets.com/images/icons/emoji/unicode/2754.png?v8", - grimacing:"https://github.githubassets.com/images/icons/emoji/unicode/1f62c.png?v8", - grin:"https://github.githubassets.com/images/icons/emoji/unicode/1f601.png?v8", - grinning:"https://github.githubassets.com/images/icons/emoji/unicode/1f600.png?v8", - guadeloupe:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1f5.png?v8", - guam:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1fa.png?v8", - guard:"https://github.githubassets.com/images/icons/emoji/unicode/1f482.png?v8", - guardsman:"https://github.githubassets.com/images/icons/emoji/unicode/1f482-2642.png?v8", - guardswoman:"https://github.githubassets.com/images/icons/emoji/unicode/1f482-2640.png?v8", - guatemala:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1f9.png?v8", - guernsey:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1ec.png?v8", - guide_dog:"https://github.githubassets.com/images/icons/emoji/unicode/1f9ae.png?v8", - guinea:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1f3.png?v8", - guinea_bissau:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1fc.png?v8", - guitar:"https://github.githubassets.com/images/icons/emoji/unicode/1f3b8.png?v8", - gun:"https://github.githubassets.com/images/icons/emoji/unicode/1f52b.png?v8", - guyana:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1fe.png?v8", - haircut:"https://github.githubassets.com/images/icons/emoji/unicode/1f487.png?v8", - haircut_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f487-2642.png?v8", - haircut_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f487-2640.png?v8", - haiti:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ed-1f1f9.png?v8", - hamburger:"https://github.githubassets.com/images/icons/emoji/unicode/1f354.png?v8", - hammer:"https://github.githubassets.com/images/icons/emoji/unicode/1f528.png?v8", - hammer_and_pick:"https://github.githubassets.com/images/icons/emoji/unicode/2692.png?v8", - hammer_and_wrench:"https://github.githubassets.com/images/icons/emoji/unicode/1f6e0.png?v8", - hamster:"https://github.githubassets.com/images/icons/emoji/unicode/1f439.png?v8", - hand:"https://github.githubassets.com/images/icons/emoji/unicode/270b.png?v8", - hand_over_mouth:"https://github.githubassets.com/images/icons/emoji/unicode/1f92d.png?v8", - handbag:"https://github.githubassets.com/images/icons/emoji/unicode/1f45c.png?v8", - handball_person:"https://github.githubassets.com/images/icons/emoji/unicode/1f93e.png?v8", - handshake:"https://github.githubassets.com/images/icons/emoji/unicode/1f91d.png?v8", - hankey:"https://github.githubassets.com/images/icons/emoji/unicode/1f4a9.png?v8", - hash:"https://github.githubassets.com/images/icons/emoji/unicode/0023-20e3.png?v8", - hatched_chick:"https://github.githubassets.com/images/icons/emoji/unicode/1f425.png?v8", - hatching_chick:"https://github.githubassets.com/images/icons/emoji/unicode/1f423.png?v8", - headphones:"https://github.githubassets.com/images/icons/emoji/unicode/1f3a7.png?v8", - health_worker:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-2695.png?v8", - hear_no_evil:"https://github.githubassets.com/images/icons/emoji/unicode/1f649.png?v8", - heard_mcdonald_islands:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ed-1f1f2.png?v8", - heart:"https://github.githubassets.com/images/icons/emoji/unicode/2764.png?v8", - heart_decoration:"https://github.githubassets.com/images/icons/emoji/unicode/1f49f.png?v8", - heart_eyes:"https://github.githubassets.com/images/icons/emoji/unicode/1f60d.png?v8", - heart_eyes_cat:"https://github.githubassets.com/images/icons/emoji/unicode/1f63b.png?v8", - heartbeat:"https://github.githubassets.com/images/icons/emoji/unicode/1f493.png?v8", - heartpulse:"https://github.githubassets.com/images/icons/emoji/unicode/1f497.png?v8", - hearts:"https://github.githubassets.com/images/icons/emoji/unicode/2665.png?v8", - heavy_check_mark:"https://github.githubassets.com/images/icons/emoji/unicode/2714.png?v8", - heavy_division_sign:"https://github.githubassets.com/images/icons/emoji/unicode/2797.png?v8", - heavy_dollar_sign:"https://github.githubassets.com/images/icons/emoji/unicode/1f4b2.png?v8", - heavy_exclamation_mark:"https://github.githubassets.com/images/icons/emoji/unicode/2757.png?v8", - heavy_heart_exclamation:"https://github.githubassets.com/images/icons/emoji/unicode/2763.png?v8", - heavy_minus_sign:"https://github.githubassets.com/images/icons/emoji/unicode/2796.png?v8", - heavy_multiplication_x:"https://github.githubassets.com/images/icons/emoji/unicode/2716.png?v8", - heavy_plus_sign:"https://github.githubassets.com/images/icons/emoji/unicode/2795.png?v8", - hedgehog:"https://github.githubassets.com/images/icons/emoji/unicode/1f994.png?v8", - helicopter:"https://github.githubassets.com/images/icons/emoji/unicode/1f681.png?v8", - herb:"https://github.githubassets.com/images/icons/emoji/unicode/1f33f.png?v8", - hibiscus:"https://github.githubassets.com/images/icons/emoji/unicode/1f33a.png?v8", - high_brightness:"https://github.githubassets.com/images/icons/emoji/unicode/1f506.png?v8", - high_heel:"https://github.githubassets.com/images/icons/emoji/unicode/1f460.png?v8", - hiking_boot:"https://github.githubassets.com/images/icons/emoji/unicode/1f97e.png?v8", - hindu_temple:"https://github.githubassets.com/images/icons/emoji/unicode/1f6d5.png?v8", - hippopotamus:"https://github.githubassets.com/images/icons/emoji/unicode/1f99b.png?v8", - hocho:"https://github.githubassets.com/images/icons/emoji/unicode/1f52a.png?v8", - hole:"https://github.githubassets.com/images/icons/emoji/unicode/1f573.png?v8", - honduras:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ed-1f1f3.png?v8", - honey_pot:"https://github.githubassets.com/images/icons/emoji/unicode/1f36f.png?v8", - honeybee:"https://github.githubassets.com/images/icons/emoji/unicode/1f41d.png?v8", - hong_kong:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ed-1f1f0.png?v8", - horse:"https://github.githubassets.com/images/icons/emoji/unicode/1f434.png?v8", - horse_racing:"https://github.githubassets.com/images/icons/emoji/unicode/1f3c7.png?v8", - hospital:"https://github.githubassets.com/images/icons/emoji/unicode/1f3e5.png?v8", - hot_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f975.png?v8", - hot_pepper:"https://github.githubassets.com/images/icons/emoji/unicode/1f336.png?v8", - hotdog:"https://github.githubassets.com/images/icons/emoji/unicode/1f32d.png?v8", - hotel:"https://github.githubassets.com/images/icons/emoji/unicode/1f3e8.png?v8", - hotsprings:"https://github.githubassets.com/images/icons/emoji/unicode/2668.png?v8", - hourglass:"https://github.githubassets.com/images/icons/emoji/unicode/231b.png?v8", - hourglass_flowing_sand:"https://github.githubassets.com/images/icons/emoji/unicode/23f3.png?v8", - house:"https://github.githubassets.com/images/icons/emoji/unicode/1f3e0.png?v8", - house_with_garden:"https://github.githubassets.com/images/icons/emoji/unicode/1f3e1.png?v8", - houses:"https://github.githubassets.com/images/icons/emoji/unicode/1f3d8.png?v8", - hugs:"https://github.githubassets.com/images/icons/emoji/unicode/1f917.png?v8", - hungary:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ed-1f1fa.png?v8", - hurtrealbad:"https://github.githubassets.com/images/icons/emoji/hurtrealbad.png?v8", - hushed:"https://github.githubassets.com/images/icons/emoji/unicode/1f62f.png?v8", - ice_cream:"https://github.githubassets.com/images/icons/emoji/unicode/1f368.png?v8", - ice_cube:"https://github.githubassets.com/images/icons/emoji/unicode/1f9ca.png?v8", - ice_hockey:"https://github.githubassets.com/images/icons/emoji/unicode/1f3d2.png?v8", - ice_skate:"https://github.githubassets.com/images/icons/emoji/unicode/26f8.png?v8", - icecream:"https://github.githubassets.com/images/icons/emoji/unicode/1f366.png?v8", - iceland:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1f8.png?v8", - id:"https://github.githubassets.com/images/icons/emoji/unicode/1f194.png?v8", - ideograph_advantage:"https://github.githubassets.com/images/icons/emoji/unicode/1f250.png?v8", - imp:"https://github.githubassets.com/images/icons/emoji/unicode/1f47f.png?v8", - inbox_tray:"https://github.githubassets.com/images/icons/emoji/unicode/1f4e5.png?v8", - incoming_envelope:"https://github.githubassets.com/images/icons/emoji/unicode/1f4e8.png?v8", - india:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1f3.png?v8", - indonesia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1e9.png?v8", - infinity:"https://github.githubassets.com/images/icons/emoji/unicode/267e.png?v8", - information_desk_person:"https://github.githubassets.com/images/icons/emoji/unicode/1f481.png?v8", - information_source:"https://github.githubassets.com/images/icons/emoji/unicode/2139.png?v8", - innocent:"https://github.githubassets.com/images/icons/emoji/unicode/1f607.png?v8", - interrobang:"https://github.githubassets.com/images/icons/emoji/unicode/2049.png?v8", - iphone:"https://github.githubassets.com/images/icons/emoji/unicode/1f4f1.png?v8", - iran:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1f7.png?v8", - iraq:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1f6.png?v8", - ireland:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1ea.png?v8", - isle_of_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1f2.png?v8", - israel:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1f1.png?v8", - it:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1f9.png?v8", - izakaya_lantern:"https://github.githubassets.com/images/icons/emoji/unicode/1f3ee.png?v8", - jack_o_lantern:"https://github.githubassets.com/images/icons/emoji/unicode/1f383.png?v8", - jamaica:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ef-1f1f2.png?v8", - japan:"https://github.githubassets.com/images/icons/emoji/unicode/1f5fe.png?v8", - japanese_castle:"https://github.githubassets.com/images/icons/emoji/unicode/1f3ef.png?v8", - japanese_goblin:"https://github.githubassets.com/images/icons/emoji/unicode/1f47a.png?v8", - japanese_ogre:"https://github.githubassets.com/images/icons/emoji/unicode/1f479.png?v8", - jeans:"https://github.githubassets.com/images/icons/emoji/unicode/1f456.png?v8", - jersey:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ef-1f1ea.png?v8", - jigsaw:"https://github.githubassets.com/images/icons/emoji/unicode/1f9e9.png?v8", - jordan:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ef-1f1f4.png?v8", - joy:"https://github.githubassets.com/images/icons/emoji/unicode/1f602.png?v8", - joy_cat:"https://github.githubassets.com/images/icons/emoji/unicode/1f639.png?v8", - joystick:"https://github.githubassets.com/images/icons/emoji/unicode/1f579.png?v8", - jp:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ef-1f1f5.png?v8", - judge:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-2696.png?v8", - juggling_person:"https://github.githubassets.com/images/icons/emoji/unicode/1f939.png?v8", - kaaba:"https://github.githubassets.com/images/icons/emoji/unicode/1f54b.png?v8", - kangaroo:"https://github.githubassets.com/images/icons/emoji/unicode/1f998.png?v8", - kazakhstan:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1ff.png?v8", - kenya:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1ea.png?v8", - key:"https://github.githubassets.com/images/icons/emoji/unicode/1f511.png?v8", - keyboard:"https://github.githubassets.com/images/icons/emoji/unicode/2328.png?v8", - keycap_ten:"https://github.githubassets.com/images/icons/emoji/unicode/1f51f.png?v8", - kick_scooter:"https://github.githubassets.com/images/icons/emoji/unicode/1f6f4.png?v8", - kimono:"https://github.githubassets.com/images/icons/emoji/unicode/1f458.png?v8", - kiribati:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1ee.png?v8", - kiss:"https://github.githubassets.com/images/icons/emoji/unicode/1f48b.png?v8", - kissing:"https://github.githubassets.com/images/icons/emoji/unicode/1f617.png?v8", - kissing_cat:"https://github.githubassets.com/images/icons/emoji/unicode/1f63d.png?v8", - kissing_closed_eyes:"https://github.githubassets.com/images/icons/emoji/unicode/1f61a.png?v8", - kissing_heart:"https://github.githubassets.com/images/icons/emoji/unicode/1f618.png?v8", - kissing_smiling_eyes:"https://github.githubassets.com/images/icons/emoji/unicode/1f619.png?v8", - kite:"https://github.githubassets.com/images/icons/emoji/unicode/1fa81.png?v8", - kiwi_fruit:"https://github.githubassets.com/images/icons/emoji/unicode/1f95d.png?v8", - kneeling_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f9ce-2642.png?v8", - kneeling_person:"https://github.githubassets.com/images/icons/emoji/unicode/1f9ce.png?v8", - kneeling_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f9ce-2640.png?v8", - knife:"https://github.githubassets.com/images/icons/emoji/unicode/1f52a.png?v8", - koala:"https://github.githubassets.com/images/icons/emoji/unicode/1f428.png?v8", - koko:"https://github.githubassets.com/images/icons/emoji/unicode/1f201.png?v8", - kosovo:"https://github.githubassets.com/images/icons/emoji/unicode/1f1fd-1f1f0.png?v8", - kr:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1f7.png?v8", - kuwait:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1fc.png?v8", - kyrgyzstan:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1ec.png?v8", - lab_coat:"https://github.githubassets.com/images/icons/emoji/unicode/1f97c.png?v8", - label:"https://github.githubassets.com/images/icons/emoji/unicode/1f3f7.png?v8", - lacrosse:"https://github.githubassets.com/images/icons/emoji/unicode/1f94d.png?v8", - lantern:"https://github.githubassets.com/images/icons/emoji/unicode/1f3ee.png?v8", - laos:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1e6.png?v8", - large_blue_circle:"https://github.githubassets.com/images/icons/emoji/unicode/1f535.png?v8", - large_blue_diamond:"https://github.githubassets.com/images/icons/emoji/unicode/1f537.png?v8", - large_orange_diamond:"https://github.githubassets.com/images/icons/emoji/unicode/1f536.png?v8", - last_quarter_moon:"https://github.githubassets.com/images/icons/emoji/unicode/1f317.png?v8", - last_quarter_moon_with_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f31c.png?v8", - latin_cross:"https://github.githubassets.com/images/icons/emoji/unicode/271d.png?v8", - latvia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1fb.png?v8", - laughing:"https://github.githubassets.com/images/icons/emoji/unicode/1f606.png?v8", - leafy_green:"https://github.githubassets.com/images/icons/emoji/unicode/1f96c.png?v8", - leaves:"https://github.githubassets.com/images/icons/emoji/unicode/1f343.png?v8", - lebanon:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1e7.png?v8", - ledger:"https://github.githubassets.com/images/icons/emoji/unicode/1f4d2.png?v8", - left_luggage:"https://github.githubassets.com/images/icons/emoji/unicode/1f6c5.png?v8", - left_right_arrow:"https://github.githubassets.com/images/icons/emoji/unicode/2194.png?v8", - left_speech_bubble:"https://github.githubassets.com/images/icons/emoji/unicode/1f5e8.png?v8", - leftwards_arrow_with_hook:"https://github.githubassets.com/images/icons/emoji/unicode/21a9.png?v8", - leg:"https://github.githubassets.com/images/icons/emoji/unicode/1f9b5.png?v8", - lemon:"https://github.githubassets.com/images/icons/emoji/unicode/1f34b.png?v8", - leo:"https://github.githubassets.com/images/icons/emoji/unicode/264c.png?v8", - leopard:"https://github.githubassets.com/images/icons/emoji/unicode/1f406.png?v8", - lesotho:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1f8.png?v8", - level_slider:"https://github.githubassets.com/images/icons/emoji/unicode/1f39a.png?v8", - liberia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1f7.png?v8", - libra:"https://github.githubassets.com/images/icons/emoji/unicode/264e.png?v8", - libya:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1fe.png?v8", - liechtenstein:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1ee.png?v8", - light_rail:"https://github.githubassets.com/images/icons/emoji/unicode/1f688.png?v8", - link:"https://github.githubassets.com/images/icons/emoji/unicode/1f517.png?v8", - lion:"https://github.githubassets.com/images/icons/emoji/unicode/1f981.png?v8", - lips:"https://github.githubassets.com/images/icons/emoji/unicode/1f444.png?v8", - lipstick:"https://github.githubassets.com/images/icons/emoji/unicode/1f484.png?v8", - lithuania:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1f9.png?v8", - lizard:"https://github.githubassets.com/images/icons/emoji/unicode/1f98e.png?v8", - llama:"https://github.githubassets.com/images/icons/emoji/unicode/1f999.png?v8", - lobster:"https://github.githubassets.com/images/icons/emoji/unicode/1f99e.png?v8", - lock:"https://github.githubassets.com/images/icons/emoji/unicode/1f512.png?v8", - lock_with_ink_pen:"https://github.githubassets.com/images/icons/emoji/unicode/1f50f.png?v8", - lollipop:"https://github.githubassets.com/images/icons/emoji/unicode/1f36d.png?v8", - loop:"https://github.githubassets.com/images/icons/emoji/unicode/27bf.png?v8", - lotion_bottle:"https://github.githubassets.com/images/icons/emoji/unicode/1f9f4.png?v8", - lotus_position:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d8.png?v8", - lotus_position_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d8-2642.png?v8", - lotus_position_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d8-2640.png?v8", - loud_sound:"https://github.githubassets.com/images/icons/emoji/unicode/1f50a.png?v8", - loudspeaker:"https://github.githubassets.com/images/icons/emoji/unicode/1f4e2.png?v8", - love_hotel:"https://github.githubassets.com/images/icons/emoji/unicode/1f3e9.png?v8", - love_letter:"https://github.githubassets.com/images/icons/emoji/unicode/1f48c.png?v8", - love_you_gesture:"https://github.githubassets.com/images/icons/emoji/unicode/1f91f.png?v8", - low_brightness:"https://github.githubassets.com/images/icons/emoji/unicode/1f505.png?v8", - luggage:"https://github.githubassets.com/images/icons/emoji/unicode/1f9f3.png?v8", - luxembourg:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1fa.png?v8", - lying_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f925.png?v8", - m:"https://github.githubassets.com/images/icons/emoji/unicode/24c2.png?v8", - macau:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f4.png?v8", - macedonia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f0.png?v8", - madagascar:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1ec.png?v8", - mag:"https://github.githubassets.com/images/icons/emoji/unicode/1f50d.png?v8", - mag_right:"https://github.githubassets.com/images/icons/emoji/unicode/1f50e.png?v8", - mage:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d9.png?v8", - mage_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d9-2642.png?v8", - mage_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d9-2640.png?v8", - magnet:"https://github.githubassets.com/images/icons/emoji/unicode/1f9f2.png?v8", - mahjong:"https://github.githubassets.com/images/icons/emoji/unicode/1f004.png?v8", - mailbox:"https://github.githubassets.com/images/icons/emoji/unicode/1f4eb.png?v8", - mailbox_closed:"https://github.githubassets.com/images/icons/emoji/unicode/1f4ea.png?v8", - mailbox_with_mail:"https://github.githubassets.com/images/icons/emoji/unicode/1f4ec.png?v8", - mailbox_with_no_mail:"https://github.githubassets.com/images/icons/emoji/unicode/1f4ed.png?v8", - malawi:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1fc.png?v8", - malaysia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1fe.png?v8", - maldives:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1fb.png?v8", - male_detective:"https://github.githubassets.com/images/icons/emoji/unicode/1f575-2642.png?v8", - male_sign:"https://github.githubassets.com/images/icons/emoji/unicode/2642.png?v8", - mali:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f1.png?v8", - malta:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f9.png?v8", - man:"https://github.githubassets.com/images/icons/emoji/unicode/1f468.png?v8", - man_artist:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f3a8.png?v8", - man_astronaut:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f680.png?v8", - man_cartwheeling:"https://github.githubassets.com/images/icons/emoji/unicode/1f938-2642.png?v8", - man_cook:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f373.png?v8", - man_dancing:"https://github.githubassets.com/images/icons/emoji/unicode/1f57a.png?v8", - man_facepalming:"https://github.githubassets.com/images/icons/emoji/unicode/1f926-2642.png?v8", - man_factory_worker:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f3ed.png?v8", - man_farmer:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f33e.png?v8", - man_firefighter:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f692.png?v8", - man_health_worker:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-2695.png?v8", - man_in_manual_wheelchair:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f9bd.png?v8", - man_in_motorized_wheelchair:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f9bc.png?v8", - man_in_tuxedo:"https://github.githubassets.com/images/icons/emoji/unicode/1f935.png?v8", - man_judge:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-2696.png?v8", - man_juggling:"https://github.githubassets.com/images/icons/emoji/unicode/1f939-2642.png?v8", - man_mechanic:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f527.png?v8", - man_office_worker:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f4bc.png?v8", - man_pilot:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-2708.png?v8", - man_playing_handball:"https://github.githubassets.com/images/icons/emoji/unicode/1f93e-2642.png?v8", - man_playing_water_polo:"https://github.githubassets.com/images/icons/emoji/unicode/1f93d-2642.png?v8", - man_scientist:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f52c.png?v8", - man_shrugging:"https://github.githubassets.com/images/icons/emoji/unicode/1f937-2642.png?v8", - man_singer:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f3a4.png?v8", - man_student:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f393.png?v8", - man_teacher:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f3eb.png?v8", - man_technologist:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f4bb.png?v8", - man_with_gua_pi_mao:"https://github.githubassets.com/images/icons/emoji/unicode/1f472.png?v8", - man_with_probing_cane:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f9af.png?v8", - man_with_turban:"https://github.githubassets.com/images/icons/emoji/unicode/1f473-2642.png?v8", - mandarin:"https://github.githubassets.com/images/icons/emoji/unicode/1f34a.png?v8", - mango:"https://github.githubassets.com/images/icons/emoji/unicode/1f96d.png?v8", - mans_shoe:"https://github.githubassets.com/images/icons/emoji/unicode/1f45e.png?v8", - mantelpiece_clock:"https://github.githubassets.com/images/icons/emoji/unicode/1f570.png?v8", - manual_wheelchair:"https://github.githubassets.com/images/icons/emoji/unicode/1f9bd.png?v8", - maple_leaf:"https://github.githubassets.com/images/icons/emoji/unicode/1f341.png?v8", - marshall_islands:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1ed.png?v8", - martial_arts_uniform:"https://github.githubassets.com/images/icons/emoji/unicode/1f94b.png?v8", - martinique:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f6.png?v8", - mask:"https://github.githubassets.com/images/icons/emoji/unicode/1f637.png?v8", - massage:"https://github.githubassets.com/images/icons/emoji/unicode/1f486.png?v8", - massage_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f486-2642.png?v8", - massage_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f486-2640.png?v8", - mate:"https://github.githubassets.com/images/icons/emoji/unicode/1f9c9.png?v8", - mauritania:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f7.png?v8", - mauritius:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1fa.png?v8", - mayotte:"https://github.githubassets.com/images/icons/emoji/unicode/1f1fe-1f1f9.png?v8", - meat_on_bone:"https://github.githubassets.com/images/icons/emoji/unicode/1f356.png?v8", - mechanic:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f527.png?v8", - mechanical_arm:"https://github.githubassets.com/images/icons/emoji/unicode/1f9be.png?v8", - mechanical_leg:"https://github.githubassets.com/images/icons/emoji/unicode/1f9bf.png?v8", - medal_military:"https://github.githubassets.com/images/icons/emoji/unicode/1f396.png?v8", - medal_sports:"https://github.githubassets.com/images/icons/emoji/unicode/1f3c5.png?v8", - medical_symbol:"https://github.githubassets.com/images/icons/emoji/unicode/2695.png?v8", - mega:"https://github.githubassets.com/images/icons/emoji/unicode/1f4e3.png?v8", - melon:"https://github.githubassets.com/images/icons/emoji/unicode/1f348.png?v8", - memo:"https://github.githubassets.com/images/icons/emoji/unicode/1f4dd.png?v8", - men_wrestling:"https://github.githubassets.com/images/icons/emoji/unicode/1f93c-2642.png?v8", - menorah:"https://github.githubassets.com/images/icons/emoji/unicode/1f54e.png?v8", - mens:"https://github.githubassets.com/images/icons/emoji/unicode/1f6b9.png?v8", - mermaid:"https://github.githubassets.com/images/icons/emoji/unicode/1f9dc-2640.png?v8", - merman:"https://github.githubassets.com/images/icons/emoji/unicode/1f9dc-2642.png?v8", - merperson:"https://github.githubassets.com/images/icons/emoji/unicode/1f9dc.png?v8", - metal:"https://github.githubassets.com/images/icons/emoji/unicode/1f918.png?v8", - metro:"https://github.githubassets.com/images/icons/emoji/unicode/1f687.png?v8", - mexico:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1fd.png?v8", - microbe:"https://github.githubassets.com/images/icons/emoji/unicode/1f9a0.png?v8", - micronesia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1eb-1f1f2.png?v8", - microphone:"https://github.githubassets.com/images/icons/emoji/unicode/1f3a4.png?v8", - microscope:"https://github.githubassets.com/images/icons/emoji/unicode/1f52c.png?v8", - middle_finger:"https://github.githubassets.com/images/icons/emoji/unicode/1f595.png?v8", - milk_glass:"https://github.githubassets.com/images/icons/emoji/unicode/1f95b.png?v8", - milky_way:"https://github.githubassets.com/images/icons/emoji/unicode/1f30c.png?v8", - minibus:"https://github.githubassets.com/images/icons/emoji/unicode/1f690.png?v8", - minidisc:"https://github.githubassets.com/images/icons/emoji/unicode/1f4bd.png?v8", - mobile_phone_off:"https://github.githubassets.com/images/icons/emoji/unicode/1f4f4.png?v8", - moldova:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1e9.png?v8", - monaco:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1e8.png?v8", - money_mouth_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f911.png?v8", - money_with_wings:"https://github.githubassets.com/images/icons/emoji/unicode/1f4b8.png?v8", - moneybag:"https://github.githubassets.com/images/icons/emoji/unicode/1f4b0.png?v8", - mongolia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f3.png?v8", - monkey:"https://github.githubassets.com/images/icons/emoji/unicode/1f412.png?v8", - monkey_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f435.png?v8", - monocle_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d0.png?v8", - monorail:"https://github.githubassets.com/images/icons/emoji/unicode/1f69d.png?v8", - montenegro:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1ea.png?v8", - montserrat:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f8.png?v8", - moon:"https://github.githubassets.com/images/icons/emoji/unicode/1f314.png?v8", - moon_cake:"https://github.githubassets.com/images/icons/emoji/unicode/1f96e.png?v8", - morocco:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1e6.png?v8", - mortar_board:"https://github.githubassets.com/images/icons/emoji/unicode/1f393.png?v8", - mosque:"https://github.githubassets.com/images/icons/emoji/unicode/1f54c.png?v8", - mosquito:"https://github.githubassets.com/images/icons/emoji/unicode/1f99f.png?v8", - motor_boat:"https://github.githubassets.com/images/icons/emoji/unicode/1f6e5.png?v8", - motor_scooter:"https://github.githubassets.com/images/icons/emoji/unicode/1f6f5.png?v8", - motorcycle:"https://github.githubassets.com/images/icons/emoji/unicode/1f3cd.png?v8", - motorized_wheelchair:"https://github.githubassets.com/images/icons/emoji/unicode/1f9bc.png?v8", - motorway:"https://github.githubassets.com/images/icons/emoji/unicode/1f6e3.png?v8", - mount_fuji:"https://github.githubassets.com/images/icons/emoji/unicode/1f5fb.png?v8", - mountain:"https://github.githubassets.com/images/icons/emoji/unicode/26f0.png?v8", - mountain_bicyclist:"https://github.githubassets.com/images/icons/emoji/unicode/1f6b5.png?v8", - mountain_biking_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f6b5-2642.png?v8", - mountain_biking_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f6b5-2640.png?v8", - mountain_cableway:"https://github.githubassets.com/images/icons/emoji/unicode/1f6a0.png?v8", - mountain_railway:"https://github.githubassets.com/images/icons/emoji/unicode/1f69e.png?v8", - mountain_snow:"https://github.githubassets.com/images/icons/emoji/unicode/1f3d4.png?v8", - mouse:"https://github.githubassets.com/images/icons/emoji/unicode/1f42d.png?v8", - mouse2:"https://github.githubassets.com/images/icons/emoji/unicode/1f401.png?v8", - movie_camera:"https://github.githubassets.com/images/icons/emoji/unicode/1f3a5.png?v8", - moyai:"https://github.githubassets.com/images/icons/emoji/unicode/1f5ff.png?v8", - mozambique:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1ff.png?v8", - mrs_claus:"https://github.githubassets.com/images/icons/emoji/unicode/1f936.png?v8", - muscle:"https://github.githubassets.com/images/icons/emoji/unicode/1f4aa.png?v8", - mushroom:"https://github.githubassets.com/images/icons/emoji/unicode/1f344.png?v8", - musical_keyboard:"https://github.githubassets.com/images/icons/emoji/unicode/1f3b9.png?v8", - musical_note:"https://github.githubassets.com/images/icons/emoji/unicode/1f3b5.png?v8", - musical_score:"https://github.githubassets.com/images/icons/emoji/unicode/1f3bc.png?v8", - mute:"https://github.githubassets.com/images/icons/emoji/unicode/1f507.png?v8", - myanmar:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f2.png?v8", - nail_care:"https://github.githubassets.com/images/icons/emoji/unicode/1f485.png?v8", - name_badge:"https://github.githubassets.com/images/icons/emoji/unicode/1f4db.png?v8", - namibia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1e6.png?v8", - national_park:"https://github.githubassets.com/images/icons/emoji/unicode/1f3de.png?v8", - nauru:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1f7.png?v8", - nauseated_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f922.png?v8", - nazar_amulet:"https://github.githubassets.com/images/icons/emoji/unicode/1f9ff.png?v8", - neckbeard:"https://github.githubassets.com/images/icons/emoji/neckbeard.png?v8", - necktie:"https://github.githubassets.com/images/icons/emoji/unicode/1f454.png?v8", - negative_squared_cross_mark:"https://github.githubassets.com/images/icons/emoji/unicode/274e.png?v8", - nepal:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1f5.png?v8", - nerd_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f913.png?v8", - netherlands:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1f1.png?v8", - neutral_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f610.png?v8", - new:"https://github.githubassets.com/images/icons/emoji/unicode/1f195.png?v8", - new_caledonia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1e8.png?v8", - new_moon:"https://github.githubassets.com/images/icons/emoji/unicode/1f311.png?v8", - new_moon_with_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f31a.png?v8", - new_zealand:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1ff.png?v8", - newspaper:"https://github.githubassets.com/images/icons/emoji/unicode/1f4f0.png?v8", - newspaper_roll:"https://github.githubassets.com/images/icons/emoji/unicode/1f5de.png?v8", - next_track_button:"https://github.githubassets.com/images/icons/emoji/unicode/23ed.png?v8", - ng:"https://github.githubassets.com/images/icons/emoji/unicode/1f196.png?v8", - ng_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f645-2642.png?v8", - ng_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f645-2640.png?v8", - nicaragua:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1ee.png?v8", - niger:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1ea.png?v8", - nigeria:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1ec.png?v8", - night_with_stars:"https://github.githubassets.com/images/icons/emoji/unicode/1f303.png?v8", - nine:"https://github.githubassets.com/images/icons/emoji/unicode/0039-20e3.png?v8", - niue:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1fa.png?v8", - no_bell:"https://github.githubassets.com/images/icons/emoji/unicode/1f515.png?v8", - no_bicycles:"https://github.githubassets.com/images/icons/emoji/unicode/1f6b3.png?v8", - no_entry:"https://github.githubassets.com/images/icons/emoji/unicode/26d4.png?v8", - no_entry_sign:"https://github.githubassets.com/images/icons/emoji/unicode/1f6ab.png?v8", - no_good:"https://github.githubassets.com/images/icons/emoji/unicode/1f645.png?v8", - no_good_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f645-2642.png?v8", - no_good_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f645-2640.png?v8", - no_mobile_phones:"https://github.githubassets.com/images/icons/emoji/unicode/1f4f5.png?v8", - no_mouth:"https://github.githubassets.com/images/icons/emoji/unicode/1f636.png?v8", - no_pedestrians:"https://github.githubassets.com/images/icons/emoji/unicode/1f6b7.png?v8", - no_smoking:"https://github.githubassets.com/images/icons/emoji/unicode/1f6ad.png?v8", - "non-potable_water":"https://github.githubassets.com/images/icons/emoji/unicode/1f6b1.png?v8", - norfolk_island:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1eb.png?v8", - north_korea:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1f5.png?v8", - northern_mariana_islands:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f5.png?v8", - norway:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1f4.png?v8", - nose:"https://github.githubassets.com/images/icons/emoji/unicode/1f443.png?v8", - notebook:"https://github.githubassets.com/images/icons/emoji/unicode/1f4d3.png?v8", - notebook_with_decorative_cover:"https://github.githubassets.com/images/icons/emoji/unicode/1f4d4.png?v8", - notes:"https://github.githubassets.com/images/icons/emoji/unicode/1f3b6.png?v8", - nut_and_bolt:"https://github.githubassets.com/images/icons/emoji/unicode/1f529.png?v8", - o:"https://github.githubassets.com/images/icons/emoji/unicode/2b55.png?v8", - o2:"https://github.githubassets.com/images/icons/emoji/unicode/1f17e.png?v8", - ocean:"https://github.githubassets.com/images/icons/emoji/unicode/1f30a.png?v8", - octocat:"https://github.githubassets.com/images/icons/emoji/octocat.png?v8", - octopus:"https://github.githubassets.com/images/icons/emoji/unicode/1f419.png?v8", - oden:"https://github.githubassets.com/images/icons/emoji/unicode/1f362.png?v8", - office:"https://github.githubassets.com/images/icons/emoji/unicode/1f3e2.png?v8", - office_worker:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f4bc.png?v8", - oil_drum:"https://github.githubassets.com/images/icons/emoji/unicode/1f6e2.png?v8", - ok:"https://github.githubassets.com/images/icons/emoji/unicode/1f197.png?v8", - ok_hand:"https://github.githubassets.com/images/icons/emoji/unicode/1f44c.png?v8", - ok_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f646-2642.png?v8", - ok_person:"https://github.githubassets.com/images/icons/emoji/unicode/1f646.png?v8", - ok_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f646-2640.png?v8", - old_key:"https://github.githubassets.com/images/icons/emoji/unicode/1f5dd.png?v8", - older_adult:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d3.png?v8", - older_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f474.png?v8", - older_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f475.png?v8", - om:"https://github.githubassets.com/images/icons/emoji/unicode/1f549.png?v8", - oman:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f4-1f1f2.png?v8", - on:"https://github.githubassets.com/images/icons/emoji/unicode/1f51b.png?v8", - oncoming_automobile:"https://github.githubassets.com/images/icons/emoji/unicode/1f698.png?v8", - oncoming_bus:"https://github.githubassets.com/images/icons/emoji/unicode/1f68d.png?v8", - oncoming_police_car:"https://github.githubassets.com/images/icons/emoji/unicode/1f694.png?v8", - oncoming_taxi:"https://github.githubassets.com/images/icons/emoji/unicode/1f696.png?v8", - one:"https://github.githubassets.com/images/icons/emoji/unicode/0031-20e3.png?v8", - one_piece_swimsuit:"https://github.githubassets.com/images/icons/emoji/unicode/1fa71.png?v8", - onion:"https://github.githubassets.com/images/icons/emoji/unicode/1f9c5.png?v8", - open_book:"https://github.githubassets.com/images/icons/emoji/unicode/1f4d6.png?v8", - open_file_folder:"https://github.githubassets.com/images/icons/emoji/unicode/1f4c2.png?v8", - open_hands:"https://github.githubassets.com/images/icons/emoji/unicode/1f450.png?v8", - open_mouth:"https://github.githubassets.com/images/icons/emoji/unicode/1f62e.png?v8", - open_umbrella:"https://github.githubassets.com/images/icons/emoji/unicode/2602.png?v8", - ophiuchus:"https://github.githubassets.com/images/icons/emoji/unicode/26ce.png?v8", - orange:"https://github.githubassets.com/images/icons/emoji/unicode/1f34a.png?v8", - orange_book:"https://github.githubassets.com/images/icons/emoji/unicode/1f4d9.png?v8", - orange_circle:"https://github.githubassets.com/images/icons/emoji/unicode/1f7e0.png?v8", - orange_heart:"https://github.githubassets.com/images/icons/emoji/unicode/1f9e1.png?v8", - orange_square:"https://github.githubassets.com/images/icons/emoji/unicode/1f7e7.png?v8", - orangutan:"https://github.githubassets.com/images/icons/emoji/unicode/1f9a7.png?v8", - orthodox_cross:"https://github.githubassets.com/images/icons/emoji/unicode/2626.png?v8", - otter:"https://github.githubassets.com/images/icons/emoji/unicode/1f9a6.png?v8", - outbox_tray:"https://github.githubassets.com/images/icons/emoji/unicode/1f4e4.png?v8", - owl:"https://github.githubassets.com/images/icons/emoji/unicode/1f989.png?v8", - ox:"https://github.githubassets.com/images/icons/emoji/unicode/1f402.png?v8", - oyster:"https://github.githubassets.com/images/icons/emoji/unicode/1f9aa.png?v8", - package:"https://github.githubassets.com/images/icons/emoji/unicode/1f4e6.png?v8", - page_facing_up:"https://github.githubassets.com/images/icons/emoji/unicode/1f4c4.png?v8", - page_with_curl:"https://github.githubassets.com/images/icons/emoji/unicode/1f4c3.png?v8", - pager:"https://github.githubassets.com/images/icons/emoji/unicode/1f4df.png?v8", - paintbrush:"https://github.githubassets.com/images/icons/emoji/unicode/1f58c.png?v8", - pakistan:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1f0.png?v8", - palau:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1fc.png?v8", - palestinian_territories:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1f8.png?v8", - palm_tree:"https://github.githubassets.com/images/icons/emoji/unicode/1f334.png?v8", - palms_up_together:"https://github.githubassets.com/images/icons/emoji/unicode/1f932.png?v8", - panama:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1e6.png?v8", - pancakes:"https://github.githubassets.com/images/icons/emoji/unicode/1f95e.png?v8", - panda_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f43c.png?v8", - paperclip:"https://github.githubassets.com/images/icons/emoji/unicode/1f4ce.png?v8", - paperclips:"https://github.githubassets.com/images/icons/emoji/unicode/1f587.png?v8", - papua_new_guinea:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1ec.png?v8", - parachute:"https://github.githubassets.com/images/icons/emoji/unicode/1fa82.png?v8", - paraguay:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1fe.png?v8", - parasol_on_ground:"https://github.githubassets.com/images/icons/emoji/unicode/26f1.png?v8", - parking:"https://github.githubassets.com/images/icons/emoji/unicode/1f17f.png?v8", - parrot:"https://github.githubassets.com/images/icons/emoji/unicode/1f99c.png?v8", - part_alternation_mark:"https://github.githubassets.com/images/icons/emoji/unicode/303d.png?v8", - partly_sunny:"https://github.githubassets.com/images/icons/emoji/unicode/26c5.png?v8", - partying_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f973.png?v8", - passenger_ship:"https://github.githubassets.com/images/icons/emoji/unicode/1f6f3.png?v8", - passport_control:"https://github.githubassets.com/images/icons/emoji/unicode/1f6c2.png?v8", - pause_button:"https://github.githubassets.com/images/icons/emoji/unicode/23f8.png?v8", - paw_prints:"https://github.githubassets.com/images/icons/emoji/unicode/1f43e.png?v8", - peace_symbol:"https://github.githubassets.com/images/icons/emoji/unicode/262e.png?v8", - peach:"https://github.githubassets.com/images/icons/emoji/unicode/1f351.png?v8", - peacock:"https://github.githubassets.com/images/icons/emoji/unicode/1f99a.png?v8", - peanuts:"https://github.githubassets.com/images/icons/emoji/unicode/1f95c.png?v8", - pear:"https://github.githubassets.com/images/icons/emoji/unicode/1f350.png?v8", - pen:"https://github.githubassets.com/images/icons/emoji/unicode/1f58a.png?v8", - pencil:"https://github.githubassets.com/images/icons/emoji/unicode/1f4dd.png?v8", - pencil2:"https://github.githubassets.com/images/icons/emoji/unicode/270f.png?v8", - penguin:"https://github.githubassets.com/images/icons/emoji/unicode/1f427.png?v8", - pensive:"https://github.githubassets.com/images/icons/emoji/unicode/1f614.png?v8", - people_holding_hands:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f91d-1f9d1.png?v8", - performing_arts:"https://github.githubassets.com/images/icons/emoji/unicode/1f3ad.png?v8", - persevere:"https://github.githubassets.com/images/icons/emoji/unicode/1f623.png?v8", - person_bald:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f9b2.png?v8", - person_curly_hair:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f9b1.png?v8", - person_fencing:"https://github.githubassets.com/images/icons/emoji/unicode/1f93a.png?v8", - person_in_manual_wheelchair:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f9bd.png?v8", - person_in_motorized_wheelchair:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f9bc.png?v8", - person_red_hair:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f9b0.png?v8", - person_white_hair:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f9b3.png?v8", - person_with_probing_cane:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f9af.png?v8", - person_with_turban:"https://github.githubassets.com/images/icons/emoji/unicode/1f473.png?v8", - peru:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1ea.png?v8", - petri_dish:"https://github.githubassets.com/images/icons/emoji/unicode/1f9eb.png?v8", - philippines:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1ed.png?v8", - phone:"https://github.githubassets.com/images/icons/emoji/unicode/260e.png?v8", - pick:"https://github.githubassets.com/images/icons/emoji/unicode/26cf.png?v8", - pie:"https://github.githubassets.com/images/icons/emoji/unicode/1f967.png?v8", - pig:"https://github.githubassets.com/images/icons/emoji/unicode/1f437.png?v8", - pig2:"https://github.githubassets.com/images/icons/emoji/unicode/1f416.png?v8", - pig_nose:"https://github.githubassets.com/images/icons/emoji/unicode/1f43d.png?v8", - pill:"https://github.githubassets.com/images/icons/emoji/unicode/1f48a.png?v8", - pilot:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-2708.png?v8", - pinching_hand:"https://github.githubassets.com/images/icons/emoji/unicode/1f90f.png?v8", - pineapple:"https://github.githubassets.com/images/icons/emoji/unicode/1f34d.png?v8", - ping_pong:"https://github.githubassets.com/images/icons/emoji/unicode/1f3d3.png?v8", - pirate_flag:"https://github.githubassets.com/images/icons/emoji/unicode/1f3f4-2620.png?v8", - pisces:"https://github.githubassets.com/images/icons/emoji/unicode/2653.png?v8", - pitcairn_islands:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1f3.png?v8", - pizza:"https://github.githubassets.com/images/icons/emoji/unicode/1f355.png?v8", - place_of_worship:"https://github.githubassets.com/images/icons/emoji/unicode/1f6d0.png?v8", - plate_with_cutlery:"https://github.githubassets.com/images/icons/emoji/unicode/1f37d.png?v8", - play_or_pause_button:"https://github.githubassets.com/images/icons/emoji/unicode/23ef.png?v8", - pleading_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f97a.png?v8", - point_down:"https://github.githubassets.com/images/icons/emoji/unicode/1f447.png?v8", - point_left:"https://github.githubassets.com/images/icons/emoji/unicode/1f448.png?v8", - point_right:"https://github.githubassets.com/images/icons/emoji/unicode/1f449.png?v8", - point_up:"https://github.githubassets.com/images/icons/emoji/unicode/261d.png?v8", - point_up_2:"https://github.githubassets.com/images/icons/emoji/unicode/1f446.png?v8", - poland:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1f1.png?v8", - police_car:"https://github.githubassets.com/images/icons/emoji/unicode/1f693.png?v8", - police_officer:"https://github.githubassets.com/images/icons/emoji/unicode/1f46e.png?v8", - policeman:"https://github.githubassets.com/images/icons/emoji/unicode/1f46e-2642.png?v8", - policewoman:"https://github.githubassets.com/images/icons/emoji/unicode/1f46e-2640.png?v8", - poodle:"https://github.githubassets.com/images/icons/emoji/unicode/1f429.png?v8", - poop:"https://github.githubassets.com/images/icons/emoji/unicode/1f4a9.png?v8", - popcorn:"https://github.githubassets.com/images/icons/emoji/unicode/1f37f.png?v8", - portugal:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1f9.png?v8", - post_office:"https://github.githubassets.com/images/icons/emoji/unicode/1f3e3.png?v8", - postal_horn:"https://github.githubassets.com/images/icons/emoji/unicode/1f4ef.png?v8", - postbox:"https://github.githubassets.com/images/icons/emoji/unicode/1f4ee.png?v8", - potable_water:"https://github.githubassets.com/images/icons/emoji/unicode/1f6b0.png?v8", - potato:"https://github.githubassets.com/images/icons/emoji/unicode/1f954.png?v8", - pouch:"https://github.githubassets.com/images/icons/emoji/unicode/1f45d.png?v8", - poultry_leg:"https://github.githubassets.com/images/icons/emoji/unicode/1f357.png?v8", - pound:"https://github.githubassets.com/images/icons/emoji/unicode/1f4b7.png?v8", - pout:"https://github.githubassets.com/images/icons/emoji/unicode/1f621.png?v8", - pouting_cat:"https://github.githubassets.com/images/icons/emoji/unicode/1f63e.png?v8", - pouting_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f64e.png?v8", - pouting_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f64e-2642.png?v8", - pouting_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f64e-2640.png?v8", - pray:"https://github.githubassets.com/images/icons/emoji/unicode/1f64f.png?v8", - prayer_beads:"https://github.githubassets.com/images/icons/emoji/unicode/1f4ff.png?v8", - pregnant_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f930.png?v8", - pretzel:"https://github.githubassets.com/images/icons/emoji/unicode/1f968.png?v8", - previous_track_button:"https://github.githubassets.com/images/icons/emoji/unicode/23ee.png?v8", - prince:"https://github.githubassets.com/images/icons/emoji/unicode/1f934.png?v8", - princess:"https://github.githubassets.com/images/icons/emoji/unicode/1f478.png?v8", - printer:"https://github.githubassets.com/images/icons/emoji/unicode/1f5a8.png?v8", - probing_cane:"https://github.githubassets.com/images/icons/emoji/unicode/1f9af.png?v8", - puerto_rico:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1f7.png?v8", - punch:"https://github.githubassets.com/images/icons/emoji/unicode/1f44a.png?v8", - purple_circle:"https://github.githubassets.com/images/icons/emoji/unicode/1f7e3.png?v8", - purple_heart:"https://github.githubassets.com/images/icons/emoji/unicode/1f49c.png?v8", - purple_square:"https://github.githubassets.com/images/icons/emoji/unicode/1f7ea.png?v8", - purse:"https://github.githubassets.com/images/icons/emoji/unicode/1f45b.png?v8", - pushpin:"https://github.githubassets.com/images/icons/emoji/unicode/1f4cc.png?v8", - put_litter_in_its_place:"https://github.githubassets.com/images/icons/emoji/unicode/1f6ae.png?v8", - qatar:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f6-1f1e6.png?v8", - question:"https://github.githubassets.com/images/icons/emoji/unicode/2753.png?v8", - rabbit:"https://github.githubassets.com/images/icons/emoji/unicode/1f430.png?v8", - rabbit2:"https://github.githubassets.com/images/icons/emoji/unicode/1f407.png?v8", - raccoon:"https://github.githubassets.com/images/icons/emoji/unicode/1f99d.png?v8", - racehorse:"https://github.githubassets.com/images/icons/emoji/unicode/1f40e.png?v8", - racing_car:"https://github.githubassets.com/images/icons/emoji/unicode/1f3ce.png?v8", - radio:"https://github.githubassets.com/images/icons/emoji/unicode/1f4fb.png?v8", - radio_button:"https://github.githubassets.com/images/icons/emoji/unicode/1f518.png?v8", - radioactive:"https://github.githubassets.com/images/icons/emoji/unicode/2622.png?v8", - rage:"https://github.githubassets.com/images/icons/emoji/unicode/1f621.png?v8", - rage1:"https://github.githubassets.com/images/icons/emoji/rage1.png?v8", - rage2:"https://github.githubassets.com/images/icons/emoji/rage2.png?v8", - rage3:"https://github.githubassets.com/images/icons/emoji/rage3.png?v8", - rage4:"https://github.githubassets.com/images/icons/emoji/rage4.png?v8", - railway_car:"https://github.githubassets.com/images/icons/emoji/unicode/1f683.png?v8", - railway_track:"https://github.githubassets.com/images/icons/emoji/unicode/1f6e4.png?v8", - rainbow:"https://github.githubassets.com/images/icons/emoji/unicode/1f308.png?v8", - rainbow_flag:"https://github.githubassets.com/images/icons/emoji/unicode/1f3f3-1f308.png?v8", - raised_back_of_hand:"https://github.githubassets.com/images/icons/emoji/unicode/1f91a.png?v8", - raised_eyebrow:"https://github.githubassets.com/images/icons/emoji/unicode/1f928.png?v8", - raised_hand:"https://github.githubassets.com/images/icons/emoji/unicode/270b.png?v8", - raised_hand_with_fingers_splayed:"https://github.githubassets.com/images/icons/emoji/unicode/1f590.png?v8", - raised_hands:"https://github.githubassets.com/images/icons/emoji/unicode/1f64c.png?v8", - raising_hand:"https://github.githubassets.com/images/icons/emoji/unicode/1f64b.png?v8", - raising_hand_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f64b-2642.png?v8", - raising_hand_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f64b-2640.png?v8", - ram:"https://github.githubassets.com/images/icons/emoji/unicode/1f40f.png?v8", - ramen:"https://github.githubassets.com/images/icons/emoji/unicode/1f35c.png?v8", - rat:"https://github.githubassets.com/images/icons/emoji/unicode/1f400.png?v8", - razor:"https://github.githubassets.com/images/icons/emoji/unicode/1fa92.png?v8", - receipt:"https://github.githubassets.com/images/icons/emoji/unicode/1f9fe.png?v8", - record_button:"https://github.githubassets.com/images/icons/emoji/unicode/23fa.png?v8", - recycle:"https://github.githubassets.com/images/icons/emoji/unicode/267b.png?v8", - red_car:"https://github.githubassets.com/images/icons/emoji/unicode/1f697.png?v8", - red_circle:"https://github.githubassets.com/images/icons/emoji/unicode/1f534.png?v8", - red_envelope:"https://github.githubassets.com/images/icons/emoji/unicode/1f9e7.png?v8", - red_haired_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f9b0.png?v8", - red_haired_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f9b0.png?v8", - red_square:"https://github.githubassets.com/images/icons/emoji/unicode/1f7e5.png?v8", - registered:"https://github.githubassets.com/images/icons/emoji/unicode/00ae.png?v8", - relaxed:"https://github.githubassets.com/images/icons/emoji/unicode/263a.png?v8", - relieved:"https://github.githubassets.com/images/icons/emoji/unicode/1f60c.png?v8", - reminder_ribbon:"https://github.githubassets.com/images/icons/emoji/unicode/1f397.png?v8", - repeat:"https://github.githubassets.com/images/icons/emoji/unicode/1f501.png?v8", - repeat_one:"https://github.githubassets.com/images/icons/emoji/unicode/1f502.png?v8", - rescue_worker_helmet:"https://github.githubassets.com/images/icons/emoji/unicode/26d1.png?v8", - restroom:"https://github.githubassets.com/images/icons/emoji/unicode/1f6bb.png?v8", - reunion:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f7-1f1ea.png?v8", - revolving_hearts:"https://github.githubassets.com/images/icons/emoji/unicode/1f49e.png?v8", - rewind:"https://github.githubassets.com/images/icons/emoji/unicode/23ea.png?v8", - rhinoceros:"https://github.githubassets.com/images/icons/emoji/unicode/1f98f.png?v8", - ribbon:"https://github.githubassets.com/images/icons/emoji/unicode/1f380.png?v8", - rice:"https://github.githubassets.com/images/icons/emoji/unicode/1f35a.png?v8", - rice_ball:"https://github.githubassets.com/images/icons/emoji/unicode/1f359.png?v8", - rice_cracker:"https://github.githubassets.com/images/icons/emoji/unicode/1f358.png?v8", - rice_scene:"https://github.githubassets.com/images/icons/emoji/unicode/1f391.png?v8", - right_anger_bubble:"https://github.githubassets.com/images/icons/emoji/unicode/1f5ef.png?v8", - ring:"https://github.githubassets.com/images/icons/emoji/unicode/1f48d.png?v8", - ringed_planet:"https://github.githubassets.com/images/icons/emoji/unicode/1fa90.png?v8", - robot:"https://github.githubassets.com/images/icons/emoji/unicode/1f916.png?v8", - rocket:"https://github.githubassets.com/images/icons/emoji/unicode/1f680.png?v8", - rofl:"https://github.githubassets.com/images/icons/emoji/unicode/1f923.png?v8", - roll_eyes:"https://github.githubassets.com/images/icons/emoji/unicode/1f644.png?v8", - roll_of_paper:"https://github.githubassets.com/images/icons/emoji/unicode/1f9fb.png?v8", - roller_coaster:"https://github.githubassets.com/images/icons/emoji/unicode/1f3a2.png?v8", - romania:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f7-1f1f4.png?v8", - rooster:"https://github.githubassets.com/images/icons/emoji/unicode/1f413.png?v8", - rose:"https://github.githubassets.com/images/icons/emoji/unicode/1f339.png?v8", - rosette:"https://github.githubassets.com/images/icons/emoji/unicode/1f3f5.png?v8", - rotating_light:"https://github.githubassets.com/images/icons/emoji/unicode/1f6a8.png?v8", - round_pushpin:"https://github.githubassets.com/images/icons/emoji/unicode/1f4cd.png?v8", - rowboat:"https://github.githubassets.com/images/icons/emoji/unicode/1f6a3.png?v8", - rowing_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f6a3-2642.png?v8", - rowing_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f6a3-2640.png?v8", - ru:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f7-1f1fa.png?v8", - rugby_football:"https://github.githubassets.com/images/icons/emoji/unicode/1f3c9.png?v8", - runner:"https://github.githubassets.com/images/icons/emoji/unicode/1f3c3.png?v8", - running:"https://github.githubassets.com/images/icons/emoji/unicode/1f3c3.png?v8", - running_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f3c3-2642.png?v8", - running_shirt_with_sash:"https://github.githubassets.com/images/icons/emoji/unicode/1f3bd.png?v8", - running_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f3c3-2640.png?v8", - rwanda:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f7-1f1fc.png?v8", - sa:"https://github.githubassets.com/images/icons/emoji/unicode/1f202.png?v8", - safety_pin:"https://github.githubassets.com/images/icons/emoji/unicode/1f9f7.png?v8", - safety_vest:"https://github.githubassets.com/images/icons/emoji/unicode/1f9ba.png?v8", - sagittarius:"https://github.githubassets.com/images/icons/emoji/unicode/2650.png?v8", - sailboat:"https://github.githubassets.com/images/icons/emoji/unicode/26f5.png?v8", - sake:"https://github.githubassets.com/images/icons/emoji/unicode/1f376.png?v8", - salt:"https://github.githubassets.com/images/icons/emoji/unicode/1f9c2.png?v8", - samoa:"https://github.githubassets.com/images/icons/emoji/unicode/1f1fc-1f1f8.png?v8", - san_marino:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1f2.png?v8", - sandal:"https://github.githubassets.com/images/icons/emoji/unicode/1f461.png?v8", - sandwich:"https://github.githubassets.com/images/icons/emoji/unicode/1f96a.png?v8", - santa:"https://github.githubassets.com/images/icons/emoji/unicode/1f385.png?v8", - sao_tome_principe:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1f9.png?v8", - sari:"https://github.githubassets.com/images/icons/emoji/unicode/1f97b.png?v8", - sassy_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f481-2642.png?v8", - sassy_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f481-2640.png?v8", - satellite:"https://github.githubassets.com/images/icons/emoji/unicode/1f4e1.png?v8", - satisfied:"https://github.githubassets.com/images/icons/emoji/unicode/1f606.png?v8", - saudi_arabia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1e6.png?v8", - sauna_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d6-2642.png?v8", - sauna_person:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d6.png?v8", - sauna_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d6-2640.png?v8", - sauropod:"https://github.githubassets.com/images/icons/emoji/unicode/1f995.png?v8", - saxophone:"https://github.githubassets.com/images/icons/emoji/unicode/1f3b7.png?v8", - scarf:"https://github.githubassets.com/images/icons/emoji/unicode/1f9e3.png?v8", - school:"https://github.githubassets.com/images/icons/emoji/unicode/1f3eb.png?v8", - school_satchel:"https://github.githubassets.com/images/icons/emoji/unicode/1f392.png?v8", - scientist:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f52c.png?v8", - scissors:"https://github.githubassets.com/images/icons/emoji/unicode/2702.png?v8", - scorpion:"https://github.githubassets.com/images/icons/emoji/unicode/1f982.png?v8", - scorpius:"https://github.githubassets.com/images/icons/emoji/unicode/264f.png?v8", - scotland:"https://github.githubassets.com/images/icons/emoji/unicode/1f3f4-e0067-e0062-e0073-e0063-e0074-e007f.png?v8", - scream:"https://github.githubassets.com/images/icons/emoji/unicode/1f631.png?v8", - scream_cat:"https://github.githubassets.com/images/icons/emoji/unicode/1f640.png?v8", - scroll:"https://github.githubassets.com/images/icons/emoji/unicode/1f4dc.png?v8", - seat:"https://github.githubassets.com/images/icons/emoji/unicode/1f4ba.png?v8", - secret:"https://github.githubassets.com/images/icons/emoji/unicode/3299.png?v8", - see_no_evil:"https://github.githubassets.com/images/icons/emoji/unicode/1f648.png?v8", - seedling:"https://github.githubassets.com/images/icons/emoji/unicode/1f331.png?v8", - selfie:"https://github.githubassets.com/images/icons/emoji/unicode/1f933.png?v8", - senegal:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1f3.png?v8", - serbia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f7-1f1f8.png?v8", - service_dog:"https://github.githubassets.com/images/icons/emoji/unicode/1f415-1f9ba.png?v8", - seven:"https://github.githubassets.com/images/icons/emoji/unicode/0037-20e3.png?v8", - seychelles:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1e8.png?v8", - shallow_pan_of_food:"https://github.githubassets.com/images/icons/emoji/unicode/1f958.png?v8", - shamrock:"https://github.githubassets.com/images/icons/emoji/unicode/2618.png?v8", - shark:"https://github.githubassets.com/images/icons/emoji/unicode/1f988.png?v8", - shaved_ice:"https://github.githubassets.com/images/icons/emoji/unicode/1f367.png?v8", - sheep:"https://github.githubassets.com/images/icons/emoji/unicode/1f411.png?v8", - shell:"https://github.githubassets.com/images/icons/emoji/unicode/1f41a.png?v8", - shield:"https://github.githubassets.com/images/icons/emoji/unicode/1f6e1.png?v8", - shinto_shrine:"https://github.githubassets.com/images/icons/emoji/unicode/26e9.png?v8", - ship:"https://github.githubassets.com/images/icons/emoji/unicode/1f6a2.png?v8", - shipit:"https://github.githubassets.com/images/icons/emoji/shipit.png?v8", - shirt:"https://github.githubassets.com/images/icons/emoji/unicode/1f455.png?v8", - shit:"https://github.githubassets.com/images/icons/emoji/unicode/1f4a9.png?v8", - shoe:"https://github.githubassets.com/images/icons/emoji/unicode/1f45e.png?v8", - shopping:"https://github.githubassets.com/images/icons/emoji/unicode/1f6cd.png?v8", - shopping_cart:"https://github.githubassets.com/images/icons/emoji/unicode/1f6d2.png?v8", - shorts:"https://github.githubassets.com/images/icons/emoji/unicode/1fa73.png?v8", - shower:"https://github.githubassets.com/images/icons/emoji/unicode/1f6bf.png?v8", - shrimp:"https://github.githubassets.com/images/icons/emoji/unicode/1f990.png?v8", - shrug:"https://github.githubassets.com/images/icons/emoji/unicode/1f937.png?v8", - shushing_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f92b.png?v8", - sierra_leone:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1f1.png?v8", - signal_strength:"https://github.githubassets.com/images/icons/emoji/unicode/1f4f6.png?v8", - singapore:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1ec.png?v8", - singer:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f3a4.png?v8", - sint_maarten:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1fd.png?v8", - six:"https://github.githubassets.com/images/icons/emoji/unicode/0036-20e3.png?v8", - six_pointed_star:"https://github.githubassets.com/images/icons/emoji/unicode/1f52f.png?v8", - skateboard:"https://github.githubassets.com/images/icons/emoji/unicode/1f6f9.png?v8", - ski:"https://github.githubassets.com/images/icons/emoji/unicode/1f3bf.png?v8", - skier:"https://github.githubassets.com/images/icons/emoji/unicode/26f7.png?v8", - skull:"https://github.githubassets.com/images/icons/emoji/unicode/1f480.png?v8", - skull_and_crossbones:"https://github.githubassets.com/images/icons/emoji/unicode/2620.png?v8", - skunk:"https://github.githubassets.com/images/icons/emoji/unicode/1f9a8.png?v8", - sled:"https://github.githubassets.com/images/icons/emoji/unicode/1f6f7.png?v8", - sleeping:"https://github.githubassets.com/images/icons/emoji/unicode/1f634.png?v8", - sleeping_bed:"https://github.githubassets.com/images/icons/emoji/unicode/1f6cc.png?v8", - sleepy:"https://github.githubassets.com/images/icons/emoji/unicode/1f62a.png?v8", - slightly_frowning_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f641.png?v8", - slightly_smiling_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f642.png?v8", - slot_machine:"https://github.githubassets.com/images/icons/emoji/unicode/1f3b0.png?v8", - sloth:"https://github.githubassets.com/images/icons/emoji/unicode/1f9a5.png?v8", - slovakia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1f0.png?v8", - slovenia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1ee.png?v8", - small_airplane:"https://github.githubassets.com/images/icons/emoji/unicode/1f6e9.png?v8", - small_blue_diamond:"https://github.githubassets.com/images/icons/emoji/unicode/1f539.png?v8", - small_orange_diamond:"https://github.githubassets.com/images/icons/emoji/unicode/1f538.png?v8", - small_red_triangle:"https://github.githubassets.com/images/icons/emoji/unicode/1f53a.png?v8", - small_red_triangle_down:"https://github.githubassets.com/images/icons/emoji/unicode/1f53b.png?v8", - smile:"https://github.githubassets.com/images/icons/emoji/unicode/1f604.png?v8", - smile_cat:"https://github.githubassets.com/images/icons/emoji/unicode/1f638.png?v8", - smiley:"https://github.githubassets.com/images/icons/emoji/unicode/1f603.png?v8", - smiley_cat:"https://github.githubassets.com/images/icons/emoji/unicode/1f63a.png?v8", - smiling_face_with_three_hearts:"https://github.githubassets.com/images/icons/emoji/unicode/1f970.png?v8", - smiling_imp:"https://github.githubassets.com/images/icons/emoji/unicode/1f608.png?v8", - smirk:"https://github.githubassets.com/images/icons/emoji/unicode/1f60f.png?v8", - smirk_cat:"https://github.githubassets.com/images/icons/emoji/unicode/1f63c.png?v8", - smoking:"https://github.githubassets.com/images/icons/emoji/unicode/1f6ac.png?v8", - snail:"https://github.githubassets.com/images/icons/emoji/unicode/1f40c.png?v8", - snake:"https://github.githubassets.com/images/icons/emoji/unicode/1f40d.png?v8", - sneezing_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f927.png?v8", - snowboarder:"https://github.githubassets.com/images/icons/emoji/unicode/1f3c2.png?v8", - snowflake:"https://github.githubassets.com/images/icons/emoji/unicode/2744.png?v8", - snowman:"https://github.githubassets.com/images/icons/emoji/unicode/26c4.png?v8", - snowman_with_snow:"https://github.githubassets.com/images/icons/emoji/unicode/2603.png?v8", - soap:"https://github.githubassets.com/images/icons/emoji/unicode/1f9fc.png?v8", - sob:"https://github.githubassets.com/images/icons/emoji/unicode/1f62d.png?v8", - soccer:"https://github.githubassets.com/images/icons/emoji/unicode/26bd.png?v8", - socks:"https://github.githubassets.com/images/icons/emoji/unicode/1f9e6.png?v8", - softball:"https://github.githubassets.com/images/icons/emoji/unicode/1f94e.png?v8", - solomon_islands:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1e7.png?v8", - somalia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1f4.png?v8", - soon:"https://github.githubassets.com/images/icons/emoji/unicode/1f51c.png?v8", - sos:"https://github.githubassets.com/images/icons/emoji/unicode/1f198.png?v8", - sound:"https://github.githubassets.com/images/icons/emoji/unicode/1f509.png?v8", - south_africa:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ff-1f1e6.png?v8", - south_georgia_south_sandwich_islands:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1f8.png?v8", - south_sudan:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1f8.png?v8", - space_invader:"https://github.githubassets.com/images/icons/emoji/unicode/1f47e.png?v8", - spades:"https://github.githubassets.com/images/icons/emoji/unicode/2660.png?v8", - spaghetti:"https://github.githubassets.com/images/icons/emoji/unicode/1f35d.png?v8", - sparkle:"https://github.githubassets.com/images/icons/emoji/unicode/2747.png?v8", - sparkler:"https://github.githubassets.com/images/icons/emoji/unicode/1f387.png?v8", - sparkles:"https://github.githubassets.com/images/icons/emoji/unicode/2728.png?v8", - sparkling_heart:"https://github.githubassets.com/images/icons/emoji/unicode/1f496.png?v8", - speak_no_evil:"https://github.githubassets.com/images/icons/emoji/unicode/1f64a.png?v8", - speaker:"https://github.githubassets.com/images/icons/emoji/unicode/1f508.png?v8", - speaking_head:"https://github.githubassets.com/images/icons/emoji/unicode/1f5e3.png?v8", - speech_balloon:"https://github.githubassets.com/images/icons/emoji/unicode/1f4ac.png?v8", - speedboat:"https://github.githubassets.com/images/icons/emoji/unicode/1f6a4.png?v8", - spider:"https://github.githubassets.com/images/icons/emoji/unicode/1f577.png?v8", - spider_web:"https://github.githubassets.com/images/icons/emoji/unicode/1f578.png?v8", - spiral_calendar:"https://github.githubassets.com/images/icons/emoji/unicode/1f5d3.png?v8", - spiral_notepad:"https://github.githubassets.com/images/icons/emoji/unicode/1f5d2.png?v8", - sponge:"https://github.githubassets.com/images/icons/emoji/unicode/1f9fd.png?v8", - spoon:"https://github.githubassets.com/images/icons/emoji/unicode/1f944.png?v8", - squid:"https://github.githubassets.com/images/icons/emoji/unicode/1f991.png?v8", - sri_lanka:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1f0.png?v8", - st_barthelemy:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1f1.png?v8", - st_helena:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1ed.png?v8", - st_kitts_nevis:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1f3.png?v8", - st_lucia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1e8.png?v8", - st_martin:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1eb.png?v8", - st_pierre_miquelon:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1f2.png?v8", - st_vincent_grenadines:"https://github.githubassets.com/images/icons/emoji/unicode/1f1fb-1f1e8.png?v8", - stadium:"https://github.githubassets.com/images/icons/emoji/unicode/1f3df.png?v8", - standing_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f9cd-2642.png?v8", - standing_person:"https://github.githubassets.com/images/icons/emoji/unicode/1f9cd.png?v8", - standing_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f9cd-2640.png?v8", - star:"https://github.githubassets.com/images/icons/emoji/unicode/2b50.png?v8", - star2:"https://github.githubassets.com/images/icons/emoji/unicode/1f31f.png?v8", - star_and_crescent:"https://github.githubassets.com/images/icons/emoji/unicode/262a.png?v8", - star_of_david:"https://github.githubassets.com/images/icons/emoji/unicode/2721.png?v8", - star_struck:"https://github.githubassets.com/images/icons/emoji/unicode/1f929.png?v8", - stars:"https://github.githubassets.com/images/icons/emoji/unicode/1f320.png?v8", - station:"https://github.githubassets.com/images/icons/emoji/unicode/1f689.png?v8", - statue_of_liberty:"https://github.githubassets.com/images/icons/emoji/unicode/1f5fd.png?v8", - steam_locomotive:"https://github.githubassets.com/images/icons/emoji/unicode/1f682.png?v8", - stethoscope:"https://github.githubassets.com/images/icons/emoji/unicode/1fa7a.png?v8", - stew:"https://github.githubassets.com/images/icons/emoji/unicode/1f372.png?v8", - stop_button:"https://github.githubassets.com/images/icons/emoji/unicode/23f9.png?v8", - stop_sign:"https://github.githubassets.com/images/icons/emoji/unicode/1f6d1.png?v8", - stopwatch:"https://github.githubassets.com/images/icons/emoji/unicode/23f1.png?v8", - straight_ruler:"https://github.githubassets.com/images/icons/emoji/unicode/1f4cf.png?v8", - strawberry:"https://github.githubassets.com/images/icons/emoji/unicode/1f353.png?v8", - stuck_out_tongue:"https://github.githubassets.com/images/icons/emoji/unicode/1f61b.png?v8", - stuck_out_tongue_closed_eyes:"https://github.githubassets.com/images/icons/emoji/unicode/1f61d.png?v8", - stuck_out_tongue_winking_eye:"https://github.githubassets.com/images/icons/emoji/unicode/1f61c.png?v8", - student:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f393.png?v8", - studio_microphone:"https://github.githubassets.com/images/icons/emoji/unicode/1f399.png?v8", - stuffed_flatbread:"https://github.githubassets.com/images/icons/emoji/unicode/1f959.png?v8", - sudan:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1e9.png?v8", - sun_behind_large_cloud:"https://github.githubassets.com/images/icons/emoji/unicode/1f325.png?v8", - sun_behind_rain_cloud:"https://github.githubassets.com/images/icons/emoji/unicode/1f326.png?v8", - sun_behind_small_cloud:"https://github.githubassets.com/images/icons/emoji/unicode/1f324.png?v8", - sun_with_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f31e.png?v8", - sunflower:"https://github.githubassets.com/images/icons/emoji/unicode/1f33b.png?v8", - sunglasses:"https://github.githubassets.com/images/icons/emoji/unicode/1f60e.png?v8", - sunny:"https://github.githubassets.com/images/icons/emoji/unicode/2600.png?v8", - sunrise:"https://github.githubassets.com/images/icons/emoji/unicode/1f305.png?v8", - sunrise_over_mountains:"https://github.githubassets.com/images/icons/emoji/unicode/1f304.png?v8", - superhero:"https://github.githubassets.com/images/icons/emoji/unicode/1f9b8.png?v8", - superhero_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f9b8-2642.png?v8", - superhero_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f9b8-2640.png?v8", - supervillain:"https://github.githubassets.com/images/icons/emoji/unicode/1f9b9.png?v8", - supervillain_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f9b9-2642.png?v8", - supervillain_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f9b9-2640.png?v8", - surfer:"https://github.githubassets.com/images/icons/emoji/unicode/1f3c4.png?v8", - surfing_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f3c4-2642.png?v8", - surfing_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f3c4-2640.png?v8", - suriname:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1f7.png?v8", - sushi:"https://github.githubassets.com/images/icons/emoji/unicode/1f363.png?v8", - suspect:"https://github.githubassets.com/images/icons/emoji/suspect.png?v8", - suspension_railway:"https://github.githubassets.com/images/icons/emoji/unicode/1f69f.png?v8", - svalbard_jan_mayen:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1ef.png?v8", - swan:"https://github.githubassets.com/images/icons/emoji/unicode/1f9a2.png?v8", - swaziland:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1ff.png?v8", - sweat:"https://github.githubassets.com/images/icons/emoji/unicode/1f613.png?v8", - sweat_drops:"https://github.githubassets.com/images/icons/emoji/unicode/1f4a6.png?v8", - sweat_smile:"https://github.githubassets.com/images/icons/emoji/unicode/1f605.png?v8", - sweden:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1ea.png?v8", - sweet_potato:"https://github.githubassets.com/images/icons/emoji/unicode/1f360.png?v8", - swim_brief:"https://github.githubassets.com/images/icons/emoji/unicode/1fa72.png?v8", - swimmer:"https://github.githubassets.com/images/icons/emoji/unicode/1f3ca.png?v8", - swimming_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f3ca-2642.png?v8", - swimming_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f3ca-2640.png?v8", - switzerland:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1ed.png?v8", - symbols:"https://github.githubassets.com/images/icons/emoji/unicode/1f523.png?v8", - synagogue:"https://github.githubassets.com/images/icons/emoji/unicode/1f54d.png?v8", - syria:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1fe.png?v8", - syringe:"https://github.githubassets.com/images/icons/emoji/unicode/1f489.png?v8", - "t-rex":"https://github.githubassets.com/images/icons/emoji/unicode/1f996.png?v8", - taco:"https://github.githubassets.com/images/icons/emoji/unicode/1f32e.png?v8", - tada:"https://github.githubassets.com/images/icons/emoji/unicode/1f389.png?v8", - taiwan:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1fc.png?v8", - tajikistan:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1ef.png?v8", - takeout_box:"https://github.githubassets.com/images/icons/emoji/unicode/1f961.png?v8", - tanabata_tree:"https://github.githubassets.com/images/icons/emoji/unicode/1f38b.png?v8", - tangerine:"https://github.githubassets.com/images/icons/emoji/unicode/1f34a.png?v8", - tanzania:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1ff.png?v8", - taurus:"https://github.githubassets.com/images/icons/emoji/unicode/2649.png?v8", - taxi:"https://github.githubassets.com/images/icons/emoji/unicode/1f695.png?v8", - tea:"https://github.githubassets.com/images/icons/emoji/unicode/1f375.png?v8", - teacher:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f3eb.png?v8", - technologist:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f4bb.png?v8", - teddy_bear:"https://github.githubassets.com/images/icons/emoji/unicode/1f9f8.png?v8", - telephone:"https://github.githubassets.com/images/icons/emoji/unicode/260e.png?v8", - telephone_receiver:"https://github.githubassets.com/images/icons/emoji/unicode/1f4de.png?v8", - telescope:"https://github.githubassets.com/images/icons/emoji/unicode/1f52d.png?v8", - tennis:"https://github.githubassets.com/images/icons/emoji/unicode/1f3be.png?v8", - tent:"https://github.githubassets.com/images/icons/emoji/unicode/26fa.png?v8", - test_tube:"https://github.githubassets.com/images/icons/emoji/unicode/1f9ea.png?v8", - thailand:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1ed.png?v8", - thermometer:"https://github.githubassets.com/images/icons/emoji/unicode/1f321.png?v8", - thinking:"https://github.githubassets.com/images/icons/emoji/unicode/1f914.png?v8", - thought_balloon:"https://github.githubassets.com/images/icons/emoji/unicode/1f4ad.png?v8", - thread:"https://github.githubassets.com/images/icons/emoji/unicode/1f9f5.png?v8", - three:"https://github.githubassets.com/images/icons/emoji/unicode/0033-20e3.png?v8", - thumbsdown:"https://github.githubassets.com/images/icons/emoji/unicode/1f44e.png?v8", - thumbsup:"https://github.githubassets.com/images/icons/emoji/unicode/1f44d.png?v8", - ticket:"https://github.githubassets.com/images/icons/emoji/unicode/1f3ab.png?v8", - tickets:"https://github.githubassets.com/images/icons/emoji/unicode/1f39f.png?v8", - tiger:"https://github.githubassets.com/images/icons/emoji/unicode/1f42f.png?v8", - tiger2:"https://github.githubassets.com/images/icons/emoji/unicode/1f405.png?v8", - timer_clock:"https://github.githubassets.com/images/icons/emoji/unicode/23f2.png?v8", - timor_leste:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1f1.png?v8", - tipping_hand_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f481-2642.png?v8", - tipping_hand_person:"https://github.githubassets.com/images/icons/emoji/unicode/1f481.png?v8", - tipping_hand_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f481-2640.png?v8", - tired_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f62b.png?v8", - tm:"https://github.githubassets.com/images/icons/emoji/unicode/2122.png?v8", - togo:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1ec.png?v8", - toilet:"https://github.githubassets.com/images/icons/emoji/unicode/1f6bd.png?v8", - tokelau:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1f0.png?v8", - tokyo_tower:"https://github.githubassets.com/images/icons/emoji/unicode/1f5fc.png?v8", - tomato:"https://github.githubassets.com/images/icons/emoji/unicode/1f345.png?v8", - tonga:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1f4.png?v8", - tongue:"https://github.githubassets.com/images/icons/emoji/unicode/1f445.png?v8", - toolbox:"https://github.githubassets.com/images/icons/emoji/unicode/1f9f0.png?v8", - tooth:"https://github.githubassets.com/images/icons/emoji/unicode/1f9b7.png?v8", - top:"https://github.githubassets.com/images/icons/emoji/unicode/1f51d.png?v8", - tophat:"https://github.githubassets.com/images/icons/emoji/unicode/1f3a9.png?v8", - tornado:"https://github.githubassets.com/images/icons/emoji/unicode/1f32a.png?v8", - tr:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1f7.png?v8", - trackball:"https://github.githubassets.com/images/icons/emoji/unicode/1f5b2.png?v8", - tractor:"https://github.githubassets.com/images/icons/emoji/unicode/1f69c.png?v8", - traffic_light:"https://github.githubassets.com/images/icons/emoji/unicode/1f6a5.png?v8", - train:"https://github.githubassets.com/images/icons/emoji/unicode/1f68b.png?v8", - train2:"https://github.githubassets.com/images/icons/emoji/unicode/1f686.png?v8", - tram:"https://github.githubassets.com/images/icons/emoji/unicode/1f68a.png?v8", - triangular_flag_on_post:"https://github.githubassets.com/images/icons/emoji/unicode/1f6a9.png?v8", - triangular_ruler:"https://github.githubassets.com/images/icons/emoji/unicode/1f4d0.png?v8", - trident:"https://github.githubassets.com/images/icons/emoji/unicode/1f531.png?v8", - trinidad_tobago:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1f9.png?v8", - tristan_da_cunha:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1e6.png?v8", - triumph:"https://github.githubassets.com/images/icons/emoji/unicode/1f624.png?v8", - trolleybus:"https://github.githubassets.com/images/icons/emoji/unicode/1f68e.png?v8", - trollface:"https://github.githubassets.com/images/icons/emoji/trollface.png?v8", - trophy:"https://github.githubassets.com/images/icons/emoji/unicode/1f3c6.png?v8", - tropical_drink:"https://github.githubassets.com/images/icons/emoji/unicode/1f379.png?v8", - tropical_fish:"https://github.githubassets.com/images/icons/emoji/unicode/1f420.png?v8", - truck:"https://github.githubassets.com/images/icons/emoji/unicode/1f69a.png?v8", - trumpet:"https://github.githubassets.com/images/icons/emoji/unicode/1f3ba.png?v8", - tshirt:"https://github.githubassets.com/images/icons/emoji/unicode/1f455.png?v8", - tulip:"https://github.githubassets.com/images/icons/emoji/unicode/1f337.png?v8", - tumbler_glass:"https://github.githubassets.com/images/icons/emoji/unicode/1f943.png?v8", - tunisia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1f3.png?v8", - turkey:"https://github.githubassets.com/images/icons/emoji/unicode/1f983.png?v8", - turkmenistan:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1f2.png?v8", - turks_caicos_islands:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1e8.png?v8", - turtle:"https://github.githubassets.com/images/icons/emoji/unicode/1f422.png?v8", - tuvalu:"https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1fb.png?v8", - tv:"https://github.githubassets.com/images/icons/emoji/unicode/1f4fa.png?v8", - twisted_rightwards_arrows:"https://github.githubassets.com/images/icons/emoji/unicode/1f500.png?v8", - two:"https://github.githubassets.com/images/icons/emoji/unicode/0032-20e3.png?v8", - two_hearts:"https://github.githubassets.com/images/icons/emoji/unicode/1f495.png?v8", - two_men_holding_hands:"https://github.githubassets.com/images/icons/emoji/unicode/1f46c.png?v8", - two_women_holding_hands:"https://github.githubassets.com/images/icons/emoji/unicode/1f46d.png?v8", - u5272:"https://github.githubassets.com/images/icons/emoji/unicode/1f239.png?v8", - u5408:"https://github.githubassets.com/images/icons/emoji/unicode/1f234.png?v8", - u55b6:"https://github.githubassets.com/images/icons/emoji/unicode/1f23a.png?v8", - u6307:"https://github.githubassets.com/images/icons/emoji/unicode/1f22f.png?v8", - u6708:"https://github.githubassets.com/images/icons/emoji/unicode/1f237.png?v8", - u6709:"https://github.githubassets.com/images/icons/emoji/unicode/1f236.png?v8", - u6e80:"https://github.githubassets.com/images/icons/emoji/unicode/1f235.png?v8", - u7121:"https://github.githubassets.com/images/icons/emoji/unicode/1f21a.png?v8", - u7533:"https://github.githubassets.com/images/icons/emoji/unicode/1f238.png?v8", - u7981:"https://github.githubassets.com/images/icons/emoji/unicode/1f232.png?v8", - u7a7a:"https://github.githubassets.com/images/icons/emoji/unicode/1f233.png?v8", - uganda:"https://github.githubassets.com/images/icons/emoji/unicode/1f1fa-1f1ec.png?v8", - uk:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1e7.png?v8", - ukraine:"https://github.githubassets.com/images/icons/emoji/unicode/1f1fa-1f1e6.png?v8", - umbrella:"https://github.githubassets.com/images/icons/emoji/unicode/2614.png?v8", - unamused:"https://github.githubassets.com/images/icons/emoji/unicode/1f612.png?v8", - underage:"https://github.githubassets.com/images/icons/emoji/unicode/1f51e.png?v8", - unicorn:"https://github.githubassets.com/images/icons/emoji/unicode/1f984.png?v8", - united_arab_emirates:"https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1ea.png?v8", - united_nations:"https://github.githubassets.com/images/icons/emoji/unicode/1f1fa-1f1f3.png?v8", - unlock:"https://github.githubassets.com/images/icons/emoji/unicode/1f513.png?v8", - up:"https://github.githubassets.com/images/icons/emoji/unicode/1f199.png?v8", - upside_down_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f643.png?v8", - uruguay:"https://github.githubassets.com/images/icons/emoji/unicode/1f1fa-1f1fe.png?v8", - us:"https://github.githubassets.com/images/icons/emoji/unicode/1f1fa-1f1f8.png?v8", - us_outlying_islands:"https://github.githubassets.com/images/icons/emoji/unicode/1f1fa-1f1f2.png?v8", - us_virgin_islands:"https://github.githubassets.com/images/icons/emoji/unicode/1f1fb-1f1ee.png?v8", - uzbekistan:"https://github.githubassets.com/images/icons/emoji/unicode/1f1fa-1f1ff.png?v8", - v:"https://github.githubassets.com/images/icons/emoji/unicode/270c.png?v8", - vampire:"https://github.githubassets.com/images/icons/emoji/unicode/1f9db.png?v8", - vampire_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f9db-2642.png?v8", - vampire_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f9db-2640.png?v8", - vanuatu:"https://github.githubassets.com/images/icons/emoji/unicode/1f1fb-1f1fa.png?v8", - vatican_city:"https://github.githubassets.com/images/icons/emoji/unicode/1f1fb-1f1e6.png?v8", - venezuela:"https://github.githubassets.com/images/icons/emoji/unicode/1f1fb-1f1ea.png?v8", - vertical_traffic_light:"https://github.githubassets.com/images/icons/emoji/unicode/1f6a6.png?v8", - vhs:"https://github.githubassets.com/images/icons/emoji/unicode/1f4fc.png?v8", - vibration_mode:"https://github.githubassets.com/images/icons/emoji/unicode/1f4f3.png?v8", - video_camera:"https://github.githubassets.com/images/icons/emoji/unicode/1f4f9.png?v8", - video_game:"https://github.githubassets.com/images/icons/emoji/unicode/1f3ae.png?v8", - vietnam:"https://github.githubassets.com/images/icons/emoji/unicode/1f1fb-1f1f3.png?v8", - violin:"https://github.githubassets.com/images/icons/emoji/unicode/1f3bb.png?v8", - virgo:"https://github.githubassets.com/images/icons/emoji/unicode/264d.png?v8", - volcano:"https://github.githubassets.com/images/icons/emoji/unicode/1f30b.png?v8", - volleyball:"https://github.githubassets.com/images/icons/emoji/unicode/1f3d0.png?v8", - vomiting_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f92e.png?v8", - vs:"https://github.githubassets.com/images/icons/emoji/unicode/1f19a.png?v8", - vulcan_salute:"https://github.githubassets.com/images/icons/emoji/unicode/1f596.png?v8", - waffle:"https://github.githubassets.com/images/icons/emoji/unicode/1f9c7.png?v8", - wales:"https://github.githubassets.com/images/icons/emoji/unicode/1f3f4-e0067-e0062-e0077-e006c-e0073-e007f.png?v8", - walking:"https://github.githubassets.com/images/icons/emoji/unicode/1f6b6.png?v8", - walking_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f6b6-2642.png?v8", - walking_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f6b6-2640.png?v8", - wallis_futuna:"https://github.githubassets.com/images/icons/emoji/unicode/1f1fc-1f1eb.png?v8", - waning_crescent_moon:"https://github.githubassets.com/images/icons/emoji/unicode/1f318.png?v8", - waning_gibbous_moon:"https://github.githubassets.com/images/icons/emoji/unicode/1f316.png?v8", - warning:"https://github.githubassets.com/images/icons/emoji/unicode/26a0.png?v8", - wastebasket:"https://github.githubassets.com/images/icons/emoji/unicode/1f5d1.png?v8", - watch:"https://github.githubassets.com/images/icons/emoji/unicode/231a.png?v8", - water_buffalo:"https://github.githubassets.com/images/icons/emoji/unicode/1f403.png?v8", - water_polo:"https://github.githubassets.com/images/icons/emoji/unicode/1f93d.png?v8", - watermelon:"https://github.githubassets.com/images/icons/emoji/unicode/1f349.png?v8", - wave:"https://github.githubassets.com/images/icons/emoji/unicode/1f44b.png?v8", - wavy_dash:"https://github.githubassets.com/images/icons/emoji/unicode/3030.png?v8", - waxing_crescent_moon:"https://github.githubassets.com/images/icons/emoji/unicode/1f312.png?v8", - waxing_gibbous_moon:"https://github.githubassets.com/images/icons/emoji/unicode/1f314.png?v8", - wc:"https://github.githubassets.com/images/icons/emoji/unicode/1f6be.png?v8", - weary:"https://github.githubassets.com/images/icons/emoji/unicode/1f629.png?v8", - wedding:"https://github.githubassets.com/images/icons/emoji/unicode/1f492.png?v8", - weight_lifting:"https://github.githubassets.com/images/icons/emoji/unicode/1f3cb.png?v8", - weight_lifting_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f3cb-2642.png?v8", - weight_lifting_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f3cb-2640.png?v8", - western_sahara:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1ed.png?v8", - whale:"https://github.githubassets.com/images/icons/emoji/unicode/1f433.png?v8", - whale2:"https://github.githubassets.com/images/icons/emoji/unicode/1f40b.png?v8", - wheel_of_dharma:"https://github.githubassets.com/images/icons/emoji/unicode/2638.png?v8", - wheelchair:"https://github.githubassets.com/images/icons/emoji/unicode/267f.png?v8", - white_check_mark:"https://github.githubassets.com/images/icons/emoji/unicode/2705.png?v8", - white_circle:"https://github.githubassets.com/images/icons/emoji/unicode/26aa.png?v8", - white_flag:"https://github.githubassets.com/images/icons/emoji/unicode/1f3f3.png?v8", - white_flower:"https://github.githubassets.com/images/icons/emoji/unicode/1f4ae.png?v8", - white_haired_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f9b3.png?v8", - white_haired_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f9b3.png?v8", - white_heart:"https://github.githubassets.com/images/icons/emoji/unicode/1f90d.png?v8", - white_large_square:"https://github.githubassets.com/images/icons/emoji/unicode/2b1c.png?v8", - white_medium_small_square:"https://github.githubassets.com/images/icons/emoji/unicode/25fd.png?v8", - white_medium_square:"https://github.githubassets.com/images/icons/emoji/unicode/25fb.png?v8", - white_small_square:"https://github.githubassets.com/images/icons/emoji/unicode/25ab.png?v8", - white_square_button:"https://github.githubassets.com/images/icons/emoji/unicode/1f533.png?v8", - wilted_flower:"https://github.githubassets.com/images/icons/emoji/unicode/1f940.png?v8", - wind_chime:"https://github.githubassets.com/images/icons/emoji/unicode/1f390.png?v8", - wind_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f32c.png?v8", - wine_glass:"https://github.githubassets.com/images/icons/emoji/unicode/1f377.png?v8", - wink:"https://github.githubassets.com/images/icons/emoji/unicode/1f609.png?v8", - wolf:"https://github.githubassets.com/images/icons/emoji/unicode/1f43a.png?v8", - woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f469.png?v8", - woman_artist:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f3a8.png?v8", - woman_astronaut:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f680.png?v8", - woman_cartwheeling:"https://github.githubassets.com/images/icons/emoji/unicode/1f938-2640.png?v8", - woman_cook:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f373.png?v8", - woman_dancing:"https://github.githubassets.com/images/icons/emoji/unicode/1f483.png?v8", - woman_facepalming:"https://github.githubassets.com/images/icons/emoji/unicode/1f926-2640.png?v8", - woman_factory_worker:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f3ed.png?v8", - woman_farmer:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f33e.png?v8", - woman_firefighter:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f692.png?v8", - woman_health_worker:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-2695.png?v8", - woman_in_manual_wheelchair:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f9bd.png?v8", - woman_in_motorized_wheelchair:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f9bc.png?v8", - woman_judge:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-2696.png?v8", - woman_juggling:"https://github.githubassets.com/images/icons/emoji/unicode/1f939-2640.png?v8", - woman_mechanic:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f527.png?v8", - woman_office_worker:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f4bc.png?v8", - woman_pilot:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-2708.png?v8", - woman_playing_handball:"https://github.githubassets.com/images/icons/emoji/unicode/1f93e-2640.png?v8", - woman_playing_water_polo:"https://github.githubassets.com/images/icons/emoji/unicode/1f93d-2640.png?v8", - woman_scientist:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f52c.png?v8", - woman_shrugging:"https://github.githubassets.com/images/icons/emoji/unicode/1f937-2640.png?v8", - woman_singer:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f3a4.png?v8", - woman_student:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f393.png?v8", - woman_teacher:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f3eb.png?v8", - woman_technologist:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f4bb.png?v8", - woman_with_headscarf:"https://github.githubassets.com/images/icons/emoji/unicode/1f9d5.png?v8", - woman_with_probing_cane:"https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f9af.png?v8", - woman_with_turban:"https://github.githubassets.com/images/icons/emoji/unicode/1f473-2640.png?v8", - womans_clothes:"https://github.githubassets.com/images/icons/emoji/unicode/1f45a.png?v8", - womans_hat:"https://github.githubassets.com/images/icons/emoji/unicode/1f452.png?v8", - women_wrestling:"https://github.githubassets.com/images/icons/emoji/unicode/1f93c-2640.png?v8", - womens:"https://github.githubassets.com/images/icons/emoji/unicode/1f6ba.png?v8", - woozy_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f974.png?v8", - world_map:"https://github.githubassets.com/images/icons/emoji/unicode/1f5fa.png?v8", - worried:"https://github.githubassets.com/images/icons/emoji/unicode/1f61f.png?v8", - wrench:"https://github.githubassets.com/images/icons/emoji/unicode/1f527.png?v8", - wrestling:"https://github.githubassets.com/images/icons/emoji/unicode/1f93c.png?v8", - writing_hand:"https://github.githubassets.com/images/icons/emoji/unicode/270d.png?v8", - x:"https://github.githubassets.com/images/icons/emoji/unicode/274c.png?v8", - yarn:"https://github.githubassets.com/images/icons/emoji/unicode/1f9f6.png?v8", - yawning_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f971.png?v8", - yellow_circle:"https://github.githubassets.com/images/icons/emoji/unicode/1f7e1.png?v8", - yellow_heart:"https://github.githubassets.com/images/icons/emoji/unicode/1f49b.png?v8", - yellow_square:"https://github.githubassets.com/images/icons/emoji/unicode/1f7e8.png?v8", - yemen:"https://github.githubassets.com/images/icons/emoji/unicode/1f1fe-1f1ea.png?v8", - yen:"https://github.githubassets.com/images/icons/emoji/unicode/1f4b4.png?v8", - yin_yang:"https://github.githubassets.com/images/icons/emoji/unicode/262f.png?v8", - yo_yo:"https://github.githubassets.com/images/icons/emoji/unicode/1fa80.png?v8", - yum:"https://github.githubassets.com/images/icons/emoji/unicode/1f60b.png?v8", - zambia:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ff-1f1f2.png?v8", - zany_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f92a.png?v8", - zap:"https://github.githubassets.com/images/icons/emoji/unicode/26a1.png?v8", - zebra:"https://github.githubassets.com/images/icons/emoji/unicode/1f993.png?v8", - zero:"https://github.githubassets.com/images/icons/emoji/unicode/0030-20e3.png?v8", - zimbabwe:"https://github.githubassets.com/images/icons/emoji/unicode/1f1ff-1f1fc.png?v8", - zipper_mouth_face:"https://github.githubassets.com/images/icons/emoji/unicode/1f910.png?v8", - zombie:"https://github.githubassets.com/images/icons/emoji/unicode/1f9df.png?v8", - zombie_man:"https://github.githubassets.com/images/icons/emoji/unicode/1f9df-2642.png?v8", - zombie_woman:"https://github.githubassets.com/images/icons/emoji/unicode/1f9df-2640.png?v8", - zzz:"https://github.githubassets.com/images/icons/emoji/unicode/1f4a4.png?v8", + data: { + "100": "https://github.githubassets.com/images/icons/emoji/unicode/1f4af.png?v8", + "1234": "https://github.githubassets.com/images/icons/emoji/unicode/1f522.png?v8", + "+1": "https://github.githubassets.com/images/icons/emoji/unicode/1f44d.png?v8", + "-1": "https://github.githubassets.com/images/icons/emoji/unicode/1f44e.png?v8", + "1st_place_medal": "https://github.githubassets.com/images/icons/emoji/unicode/1f947.png?v8", + "2nd_place_medal": "https://github.githubassets.com/images/icons/emoji/unicode/1f948.png?v8", + "3rd_place_medal": "https://github.githubassets.com/images/icons/emoji/unicode/1f949.png?v8", + "8ball": "https://github.githubassets.com/images/icons/emoji/unicode/1f3b1.png?v8", + a: "https://github.githubassets.com/images/icons/emoji/unicode/1f170.png?v8", + ab: "https://github.githubassets.com/images/icons/emoji/unicode/1f18e.png?v8", + abacus: "https://github.githubassets.com/images/icons/emoji/unicode/1f9ee.png?v8", + abc: "https://github.githubassets.com/images/icons/emoji/unicode/1f524.png?v8", + abcd: "https://github.githubassets.com/images/icons/emoji/unicode/1f521.png?v8", + accept: "https://github.githubassets.com/images/icons/emoji/unicode/1f251.png?v8", + adhesive_bandage: "https://github.githubassets.com/images/icons/emoji/unicode/1fa79.png?v8", + adult: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d1.png?v8", + aerial_tramway: "https://github.githubassets.com/images/icons/emoji/unicode/1f6a1.png?v8", + afghanistan: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1eb.png?v8", + airplane: "https://github.githubassets.com/images/icons/emoji/unicode/2708.png?v8", + aland_islands: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1fd.png?v8", + alarm_clock: "https://github.githubassets.com/images/icons/emoji/unicode/23f0.png?v8", + albania: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1f1.png?v8", + alembic: "https://github.githubassets.com/images/icons/emoji/unicode/2697.png?v8", + algeria: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e9-1f1ff.png?v8", + alien: "https://github.githubassets.com/images/icons/emoji/unicode/1f47d.png?v8", + ambulance: "https://github.githubassets.com/images/icons/emoji/unicode/1f691.png?v8", + american_samoa: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1f8.png?v8", + amphora: "https://github.githubassets.com/images/icons/emoji/unicode/1f3fa.png?v8", + anchor: "https://github.githubassets.com/images/icons/emoji/unicode/2693.png?v8", + andorra: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1e9.png?v8", + angel: "https://github.githubassets.com/images/icons/emoji/unicode/1f47c.png?v8", + anger: "https://github.githubassets.com/images/icons/emoji/unicode/1f4a2.png?v8", + angola: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1f4.png?v8", + angry: "https://github.githubassets.com/images/icons/emoji/unicode/1f620.png?v8", + anguilla: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1ee.png?v8", + anguished: "https://github.githubassets.com/images/icons/emoji/unicode/1f627.png?v8", + ant: "https://github.githubassets.com/images/icons/emoji/unicode/1f41c.png?v8", + antarctica: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1f6.png?v8", + antigua_barbuda: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1ec.png?v8", + apple: "https://github.githubassets.com/images/icons/emoji/unicode/1f34e.png?v8", + aquarius: "https://github.githubassets.com/images/icons/emoji/unicode/2652.png?v8", + argentina: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1f7.png?v8", + aries: "https://github.githubassets.com/images/icons/emoji/unicode/2648.png?v8", + armenia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1f2.png?v8", + arrow_backward: "https://github.githubassets.com/images/icons/emoji/unicode/25c0.png?v8", + arrow_double_down: "https://github.githubassets.com/images/icons/emoji/unicode/23ec.png?v8", + arrow_double_up: "https://github.githubassets.com/images/icons/emoji/unicode/23eb.png?v8", + arrow_down: "https://github.githubassets.com/images/icons/emoji/unicode/2b07.png?v8", + arrow_down_small: "https://github.githubassets.com/images/icons/emoji/unicode/1f53d.png?v8", + arrow_forward: "https://github.githubassets.com/images/icons/emoji/unicode/25b6.png?v8", + arrow_heading_down: "https://github.githubassets.com/images/icons/emoji/unicode/2935.png?v8", + arrow_heading_up: "https://github.githubassets.com/images/icons/emoji/unicode/2934.png?v8", + arrow_left: "https://github.githubassets.com/images/icons/emoji/unicode/2b05.png?v8", + arrow_lower_left: "https://github.githubassets.com/images/icons/emoji/unicode/2199.png?v8", + arrow_lower_right: "https://github.githubassets.com/images/icons/emoji/unicode/2198.png?v8", + arrow_right: "https://github.githubassets.com/images/icons/emoji/unicode/27a1.png?v8", + arrow_right_hook: "https://github.githubassets.com/images/icons/emoji/unicode/21aa.png?v8", + arrow_up: "https://github.githubassets.com/images/icons/emoji/unicode/2b06.png?v8", + arrow_up_down: "https://github.githubassets.com/images/icons/emoji/unicode/2195.png?v8", + arrow_up_small: "https://github.githubassets.com/images/icons/emoji/unicode/1f53c.png?v8", + arrow_upper_left: "https://github.githubassets.com/images/icons/emoji/unicode/2196.png?v8", + arrow_upper_right: "https://github.githubassets.com/images/icons/emoji/unicode/2197.png?v8", + arrows_clockwise: "https://github.githubassets.com/images/icons/emoji/unicode/1f503.png?v8", + arrows_counterclockwise: "https://github.githubassets.com/images/icons/emoji/unicode/1f504.png?v8", + art: "https://github.githubassets.com/images/icons/emoji/unicode/1f3a8.png?v8", + articulated_lorry: "https://github.githubassets.com/images/icons/emoji/unicode/1f69b.png?v8", + artificial_satellite: "https://github.githubassets.com/images/icons/emoji/unicode/1f6f0.png?v8", + artist: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f3a8.png?v8", + aruba: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1fc.png?v8", + ascension_island: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1e8.png?v8", + asterisk: "https://github.githubassets.com/images/icons/emoji/unicode/002a-20e3.png?v8", + astonished: "https://github.githubassets.com/images/icons/emoji/unicode/1f632.png?v8", + astronaut: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f680.png?v8", + athletic_shoe: "https://github.githubassets.com/images/icons/emoji/unicode/1f45f.png?v8", + atm: "https://github.githubassets.com/images/icons/emoji/unicode/1f3e7.png?v8", + atom: "https://github.githubassets.com/images/icons/emoji/atom.png?v8", + atom_symbol: "https://github.githubassets.com/images/icons/emoji/unicode/269b.png?v8", + australia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1fa.png?v8", + austria: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1f9.png?v8", + auto_rickshaw: "https://github.githubassets.com/images/icons/emoji/unicode/1f6fa.png?v8", + avocado: "https://github.githubassets.com/images/icons/emoji/unicode/1f951.png?v8", + axe: "https://github.githubassets.com/images/icons/emoji/unicode/1fa93.png?v8", + azerbaijan: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1ff.png?v8", + b: "https://github.githubassets.com/images/icons/emoji/unicode/1f171.png?v8", + baby: "https://github.githubassets.com/images/icons/emoji/unicode/1f476.png?v8", + baby_bottle: "https://github.githubassets.com/images/icons/emoji/unicode/1f37c.png?v8", + baby_chick: "https://github.githubassets.com/images/icons/emoji/unicode/1f424.png?v8", + baby_symbol: "https://github.githubassets.com/images/icons/emoji/unicode/1f6bc.png?v8", + back: "https://github.githubassets.com/images/icons/emoji/unicode/1f519.png?v8", + bacon: "https://github.githubassets.com/images/icons/emoji/unicode/1f953.png?v8", + badger: "https://github.githubassets.com/images/icons/emoji/unicode/1f9a1.png?v8", + badminton: "https://github.githubassets.com/images/icons/emoji/unicode/1f3f8.png?v8", + bagel: "https://github.githubassets.com/images/icons/emoji/unicode/1f96f.png?v8", + baggage_claim: "https://github.githubassets.com/images/icons/emoji/unicode/1f6c4.png?v8", + baguette_bread: "https://github.githubassets.com/images/icons/emoji/unicode/1f956.png?v8", + bahamas: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1f8.png?v8", + bahrain: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1ed.png?v8", + balance_scale: "https://github.githubassets.com/images/icons/emoji/unicode/2696.png?v8", + bald_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f9b2.png?v8", + bald_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f9b2.png?v8", + ballet_shoes: "https://github.githubassets.com/images/icons/emoji/unicode/1fa70.png?v8", + balloon: "https://github.githubassets.com/images/icons/emoji/unicode/1f388.png?v8", + ballot_box: "https://github.githubassets.com/images/icons/emoji/unicode/1f5f3.png?v8", + ballot_box_with_check: "https://github.githubassets.com/images/icons/emoji/unicode/2611.png?v8", + bamboo: "https://github.githubassets.com/images/icons/emoji/unicode/1f38d.png?v8", + banana: "https://github.githubassets.com/images/icons/emoji/unicode/1f34c.png?v8", + bangbang: "https://github.githubassets.com/images/icons/emoji/unicode/203c.png?v8", + bangladesh: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1e9.png?v8", + banjo: "https://github.githubassets.com/images/icons/emoji/unicode/1fa95.png?v8", + bank: "https://github.githubassets.com/images/icons/emoji/unicode/1f3e6.png?v8", + bar_chart: "https://github.githubassets.com/images/icons/emoji/unicode/1f4ca.png?v8", + barbados: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1e7.png?v8", + barber: "https://github.githubassets.com/images/icons/emoji/unicode/1f488.png?v8", + baseball: "https://github.githubassets.com/images/icons/emoji/unicode/26be.png?v8", + basecamp: "https://github.githubassets.com/images/icons/emoji/basecamp.png?v8", + basecampy: "https://github.githubassets.com/images/icons/emoji/basecampy.png?v8", + basket: "https://github.githubassets.com/images/icons/emoji/unicode/1f9fa.png?v8", + basketball: "https://github.githubassets.com/images/icons/emoji/unicode/1f3c0.png?v8", + basketball_man: "https://github.githubassets.com/images/icons/emoji/unicode/26f9-2642.png?v8", + basketball_woman: "https://github.githubassets.com/images/icons/emoji/unicode/26f9-2640.png?v8", + bat: "https://github.githubassets.com/images/icons/emoji/unicode/1f987.png?v8", + bath: "https://github.githubassets.com/images/icons/emoji/unicode/1f6c0.png?v8", + bathtub: "https://github.githubassets.com/images/icons/emoji/unicode/1f6c1.png?v8", + battery: "https://github.githubassets.com/images/icons/emoji/unicode/1f50b.png?v8", + beach_umbrella: "https://github.githubassets.com/images/icons/emoji/unicode/1f3d6.png?v8", + bear: "https://github.githubassets.com/images/icons/emoji/unicode/1f43b.png?v8", + bearded_person: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d4.png?v8", + bed: "https://github.githubassets.com/images/icons/emoji/unicode/1f6cf.png?v8", + bee: "https://github.githubassets.com/images/icons/emoji/unicode/1f41d.png?v8", + beer: "https://github.githubassets.com/images/icons/emoji/unicode/1f37a.png?v8", + beers: "https://github.githubassets.com/images/icons/emoji/unicode/1f37b.png?v8", + beetle: "https://github.githubassets.com/images/icons/emoji/unicode/1f41e.png?v8", + beginner: "https://github.githubassets.com/images/icons/emoji/unicode/1f530.png?v8", + belarus: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1fe.png?v8", + belgium: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1ea.png?v8", + belize: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1ff.png?v8", + bell: "https://github.githubassets.com/images/icons/emoji/unicode/1f514.png?v8", + bellhop_bell: "https://github.githubassets.com/images/icons/emoji/unicode/1f6ce.png?v8", + benin: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1ef.png?v8", + bento: "https://github.githubassets.com/images/icons/emoji/unicode/1f371.png?v8", + bermuda: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1f2.png?v8", + beverage_box: "https://github.githubassets.com/images/icons/emoji/unicode/1f9c3.png?v8", + bhutan: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1f9.png?v8", + bicyclist: "https://github.githubassets.com/images/icons/emoji/unicode/1f6b4.png?v8", + bike: "https://github.githubassets.com/images/icons/emoji/unicode/1f6b2.png?v8", + biking_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f6b4-2642.png?v8", + biking_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f6b4-2640.png?v8", + bikini: "https://github.githubassets.com/images/icons/emoji/unicode/1f459.png?v8", + billed_cap: "https://github.githubassets.com/images/icons/emoji/unicode/1f9e2.png?v8", + biohazard: "https://github.githubassets.com/images/icons/emoji/unicode/2623.png?v8", + bird: "https://github.githubassets.com/images/icons/emoji/unicode/1f426.png?v8", + birthday: "https://github.githubassets.com/images/icons/emoji/unicode/1f382.png?v8", + black_circle: "https://github.githubassets.com/images/icons/emoji/unicode/26ab.png?v8", + black_flag: "https://github.githubassets.com/images/icons/emoji/unicode/1f3f4.png?v8", + black_heart: "https://github.githubassets.com/images/icons/emoji/unicode/1f5a4.png?v8", + black_joker: "https://github.githubassets.com/images/icons/emoji/unicode/1f0cf.png?v8", + black_large_square: "https://github.githubassets.com/images/icons/emoji/unicode/2b1b.png?v8", + black_medium_small_square: "https://github.githubassets.com/images/icons/emoji/unicode/25fe.png?v8", + black_medium_square: "https://github.githubassets.com/images/icons/emoji/unicode/25fc.png?v8", + black_nib: "https://github.githubassets.com/images/icons/emoji/unicode/2712.png?v8", + black_small_square: "https://github.githubassets.com/images/icons/emoji/unicode/25aa.png?v8", + black_square_button: "https://github.githubassets.com/images/icons/emoji/unicode/1f532.png?v8", + blond_haired_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f471-2642.png?v8", + blond_haired_person: "https://github.githubassets.com/images/icons/emoji/unicode/1f471.png?v8", + blond_haired_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f471-2640.png?v8", + blonde_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f471-2640.png?v8", + blossom: "https://github.githubassets.com/images/icons/emoji/unicode/1f33c.png?v8", + blowfish: "https://github.githubassets.com/images/icons/emoji/unicode/1f421.png?v8", + blue_book: "https://github.githubassets.com/images/icons/emoji/unicode/1f4d8.png?v8", + blue_car: "https://github.githubassets.com/images/icons/emoji/unicode/1f699.png?v8", + blue_heart: "https://github.githubassets.com/images/icons/emoji/unicode/1f499.png?v8", + blue_square: "https://github.githubassets.com/images/icons/emoji/unicode/1f7e6.png?v8", + blush: "https://github.githubassets.com/images/icons/emoji/unicode/1f60a.png?v8", + boar: "https://github.githubassets.com/images/icons/emoji/unicode/1f417.png?v8", + boat: "https://github.githubassets.com/images/icons/emoji/unicode/26f5.png?v8", + bolivia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1f4.png?v8", + bomb: "https://github.githubassets.com/images/icons/emoji/unicode/1f4a3.png?v8", + bone: "https://github.githubassets.com/images/icons/emoji/unicode/1f9b4.png?v8", + book: "https://github.githubassets.com/images/icons/emoji/unicode/1f4d6.png?v8", + bookmark: "https://github.githubassets.com/images/icons/emoji/unicode/1f516.png?v8", + bookmark_tabs: "https://github.githubassets.com/images/icons/emoji/unicode/1f4d1.png?v8", + books: "https://github.githubassets.com/images/icons/emoji/unicode/1f4da.png?v8", + boom: "https://github.githubassets.com/images/icons/emoji/unicode/1f4a5.png?v8", + boot: "https://github.githubassets.com/images/icons/emoji/unicode/1f462.png?v8", + bosnia_herzegovina: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1e6.png?v8", + botswana: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1fc.png?v8", + bouncing_ball_man: "https://github.githubassets.com/images/icons/emoji/unicode/26f9-2642.png?v8", + bouncing_ball_person: "https://github.githubassets.com/images/icons/emoji/unicode/26f9.png?v8", + bouncing_ball_woman: "https://github.githubassets.com/images/icons/emoji/unicode/26f9-2640.png?v8", + bouquet: "https://github.githubassets.com/images/icons/emoji/unicode/1f490.png?v8", + bouvet_island: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1fb.png?v8", + bow: "https://github.githubassets.com/images/icons/emoji/unicode/1f647.png?v8", + bow_and_arrow: "https://github.githubassets.com/images/icons/emoji/unicode/1f3f9.png?v8", + bowing_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f647-2642.png?v8", + bowing_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f647-2640.png?v8", + bowl_with_spoon: "https://github.githubassets.com/images/icons/emoji/unicode/1f963.png?v8", + bowling: "https://github.githubassets.com/images/icons/emoji/unicode/1f3b3.png?v8", + bowtie: "https://github.githubassets.com/images/icons/emoji/bowtie.png?v8", + boxing_glove: "https://github.githubassets.com/images/icons/emoji/unicode/1f94a.png?v8", + boy: "https://github.githubassets.com/images/icons/emoji/unicode/1f466.png?v8", + brain: "https://github.githubassets.com/images/icons/emoji/unicode/1f9e0.png?v8", + brazil: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1f7.png?v8", + bread: "https://github.githubassets.com/images/icons/emoji/unicode/1f35e.png?v8", + breast_feeding: "https://github.githubassets.com/images/icons/emoji/unicode/1f931.png?v8", + bricks: "https://github.githubassets.com/images/icons/emoji/unicode/1f9f1.png?v8", + bride_with_veil: "https://github.githubassets.com/images/icons/emoji/unicode/1f470.png?v8", + bridge_at_night: "https://github.githubassets.com/images/icons/emoji/unicode/1f309.png?v8", + briefcase: "https://github.githubassets.com/images/icons/emoji/unicode/1f4bc.png?v8", + british_indian_ocean_territory: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1f4.png?v8", + british_virgin_islands: "https://github.githubassets.com/images/icons/emoji/unicode/1f1fb-1f1ec.png?v8", + broccoli: "https://github.githubassets.com/images/icons/emoji/unicode/1f966.png?v8", + broken_heart: "https://github.githubassets.com/images/icons/emoji/unicode/1f494.png?v8", + broom: "https://github.githubassets.com/images/icons/emoji/unicode/1f9f9.png?v8", + brown_circle: "https://github.githubassets.com/images/icons/emoji/unicode/1f7e4.png?v8", + brown_heart: "https://github.githubassets.com/images/icons/emoji/unicode/1f90e.png?v8", + brown_square: "https://github.githubassets.com/images/icons/emoji/unicode/1f7eb.png?v8", + brunei: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1f3.png?v8", + bug: "https://github.githubassets.com/images/icons/emoji/unicode/1f41b.png?v8", + building_construction: "https://github.githubassets.com/images/icons/emoji/unicode/1f3d7.png?v8", + bulb: "https://github.githubassets.com/images/icons/emoji/unicode/1f4a1.png?v8", + bulgaria: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1ec.png?v8", + bullettrain_front: "https://github.githubassets.com/images/icons/emoji/unicode/1f685.png?v8", + bullettrain_side: "https://github.githubassets.com/images/icons/emoji/unicode/1f684.png?v8", + burkina_faso: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1eb.png?v8", + burrito: "https://github.githubassets.com/images/icons/emoji/unicode/1f32f.png?v8", + burundi: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1ee.png?v8", + bus: "https://github.githubassets.com/images/icons/emoji/unicode/1f68c.png?v8", + business_suit_levitating: "https://github.githubassets.com/images/icons/emoji/unicode/1f574.png?v8", + busstop: "https://github.githubassets.com/images/icons/emoji/unicode/1f68f.png?v8", + bust_in_silhouette: "https://github.githubassets.com/images/icons/emoji/unicode/1f464.png?v8", + busts_in_silhouette: "https://github.githubassets.com/images/icons/emoji/unicode/1f465.png?v8", + butter: "https://github.githubassets.com/images/icons/emoji/unicode/1f9c8.png?v8", + butterfly: "https://github.githubassets.com/images/icons/emoji/unicode/1f98b.png?v8", + cactus: "https://github.githubassets.com/images/icons/emoji/unicode/1f335.png?v8", + cake: "https://github.githubassets.com/images/icons/emoji/unicode/1f370.png?v8", + calendar: "https://github.githubassets.com/images/icons/emoji/unicode/1f4c6.png?v8", + call_me_hand: "https://github.githubassets.com/images/icons/emoji/unicode/1f919.png?v8", + calling: "https://github.githubassets.com/images/icons/emoji/unicode/1f4f2.png?v8", + cambodia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1ed.png?v8", + camel: "https://github.githubassets.com/images/icons/emoji/unicode/1f42b.png?v8", + camera: "https://github.githubassets.com/images/icons/emoji/unicode/1f4f7.png?v8", + camera_flash: "https://github.githubassets.com/images/icons/emoji/unicode/1f4f8.png?v8", + cameroon: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1f2.png?v8", + camping: "https://github.githubassets.com/images/icons/emoji/unicode/1f3d5.png?v8", + canada: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1e6.png?v8", + canary_islands: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1e8.png?v8", + cancer: "https://github.githubassets.com/images/icons/emoji/unicode/264b.png?v8", + candle: "https://github.githubassets.com/images/icons/emoji/unicode/1f56f.png?v8", + candy: "https://github.githubassets.com/images/icons/emoji/unicode/1f36c.png?v8", + canned_food: "https://github.githubassets.com/images/icons/emoji/unicode/1f96b.png?v8", + canoe: "https://github.githubassets.com/images/icons/emoji/unicode/1f6f6.png?v8", + cape_verde: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1fb.png?v8", + capital_abcd: "https://github.githubassets.com/images/icons/emoji/unicode/1f520.png?v8", + capricorn: "https://github.githubassets.com/images/icons/emoji/unicode/2651.png?v8", + car: "https://github.githubassets.com/images/icons/emoji/unicode/1f697.png?v8", + card_file_box: "https://github.githubassets.com/images/icons/emoji/unicode/1f5c3.png?v8", + card_index: "https://github.githubassets.com/images/icons/emoji/unicode/1f4c7.png?v8", + card_index_dividers: "https://github.githubassets.com/images/icons/emoji/unicode/1f5c2.png?v8", + caribbean_netherlands: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1f6.png?v8", + carousel_horse: "https://github.githubassets.com/images/icons/emoji/unicode/1f3a0.png?v8", + carrot: "https://github.githubassets.com/images/icons/emoji/unicode/1f955.png?v8", + cartwheeling: "https://github.githubassets.com/images/icons/emoji/unicode/1f938.png?v8", + cat: "https://github.githubassets.com/images/icons/emoji/unicode/1f431.png?v8", + cat2: "https://github.githubassets.com/images/icons/emoji/unicode/1f408.png?v8", + cayman_islands: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1fe.png?v8", + cd: "https://github.githubassets.com/images/icons/emoji/unicode/1f4bf.png?v8", + central_african_republic: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1eb.png?v8", + ceuta_melilla: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1e6.png?v8", + chad: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1e9.png?v8", + chains: "https://github.githubassets.com/images/icons/emoji/unicode/26d3.png?v8", + chair: "https://github.githubassets.com/images/icons/emoji/unicode/1fa91.png?v8", + champagne: "https://github.githubassets.com/images/icons/emoji/unicode/1f37e.png?v8", + chart: "https://github.githubassets.com/images/icons/emoji/unicode/1f4b9.png?v8", + chart_with_downwards_trend: "https://github.githubassets.com/images/icons/emoji/unicode/1f4c9.png?v8", + chart_with_upwards_trend: "https://github.githubassets.com/images/icons/emoji/unicode/1f4c8.png?v8", + checkered_flag: "https://github.githubassets.com/images/icons/emoji/unicode/1f3c1.png?v8", + cheese: "https://github.githubassets.com/images/icons/emoji/unicode/1f9c0.png?v8", + cherries: "https://github.githubassets.com/images/icons/emoji/unicode/1f352.png?v8", + cherry_blossom: "https://github.githubassets.com/images/icons/emoji/unicode/1f338.png?v8", + chess_pawn: "https://github.githubassets.com/images/icons/emoji/unicode/265f.png?v8", + chestnut: "https://github.githubassets.com/images/icons/emoji/unicode/1f330.png?v8", + chicken: "https://github.githubassets.com/images/icons/emoji/unicode/1f414.png?v8", + child: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d2.png?v8", + children_crossing: "https://github.githubassets.com/images/icons/emoji/unicode/1f6b8.png?v8", + chile: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1f1.png?v8", + chipmunk: "https://github.githubassets.com/images/icons/emoji/unicode/1f43f.png?v8", + chocolate_bar: "https://github.githubassets.com/images/icons/emoji/unicode/1f36b.png?v8", + chopsticks: "https://github.githubassets.com/images/icons/emoji/unicode/1f962.png?v8", + christmas_island: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1fd.png?v8", + christmas_tree: "https://github.githubassets.com/images/icons/emoji/unicode/1f384.png?v8", + church: "https://github.githubassets.com/images/icons/emoji/unicode/26ea.png?v8", + cinema: "https://github.githubassets.com/images/icons/emoji/unicode/1f3a6.png?v8", + circus_tent: "https://github.githubassets.com/images/icons/emoji/unicode/1f3aa.png?v8", + city_sunrise: "https://github.githubassets.com/images/icons/emoji/unicode/1f307.png?v8", + city_sunset: "https://github.githubassets.com/images/icons/emoji/unicode/1f306.png?v8", + cityscape: "https://github.githubassets.com/images/icons/emoji/unicode/1f3d9.png?v8", + cl: "https://github.githubassets.com/images/icons/emoji/unicode/1f191.png?v8", + clamp: "https://github.githubassets.com/images/icons/emoji/unicode/1f5dc.png?v8", + clap: "https://github.githubassets.com/images/icons/emoji/unicode/1f44f.png?v8", + clapper: "https://github.githubassets.com/images/icons/emoji/unicode/1f3ac.png?v8", + classical_building: "https://github.githubassets.com/images/icons/emoji/unicode/1f3db.png?v8", + climbing: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d7.png?v8", + climbing_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d7-2642.png?v8", + climbing_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d7-2640.png?v8", + clinking_glasses: "https://github.githubassets.com/images/icons/emoji/unicode/1f942.png?v8", + clipboard: "https://github.githubassets.com/images/icons/emoji/unicode/1f4cb.png?v8", + clipperton_island: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1f5.png?v8", + clock1: "https://github.githubassets.com/images/icons/emoji/unicode/1f550.png?v8", + clock10: "https://github.githubassets.com/images/icons/emoji/unicode/1f559.png?v8", + clock1030: "https://github.githubassets.com/images/icons/emoji/unicode/1f565.png?v8", + clock11: "https://github.githubassets.com/images/icons/emoji/unicode/1f55a.png?v8", + clock1130: "https://github.githubassets.com/images/icons/emoji/unicode/1f566.png?v8", + clock12: "https://github.githubassets.com/images/icons/emoji/unicode/1f55b.png?v8", + clock1230: "https://github.githubassets.com/images/icons/emoji/unicode/1f567.png?v8", + clock130: "https://github.githubassets.com/images/icons/emoji/unicode/1f55c.png?v8", + clock2: "https://github.githubassets.com/images/icons/emoji/unicode/1f551.png?v8", + clock230: "https://github.githubassets.com/images/icons/emoji/unicode/1f55d.png?v8", + clock3: "https://github.githubassets.com/images/icons/emoji/unicode/1f552.png?v8", + clock330: "https://github.githubassets.com/images/icons/emoji/unicode/1f55e.png?v8", + clock4: "https://github.githubassets.com/images/icons/emoji/unicode/1f553.png?v8", + clock430: "https://github.githubassets.com/images/icons/emoji/unicode/1f55f.png?v8", + clock5: "https://github.githubassets.com/images/icons/emoji/unicode/1f554.png?v8", + clock530: "https://github.githubassets.com/images/icons/emoji/unicode/1f560.png?v8", + clock6: "https://github.githubassets.com/images/icons/emoji/unicode/1f555.png?v8", + clock630: "https://github.githubassets.com/images/icons/emoji/unicode/1f561.png?v8", + clock7: "https://github.githubassets.com/images/icons/emoji/unicode/1f556.png?v8", + clock730: "https://github.githubassets.com/images/icons/emoji/unicode/1f562.png?v8", + clock8: "https://github.githubassets.com/images/icons/emoji/unicode/1f557.png?v8", + clock830: "https://github.githubassets.com/images/icons/emoji/unicode/1f563.png?v8", + clock9: "https://github.githubassets.com/images/icons/emoji/unicode/1f558.png?v8", + clock930: "https://github.githubassets.com/images/icons/emoji/unicode/1f564.png?v8", + closed_book: "https://github.githubassets.com/images/icons/emoji/unicode/1f4d5.png?v8", + closed_lock_with_key: "https://github.githubassets.com/images/icons/emoji/unicode/1f510.png?v8", + closed_umbrella: "https://github.githubassets.com/images/icons/emoji/unicode/1f302.png?v8", + cloud: "https://github.githubassets.com/images/icons/emoji/unicode/2601.png?v8", + cloud_with_lightning: "https://github.githubassets.com/images/icons/emoji/unicode/1f329.png?v8", + cloud_with_lightning_and_rain: "https://github.githubassets.com/images/icons/emoji/unicode/26c8.png?v8", + cloud_with_rain: "https://github.githubassets.com/images/icons/emoji/unicode/1f327.png?v8", + cloud_with_snow: "https://github.githubassets.com/images/icons/emoji/unicode/1f328.png?v8", + clown_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f921.png?v8", + clubs: "https://github.githubassets.com/images/icons/emoji/unicode/2663.png?v8", + cn: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1f3.png?v8", + coat: "https://github.githubassets.com/images/icons/emoji/unicode/1f9e5.png?v8", + cocktail: "https://github.githubassets.com/images/icons/emoji/unicode/1f378.png?v8", + coconut: "https://github.githubassets.com/images/icons/emoji/unicode/1f965.png?v8", + cocos_islands: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1e8.png?v8", + coffee: "https://github.githubassets.com/images/icons/emoji/unicode/2615.png?v8", + coffin: "https://github.githubassets.com/images/icons/emoji/unicode/26b0.png?v8", + cold_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f976.png?v8", + cold_sweat: "https://github.githubassets.com/images/icons/emoji/unicode/1f630.png?v8", + collision: "https://github.githubassets.com/images/icons/emoji/unicode/1f4a5.png?v8", + colombia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1f4.png?v8", + comet: "https://github.githubassets.com/images/icons/emoji/unicode/2604.png?v8", + comoros: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1f2.png?v8", + compass: "https://github.githubassets.com/images/icons/emoji/unicode/1f9ed.png?v8", + computer: "https://github.githubassets.com/images/icons/emoji/unicode/1f4bb.png?v8", + computer_mouse: "https://github.githubassets.com/images/icons/emoji/unicode/1f5b1.png?v8", + confetti_ball: "https://github.githubassets.com/images/icons/emoji/unicode/1f38a.png?v8", + confounded: "https://github.githubassets.com/images/icons/emoji/unicode/1f616.png?v8", + confused: "https://github.githubassets.com/images/icons/emoji/unicode/1f615.png?v8", + congo_brazzaville: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1ec.png?v8", + congo_kinshasa: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1e9.png?v8", + congratulations: "https://github.githubassets.com/images/icons/emoji/unicode/3297.png?v8", + construction: "https://github.githubassets.com/images/icons/emoji/unicode/1f6a7.png?v8", + construction_worker: "https://github.githubassets.com/images/icons/emoji/unicode/1f477.png?v8", + construction_worker_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f477-2642.png?v8", + construction_worker_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f477-2640.png?v8", + control_knobs: "https://github.githubassets.com/images/icons/emoji/unicode/1f39b.png?v8", + convenience_store: "https://github.githubassets.com/images/icons/emoji/unicode/1f3ea.png?v8", + cook: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f373.png?v8", + cook_islands: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1f0.png?v8", + cookie: "https://github.githubassets.com/images/icons/emoji/unicode/1f36a.png?v8", + cool: "https://github.githubassets.com/images/icons/emoji/unicode/1f192.png?v8", + cop: "https://github.githubassets.com/images/icons/emoji/unicode/1f46e.png?v8", + copyright: "https://github.githubassets.com/images/icons/emoji/unicode/00a9.png?v8", + corn: "https://github.githubassets.com/images/icons/emoji/unicode/1f33d.png?v8", + costa_rica: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1f7.png?v8", + cote_divoire: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1ee.png?v8", + couch_and_lamp: "https://github.githubassets.com/images/icons/emoji/unicode/1f6cb.png?v8", + couple: "https://github.githubassets.com/images/icons/emoji/unicode/1f46b.png?v8", + couple_with_heart: "https://github.githubassets.com/images/icons/emoji/unicode/1f491.png?v8", + couple_with_heart_man_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-2764-1f468.png?v8", + couple_with_heart_woman_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-2764-1f468.png?v8", + couple_with_heart_woman_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-2764-1f469.png?v8", + couplekiss: "https://github.githubassets.com/images/icons/emoji/unicode/1f48f.png?v8", + couplekiss_man_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-2764-1f48b-1f468.png?v8", + couplekiss_man_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-2764-1f48b-1f468.png?v8", + couplekiss_woman_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-2764-1f48b-1f469.png?v8", + cow: "https://github.githubassets.com/images/icons/emoji/unicode/1f42e.png?v8", + cow2: "https://github.githubassets.com/images/icons/emoji/unicode/1f404.png?v8", + cowboy_hat_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f920.png?v8", + crab: "https://github.githubassets.com/images/icons/emoji/unicode/1f980.png?v8", + crayon: "https://github.githubassets.com/images/icons/emoji/unicode/1f58d.png?v8", + credit_card: "https://github.githubassets.com/images/icons/emoji/unicode/1f4b3.png?v8", + crescent_moon: "https://github.githubassets.com/images/icons/emoji/unicode/1f319.png?v8", + cricket: "https://github.githubassets.com/images/icons/emoji/unicode/1f997.png?v8", + cricket_game: "https://github.githubassets.com/images/icons/emoji/unicode/1f3cf.png?v8", + croatia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ed-1f1f7.png?v8", + crocodile: "https://github.githubassets.com/images/icons/emoji/unicode/1f40a.png?v8", + croissant: "https://github.githubassets.com/images/icons/emoji/unicode/1f950.png?v8", + crossed_fingers: "https://github.githubassets.com/images/icons/emoji/unicode/1f91e.png?v8", + crossed_flags: "https://github.githubassets.com/images/icons/emoji/unicode/1f38c.png?v8", + crossed_swords: "https://github.githubassets.com/images/icons/emoji/unicode/2694.png?v8", + crown: "https://github.githubassets.com/images/icons/emoji/unicode/1f451.png?v8", + cry: "https://github.githubassets.com/images/icons/emoji/unicode/1f622.png?v8", + crying_cat_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f63f.png?v8", + crystal_ball: "https://github.githubassets.com/images/icons/emoji/unicode/1f52e.png?v8", + cuba: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1fa.png?v8", + cucumber: "https://github.githubassets.com/images/icons/emoji/unicode/1f952.png?v8", + cup_with_straw: "https://github.githubassets.com/images/icons/emoji/unicode/1f964.png?v8", + cupcake: "https://github.githubassets.com/images/icons/emoji/unicode/1f9c1.png?v8", + cupid: "https://github.githubassets.com/images/icons/emoji/unicode/1f498.png?v8", + curacao: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1fc.png?v8", + curling_stone: "https://github.githubassets.com/images/icons/emoji/unicode/1f94c.png?v8", + curly_haired_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f9b1.png?v8", + curly_haired_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f9b1.png?v8", + curly_loop: "https://github.githubassets.com/images/icons/emoji/unicode/27b0.png?v8", + currency_exchange: "https://github.githubassets.com/images/icons/emoji/unicode/1f4b1.png?v8", + curry: "https://github.githubassets.com/images/icons/emoji/unicode/1f35b.png?v8", + cursing_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f92c.png?v8", + custard: "https://github.githubassets.com/images/icons/emoji/unicode/1f36e.png?v8", + customs: "https://github.githubassets.com/images/icons/emoji/unicode/1f6c3.png?v8", + cut_of_meat: "https://github.githubassets.com/images/icons/emoji/unicode/1f969.png?v8", + cyclone: "https://github.githubassets.com/images/icons/emoji/unicode/1f300.png?v8", + cyprus: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1fe.png?v8", + czech_republic: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1ff.png?v8", + dagger: "https://github.githubassets.com/images/icons/emoji/unicode/1f5e1.png?v8", + dancer: "https://github.githubassets.com/images/icons/emoji/unicode/1f483.png?v8", + dancers: "https://github.githubassets.com/images/icons/emoji/unicode/1f46f.png?v8", + dancing_men: "https://github.githubassets.com/images/icons/emoji/unicode/1f46f-2642.png?v8", + dancing_women: "https://github.githubassets.com/images/icons/emoji/unicode/1f46f-2640.png?v8", + dango: "https://github.githubassets.com/images/icons/emoji/unicode/1f361.png?v8", + dark_sunglasses: "https://github.githubassets.com/images/icons/emoji/unicode/1f576.png?v8", + dart: "https://github.githubassets.com/images/icons/emoji/unicode/1f3af.png?v8", + dash: "https://github.githubassets.com/images/icons/emoji/unicode/1f4a8.png?v8", + date: "https://github.githubassets.com/images/icons/emoji/unicode/1f4c5.png?v8", + de: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e9-1f1ea.png?v8", + deaf_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f9cf-2642.png?v8", + deaf_person: "https://github.githubassets.com/images/icons/emoji/unicode/1f9cf.png?v8", + deaf_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f9cf-2640.png?v8", + deciduous_tree: "https://github.githubassets.com/images/icons/emoji/unicode/1f333.png?v8", + deer: "https://github.githubassets.com/images/icons/emoji/unicode/1f98c.png?v8", + denmark: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e9-1f1f0.png?v8", + department_store: "https://github.githubassets.com/images/icons/emoji/unicode/1f3ec.png?v8", + derelict_house: "https://github.githubassets.com/images/icons/emoji/unicode/1f3da.png?v8", + desert: "https://github.githubassets.com/images/icons/emoji/unicode/1f3dc.png?v8", + desert_island: "https://github.githubassets.com/images/icons/emoji/unicode/1f3dd.png?v8", + desktop_computer: "https://github.githubassets.com/images/icons/emoji/unicode/1f5a5.png?v8", + detective: "https://github.githubassets.com/images/icons/emoji/unicode/1f575.png?v8", + diamond_shape_with_a_dot_inside: "https://github.githubassets.com/images/icons/emoji/unicode/1f4a0.png?v8", + diamonds: "https://github.githubassets.com/images/icons/emoji/unicode/2666.png?v8", + diego_garcia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e9-1f1ec.png?v8", + disappointed: "https://github.githubassets.com/images/icons/emoji/unicode/1f61e.png?v8", + disappointed_relieved: "https://github.githubassets.com/images/icons/emoji/unicode/1f625.png?v8", + diving_mask: "https://github.githubassets.com/images/icons/emoji/unicode/1f93f.png?v8", + diya_lamp: "https://github.githubassets.com/images/icons/emoji/unicode/1fa94.png?v8", + dizzy: "https://github.githubassets.com/images/icons/emoji/unicode/1f4ab.png?v8", + dizzy_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f635.png?v8", + djibouti: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e9-1f1ef.png?v8", + dna: "https://github.githubassets.com/images/icons/emoji/unicode/1f9ec.png?v8", + do_not_litter: "https://github.githubassets.com/images/icons/emoji/unicode/1f6af.png?v8", + dog: "https://github.githubassets.com/images/icons/emoji/unicode/1f436.png?v8", + dog2: "https://github.githubassets.com/images/icons/emoji/unicode/1f415.png?v8", + dollar: "https://github.githubassets.com/images/icons/emoji/unicode/1f4b5.png?v8", + dolls: "https://github.githubassets.com/images/icons/emoji/unicode/1f38e.png?v8", + dolphin: "https://github.githubassets.com/images/icons/emoji/unicode/1f42c.png?v8", + dominica: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e9-1f1f2.png?v8", + dominican_republic: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e9-1f1f4.png?v8", + door: "https://github.githubassets.com/images/icons/emoji/unicode/1f6aa.png?v8", + doughnut: "https://github.githubassets.com/images/icons/emoji/unicode/1f369.png?v8", + dove: "https://github.githubassets.com/images/icons/emoji/unicode/1f54a.png?v8", + dragon: "https://github.githubassets.com/images/icons/emoji/unicode/1f409.png?v8", + dragon_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f432.png?v8", + dress: "https://github.githubassets.com/images/icons/emoji/unicode/1f457.png?v8", + dromedary_camel: "https://github.githubassets.com/images/icons/emoji/unicode/1f42a.png?v8", + drooling_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f924.png?v8", + drop_of_blood: "https://github.githubassets.com/images/icons/emoji/unicode/1fa78.png?v8", + droplet: "https://github.githubassets.com/images/icons/emoji/unicode/1f4a7.png?v8", + drum: "https://github.githubassets.com/images/icons/emoji/unicode/1f941.png?v8", + duck: "https://github.githubassets.com/images/icons/emoji/unicode/1f986.png?v8", + dumpling: "https://github.githubassets.com/images/icons/emoji/unicode/1f95f.png?v8", + dvd: "https://github.githubassets.com/images/icons/emoji/unicode/1f4c0.png?v8", + "e-mail": "https://github.githubassets.com/images/icons/emoji/unicode/1f4e7.png?v8", + eagle: "https://github.githubassets.com/images/icons/emoji/unicode/1f985.png?v8", + ear: "https://github.githubassets.com/images/icons/emoji/unicode/1f442.png?v8", + ear_of_rice: "https://github.githubassets.com/images/icons/emoji/unicode/1f33e.png?v8", + ear_with_hearing_aid: "https://github.githubassets.com/images/icons/emoji/unicode/1f9bb.png?v8", + earth_africa: "https://github.githubassets.com/images/icons/emoji/unicode/1f30d.png?v8", + earth_americas: "https://github.githubassets.com/images/icons/emoji/unicode/1f30e.png?v8", + earth_asia: "https://github.githubassets.com/images/icons/emoji/unicode/1f30f.png?v8", + ecuador: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1e8.png?v8", + egg: "https://github.githubassets.com/images/icons/emoji/unicode/1f95a.png?v8", + eggplant: "https://github.githubassets.com/images/icons/emoji/unicode/1f346.png?v8", + egypt: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1ec.png?v8", + eight: "https://github.githubassets.com/images/icons/emoji/unicode/0038-20e3.png?v8", + eight_pointed_black_star: "https://github.githubassets.com/images/icons/emoji/unicode/2734.png?v8", + eight_spoked_asterisk: "https://github.githubassets.com/images/icons/emoji/unicode/2733.png?v8", + eject_button: "https://github.githubassets.com/images/icons/emoji/unicode/23cf.png?v8", + el_salvador: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1fb.png?v8", + electric_plug: "https://github.githubassets.com/images/icons/emoji/unicode/1f50c.png?v8", + electron: "https://github.githubassets.com/images/icons/emoji/electron.png?v8", + elephant: "https://github.githubassets.com/images/icons/emoji/unicode/1f418.png?v8", + elf: "https://github.githubassets.com/images/icons/emoji/unicode/1f9dd.png?v8", + elf_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f9dd-2642.png?v8", + elf_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f9dd-2640.png?v8", + email: "https://github.githubassets.com/images/icons/emoji/unicode/2709.png?v8", + end: "https://github.githubassets.com/images/icons/emoji/unicode/1f51a.png?v8", + england: "https://github.githubassets.com/images/icons/emoji/unicode/1f3f4-e0067-e0062-e0065-e006e-e0067-e007f.png?v8", + envelope: "https://github.githubassets.com/images/icons/emoji/unicode/2709.png?v8", + envelope_with_arrow: "https://github.githubassets.com/images/icons/emoji/unicode/1f4e9.png?v8", + equatorial_guinea: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1f6.png?v8", + eritrea: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1f7.png?v8", + es: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1f8.png?v8", + estonia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1ea.png?v8", + ethiopia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1f9.png?v8", + eu: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1fa.png?v8", + euro: "https://github.githubassets.com/images/icons/emoji/unicode/1f4b6.png?v8", + european_castle: "https://github.githubassets.com/images/icons/emoji/unicode/1f3f0.png?v8", + european_post_office: "https://github.githubassets.com/images/icons/emoji/unicode/1f3e4.png?v8", + european_union: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1fa.png?v8", + evergreen_tree: "https://github.githubassets.com/images/icons/emoji/unicode/1f332.png?v8", + exclamation: "https://github.githubassets.com/images/icons/emoji/unicode/2757.png?v8", + exploding_head: "https://github.githubassets.com/images/icons/emoji/unicode/1f92f.png?v8", + expressionless: "https://github.githubassets.com/images/icons/emoji/unicode/1f611.png?v8", + eye: "https://github.githubassets.com/images/icons/emoji/unicode/1f441.png?v8", + eye_speech_bubble: "https://github.githubassets.com/images/icons/emoji/unicode/1f441-1f5e8.png?v8", + eyeglasses: "https://github.githubassets.com/images/icons/emoji/unicode/1f453.png?v8", + eyes: "https://github.githubassets.com/images/icons/emoji/unicode/1f440.png?v8", + face_with_head_bandage: "https://github.githubassets.com/images/icons/emoji/unicode/1f915.png?v8", + face_with_thermometer: "https://github.githubassets.com/images/icons/emoji/unicode/1f912.png?v8", + facepalm: "https://github.githubassets.com/images/icons/emoji/unicode/1f926.png?v8", + facepunch: "https://github.githubassets.com/images/icons/emoji/unicode/1f44a.png?v8", + factory: "https://github.githubassets.com/images/icons/emoji/unicode/1f3ed.png?v8", + factory_worker: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f3ed.png?v8", + fairy: "https://github.githubassets.com/images/icons/emoji/unicode/1f9da.png?v8", + fairy_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f9da-2642.png?v8", + fairy_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f9da-2640.png?v8", + falafel: "https://github.githubassets.com/images/icons/emoji/unicode/1f9c6.png?v8", + falkland_islands: "https://github.githubassets.com/images/icons/emoji/unicode/1f1eb-1f1f0.png?v8", + fallen_leaf: "https://github.githubassets.com/images/icons/emoji/unicode/1f342.png?v8", + family: "https://github.githubassets.com/images/icons/emoji/unicode/1f46a.png?v8", + family_man_boy: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f466.png?v8", + family_man_boy_boy: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f466-1f466.png?v8", + family_man_girl: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f467.png?v8", + family_man_girl_boy: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f467-1f466.png?v8", + family_man_girl_girl: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f467-1f467.png?v8", + family_man_man_boy: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f468-1f466.png?v8", + family_man_man_boy_boy: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f468-1f466-1f466.png?v8", + family_man_man_girl: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f468-1f467.png?v8", + family_man_man_girl_boy: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f468-1f467-1f466.png?v8", + family_man_man_girl_girl: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f468-1f467-1f467.png?v8", + family_man_woman_boy: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f469-1f466.png?v8", + family_man_woman_boy_boy: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f469-1f466-1f466.png?v8", + family_man_woman_girl: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f469-1f467.png?v8", + family_man_woman_girl_boy: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f469-1f467-1f466.png?v8", + family_man_woman_girl_girl: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f469-1f467-1f467.png?v8", + family_woman_boy: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f466.png?v8", + family_woman_boy_boy: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f466-1f466.png?v8", + family_woman_girl: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f467.png?v8", + family_woman_girl_boy: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f467-1f466.png?v8", + family_woman_girl_girl: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f467-1f467.png?v8", + family_woman_woman_boy: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f469-1f466.png?v8", + family_woman_woman_boy_boy: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f469-1f466-1f466.png?v8", + family_woman_woman_girl: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f469-1f467.png?v8", + family_woman_woman_girl_boy: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f469-1f467-1f466.png?v8", + family_woman_woman_girl_girl: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f469-1f467-1f467.png?v8", + farmer: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f33e.png?v8", + faroe_islands: "https://github.githubassets.com/images/icons/emoji/unicode/1f1eb-1f1f4.png?v8", + fast_forward: "https://github.githubassets.com/images/icons/emoji/unicode/23e9.png?v8", + fax: "https://github.githubassets.com/images/icons/emoji/unicode/1f4e0.png?v8", + fearful: "https://github.githubassets.com/images/icons/emoji/unicode/1f628.png?v8", + feelsgood: "https://github.githubassets.com/images/icons/emoji/feelsgood.png?v8", + feet: "https://github.githubassets.com/images/icons/emoji/unicode/1f43e.png?v8", + female_detective: "https://github.githubassets.com/images/icons/emoji/unicode/1f575-2640.png?v8", + female_sign: "https://github.githubassets.com/images/icons/emoji/unicode/2640.png?v8", + ferris_wheel: "https://github.githubassets.com/images/icons/emoji/unicode/1f3a1.png?v8", + ferry: "https://github.githubassets.com/images/icons/emoji/unicode/26f4.png?v8", + field_hockey: "https://github.githubassets.com/images/icons/emoji/unicode/1f3d1.png?v8", + fiji: "https://github.githubassets.com/images/icons/emoji/unicode/1f1eb-1f1ef.png?v8", + file_cabinet: "https://github.githubassets.com/images/icons/emoji/unicode/1f5c4.png?v8", + file_folder: "https://github.githubassets.com/images/icons/emoji/unicode/1f4c1.png?v8", + film_projector: "https://github.githubassets.com/images/icons/emoji/unicode/1f4fd.png?v8", + film_strip: "https://github.githubassets.com/images/icons/emoji/unicode/1f39e.png?v8", + finland: "https://github.githubassets.com/images/icons/emoji/unicode/1f1eb-1f1ee.png?v8", + finnadie: "https://github.githubassets.com/images/icons/emoji/finnadie.png?v8", + fire: "https://github.githubassets.com/images/icons/emoji/unicode/1f525.png?v8", + fire_engine: "https://github.githubassets.com/images/icons/emoji/unicode/1f692.png?v8", + fire_extinguisher: "https://github.githubassets.com/images/icons/emoji/unicode/1f9ef.png?v8", + firecracker: "https://github.githubassets.com/images/icons/emoji/unicode/1f9e8.png?v8", + firefighter: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f692.png?v8", + fireworks: "https://github.githubassets.com/images/icons/emoji/unicode/1f386.png?v8", + first_quarter_moon: "https://github.githubassets.com/images/icons/emoji/unicode/1f313.png?v8", + first_quarter_moon_with_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f31b.png?v8", + fish: "https://github.githubassets.com/images/icons/emoji/unicode/1f41f.png?v8", + fish_cake: "https://github.githubassets.com/images/icons/emoji/unicode/1f365.png?v8", + fishing_pole_and_fish: "https://github.githubassets.com/images/icons/emoji/unicode/1f3a3.png?v8", + fist: "https://github.githubassets.com/images/icons/emoji/unicode/270a.png?v8", + fist_left: "https://github.githubassets.com/images/icons/emoji/unicode/1f91b.png?v8", + fist_oncoming: "https://github.githubassets.com/images/icons/emoji/unicode/1f44a.png?v8", + fist_raised: "https://github.githubassets.com/images/icons/emoji/unicode/270a.png?v8", + fist_right: "https://github.githubassets.com/images/icons/emoji/unicode/1f91c.png?v8", + five: "https://github.githubassets.com/images/icons/emoji/unicode/0035-20e3.png?v8", + flags: "https://github.githubassets.com/images/icons/emoji/unicode/1f38f.png?v8", + flamingo: "https://github.githubassets.com/images/icons/emoji/unicode/1f9a9.png?v8", + flashlight: "https://github.githubassets.com/images/icons/emoji/unicode/1f526.png?v8", + flat_shoe: "https://github.githubassets.com/images/icons/emoji/unicode/1f97f.png?v8", + fleur_de_lis: "https://github.githubassets.com/images/icons/emoji/unicode/269c.png?v8", + flight_arrival: "https://github.githubassets.com/images/icons/emoji/unicode/1f6ec.png?v8", + flight_departure: "https://github.githubassets.com/images/icons/emoji/unicode/1f6eb.png?v8", + flipper: "https://github.githubassets.com/images/icons/emoji/unicode/1f42c.png?v8", + floppy_disk: "https://github.githubassets.com/images/icons/emoji/unicode/1f4be.png?v8", + flower_playing_cards: "https://github.githubassets.com/images/icons/emoji/unicode/1f3b4.png?v8", + flushed: "https://github.githubassets.com/images/icons/emoji/unicode/1f633.png?v8", + flying_disc: "https://github.githubassets.com/images/icons/emoji/unicode/1f94f.png?v8", + flying_saucer: "https://github.githubassets.com/images/icons/emoji/unicode/1f6f8.png?v8", + fog: "https://github.githubassets.com/images/icons/emoji/unicode/1f32b.png?v8", + foggy: "https://github.githubassets.com/images/icons/emoji/unicode/1f301.png?v8", + foot: "https://github.githubassets.com/images/icons/emoji/unicode/1f9b6.png?v8", + football: "https://github.githubassets.com/images/icons/emoji/unicode/1f3c8.png?v8", + footprints: "https://github.githubassets.com/images/icons/emoji/unicode/1f463.png?v8", + fork_and_knife: "https://github.githubassets.com/images/icons/emoji/unicode/1f374.png?v8", + fortune_cookie: "https://github.githubassets.com/images/icons/emoji/unicode/1f960.png?v8", + fountain: "https://github.githubassets.com/images/icons/emoji/unicode/26f2.png?v8", + fountain_pen: "https://github.githubassets.com/images/icons/emoji/unicode/1f58b.png?v8", + four: "https://github.githubassets.com/images/icons/emoji/unicode/0034-20e3.png?v8", + four_leaf_clover: "https://github.githubassets.com/images/icons/emoji/unicode/1f340.png?v8", + fox_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f98a.png?v8", + fr: "https://github.githubassets.com/images/icons/emoji/unicode/1f1eb-1f1f7.png?v8", + framed_picture: "https://github.githubassets.com/images/icons/emoji/unicode/1f5bc.png?v8", + free: "https://github.githubassets.com/images/icons/emoji/unicode/1f193.png?v8", + french_guiana: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1eb.png?v8", + french_polynesia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1eb.png?v8", + french_southern_territories: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1eb.png?v8", + fried_egg: "https://github.githubassets.com/images/icons/emoji/unicode/1f373.png?v8", + fried_shrimp: "https://github.githubassets.com/images/icons/emoji/unicode/1f364.png?v8", + fries: "https://github.githubassets.com/images/icons/emoji/unicode/1f35f.png?v8", + frog: "https://github.githubassets.com/images/icons/emoji/unicode/1f438.png?v8", + frowning: "https://github.githubassets.com/images/icons/emoji/unicode/1f626.png?v8", + frowning_face: "https://github.githubassets.com/images/icons/emoji/unicode/2639.png?v8", + frowning_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f64d-2642.png?v8", + frowning_person: "https://github.githubassets.com/images/icons/emoji/unicode/1f64d.png?v8", + frowning_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f64d-2640.png?v8", + fu: "https://github.githubassets.com/images/icons/emoji/unicode/1f595.png?v8", + fuelpump: "https://github.githubassets.com/images/icons/emoji/unicode/26fd.png?v8", + full_moon: "https://github.githubassets.com/images/icons/emoji/unicode/1f315.png?v8", + full_moon_with_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f31d.png?v8", + funeral_urn: "https://github.githubassets.com/images/icons/emoji/unicode/26b1.png?v8", + gabon: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1e6.png?v8", + gambia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1f2.png?v8", + game_die: "https://github.githubassets.com/images/icons/emoji/unicode/1f3b2.png?v8", + garlic: "https://github.githubassets.com/images/icons/emoji/unicode/1f9c4.png?v8", + gb: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1e7.png?v8", + gear: "https://github.githubassets.com/images/icons/emoji/unicode/2699.png?v8", + gem: "https://github.githubassets.com/images/icons/emoji/unicode/1f48e.png?v8", + gemini: "https://github.githubassets.com/images/icons/emoji/unicode/264a.png?v8", + genie: "https://github.githubassets.com/images/icons/emoji/unicode/1f9de.png?v8", + genie_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f9de-2642.png?v8", + genie_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f9de-2640.png?v8", + georgia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1ea.png?v8", + ghana: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1ed.png?v8", + ghost: "https://github.githubassets.com/images/icons/emoji/unicode/1f47b.png?v8", + gibraltar: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1ee.png?v8", + gift: "https://github.githubassets.com/images/icons/emoji/unicode/1f381.png?v8", + gift_heart: "https://github.githubassets.com/images/icons/emoji/unicode/1f49d.png?v8", + giraffe: "https://github.githubassets.com/images/icons/emoji/unicode/1f992.png?v8", + girl: "https://github.githubassets.com/images/icons/emoji/unicode/1f467.png?v8", + globe_with_meridians: "https://github.githubassets.com/images/icons/emoji/unicode/1f310.png?v8", + gloves: "https://github.githubassets.com/images/icons/emoji/unicode/1f9e4.png?v8", + goal_net: "https://github.githubassets.com/images/icons/emoji/unicode/1f945.png?v8", + goat: "https://github.githubassets.com/images/icons/emoji/unicode/1f410.png?v8", + goberserk: "https://github.githubassets.com/images/icons/emoji/goberserk.png?v8", + godmode: "https://github.githubassets.com/images/icons/emoji/godmode.png?v8", + goggles: "https://github.githubassets.com/images/icons/emoji/unicode/1f97d.png?v8", + golf: "https://github.githubassets.com/images/icons/emoji/unicode/26f3.png?v8", + golfing: "https://github.githubassets.com/images/icons/emoji/unicode/1f3cc.png?v8", + golfing_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f3cc-2642.png?v8", + golfing_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f3cc-2640.png?v8", + gorilla: "https://github.githubassets.com/images/icons/emoji/unicode/1f98d.png?v8", + grapes: "https://github.githubassets.com/images/icons/emoji/unicode/1f347.png?v8", + greece: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1f7.png?v8", + green_apple: "https://github.githubassets.com/images/icons/emoji/unicode/1f34f.png?v8", + green_book: "https://github.githubassets.com/images/icons/emoji/unicode/1f4d7.png?v8", + green_circle: "https://github.githubassets.com/images/icons/emoji/unicode/1f7e2.png?v8", + green_heart: "https://github.githubassets.com/images/icons/emoji/unicode/1f49a.png?v8", + green_salad: "https://github.githubassets.com/images/icons/emoji/unicode/1f957.png?v8", + green_square: "https://github.githubassets.com/images/icons/emoji/unicode/1f7e9.png?v8", + greenland: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1f1.png?v8", + grenada: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1e9.png?v8", + grey_exclamation: "https://github.githubassets.com/images/icons/emoji/unicode/2755.png?v8", + grey_question: "https://github.githubassets.com/images/icons/emoji/unicode/2754.png?v8", + grimacing: "https://github.githubassets.com/images/icons/emoji/unicode/1f62c.png?v8", + grin: "https://github.githubassets.com/images/icons/emoji/unicode/1f601.png?v8", + grinning: "https://github.githubassets.com/images/icons/emoji/unicode/1f600.png?v8", + guadeloupe: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1f5.png?v8", + guam: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1fa.png?v8", + guard: "https://github.githubassets.com/images/icons/emoji/unicode/1f482.png?v8", + guardsman: "https://github.githubassets.com/images/icons/emoji/unicode/1f482-2642.png?v8", + guardswoman: "https://github.githubassets.com/images/icons/emoji/unicode/1f482-2640.png?v8", + guatemala: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1f9.png?v8", + guernsey: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1ec.png?v8", + guide_dog: "https://github.githubassets.com/images/icons/emoji/unicode/1f9ae.png?v8", + guinea: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1f3.png?v8", + guinea_bissau: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1fc.png?v8", + guitar: "https://github.githubassets.com/images/icons/emoji/unicode/1f3b8.png?v8", + gun: "https://github.githubassets.com/images/icons/emoji/unicode/1f52b.png?v8", + guyana: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1fe.png?v8", + haircut: "https://github.githubassets.com/images/icons/emoji/unicode/1f487.png?v8", + haircut_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f487-2642.png?v8", + haircut_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f487-2640.png?v8", + haiti: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ed-1f1f9.png?v8", + hamburger: "https://github.githubassets.com/images/icons/emoji/unicode/1f354.png?v8", + hammer: "https://github.githubassets.com/images/icons/emoji/unicode/1f528.png?v8", + hammer_and_pick: "https://github.githubassets.com/images/icons/emoji/unicode/2692.png?v8", + hammer_and_wrench: "https://github.githubassets.com/images/icons/emoji/unicode/1f6e0.png?v8", + hamster: "https://github.githubassets.com/images/icons/emoji/unicode/1f439.png?v8", + hand: "https://github.githubassets.com/images/icons/emoji/unicode/270b.png?v8", + hand_over_mouth: "https://github.githubassets.com/images/icons/emoji/unicode/1f92d.png?v8", + handbag: "https://github.githubassets.com/images/icons/emoji/unicode/1f45c.png?v8", + handball_person: "https://github.githubassets.com/images/icons/emoji/unicode/1f93e.png?v8", + handshake: "https://github.githubassets.com/images/icons/emoji/unicode/1f91d.png?v8", + hankey: "https://github.githubassets.com/images/icons/emoji/unicode/1f4a9.png?v8", + hash: "https://github.githubassets.com/images/icons/emoji/unicode/0023-20e3.png?v8", + hatched_chick: "https://github.githubassets.com/images/icons/emoji/unicode/1f425.png?v8", + hatching_chick: "https://github.githubassets.com/images/icons/emoji/unicode/1f423.png?v8", + headphones: "https://github.githubassets.com/images/icons/emoji/unicode/1f3a7.png?v8", + health_worker: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-2695.png?v8", + hear_no_evil: "https://github.githubassets.com/images/icons/emoji/unicode/1f649.png?v8", + heard_mcdonald_islands: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ed-1f1f2.png?v8", + heart: "https://github.githubassets.com/images/icons/emoji/unicode/2764.png?v8", + heart_decoration: "https://github.githubassets.com/images/icons/emoji/unicode/1f49f.png?v8", + heart_eyes: "https://github.githubassets.com/images/icons/emoji/unicode/1f60d.png?v8", + heart_eyes_cat: "https://github.githubassets.com/images/icons/emoji/unicode/1f63b.png?v8", + heartbeat: "https://github.githubassets.com/images/icons/emoji/unicode/1f493.png?v8", + heartpulse: "https://github.githubassets.com/images/icons/emoji/unicode/1f497.png?v8", + hearts: "https://github.githubassets.com/images/icons/emoji/unicode/2665.png?v8", + heavy_check_mark: "https://github.githubassets.com/images/icons/emoji/unicode/2714.png?v8", + heavy_division_sign: "https://github.githubassets.com/images/icons/emoji/unicode/2797.png?v8", + heavy_dollar_sign: "https://github.githubassets.com/images/icons/emoji/unicode/1f4b2.png?v8", + heavy_exclamation_mark: "https://github.githubassets.com/images/icons/emoji/unicode/2757.png?v8", + heavy_heart_exclamation: "https://github.githubassets.com/images/icons/emoji/unicode/2763.png?v8", + heavy_minus_sign: "https://github.githubassets.com/images/icons/emoji/unicode/2796.png?v8", + heavy_multiplication_x: "https://github.githubassets.com/images/icons/emoji/unicode/2716.png?v8", + heavy_plus_sign: "https://github.githubassets.com/images/icons/emoji/unicode/2795.png?v8", + hedgehog: "https://github.githubassets.com/images/icons/emoji/unicode/1f994.png?v8", + helicopter: "https://github.githubassets.com/images/icons/emoji/unicode/1f681.png?v8", + herb: "https://github.githubassets.com/images/icons/emoji/unicode/1f33f.png?v8", + hibiscus: "https://github.githubassets.com/images/icons/emoji/unicode/1f33a.png?v8", + high_brightness: "https://github.githubassets.com/images/icons/emoji/unicode/1f506.png?v8", + high_heel: "https://github.githubassets.com/images/icons/emoji/unicode/1f460.png?v8", + hiking_boot: "https://github.githubassets.com/images/icons/emoji/unicode/1f97e.png?v8", + hindu_temple: "https://github.githubassets.com/images/icons/emoji/unicode/1f6d5.png?v8", + hippopotamus: "https://github.githubassets.com/images/icons/emoji/unicode/1f99b.png?v8", + hocho: "https://github.githubassets.com/images/icons/emoji/unicode/1f52a.png?v8", + hole: "https://github.githubassets.com/images/icons/emoji/unicode/1f573.png?v8", + honduras: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ed-1f1f3.png?v8", + honey_pot: "https://github.githubassets.com/images/icons/emoji/unicode/1f36f.png?v8", + honeybee: "https://github.githubassets.com/images/icons/emoji/unicode/1f41d.png?v8", + hong_kong: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ed-1f1f0.png?v8", + horse: "https://github.githubassets.com/images/icons/emoji/unicode/1f434.png?v8", + horse_racing: "https://github.githubassets.com/images/icons/emoji/unicode/1f3c7.png?v8", + hospital: "https://github.githubassets.com/images/icons/emoji/unicode/1f3e5.png?v8", + hot_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f975.png?v8", + hot_pepper: "https://github.githubassets.com/images/icons/emoji/unicode/1f336.png?v8", + hotdog: "https://github.githubassets.com/images/icons/emoji/unicode/1f32d.png?v8", + hotel: "https://github.githubassets.com/images/icons/emoji/unicode/1f3e8.png?v8", + hotsprings: "https://github.githubassets.com/images/icons/emoji/unicode/2668.png?v8", + hourglass: "https://github.githubassets.com/images/icons/emoji/unicode/231b.png?v8", + hourglass_flowing_sand: "https://github.githubassets.com/images/icons/emoji/unicode/23f3.png?v8", + house: "https://github.githubassets.com/images/icons/emoji/unicode/1f3e0.png?v8", + house_with_garden: "https://github.githubassets.com/images/icons/emoji/unicode/1f3e1.png?v8", + houses: "https://github.githubassets.com/images/icons/emoji/unicode/1f3d8.png?v8", + hugs: "https://github.githubassets.com/images/icons/emoji/unicode/1f917.png?v8", + hungary: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ed-1f1fa.png?v8", + hurtrealbad: "https://github.githubassets.com/images/icons/emoji/hurtrealbad.png?v8", + hushed: "https://github.githubassets.com/images/icons/emoji/unicode/1f62f.png?v8", + ice_cream: "https://github.githubassets.com/images/icons/emoji/unicode/1f368.png?v8", + ice_cube: "https://github.githubassets.com/images/icons/emoji/unicode/1f9ca.png?v8", + ice_hockey: "https://github.githubassets.com/images/icons/emoji/unicode/1f3d2.png?v8", + ice_skate: "https://github.githubassets.com/images/icons/emoji/unicode/26f8.png?v8", + icecream: "https://github.githubassets.com/images/icons/emoji/unicode/1f366.png?v8", + iceland: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1f8.png?v8", + id: "https://github.githubassets.com/images/icons/emoji/unicode/1f194.png?v8", + ideograph_advantage: "https://github.githubassets.com/images/icons/emoji/unicode/1f250.png?v8", + imp: "https://github.githubassets.com/images/icons/emoji/unicode/1f47f.png?v8", + inbox_tray: "https://github.githubassets.com/images/icons/emoji/unicode/1f4e5.png?v8", + incoming_envelope: "https://github.githubassets.com/images/icons/emoji/unicode/1f4e8.png?v8", + india: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1f3.png?v8", + indonesia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1e9.png?v8", + infinity: "https://github.githubassets.com/images/icons/emoji/unicode/267e.png?v8", + information_desk_person: "https://github.githubassets.com/images/icons/emoji/unicode/1f481.png?v8", + information_source: "https://github.githubassets.com/images/icons/emoji/unicode/2139.png?v8", + innocent: "https://github.githubassets.com/images/icons/emoji/unicode/1f607.png?v8", + interrobang: "https://github.githubassets.com/images/icons/emoji/unicode/2049.png?v8", + iphone: "https://github.githubassets.com/images/icons/emoji/unicode/1f4f1.png?v8", + iran: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1f7.png?v8", + iraq: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1f6.png?v8", + ireland: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1ea.png?v8", + isle_of_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1f2.png?v8", + israel: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1f1.png?v8", + it: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1f9.png?v8", + izakaya_lantern: "https://github.githubassets.com/images/icons/emoji/unicode/1f3ee.png?v8", + jack_o_lantern: "https://github.githubassets.com/images/icons/emoji/unicode/1f383.png?v8", + jamaica: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ef-1f1f2.png?v8", + japan: "https://github.githubassets.com/images/icons/emoji/unicode/1f5fe.png?v8", + japanese_castle: "https://github.githubassets.com/images/icons/emoji/unicode/1f3ef.png?v8", + japanese_goblin: "https://github.githubassets.com/images/icons/emoji/unicode/1f47a.png?v8", + japanese_ogre: "https://github.githubassets.com/images/icons/emoji/unicode/1f479.png?v8", + jeans: "https://github.githubassets.com/images/icons/emoji/unicode/1f456.png?v8", + jersey: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ef-1f1ea.png?v8", + jigsaw: "https://github.githubassets.com/images/icons/emoji/unicode/1f9e9.png?v8", + jordan: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ef-1f1f4.png?v8", + joy: "https://github.githubassets.com/images/icons/emoji/unicode/1f602.png?v8", + joy_cat: "https://github.githubassets.com/images/icons/emoji/unicode/1f639.png?v8", + joystick: "https://github.githubassets.com/images/icons/emoji/unicode/1f579.png?v8", + jp: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ef-1f1f5.png?v8", + judge: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-2696.png?v8", + juggling_person: "https://github.githubassets.com/images/icons/emoji/unicode/1f939.png?v8", + kaaba: "https://github.githubassets.com/images/icons/emoji/unicode/1f54b.png?v8", + kangaroo: "https://github.githubassets.com/images/icons/emoji/unicode/1f998.png?v8", + kazakhstan: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1ff.png?v8", + kenya: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1ea.png?v8", + key: "https://github.githubassets.com/images/icons/emoji/unicode/1f511.png?v8", + keyboard: "https://github.githubassets.com/images/icons/emoji/unicode/2328.png?v8", + keycap_ten: "https://github.githubassets.com/images/icons/emoji/unicode/1f51f.png?v8", + kick_scooter: "https://github.githubassets.com/images/icons/emoji/unicode/1f6f4.png?v8", + kimono: "https://github.githubassets.com/images/icons/emoji/unicode/1f458.png?v8", + kiribati: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1ee.png?v8", + kiss: "https://github.githubassets.com/images/icons/emoji/unicode/1f48b.png?v8", + kissing: "https://github.githubassets.com/images/icons/emoji/unicode/1f617.png?v8", + kissing_cat: "https://github.githubassets.com/images/icons/emoji/unicode/1f63d.png?v8", + kissing_closed_eyes: "https://github.githubassets.com/images/icons/emoji/unicode/1f61a.png?v8", + kissing_heart: "https://github.githubassets.com/images/icons/emoji/unicode/1f618.png?v8", + kissing_smiling_eyes: "https://github.githubassets.com/images/icons/emoji/unicode/1f619.png?v8", + kite: "https://github.githubassets.com/images/icons/emoji/unicode/1fa81.png?v8", + kiwi_fruit: "https://github.githubassets.com/images/icons/emoji/unicode/1f95d.png?v8", + kneeling_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f9ce-2642.png?v8", + kneeling_person: "https://github.githubassets.com/images/icons/emoji/unicode/1f9ce.png?v8", + kneeling_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f9ce-2640.png?v8", + knife: "https://github.githubassets.com/images/icons/emoji/unicode/1f52a.png?v8", + koala: "https://github.githubassets.com/images/icons/emoji/unicode/1f428.png?v8", + koko: "https://github.githubassets.com/images/icons/emoji/unicode/1f201.png?v8", + kosovo: "https://github.githubassets.com/images/icons/emoji/unicode/1f1fd-1f1f0.png?v8", + kr: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1f7.png?v8", + kuwait: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1fc.png?v8", + kyrgyzstan: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1ec.png?v8", + lab_coat: "https://github.githubassets.com/images/icons/emoji/unicode/1f97c.png?v8", + label: "https://github.githubassets.com/images/icons/emoji/unicode/1f3f7.png?v8", + lacrosse: "https://github.githubassets.com/images/icons/emoji/unicode/1f94d.png?v8", + lantern: "https://github.githubassets.com/images/icons/emoji/unicode/1f3ee.png?v8", + laos: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1e6.png?v8", + large_blue_circle: "https://github.githubassets.com/images/icons/emoji/unicode/1f535.png?v8", + large_blue_diamond: "https://github.githubassets.com/images/icons/emoji/unicode/1f537.png?v8", + large_orange_diamond: "https://github.githubassets.com/images/icons/emoji/unicode/1f536.png?v8", + last_quarter_moon: "https://github.githubassets.com/images/icons/emoji/unicode/1f317.png?v8", + last_quarter_moon_with_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f31c.png?v8", + latin_cross: "https://github.githubassets.com/images/icons/emoji/unicode/271d.png?v8", + latvia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1fb.png?v8", + laughing: "https://github.githubassets.com/images/icons/emoji/unicode/1f606.png?v8", + leafy_green: "https://github.githubassets.com/images/icons/emoji/unicode/1f96c.png?v8", + leaves: "https://github.githubassets.com/images/icons/emoji/unicode/1f343.png?v8", + lebanon: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1e7.png?v8", + ledger: "https://github.githubassets.com/images/icons/emoji/unicode/1f4d2.png?v8", + left_luggage: "https://github.githubassets.com/images/icons/emoji/unicode/1f6c5.png?v8", + left_right_arrow: "https://github.githubassets.com/images/icons/emoji/unicode/2194.png?v8", + left_speech_bubble: "https://github.githubassets.com/images/icons/emoji/unicode/1f5e8.png?v8", + leftwards_arrow_with_hook: "https://github.githubassets.com/images/icons/emoji/unicode/21a9.png?v8", + leg: "https://github.githubassets.com/images/icons/emoji/unicode/1f9b5.png?v8", + lemon: "https://github.githubassets.com/images/icons/emoji/unicode/1f34b.png?v8", + leo: "https://github.githubassets.com/images/icons/emoji/unicode/264c.png?v8", + leopard: "https://github.githubassets.com/images/icons/emoji/unicode/1f406.png?v8", + lesotho: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1f8.png?v8", + level_slider: "https://github.githubassets.com/images/icons/emoji/unicode/1f39a.png?v8", + liberia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1f7.png?v8", + libra: "https://github.githubassets.com/images/icons/emoji/unicode/264e.png?v8", + libya: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1fe.png?v8", + liechtenstein: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1ee.png?v8", + light_rail: "https://github.githubassets.com/images/icons/emoji/unicode/1f688.png?v8", + link: "https://github.githubassets.com/images/icons/emoji/unicode/1f517.png?v8", + lion: "https://github.githubassets.com/images/icons/emoji/unicode/1f981.png?v8", + lips: "https://github.githubassets.com/images/icons/emoji/unicode/1f444.png?v8", + lipstick: "https://github.githubassets.com/images/icons/emoji/unicode/1f484.png?v8", + lithuania: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1f9.png?v8", + lizard: "https://github.githubassets.com/images/icons/emoji/unicode/1f98e.png?v8", + llama: "https://github.githubassets.com/images/icons/emoji/unicode/1f999.png?v8", + lobster: "https://github.githubassets.com/images/icons/emoji/unicode/1f99e.png?v8", + lock: "https://github.githubassets.com/images/icons/emoji/unicode/1f512.png?v8", + lock_with_ink_pen: "https://github.githubassets.com/images/icons/emoji/unicode/1f50f.png?v8", + lollipop: "https://github.githubassets.com/images/icons/emoji/unicode/1f36d.png?v8", + loop: "https://github.githubassets.com/images/icons/emoji/unicode/27bf.png?v8", + lotion_bottle: "https://github.githubassets.com/images/icons/emoji/unicode/1f9f4.png?v8", + lotus_position: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d8.png?v8", + lotus_position_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d8-2642.png?v8", + lotus_position_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d8-2640.png?v8", + loud_sound: "https://github.githubassets.com/images/icons/emoji/unicode/1f50a.png?v8", + loudspeaker: "https://github.githubassets.com/images/icons/emoji/unicode/1f4e2.png?v8", + love_hotel: "https://github.githubassets.com/images/icons/emoji/unicode/1f3e9.png?v8", + love_letter: "https://github.githubassets.com/images/icons/emoji/unicode/1f48c.png?v8", + love_you_gesture: "https://github.githubassets.com/images/icons/emoji/unicode/1f91f.png?v8", + low_brightness: "https://github.githubassets.com/images/icons/emoji/unicode/1f505.png?v8", + luggage: "https://github.githubassets.com/images/icons/emoji/unicode/1f9f3.png?v8", + luxembourg: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1fa.png?v8", + lying_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f925.png?v8", + m: "https://github.githubassets.com/images/icons/emoji/unicode/24c2.png?v8", + macau: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f4.png?v8", + macedonia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f0.png?v8", + madagascar: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1ec.png?v8", + mag: "https://github.githubassets.com/images/icons/emoji/unicode/1f50d.png?v8", + mag_right: "https://github.githubassets.com/images/icons/emoji/unicode/1f50e.png?v8", + mage: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d9.png?v8", + mage_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d9-2642.png?v8", + mage_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d9-2640.png?v8", + magnet: "https://github.githubassets.com/images/icons/emoji/unicode/1f9f2.png?v8", + mahjong: "https://github.githubassets.com/images/icons/emoji/unicode/1f004.png?v8", + mailbox: "https://github.githubassets.com/images/icons/emoji/unicode/1f4eb.png?v8", + mailbox_closed: "https://github.githubassets.com/images/icons/emoji/unicode/1f4ea.png?v8", + mailbox_with_mail: "https://github.githubassets.com/images/icons/emoji/unicode/1f4ec.png?v8", + mailbox_with_no_mail: "https://github.githubassets.com/images/icons/emoji/unicode/1f4ed.png?v8", + malawi: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1fc.png?v8", + malaysia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1fe.png?v8", + maldives: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1fb.png?v8", + male_detective: "https://github.githubassets.com/images/icons/emoji/unicode/1f575-2642.png?v8", + male_sign: "https://github.githubassets.com/images/icons/emoji/unicode/2642.png?v8", + mali: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f1.png?v8", + malta: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f9.png?v8", + man: "https://github.githubassets.com/images/icons/emoji/unicode/1f468.png?v8", + man_artist: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f3a8.png?v8", + man_astronaut: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f680.png?v8", + man_cartwheeling: "https://github.githubassets.com/images/icons/emoji/unicode/1f938-2642.png?v8", + man_cook: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f373.png?v8", + man_dancing: "https://github.githubassets.com/images/icons/emoji/unicode/1f57a.png?v8", + man_facepalming: "https://github.githubassets.com/images/icons/emoji/unicode/1f926-2642.png?v8", + man_factory_worker: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f3ed.png?v8", + man_farmer: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f33e.png?v8", + man_firefighter: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f692.png?v8", + man_health_worker: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-2695.png?v8", + man_in_manual_wheelchair: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f9bd.png?v8", + man_in_motorized_wheelchair: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f9bc.png?v8", + man_in_tuxedo: "https://github.githubassets.com/images/icons/emoji/unicode/1f935.png?v8", + man_judge: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-2696.png?v8", + man_juggling: "https://github.githubassets.com/images/icons/emoji/unicode/1f939-2642.png?v8", + man_mechanic: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f527.png?v8", + man_office_worker: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f4bc.png?v8", + man_pilot: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-2708.png?v8", + man_playing_handball: "https://github.githubassets.com/images/icons/emoji/unicode/1f93e-2642.png?v8", + man_playing_water_polo: "https://github.githubassets.com/images/icons/emoji/unicode/1f93d-2642.png?v8", + man_scientist: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f52c.png?v8", + man_shrugging: "https://github.githubassets.com/images/icons/emoji/unicode/1f937-2642.png?v8", + man_singer: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f3a4.png?v8", + man_student: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f393.png?v8", + man_teacher: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f3eb.png?v8", + man_technologist: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f4bb.png?v8", + man_with_gua_pi_mao: "https://github.githubassets.com/images/icons/emoji/unicode/1f472.png?v8", + man_with_probing_cane: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f9af.png?v8", + man_with_turban: "https://github.githubassets.com/images/icons/emoji/unicode/1f473-2642.png?v8", + mandarin: "https://github.githubassets.com/images/icons/emoji/unicode/1f34a.png?v8", + mango: "https://github.githubassets.com/images/icons/emoji/unicode/1f96d.png?v8", + mans_shoe: "https://github.githubassets.com/images/icons/emoji/unicode/1f45e.png?v8", + mantelpiece_clock: "https://github.githubassets.com/images/icons/emoji/unicode/1f570.png?v8", + manual_wheelchair: "https://github.githubassets.com/images/icons/emoji/unicode/1f9bd.png?v8", + maple_leaf: "https://github.githubassets.com/images/icons/emoji/unicode/1f341.png?v8", + marshall_islands: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1ed.png?v8", + martial_arts_uniform: "https://github.githubassets.com/images/icons/emoji/unicode/1f94b.png?v8", + martinique: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f6.png?v8", + mask: "https://github.githubassets.com/images/icons/emoji/unicode/1f637.png?v8", + massage: "https://github.githubassets.com/images/icons/emoji/unicode/1f486.png?v8", + massage_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f486-2642.png?v8", + massage_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f486-2640.png?v8", + mate: "https://github.githubassets.com/images/icons/emoji/unicode/1f9c9.png?v8", + mauritania: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f7.png?v8", + mauritius: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1fa.png?v8", + mayotte: "https://github.githubassets.com/images/icons/emoji/unicode/1f1fe-1f1f9.png?v8", + meat_on_bone: "https://github.githubassets.com/images/icons/emoji/unicode/1f356.png?v8", + mechanic: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f527.png?v8", + mechanical_arm: "https://github.githubassets.com/images/icons/emoji/unicode/1f9be.png?v8", + mechanical_leg: "https://github.githubassets.com/images/icons/emoji/unicode/1f9bf.png?v8", + medal_military: "https://github.githubassets.com/images/icons/emoji/unicode/1f396.png?v8", + medal_sports: "https://github.githubassets.com/images/icons/emoji/unicode/1f3c5.png?v8", + medical_symbol: "https://github.githubassets.com/images/icons/emoji/unicode/2695.png?v8", + mega: "https://github.githubassets.com/images/icons/emoji/unicode/1f4e3.png?v8", + melon: "https://github.githubassets.com/images/icons/emoji/unicode/1f348.png?v8", + memo: "https://github.githubassets.com/images/icons/emoji/unicode/1f4dd.png?v8", + men_wrestling: "https://github.githubassets.com/images/icons/emoji/unicode/1f93c-2642.png?v8", + menorah: "https://github.githubassets.com/images/icons/emoji/unicode/1f54e.png?v8", + mens: "https://github.githubassets.com/images/icons/emoji/unicode/1f6b9.png?v8", + mermaid: "https://github.githubassets.com/images/icons/emoji/unicode/1f9dc-2640.png?v8", + merman: "https://github.githubassets.com/images/icons/emoji/unicode/1f9dc-2642.png?v8", + merperson: "https://github.githubassets.com/images/icons/emoji/unicode/1f9dc.png?v8", + metal: "https://github.githubassets.com/images/icons/emoji/unicode/1f918.png?v8", + metro: "https://github.githubassets.com/images/icons/emoji/unicode/1f687.png?v8", + mexico: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1fd.png?v8", + microbe: "https://github.githubassets.com/images/icons/emoji/unicode/1f9a0.png?v8", + micronesia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1eb-1f1f2.png?v8", + microphone: "https://github.githubassets.com/images/icons/emoji/unicode/1f3a4.png?v8", + microscope: "https://github.githubassets.com/images/icons/emoji/unicode/1f52c.png?v8", + middle_finger: "https://github.githubassets.com/images/icons/emoji/unicode/1f595.png?v8", + milk_glass: "https://github.githubassets.com/images/icons/emoji/unicode/1f95b.png?v8", + milky_way: "https://github.githubassets.com/images/icons/emoji/unicode/1f30c.png?v8", + minibus: "https://github.githubassets.com/images/icons/emoji/unicode/1f690.png?v8", + minidisc: "https://github.githubassets.com/images/icons/emoji/unicode/1f4bd.png?v8", + mobile_phone_off: "https://github.githubassets.com/images/icons/emoji/unicode/1f4f4.png?v8", + moldova: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1e9.png?v8", + monaco: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1e8.png?v8", + money_mouth_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f911.png?v8", + money_with_wings: "https://github.githubassets.com/images/icons/emoji/unicode/1f4b8.png?v8", + moneybag: "https://github.githubassets.com/images/icons/emoji/unicode/1f4b0.png?v8", + mongolia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f3.png?v8", + monkey: "https://github.githubassets.com/images/icons/emoji/unicode/1f412.png?v8", + monkey_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f435.png?v8", + monocle_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d0.png?v8", + monorail: "https://github.githubassets.com/images/icons/emoji/unicode/1f69d.png?v8", + montenegro: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1ea.png?v8", + montserrat: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f8.png?v8", + moon: "https://github.githubassets.com/images/icons/emoji/unicode/1f314.png?v8", + moon_cake: "https://github.githubassets.com/images/icons/emoji/unicode/1f96e.png?v8", + morocco: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1e6.png?v8", + mortar_board: "https://github.githubassets.com/images/icons/emoji/unicode/1f393.png?v8", + mosque: "https://github.githubassets.com/images/icons/emoji/unicode/1f54c.png?v8", + mosquito: "https://github.githubassets.com/images/icons/emoji/unicode/1f99f.png?v8", + motor_boat: "https://github.githubassets.com/images/icons/emoji/unicode/1f6e5.png?v8", + motor_scooter: "https://github.githubassets.com/images/icons/emoji/unicode/1f6f5.png?v8", + motorcycle: "https://github.githubassets.com/images/icons/emoji/unicode/1f3cd.png?v8", + motorized_wheelchair: "https://github.githubassets.com/images/icons/emoji/unicode/1f9bc.png?v8", + motorway: "https://github.githubassets.com/images/icons/emoji/unicode/1f6e3.png?v8", + mount_fuji: "https://github.githubassets.com/images/icons/emoji/unicode/1f5fb.png?v8", + mountain: "https://github.githubassets.com/images/icons/emoji/unicode/26f0.png?v8", + mountain_bicyclist: "https://github.githubassets.com/images/icons/emoji/unicode/1f6b5.png?v8", + mountain_biking_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f6b5-2642.png?v8", + mountain_biking_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f6b5-2640.png?v8", + mountain_cableway: "https://github.githubassets.com/images/icons/emoji/unicode/1f6a0.png?v8", + mountain_railway: "https://github.githubassets.com/images/icons/emoji/unicode/1f69e.png?v8", + mountain_snow: "https://github.githubassets.com/images/icons/emoji/unicode/1f3d4.png?v8", + mouse: "https://github.githubassets.com/images/icons/emoji/unicode/1f42d.png?v8", + mouse2: "https://github.githubassets.com/images/icons/emoji/unicode/1f401.png?v8", + movie_camera: "https://github.githubassets.com/images/icons/emoji/unicode/1f3a5.png?v8", + moyai: "https://github.githubassets.com/images/icons/emoji/unicode/1f5ff.png?v8", + mozambique: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1ff.png?v8", + mrs_claus: "https://github.githubassets.com/images/icons/emoji/unicode/1f936.png?v8", + muscle: "https://github.githubassets.com/images/icons/emoji/unicode/1f4aa.png?v8", + mushroom: "https://github.githubassets.com/images/icons/emoji/unicode/1f344.png?v8", + musical_keyboard: "https://github.githubassets.com/images/icons/emoji/unicode/1f3b9.png?v8", + musical_note: "https://github.githubassets.com/images/icons/emoji/unicode/1f3b5.png?v8", + musical_score: "https://github.githubassets.com/images/icons/emoji/unicode/1f3bc.png?v8", + mute: "https://github.githubassets.com/images/icons/emoji/unicode/1f507.png?v8", + myanmar: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f2.png?v8", + nail_care: "https://github.githubassets.com/images/icons/emoji/unicode/1f485.png?v8", + name_badge: "https://github.githubassets.com/images/icons/emoji/unicode/1f4db.png?v8", + namibia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1e6.png?v8", + national_park: "https://github.githubassets.com/images/icons/emoji/unicode/1f3de.png?v8", + nauru: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1f7.png?v8", + nauseated_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f922.png?v8", + nazar_amulet: "https://github.githubassets.com/images/icons/emoji/unicode/1f9ff.png?v8", + neckbeard: "https://github.githubassets.com/images/icons/emoji/neckbeard.png?v8", + necktie: "https://github.githubassets.com/images/icons/emoji/unicode/1f454.png?v8", + negative_squared_cross_mark: "https://github.githubassets.com/images/icons/emoji/unicode/274e.png?v8", + nepal: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1f5.png?v8", + nerd_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f913.png?v8", + netherlands: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1f1.png?v8", + neutral_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f610.png?v8", + new: "https://github.githubassets.com/images/icons/emoji/unicode/1f195.png?v8", + new_caledonia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1e8.png?v8", + new_moon: "https://github.githubassets.com/images/icons/emoji/unicode/1f311.png?v8", + new_moon_with_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f31a.png?v8", + new_zealand: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1ff.png?v8", + newspaper: "https://github.githubassets.com/images/icons/emoji/unicode/1f4f0.png?v8", + newspaper_roll: "https://github.githubassets.com/images/icons/emoji/unicode/1f5de.png?v8", + next_track_button: "https://github.githubassets.com/images/icons/emoji/unicode/23ed.png?v8", + ng: "https://github.githubassets.com/images/icons/emoji/unicode/1f196.png?v8", + ng_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f645-2642.png?v8", + ng_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f645-2640.png?v8", + nicaragua: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1ee.png?v8", + niger: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1ea.png?v8", + nigeria: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1ec.png?v8", + night_with_stars: "https://github.githubassets.com/images/icons/emoji/unicode/1f303.png?v8", + nine: "https://github.githubassets.com/images/icons/emoji/unicode/0039-20e3.png?v8", + niue: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1fa.png?v8", + no_bell: "https://github.githubassets.com/images/icons/emoji/unicode/1f515.png?v8", + no_bicycles: "https://github.githubassets.com/images/icons/emoji/unicode/1f6b3.png?v8", + no_entry: "https://github.githubassets.com/images/icons/emoji/unicode/26d4.png?v8", + no_entry_sign: "https://github.githubassets.com/images/icons/emoji/unicode/1f6ab.png?v8", + no_good: "https://github.githubassets.com/images/icons/emoji/unicode/1f645.png?v8", + no_good_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f645-2642.png?v8", + no_good_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f645-2640.png?v8", + no_mobile_phones: "https://github.githubassets.com/images/icons/emoji/unicode/1f4f5.png?v8", + no_mouth: "https://github.githubassets.com/images/icons/emoji/unicode/1f636.png?v8", + no_pedestrians: "https://github.githubassets.com/images/icons/emoji/unicode/1f6b7.png?v8", + no_smoking: "https://github.githubassets.com/images/icons/emoji/unicode/1f6ad.png?v8", + "non-potable_water": "https://github.githubassets.com/images/icons/emoji/unicode/1f6b1.png?v8", + norfolk_island: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1eb.png?v8", + north_korea: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1f5.png?v8", + northern_mariana_islands: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f5.png?v8", + norway: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1f4.png?v8", + nose: "https://github.githubassets.com/images/icons/emoji/unicode/1f443.png?v8", + notebook: "https://github.githubassets.com/images/icons/emoji/unicode/1f4d3.png?v8", + notebook_with_decorative_cover: "https://github.githubassets.com/images/icons/emoji/unicode/1f4d4.png?v8", + notes: "https://github.githubassets.com/images/icons/emoji/unicode/1f3b6.png?v8", + nut_and_bolt: "https://github.githubassets.com/images/icons/emoji/unicode/1f529.png?v8", + o: "https://github.githubassets.com/images/icons/emoji/unicode/2b55.png?v8", + o2: "https://github.githubassets.com/images/icons/emoji/unicode/1f17e.png?v8", + ocean: "https://github.githubassets.com/images/icons/emoji/unicode/1f30a.png?v8", + octocat: "https://github.githubassets.com/images/icons/emoji/octocat.png?v8", + octopus: "https://github.githubassets.com/images/icons/emoji/unicode/1f419.png?v8", + oden: "https://github.githubassets.com/images/icons/emoji/unicode/1f362.png?v8", + office: "https://github.githubassets.com/images/icons/emoji/unicode/1f3e2.png?v8", + office_worker: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f4bc.png?v8", + oil_drum: "https://github.githubassets.com/images/icons/emoji/unicode/1f6e2.png?v8", + ok: "https://github.githubassets.com/images/icons/emoji/unicode/1f197.png?v8", + ok_hand: "https://github.githubassets.com/images/icons/emoji/unicode/1f44c.png?v8", + ok_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f646-2642.png?v8", + ok_person: "https://github.githubassets.com/images/icons/emoji/unicode/1f646.png?v8", + ok_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f646-2640.png?v8", + old_key: "https://github.githubassets.com/images/icons/emoji/unicode/1f5dd.png?v8", + older_adult: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d3.png?v8", + older_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f474.png?v8", + older_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f475.png?v8", + om: "https://github.githubassets.com/images/icons/emoji/unicode/1f549.png?v8", + oman: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f4-1f1f2.png?v8", + on: "https://github.githubassets.com/images/icons/emoji/unicode/1f51b.png?v8", + oncoming_automobile: "https://github.githubassets.com/images/icons/emoji/unicode/1f698.png?v8", + oncoming_bus: "https://github.githubassets.com/images/icons/emoji/unicode/1f68d.png?v8", + oncoming_police_car: "https://github.githubassets.com/images/icons/emoji/unicode/1f694.png?v8", + oncoming_taxi: "https://github.githubassets.com/images/icons/emoji/unicode/1f696.png?v8", + one: "https://github.githubassets.com/images/icons/emoji/unicode/0031-20e3.png?v8", + one_piece_swimsuit: "https://github.githubassets.com/images/icons/emoji/unicode/1fa71.png?v8", + onion: "https://github.githubassets.com/images/icons/emoji/unicode/1f9c5.png?v8", + open_book: "https://github.githubassets.com/images/icons/emoji/unicode/1f4d6.png?v8", + open_file_folder: "https://github.githubassets.com/images/icons/emoji/unicode/1f4c2.png?v8", + open_hands: "https://github.githubassets.com/images/icons/emoji/unicode/1f450.png?v8", + open_mouth: "https://github.githubassets.com/images/icons/emoji/unicode/1f62e.png?v8", + open_umbrella: "https://github.githubassets.com/images/icons/emoji/unicode/2602.png?v8", + ophiuchus: "https://github.githubassets.com/images/icons/emoji/unicode/26ce.png?v8", + orange: "https://github.githubassets.com/images/icons/emoji/unicode/1f34a.png?v8", + orange_book: "https://github.githubassets.com/images/icons/emoji/unicode/1f4d9.png?v8", + orange_circle: "https://github.githubassets.com/images/icons/emoji/unicode/1f7e0.png?v8", + orange_heart: "https://github.githubassets.com/images/icons/emoji/unicode/1f9e1.png?v8", + orange_square: "https://github.githubassets.com/images/icons/emoji/unicode/1f7e7.png?v8", + orangutan: "https://github.githubassets.com/images/icons/emoji/unicode/1f9a7.png?v8", + orthodox_cross: "https://github.githubassets.com/images/icons/emoji/unicode/2626.png?v8", + otter: "https://github.githubassets.com/images/icons/emoji/unicode/1f9a6.png?v8", + outbox_tray: "https://github.githubassets.com/images/icons/emoji/unicode/1f4e4.png?v8", + owl: "https://github.githubassets.com/images/icons/emoji/unicode/1f989.png?v8", + ox: "https://github.githubassets.com/images/icons/emoji/unicode/1f402.png?v8", + oyster: "https://github.githubassets.com/images/icons/emoji/unicode/1f9aa.png?v8", + package: "https://github.githubassets.com/images/icons/emoji/unicode/1f4e6.png?v8", + page_facing_up: "https://github.githubassets.com/images/icons/emoji/unicode/1f4c4.png?v8", + page_with_curl: "https://github.githubassets.com/images/icons/emoji/unicode/1f4c3.png?v8", + pager: "https://github.githubassets.com/images/icons/emoji/unicode/1f4df.png?v8", + paintbrush: "https://github.githubassets.com/images/icons/emoji/unicode/1f58c.png?v8", + pakistan: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1f0.png?v8", + palau: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1fc.png?v8", + palestinian_territories: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1f8.png?v8", + palm_tree: "https://github.githubassets.com/images/icons/emoji/unicode/1f334.png?v8", + palms_up_together: "https://github.githubassets.com/images/icons/emoji/unicode/1f932.png?v8", + panama: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1e6.png?v8", + pancakes: "https://github.githubassets.com/images/icons/emoji/unicode/1f95e.png?v8", + panda_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f43c.png?v8", + paperclip: "https://github.githubassets.com/images/icons/emoji/unicode/1f4ce.png?v8", + paperclips: "https://github.githubassets.com/images/icons/emoji/unicode/1f587.png?v8", + papua_new_guinea: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1ec.png?v8", + parachute: "https://github.githubassets.com/images/icons/emoji/unicode/1fa82.png?v8", + paraguay: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1fe.png?v8", + parasol_on_ground: "https://github.githubassets.com/images/icons/emoji/unicode/26f1.png?v8", + parking: "https://github.githubassets.com/images/icons/emoji/unicode/1f17f.png?v8", + parrot: "https://github.githubassets.com/images/icons/emoji/unicode/1f99c.png?v8", + part_alternation_mark: "https://github.githubassets.com/images/icons/emoji/unicode/303d.png?v8", + partly_sunny: "https://github.githubassets.com/images/icons/emoji/unicode/26c5.png?v8", + partying_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f973.png?v8", + passenger_ship: "https://github.githubassets.com/images/icons/emoji/unicode/1f6f3.png?v8", + passport_control: "https://github.githubassets.com/images/icons/emoji/unicode/1f6c2.png?v8", + pause_button: "https://github.githubassets.com/images/icons/emoji/unicode/23f8.png?v8", + paw_prints: "https://github.githubassets.com/images/icons/emoji/unicode/1f43e.png?v8", + peace_symbol: "https://github.githubassets.com/images/icons/emoji/unicode/262e.png?v8", + peach: "https://github.githubassets.com/images/icons/emoji/unicode/1f351.png?v8", + peacock: "https://github.githubassets.com/images/icons/emoji/unicode/1f99a.png?v8", + peanuts: "https://github.githubassets.com/images/icons/emoji/unicode/1f95c.png?v8", + pear: "https://github.githubassets.com/images/icons/emoji/unicode/1f350.png?v8", + pen: "https://github.githubassets.com/images/icons/emoji/unicode/1f58a.png?v8", + pencil: "https://github.githubassets.com/images/icons/emoji/unicode/1f4dd.png?v8", + pencil2: "https://github.githubassets.com/images/icons/emoji/unicode/270f.png?v8", + penguin: "https://github.githubassets.com/images/icons/emoji/unicode/1f427.png?v8", + pensive: "https://github.githubassets.com/images/icons/emoji/unicode/1f614.png?v8", + people_holding_hands: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f91d-1f9d1.png?v8", + performing_arts: "https://github.githubassets.com/images/icons/emoji/unicode/1f3ad.png?v8", + persevere: "https://github.githubassets.com/images/icons/emoji/unicode/1f623.png?v8", + person_bald: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f9b2.png?v8", + person_curly_hair: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f9b1.png?v8", + person_fencing: "https://github.githubassets.com/images/icons/emoji/unicode/1f93a.png?v8", + person_in_manual_wheelchair: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f9bd.png?v8", + person_in_motorized_wheelchair: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f9bc.png?v8", + person_red_hair: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f9b0.png?v8", + person_white_hair: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f9b3.png?v8", + person_with_probing_cane: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f9af.png?v8", + person_with_turban: "https://github.githubassets.com/images/icons/emoji/unicode/1f473.png?v8", + peru: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1ea.png?v8", + petri_dish: "https://github.githubassets.com/images/icons/emoji/unicode/1f9eb.png?v8", + philippines: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1ed.png?v8", + phone: "https://github.githubassets.com/images/icons/emoji/unicode/260e.png?v8", + pick: "https://github.githubassets.com/images/icons/emoji/unicode/26cf.png?v8", + pie: "https://github.githubassets.com/images/icons/emoji/unicode/1f967.png?v8", + pig: "https://github.githubassets.com/images/icons/emoji/unicode/1f437.png?v8", + pig2: "https://github.githubassets.com/images/icons/emoji/unicode/1f416.png?v8", + pig_nose: "https://github.githubassets.com/images/icons/emoji/unicode/1f43d.png?v8", + pill: "https://github.githubassets.com/images/icons/emoji/unicode/1f48a.png?v8", + pilot: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-2708.png?v8", + pinching_hand: "https://github.githubassets.com/images/icons/emoji/unicode/1f90f.png?v8", + pineapple: "https://github.githubassets.com/images/icons/emoji/unicode/1f34d.png?v8", + ping_pong: "https://github.githubassets.com/images/icons/emoji/unicode/1f3d3.png?v8", + pirate_flag: "https://github.githubassets.com/images/icons/emoji/unicode/1f3f4-2620.png?v8", + pisces: "https://github.githubassets.com/images/icons/emoji/unicode/2653.png?v8", + pitcairn_islands: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1f3.png?v8", + pizza: "https://github.githubassets.com/images/icons/emoji/unicode/1f355.png?v8", + place_of_worship: "https://github.githubassets.com/images/icons/emoji/unicode/1f6d0.png?v8", + plate_with_cutlery: "https://github.githubassets.com/images/icons/emoji/unicode/1f37d.png?v8", + play_or_pause_button: "https://github.githubassets.com/images/icons/emoji/unicode/23ef.png?v8", + pleading_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f97a.png?v8", + point_down: "https://github.githubassets.com/images/icons/emoji/unicode/1f447.png?v8", + point_left: "https://github.githubassets.com/images/icons/emoji/unicode/1f448.png?v8", + point_right: "https://github.githubassets.com/images/icons/emoji/unicode/1f449.png?v8", + point_up: "https://github.githubassets.com/images/icons/emoji/unicode/261d.png?v8", + point_up_2: "https://github.githubassets.com/images/icons/emoji/unicode/1f446.png?v8", + poland: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1f1.png?v8", + police_car: "https://github.githubassets.com/images/icons/emoji/unicode/1f693.png?v8", + police_officer: "https://github.githubassets.com/images/icons/emoji/unicode/1f46e.png?v8", + policeman: "https://github.githubassets.com/images/icons/emoji/unicode/1f46e-2642.png?v8", + policewoman: "https://github.githubassets.com/images/icons/emoji/unicode/1f46e-2640.png?v8", + poodle: "https://github.githubassets.com/images/icons/emoji/unicode/1f429.png?v8", + poop: "https://github.githubassets.com/images/icons/emoji/unicode/1f4a9.png?v8", + popcorn: "https://github.githubassets.com/images/icons/emoji/unicode/1f37f.png?v8", + portugal: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1f9.png?v8", + post_office: "https://github.githubassets.com/images/icons/emoji/unicode/1f3e3.png?v8", + postal_horn: "https://github.githubassets.com/images/icons/emoji/unicode/1f4ef.png?v8", + postbox: "https://github.githubassets.com/images/icons/emoji/unicode/1f4ee.png?v8", + potable_water: "https://github.githubassets.com/images/icons/emoji/unicode/1f6b0.png?v8", + potato: "https://github.githubassets.com/images/icons/emoji/unicode/1f954.png?v8", + pouch: "https://github.githubassets.com/images/icons/emoji/unicode/1f45d.png?v8", + poultry_leg: "https://github.githubassets.com/images/icons/emoji/unicode/1f357.png?v8", + pound: "https://github.githubassets.com/images/icons/emoji/unicode/1f4b7.png?v8", + pout: "https://github.githubassets.com/images/icons/emoji/unicode/1f621.png?v8", + pouting_cat: "https://github.githubassets.com/images/icons/emoji/unicode/1f63e.png?v8", + pouting_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f64e.png?v8", + pouting_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f64e-2642.png?v8", + pouting_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f64e-2640.png?v8", + pray: "https://github.githubassets.com/images/icons/emoji/unicode/1f64f.png?v8", + prayer_beads: "https://github.githubassets.com/images/icons/emoji/unicode/1f4ff.png?v8", + pregnant_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f930.png?v8", + pretzel: "https://github.githubassets.com/images/icons/emoji/unicode/1f968.png?v8", + previous_track_button: "https://github.githubassets.com/images/icons/emoji/unicode/23ee.png?v8", + prince: "https://github.githubassets.com/images/icons/emoji/unicode/1f934.png?v8", + princess: "https://github.githubassets.com/images/icons/emoji/unicode/1f478.png?v8", + printer: "https://github.githubassets.com/images/icons/emoji/unicode/1f5a8.png?v8", + probing_cane: "https://github.githubassets.com/images/icons/emoji/unicode/1f9af.png?v8", + puerto_rico: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1f7.png?v8", + punch: "https://github.githubassets.com/images/icons/emoji/unicode/1f44a.png?v8", + purple_circle: "https://github.githubassets.com/images/icons/emoji/unicode/1f7e3.png?v8", + purple_heart: "https://github.githubassets.com/images/icons/emoji/unicode/1f49c.png?v8", + purple_square: "https://github.githubassets.com/images/icons/emoji/unicode/1f7ea.png?v8", + purse: "https://github.githubassets.com/images/icons/emoji/unicode/1f45b.png?v8", + pushpin: "https://github.githubassets.com/images/icons/emoji/unicode/1f4cc.png?v8", + put_litter_in_its_place: "https://github.githubassets.com/images/icons/emoji/unicode/1f6ae.png?v8", + qatar: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f6-1f1e6.png?v8", + question: "https://github.githubassets.com/images/icons/emoji/unicode/2753.png?v8", + rabbit: "https://github.githubassets.com/images/icons/emoji/unicode/1f430.png?v8", + rabbit2: "https://github.githubassets.com/images/icons/emoji/unicode/1f407.png?v8", + raccoon: "https://github.githubassets.com/images/icons/emoji/unicode/1f99d.png?v8", + racehorse: "https://github.githubassets.com/images/icons/emoji/unicode/1f40e.png?v8", + racing_car: "https://github.githubassets.com/images/icons/emoji/unicode/1f3ce.png?v8", + radio: "https://github.githubassets.com/images/icons/emoji/unicode/1f4fb.png?v8", + radio_button: "https://github.githubassets.com/images/icons/emoji/unicode/1f518.png?v8", + radioactive: "https://github.githubassets.com/images/icons/emoji/unicode/2622.png?v8", + rage: "https://github.githubassets.com/images/icons/emoji/unicode/1f621.png?v8", + rage1: "https://github.githubassets.com/images/icons/emoji/rage1.png?v8", + rage2: "https://github.githubassets.com/images/icons/emoji/rage2.png?v8", + rage3: "https://github.githubassets.com/images/icons/emoji/rage3.png?v8", + rage4: "https://github.githubassets.com/images/icons/emoji/rage4.png?v8", + railway_car: "https://github.githubassets.com/images/icons/emoji/unicode/1f683.png?v8", + railway_track: "https://github.githubassets.com/images/icons/emoji/unicode/1f6e4.png?v8", + rainbow: "https://github.githubassets.com/images/icons/emoji/unicode/1f308.png?v8", + rainbow_flag: "https://github.githubassets.com/images/icons/emoji/unicode/1f3f3-1f308.png?v8", + raised_back_of_hand: "https://github.githubassets.com/images/icons/emoji/unicode/1f91a.png?v8", + raised_eyebrow: "https://github.githubassets.com/images/icons/emoji/unicode/1f928.png?v8", + raised_hand: "https://github.githubassets.com/images/icons/emoji/unicode/270b.png?v8", + raised_hand_with_fingers_splayed: "https://github.githubassets.com/images/icons/emoji/unicode/1f590.png?v8", + raised_hands: "https://github.githubassets.com/images/icons/emoji/unicode/1f64c.png?v8", + raising_hand: "https://github.githubassets.com/images/icons/emoji/unicode/1f64b.png?v8", + raising_hand_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f64b-2642.png?v8", + raising_hand_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f64b-2640.png?v8", + ram: "https://github.githubassets.com/images/icons/emoji/unicode/1f40f.png?v8", + ramen: "https://github.githubassets.com/images/icons/emoji/unicode/1f35c.png?v8", + rat: "https://github.githubassets.com/images/icons/emoji/unicode/1f400.png?v8", + razor: "https://github.githubassets.com/images/icons/emoji/unicode/1fa92.png?v8", + receipt: "https://github.githubassets.com/images/icons/emoji/unicode/1f9fe.png?v8", + record_button: "https://github.githubassets.com/images/icons/emoji/unicode/23fa.png?v8", + recycle: "https://github.githubassets.com/images/icons/emoji/unicode/267b.png?v8", + red_car: "https://github.githubassets.com/images/icons/emoji/unicode/1f697.png?v8", + red_circle: "https://github.githubassets.com/images/icons/emoji/unicode/1f534.png?v8", + red_envelope: "https://github.githubassets.com/images/icons/emoji/unicode/1f9e7.png?v8", + red_haired_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f9b0.png?v8", + red_haired_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f9b0.png?v8", + red_square: "https://github.githubassets.com/images/icons/emoji/unicode/1f7e5.png?v8", + registered: "https://github.githubassets.com/images/icons/emoji/unicode/00ae.png?v8", + relaxed: "https://github.githubassets.com/images/icons/emoji/unicode/263a.png?v8", + relieved: "https://github.githubassets.com/images/icons/emoji/unicode/1f60c.png?v8", + reminder_ribbon: "https://github.githubassets.com/images/icons/emoji/unicode/1f397.png?v8", + repeat: "https://github.githubassets.com/images/icons/emoji/unicode/1f501.png?v8", + repeat_one: "https://github.githubassets.com/images/icons/emoji/unicode/1f502.png?v8", + rescue_worker_helmet: "https://github.githubassets.com/images/icons/emoji/unicode/26d1.png?v8", + restroom: "https://github.githubassets.com/images/icons/emoji/unicode/1f6bb.png?v8", + reunion: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f7-1f1ea.png?v8", + revolving_hearts: "https://github.githubassets.com/images/icons/emoji/unicode/1f49e.png?v8", + rewind: "https://github.githubassets.com/images/icons/emoji/unicode/23ea.png?v8", + rhinoceros: "https://github.githubassets.com/images/icons/emoji/unicode/1f98f.png?v8", + ribbon: "https://github.githubassets.com/images/icons/emoji/unicode/1f380.png?v8", + rice: "https://github.githubassets.com/images/icons/emoji/unicode/1f35a.png?v8", + rice_ball: "https://github.githubassets.com/images/icons/emoji/unicode/1f359.png?v8", + rice_cracker: "https://github.githubassets.com/images/icons/emoji/unicode/1f358.png?v8", + rice_scene: "https://github.githubassets.com/images/icons/emoji/unicode/1f391.png?v8", + right_anger_bubble: "https://github.githubassets.com/images/icons/emoji/unicode/1f5ef.png?v8", + ring: "https://github.githubassets.com/images/icons/emoji/unicode/1f48d.png?v8", + ringed_planet: "https://github.githubassets.com/images/icons/emoji/unicode/1fa90.png?v8", + robot: "https://github.githubassets.com/images/icons/emoji/unicode/1f916.png?v8", + rocket: "https://github.githubassets.com/images/icons/emoji/unicode/1f680.png?v8", + rofl: "https://github.githubassets.com/images/icons/emoji/unicode/1f923.png?v8", + roll_eyes: "https://github.githubassets.com/images/icons/emoji/unicode/1f644.png?v8", + roll_of_paper: "https://github.githubassets.com/images/icons/emoji/unicode/1f9fb.png?v8", + roller_coaster: "https://github.githubassets.com/images/icons/emoji/unicode/1f3a2.png?v8", + romania: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f7-1f1f4.png?v8", + rooster: "https://github.githubassets.com/images/icons/emoji/unicode/1f413.png?v8", + rose: "https://github.githubassets.com/images/icons/emoji/unicode/1f339.png?v8", + rosette: "https://github.githubassets.com/images/icons/emoji/unicode/1f3f5.png?v8", + rotating_light: "https://github.githubassets.com/images/icons/emoji/unicode/1f6a8.png?v8", + round_pushpin: "https://github.githubassets.com/images/icons/emoji/unicode/1f4cd.png?v8", + rowboat: "https://github.githubassets.com/images/icons/emoji/unicode/1f6a3.png?v8", + rowing_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f6a3-2642.png?v8", + rowing_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f6a3-2640.png?v8", + ru: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f7-1f1fa.png?v8", + rugby_football: "https://github.githubassets.com/images/icons/emoji/unicode/1f3c9.png?v8", + runner: "https://github.githubassets.com/images/icons/emoji/unicode/1f3c3.png?v8", + running: "https://github.githubassets.com/images/icons/emoji/unicode/1f3c3.png?v8", + running_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f3c3-2642.png?v8", + running_shirt_with_sash: "https://github.githubassets.com/images/icons/emoji/unicode/1f3bd.png?v8", + running_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f3c3-2640.png?v8", + rwanda: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f7-1f1fc.png?v8", + sa: "https://github.githubassets.com/images/icons/emoji/unicode/1f202.png?v8", + safety_pin: "https://github.githubassets.com/images/icons/emoji/unicode/1f9f7.png?v8", + safety_vest: "https://github.githubassets.com/images/icons/emoji/unicode/1f9ba.png?v8", + sagittarius: "https://github.githubassets.com/images/icons/emoji/unicode/2650.png?v8", + sailboat: "https://github.githubassets.com/images/icons/emoji/unicode/26f5.png?v8", + sake: "https://github.githubassets.com/images/icons/emoji/unicode/1f376.png?v8", + salt: "https://github.githubassets.com/images/icons/emoji/unicode/1f9c2.png?v8", + samoa: "https://github.githubassets.com/images/icons/emoji/unicode/1f1fc-1f1f8.png?v8", + san_marino: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1f2.png?v8", + sandal: "https://github.githubassets.com/images/icons/emoji/unicode/1f461.png?v8", + sandwich: "https://github.githubassets.com/images/icons/emoji/unicode/1f96a.png?v8", + santa: "https://github.githubassets.com/images/icons/emoji/unicode/1f385.png?v8", + sao_tome_principe: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1f9.png?v8", + sari: "https://github.githubassets.com/images/icons/emoji/unicode/1f97b.png?v8", + sassy_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f481-2642.png?v8", + sassy_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f481-2640.png?v8", + satellite: "https://github.githubassets.com/images/icons/emoji/unicode/1f4e1.png?v8", + satisfied: "https://github.githubassets.com/images/icons/emoji/unicode/1f606.png?v8", + saudi_arabia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1e6.png?v8", + sauna_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d6-2642.png?v8", + sauna_person: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d6.png?v8", + sauna_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d6-2640.png?v8", + sauropod: "https://github.githubassets.com/images/icons/emoji/unicode/1f995.png?v8", + saxophone: "https://github.githubassets.com/images/icons/emoji/unicode/1f3b7.png?v8", + scarf: "https://github.githubassets.com/images/icons/emoji/unicode/1f9e3.png?v8", + school: "https://github.githubassets.com/images/icons/emoji/unicode/1f3eb.png?v8", + school_satchel: "https://github.githubassets.com/images/icons/emoji/unicode/1f392.png?v8", + scientist: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f52c.png?v8", + scissors: "https://github.githubassets.com/images/icons/emoji/unicode/2702.png?v8", + scorpion: "https://github.githubassets.com/images/icons/emoji/unicode/1f982.png?v8", + scorpius: "https://github.githubassets.com/images/icons/emoji/unicode/264f.png?v8", + scotland: "https://github.githubassets.com/images/icons/emoji/unicode/1f3f4-e0067-e0062-e0073-e0063-e0074-e007f.png?v8", + scream: "https://github.githubassets.com/images/icons/emoji/unicode/1f631.png?v8", + scream_cat: "https://github.githubassets.com/images/icons/emoji/unicode/1f640.png?v8", + scroll: "https://github.githubassets.com/images/icons/emoji/unicode/1f4dc.png?v8", + seat: "https://github.githubassets.com/images/icons/emoji/unicode/1f4ba.png?v8", + secret: "https://github.githubassets.com/images/icons/emoji/unicode/3299.png?v8", + see_no_evil: "https://github.githubassets.com/images/icons/emoji/unicode/1f648.png?v8", + seedling: "https://github.githubassets.com/images/icons/emoji/unicode/1f331.png?v8", + selfie: "https://github.githubassets.com/images/icons/emoji/unicode/1f933.png?v8", + senegal: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1f3.png?v8", + serbia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f7-1f1f8.png?v8", + service_dog: "https://github.githubassets.com/images/icons/emoji/unicode/1f415-1f9ba.png?v8", + seven: "https://github.githubassets.com/images/icons/emoji/unicode/0037-20e3.png?v8", + seychelles: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1e8.png?v8", + shallow_pan_of_food: "https://github.githubassets.com/images/icons/emoji/unicode/1f958.png?v8", + shamrock: "https://github.githubassets.com/images/icons/emoji/unicode/2618.png?v8", + shark: "https://github.githubassets.com/images/icons/emoji/unicode/1f988.png?v8", + shaved_ice: "https://github.githubassets.com/images/icons/emoji/unicode/1f367.png?v8", + sheep: "https://github.githubassets.com/images/icons/emoji/unicode/1f411.png?v8", + shell: "https://github.githubassets.com/images/icons/emoji/unicode/1f41a.png?v8", + shield: "https://github.githubassets.com/images/icons/emoji/unicode/1f6e1.png?v8", + shinto_shrine: "https://github.githubassets.com/images/icons/emoji/unicode/26e9.png?v8", + ship: "https://github.githubassets.com/images/icons/emoji/unicode/1f6a2.png?v8", + shipit: "https://github.githubassets.com/images/icons/emoji/shipit.png?v8", + shirt: "https://github.githubassets.com/images/icons/emoji/unicode/1f455.png?v8", + shit: "https://github.githubassets.com/images/icons/emoji/unicode/1f4a9.png?v8", + shoe: "https://github.githubassets.com/images/icons/emoji/unicode/1f45e.png?v8", + shopping: "https://github.githubassets.com/images/icons/emoji/unicode/1f6cd.png?v8", + shopping_cart: "https://github.githubassets.com/images/icons/emoji/unicode/1f6d2.png?v8", + shorts: "https://github.githubassets.com/images/icons/emoji/unicode/1fa73.png?v8", + shower: "https://github.githubassets.com/images/icons/emoji/unicode/1f6bf.png?v8", + shrimp: "https://github.githubassets.com/images/icons/emoji/unicode/1f990.png?v8", + shrug: "https://github.githubassets.com/images/icons/emoji/unicode/1f937.png?v8", + shushing_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f92b.png?v8", + sierra_leone: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1f1.png?v8", + signal_strength: "https://github.githubassets.com/images/icons/emoji/unicode/1f4f6.png?v8", + singapore: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1ec.png?v8", + singer: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f3a4.png?v8", + sint_maarten: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1fd.png?v8", + six: "https://github.githubassets.com/images/icons/emoji/unicode/0036-20e3.png?v8", + six_pointed_star: "https://github.githubassets.com/images/icons/emoji/unicode/1f52f.png?v8", + skateboard: "https://github.githubassets.com/images/icons/emoji/unicode/1f6f9.png?v8", + ski: "https://github.githubassets.com/images/icons/emoji/unicode/1f3bf.png?v8", + skier: "https://github.githubassets.com/images/icons/emoji/unicode/26f7.png?v8", + skull: "https://github.githubassets.com/images/icons/emoji/unicode/1f480.png?v8", + skull_and_crossbones: "https://github.githubassets.com/images/icons/emoji/unicode/2620.png?v8", + skunk: "https://github.githubassets.com/images/icons/emoji/unicode/1f9a8.png?v8", + sled: "https://github.githubassets.com/images/icons/emoji/unicode/1f6f7.png?v8", + sleeping: "https://github.githubassets.com/images/icons/emoji/unicode/1f634.png?v8", + sleeping_bed: "https://github.githubassets.com/images/icons/emoji/unicode/1f6cc.png?v8", + sleepy: "https://github.githubassets.com/images/icons/emoji/unicode/1f62a.png?v8", + slightly_frowning_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f641.png?v8", + slightly_smiling_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f642.png?v8", + slot_machine: "https://github.githubassets.com/images/icons/emoji/unicode/1f3b0.png?v8", + sloth: "https://github.githubassets.com/images/icons/emoji/unicode/1f9a5.png?v8", + slovakia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1f0.png?v8", + slovenia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1ee.png?v8", + small_airplane: "https://github.githubassets.com/images/icons/emoji/unicode/1f6e9.png?v8", + small_blue_diamond: "https://github.githubassets.com/images/icons/emoji/unicode/1f539.png?v8", + small_orange_diamond: "https://github.githubassets.com/images/icons/emoji/unicode/1f538.png?v8", + small_red_triangle: "https://github.githubassets.com/images/icons/emoji/unicode/1f53a.png?v8", + small_red_triangle_down: "https://github.githubassets.com/images/icons/emoji/unicode/1f53b.png?v8", + smile: "https://github.githubassets.com/images/icons/emoji/unicode/1f604.png?v8", + smile_cat: "https://github.githubassets.com/images/icons/emoji/unicode/1f638.png?v8", + smiley: "https://github.githubassets.com/images/icons/emoji/unicode/1f603.png?v8", + smiley_cat: "https://github.githubassets.com/images/icons/emoji/unicode/1f63a.png?v8", + smiling_face_with_three_hearts: "https://github.githubassets.com/images/icons/emoji/unicode/1f970.png?v8", + smiling_imp: "https://github.githubassets.com/images/icons/emoji/unicode/1f608.png?v8", + smirk: "https://github.githubassets.com/images/icons/emoji/unicode/1f60f.png?v8", + smirk_cat: "https://github.githubassets.com/images/icons/emoji/unicode/1f63c.png?v8", + smoking: "https://github.githubassets.com/images/icons/emoji/unicode/1f6ac.png?v8", + snail: "https://github.githubassets.com/images/icons/emoji/unicode/1f40c.png?v8", + snake: "https://github.githubassets.com/images/icons/emoji/unicode/1f40d.png?v8", + sneezing_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f927.png?v8", + snowboarder: "https://github.githubassets.com/images/icons/emoji/unicode/1f3c2.png?v8", + snowflake: "https://github.githubassets.com/images/icons/emoji/unicode/2744.png?v8", + snowman: "https://github.githubassets.com/images/icons/emoji/unicode/26c4.png?v8", + snowman_with_snow: "https://github.githubassets.com/images/icons/emoji/unicode/2603.png?v8", + soap: "https://github.githubassets.com/images/icons/emoji/unicode/1f9fc.png?v8", + sob: "https://github.githubassets.com/images/icons/emoji/unicode/1f62d.png?v8", + soccer: "https://github.githubassets.com/images/icons/emoji/unicode/26bd.png?v8", + socks: "https://github.githubassets.com/images/icons/emoji/unicode/1f9e6.png?v8", + softball: "https://github.githubassets.com/images/icons/emoji/unicode/1f94e.png?v8", + solomon_islands: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1e7.png?v8", + somalia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1f4.png?v8", + soon: "https://github.githubassets.com/images/icons/emoji/unicode/1f51c.png?v8", + sos: "https://github.githubassets.com/images/icons/emoji/unicode/1f198.png?v8", + sound: "https://github.githubassets.com/images/icons/emoji/unicode/1f509.png?v8", + south_africa: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ff-1f1e6.png?v8", + south_georgia_south_sandwich_islands: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1f8.png?v8", + south_sudan: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1f8.png?v8", + space_invader: "https://github.githubassets.com/images/icons/emoji/unicode/1f47e.png?v8", + spades: "https://github.githubassets.com/images/icons/emoji/unicode/2660.png?v8", + spaghetti: "https://github.githubassets.com/images/icons/emoji/unicode/1f35d.png?v8", + sparkle: "https://github.githubassets.com/images/icons/emoji/unicode/2747.png?v8", + sparkler: "https://github.githubassets.com/images/icons/emoji/unicode/1f387.png?v8", + sparkles: "https://github.githubassets.com/images/icons/emoji/unicode/2728.png?v8", + sparkling_heart: "https://github.githubassets.com/images/icons/emoji/unicode/1f496.png?v8", + speak_no_evil: "https://github.githubassets.com/images/icons/emoji/unicode/1f64a.png?v8", + speaker: "https://github.githubassets.com/images/icons/emoji/unicode/1f508.png?v8", + speaking_head: "https://github.githubassets.com/images/icons/emoji/unicode/1f5e3.png?v8", + speech_balloon: "https://github.githubassets.com/images/icons/emoji/unicode/1f4ac.png?v8", + speedboat: "https://github.githubassets.com/images/icons/emoji/unicode/1f6a4.png?v8", + spider: "https://github.githubassets.com/images/icons/emoji/unicode/1f577.png?v8", + spider_web: "https://github.githubassets.com/images/icons/emoji/unicode/1f578.png?v8", + spiral_calendar: "https://github.githubassets.com/images/icons/emoji/unicode/1f5d3.png?v8", + spiral_notepad: "https://github.githubassets.com/images/icons/emoji/unicode/1f5d2.png?v8", + sponge: "https://github.githubassets.com/images/icons/emoji/unicode/1f9fd.png?v8", + spoon: "https://github.githubassets.com/images/icons/emoji/unicode/1f944.png?v8", + squid: "https://github.githubassets.com/images/icons/emoji/unicode/1f991.png?v8", + sri_lanka: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1f0.png?v8", + st_barthelemy: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1f1.png?v8", + st_helena: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1ed.png?v8", + st_kitts_nevis: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1f3.png?v8", + st_lucia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1e8.png?v8", + st_martin: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1eb.png?v8", + st_pierre_miquelon: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1f2.png?v8", + st_vincent_grenadines: "https://github.githubassets.com/images/icons/emoji/unicode/1f1fb-1f1e8.png?v8", + stadium: "https://github.githubassets.com/images/icons/emoji/unicode/1f3df.png?v8", + standing_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f9cd-2642.png?v8", + standing_person: "https://github.githubassets.com/images/icons/emoji/unicode/1f9cd.png?v8", + standing_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f9cd-2640.png?v8", + star: "https://github.githubassets.com/images/icons/emoji/unicode/2b50.png?v8", + star2: "https://github.githubassets.com/images/icons/emoji/unicode/1f31f.png?v8", + star_and_crescent: "https://github.githubassets.com/images/icons/emoji/unicode/262a.png?v8", + star_of_david: "https://github.githubassets.com/images/icons/emoji/unicode/2721.png?v8", + star_struck: "https://github.githubassets.com/images/icons/emoji/unicode/1f929.png?v8", + stars: "https://github.githubassets.com/images/icons/emoji/unicode/1f320.png?v8", + station: "https://github.githubassets.com/images/icons/emoji/unicode/1f689.png?v8", + statue_of_liberty: "https://github.githubassets.com/images/icons/emoji/unicode/1f5fd.png?v8", + steam_locomotive: "https://github.githubassets.com/images/icons/emoji/unicode/1f682.png?v8", + stethoscope: "https://github.githubassets.com/images/icons/emoji/unicode/1fa7a.png?v8", + stew: "https://github.githubassets.com/images/icons/emoji/unicode/1f372.png?v8", + stop_button: "https://github.githubassets.com/images/icons/emoji/unicode/23f9.png?v8", + stop_sign: "https://github.githubassets.com/images/icons/emoji/unicode/1f6d1.png?v8", + stopwatch: "https://github.githubassets.com/images/icons/emoji/unicode/23f1.png?v8", + straight_ruler: "https://github.githubassets.com/images/icons/emoji/unicode/1f4cf.png?v8", + strawberry: "https://github.githubassets.com/images/icons/emoji/unicode/1f353.png?v8", + stuck_out_tongue: "https://github.githubassets.com/images/icons/emoji/unicode/1f61b.png?v8", + stuck_out_tongue_closed_eyes: "https://github.githubassets.com/images/icons/emoji/unicode/1f61d.png?v8", + stuck_out_tongue_winking_eye: "https://github.githubassets.com/images/icons/emoji/unicode/1f61c.png?v8", + student: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f393.png?v8", + studio_microphone: "https://github.githubassets.com/images/icons/emoji/unicode/1f399.png?v8", + stuffed_flatbread: "https://github.githubassets.com/images/icons/emoji/unicode/1f959.png?v8", + sudan: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1e9.png?v8", + sun_behind_large_cloud: "https://github.githubassets.com/images/icons/emoji/unicode/1f325.png?v8", + sun_behind_rain_cloud: "https://github.githubassets.com/images/icons/emoji/unicode/1f326.png?v8", + sun_behind_small_cloud: "https://github.githubassets.com/images/icons/emoji/unicode/1f324.png?v8", + sun_with_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f31e.png?v8", + sunflower: "https://github.githubassets.com/images/icons/emoji/unicode/1f33b.png?v8", + sunglasses: "https://github.githubassets.com/images/icons/emoji/unicode/1f60e.png?v8", + sunny: "https://github.githubassets.com/images/icons/emoji/unicode/2600.png?v8", + sunrise: "https://github.githubassets.com/images/icons/emoji/unicode/1f305.png?v8", + sunrise_over_mountains: "https://github.githubassets.com/images/icons/emoji/unicode/1f304.png?v8", + superhero: "https://github.githubassets.com/images/icons/emoji/unicode/1f9b8.png?v8", + superhero_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f9b8-2642.png?v8", + superhero_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f9b8-2640.png?v8", + supervillain: "https://github.githubassets.com/images/icons/emoji/unicode/1f9b9.png?v8", + supervillain_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f9b9-2642.png?v8", + supervillain_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f9b9-2640.png?v8", + surfer: "https://github.githubassets.com/images/icons/emoji/unicode/1f3c4.png?v8", + surfing_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f3c4-2642.png?v8", + surfing_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f3c4-2640.png?v8", + suriname: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1f7.png?v8", + sushi: "https://github.githubassets.com/images/icons/emoji/unicode/1f363.png?v8", + suspect: "https://github.githubassets.com/images/icons/emoji/suspect.png?v8", + suspension_railway: "https://github.githubassets.com/images/icons/emoji/unicode/1f69f.png?v8", + svalbard_jan_mayen: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1ef.png?v8", + swan: "https://github.githubassets.com/images/icons/emoji/unicode/1f9a2.png?v8", + swaziland: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1ff.png?v8", + sweat: "https://github.githubassets.com/images/icons/emoji/unicode/1f613.png?v8", + sweat_drops: "https://github.githubassets.com/images/icons/emoji/unicode/1f4a6.png?v8", + sweat_smile: "https://github.githubassets.com/images/icons/emoji/unicode/1f605.png?v8", + sweden: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1ea.png?v8", + sweet_potato: "https://github.githubassets.com/images/icons/emoji/unicode/1f360.png?v8", + swim_brief: "https://github.githubassets.com/images/icons/emoji/unicode/1fa72.png?v8", + swimmer: "https://github.githubassets.com/images/icons/emoji/unicode/1f3ca.png?v8", + swimming_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f3ca-2642.png?v8", + swimming_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f3ca-2640.png?v8", + switzerland: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1ed.png?v8", + symbols: "https://github.githubassets.com/images/icons/emoji/unicode/1f523.png?v8", + synagogue: "https://github.githubassets.com/images/icons/emoji/unicode/1f54d.png?v8", + syria: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1fe.png?v8", + syringe: "https://github.githubassets.com/images/icons/emoji/unicode/1f489.png?v8", + "t-rex": "https://github.githubassets.com/images/icons/emoji/unicode/1f996.png?v8", + taco: "https://github.githubassets.com/images/icons/emoji/unicode/1f32e.png?v8", + tada: "https://github.githubassets.com/images/icons/emoji/unicode/1f389.png?v8", + taiwan: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1fc.png?v8", + tajikistan: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1ef.png?v8", + takeout_box: "https://github.githubassets.com/images/icons/emoji/unicode/1f961.png?v8", + tanabata_tree: "https://github.githubassets.com/images/icons/emoji/unicode/1f38b.png?v8", + tangerine: "https://github.githubassets.com/images/icons/emoji/unicode/1f34a.png?v8", + tanzania: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1ff.png?v8", + taurus: "https://github.githubassets.com/images/icons/emoji/unicode/2649.png?v8", + taxi: "https://github.githubassets.com/images/icons/emoji/unicode/1f695.png?v8", + tea: "https://github.githubassets.com/images/icons/emoji/unicode/1f375.png?v8", + teacher: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f3eb.png?v8", + technologist: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f4bb.png?v8", + teddy_bear: "https://github.githubassets.com/images/icons/emoji/unicode/1f9f8.png?v8", + telephone: "https://github.githubassets.com/images/icons/emoji/unicode/260e.png?v8", + telephone_receiver: "https://github.githubassets.com/images/icons/emoji/unicode/1f4de.png?v8", + telescope: "https://github.githubassets.com/images/icons/emoji/unicode/1f52d.png?v8", + tennis: "https://github.githubassets.com/images/icons/emoji/unicode/1f3be.png?v8", + tent: "https://github.githubassets.com/images/icons/emoji/unicode/26fa.png?v8", + test_tube: "https://github.githubassets.com/images/icons/emoji/unicode/1f9ea.png?v8", + thailand: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1ed.png?v8", + thermometer: "https://github.githubassets.com/images/icons/emoji/unicode/1f321.png?v8", + thinking: "https://github.githubassets.com/images/icons/emoji/unicode/1f914.png?v8", + thought_balloon: "https://github.githubassets.com/images/icons/emoji/unicode/1f4ad.png?v8", + thread: "https://github.githubassets.com/images/icons/emoji/unicode/1f9f5.png?v8", + three: "https://github.githubassets.com/images/icons/emoji/unicode/0033-20e3.png?v8", + thumbsdown: "https://github.githubassets.com/images/icons/emoji/unicode/1f44e.png?v8", + thumbsup: "https://github.githubassets.com/images/icons/emoji/unicode/1f44d.png?v8", + ticket: "https://github.githubassets.com/images/icons/emoji/unicode/1f3ab.png?v8", + tickets: "https://github.githubassets.com/images/icons/emoji/unicode/1f39f.png?v8", + tiger: "https://github.githubassets.com/images/icons/emoji/unicode/1f42f.png?v8", + tiger2: "https://github.githubassets.com/images/icons/emoji/unicode/1f405.png?v8", + timer_clock: "https://github.githubassets.com/images/icons/emoji/unicode/23f2.png?v8", + timor_leste: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1f1.png?v8", + tipping_hand_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f481-2642.png?v8", + tipping_hand_person: "https://github.githubassets.com/images/icons/emoji/unicode/1f481.png?v8", + tipping_hand_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f481-2640.png?v8", + tired_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f62b.png?v8", + tm: "https://github.githubassets.com/images/icons/emoji/unicode/2122.png?v8", + togo: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1ec.png?v8", + toilet: "https://github.githubassets.com/images/icons/emoji/unicode/1f6bd.png?v8", + tokelau: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1f0.png?v8", + tokyo_tower: "https://github.githubassets.com/images/icons/emoji/unicode/1f5fc.png?v8", + tomato: "https://github.githubassets.com/images/icons/emoji/unicode/1f345.png?v8", + tonga: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1f4.png?v8", + tongue: "https://github.githubassets.com/images/icons/emoji/unicode/1f445.png?v8", + toolbox: "https://github.githubassets.com/images/icons/emoji/unicode/1f9f0.png?v8", + tooth: "https://github.githubassets.com/images/icons/emoji/unicode/1f9b7.png?v8", + top: "https://github.githubassets.com/images/icons/emoji/unicode/1f51d.png?v8", + tophat: "https://github.githubassets.com/images/icons/emoji/unicode/1f3a9.png?v8", + tornado: "https://github.githubassets.com/images/icons/emoji/unicode/1f32a.png?v8", + tr: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1f7.png?v8", + trackball: "https://github.githubassets.com/images/icons/emoji/unicode/1f5b2.png?v8", + tractor: "https://github.githubassets.com/images/icons/emoji/unicode/1f69c.png?v8", + traffic_light: "https://github.githubassets.com/images/icons/emoji/unicode/1f6a5.png?v8", + train: "https://github.githubassets.com/images/icons/emoji/unicode/1f68b.png?v8", + train2: "https://github.githubassets.com/images/icons/emoji/unicode/1f686.png?v8", + tram: "https://github.githubassets.com/images/icons/emoji/unicode/1f68a.png?v8", + triangular_flag_on_post: "https://github.githubassets.com/images/icons/emoji/unicode/1f6a9.png?v8", + triangular_ruler: "https://github.githubassets.com/images/icons/emoji/unicode/1f4d0.png?v8", + trident: "https://github.githubassets.com/images/icons/emoji/unicode/1f531.png?v8", + trinidad_tobago: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1f9.png?v8", + tristan_da_cunha: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1e6.png?v8", + triumph: "https://github.githubassets.com/images/icons/emoji/unicode/1f624.png?v8", + trolleybus: "https://github.githubassets.com/images/icons/emoji/unicode/1f68e.png?v8", + trollface: "https://github.githubassets.com/images/icons/emoji/trollface.png?v8", + trophy: "https://github.githubassets.com/images/icons/emoji/unicode/1f3c6.png?v8", + tropical_drink: "https://github.githubassets.com/images/icons/emoji/unicode/1f379.png?v8", + tropical_fish: "https://github.githubassets.com/images/icons/emoji/unicode/1f420.png?v8", + truck: "https://github.githubassets.com/images/icons/emoji/unicode/1f69a.png?v8", + trumpet: "https://github.githubassets.com/images/icons/emoji/unicode/1f3ba.png?v8", + tshirt: "https://github.githubassets.com/images/icons/emoji/unicode/1f455.png?v8", + tulip: "https://github.githubassets.com/images/icons/emoji/unicode/1f337.png?v8", + tumbler_glass: "https://github.githubassets.com/images/icons/emoji/unicode/1f943.png?v8", + tunisia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1f3.png?v8", + turkey: "https://github.githubassets.com/images/icons/emoji/unicode/1f983.png?v8", + turkmenistan: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1f2.png?v8", + turks_caicos_islands: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1e8.png?v8", + turtle: "https://github.githubassets.com/images/icons/emoji/unicode/1f422.png?v8", + tuvalu: "https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1fb.png?v8", + tv: "https://github.githubassets.com/images/icons/emoji/unicode/1f4fa.png?v8", + twisted_rightwards_arrows: "https://github.githubassets.com/images/icons/emoji/unicode/1f500.png?v8", + two: "https://github.githubassets.com/images/icons/emoji/unicode/0032-20e3.png?v8", + two_hearts: "https://github.githubassets.com/images/icons/emoji/unicode/1f495.png?v8", + two_men_holding_hands: "https://github.githubassets.com/images/icons/emoji/unicode/1f46c.png?v8", + two_women_holding_hands: "https://github.githubassets.com/images/icons/emoji/unicode/1f46d.png?v8", + u5272: "https://github.githubassets.com/images/icons/emoji/unicode/1f239.png?v8", + u5408: "https://github.githubassets.com/images/icons/emoji/unicode/1f234.png?v8", + u55b6: "https://github.githubassets.com/images/icons/emoji/unicode/1f23a.png?v8", + u6307: "https://github.githubassets.com/images/icons/emoji/unicode/1f22f.png?v8", + u6708: "https://github.githubassets.com/images/icons/emoji/unicode/1f237.png?v8", + u6709: "https://github.githubassets.com/images/icons/emoji/unicode/1f236.png?v8", + u6e80: "https://github.githubassets.com/images/icons/emoji/unicode/1f235.png?v8", + u7121: "https://github.githubassets.com/images/icons/emoji/unicode/1f21a.png?v8", + u7533: "https://github.githubassets.com/images/icons/emoji/unicode/1f238.png?v8", + u7981: "https://github.githubassets.com/images/icons/emoji/unicode/1f232.png?v8", + u7a7a: "https://github.githubassets.com/images/icons/emoji/unicode/1f233.png?v8", + uganda: "https://github.githubassets.com/images/icons/emoji/unicode/1f1fa-1f1ec.png?v8", + uk: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1e7.png?v8", + ukraine: "https://github.githubassets.com/images/icons/emoji/unicode/1f1fa-1f1e6.png?v8", + umbrella: "https://github.githubassets.com/images/icons/emoji/unicode/2614.png?v8", + unamused: "https://github.githubassets.com/images/icons/emoji/unicode/1f612.png?v8", + underage: "https://github.githubassets.com/images/icons/emoji/unicode/1f51e.png?v8", + unicorn: "https://github.githubassets.com/images/icons/emoji/unicode/1f984.png?v8", + united_arab_emirates: "https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1ea.png?v8", + united_nations: "https://github.githubassets.com/images/icons/emoji/unicode/1f1fa-1f1f3.png?v8", + unlock: "https://github.githubassets.com/images/icons/emoji/unicode/1f513.png?v8", + up: "https://github.githubassets.com/images/icons/emoji/unicode/1f199.png?v8", + upside_down_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f643.png?v8", + uruguay: "https://github.githubassets.com/images/icons/emoji/unicode/1f1fa-1f1fe.png?v8", + us: "https://github.githubassets.com/images/icons/emoji/unicode/1f1fa-1f1f8.png?v8", + us_outlying_islands: "https://github.githubassets.com/images/icons/emoji/unicode/1f1fa-1f1f2.png?v8", + us_virgin_islands: "https://github.githubassets.com/images/icons/emoji/unicode/1f1fb-1f1ee.png?v8", + uzbekistan: "https://github.githubassets.com/images/icons/emoji/unicode/1f1fa-1f1ff.png?v8", + v: "https://github.githubassets.com/images/icons/emoji/unicode/270c.png?v8", + vampire: "https://github.githubassets.com/images/icons/emoji/unicode/1f9db.png?v8", + vampire_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f9db-2642.png?v8", + vampire_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f9db-2640.png?v8", + vanuatu: "https://github.githubassets.com/images/icons/emoji/unicode/1f1fb-1f1fa.png?v8", + vatican_city: "https://github.githubassets.com/images/icons/emoji/unicode/1f1fb-1f1e6.png?v8", + venezuela: "https://github.githubassets.com/images/icons/emoji/unicode/1f1fb-1f1ea.png?v8", + vertical_traffic_light: "https://github.githubassets.com/images/icons/emoji/unicode/1f6a6.png?v8", + vhs: "https://github.githubassets.com/images/icons/emoji/unicode/1f4fc.png?v8", + vibration_mode: "https://github.githubassets.com/images/icons/emoji/unicode/1f4f3.png?v8", + video_camera: "https://github.githubassets.com/images/icons/emoji/unicode/1f4f9.png?v8", + video_game: "https://github.githubassets.com/images/icons/emoji/unicode/1f3ae.png?v8", + vietnam: "https://github.githubassets.com/images/icons/emoji/unicode/1f1fb-1f1f3.png?v8", + violin: "https://github.githubassets.com/images/icons/emoji/unicode/1f3bb.png?v8", + virgo: "https://github.githubassets.com/images/icons/emoji/unicode/264d.png?v8", + volcano: "https://github.githubassets.com/images/icons/emoji/unicode/1f30b.png?v8", + volleyball: "https://github.githubassets.com/images/icons/emoji/unicode/1f3d0.png?v8", + vomiting_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f92e.png?v8", + vs: "https://github.githubassets.com/images/icons/emoji/unicode/1f19a.png?v8", + vulcan_salute: "https://github.githubassets.com/images/icons/emoji/unicode/1f596.png?v8", + waffle: "https://github.githubassets.com/images/icons/emoji/unicode/1f9c7.png?v8", + wales: "https://github.githubassets.com/images/icons/emoji/unicode/1f3f4-e0067-e0062-e0077-e006c-e0073-e007f.png?v8", + walking: "https://github.githubassets.com/images/icons/emoji/unicode/1f6b6.png?v8", + walking_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f6b6-2642.png?v8", + walking_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f6b6-2640.png?v8", + wallis_futuna: "https://github.githubassets.com/images/icons/emoji/unicode/1f1fc-1f1eb.png?v8", + waning_crescent_moon: "https://github.githubassets.com/images/icons/emoji/unicode/1f318.png?v8", + waning_gibbous_moon: "https://github.githubassets.com/images/icons/emoji/unicode/1f316.png?v8", + warning: "https://github.githubassets.com/images/icons/emoji/unicode/26a0.png?v8", + wastebasket: "https://github.githubassets.com/images/icons/emoji/unicode/1f5d1.png?v8", + watch: "https://github.githubassets.com/images/icons/emoji/unicode/231a.png?v8", + water_buffalo: "https://github.githubassets.com/images/icons/emoji/unicode/1f403.png?v8", + water_polo: "https://github.githubassets.com/images/icons/emoji/unicode/1f93d.png?v8", + watermelon: "https://github.githubassets.com/images/icons/emoji/unicode/1f349.png?v8", + wave: "https://github.githubassets.com/images/icons/emoji/unicode/1f44b.png?v8", + wavy_dash: "https://github.githubassets.com/images/icons/emoji/unicode/3030.png?v8", + waxing_crescent_moon: "https://github.githubassets.com/images/icons/emoji/unicode/1f312.png?v8", + waxing_gibbous_moon: "https://github.githubassets.com/images/icons/emoji/unicode/1f314.png?v8", + wc: "https://github.githubassets.com/images/icons/emoji/unicode/1f6be.png?v8", + weary: "https://github.githubassets.com/images/icons/emoji/unicode/1f629.png?v8", + wedding: "https://github.githubassets.com/images/icons/emoji/unicode/1f492.png?v8", + weight_lifting: "https://github.githubassets.com/images/icons/emoji/unicode/1f3cb.png?v8", + weight_lifting_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f3cb-2642.png?v8", + weight_lifting_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f3cb-2640.png?v8", + western_sahara: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1ed.png?v8", + whale: "https://github.githubassets.com/images/icons/emoji/unicode/1f433.png?v8", + whale2: "https://github.githubassets.com/images/icons/emoji/unicode/1f40b.png?v8", + wheel_of_dharma: "https://github.githubassets.com/images/icons/emoji/unicode/2638.png?v8", + wheelchair: "https://github.githubassets.com/images/icons/emoji/unicode/267f.png?v8", + white_check_mark: "https://github.githubassets.com/images/icons/emoji/unicode/2705.png?v8", + white_circle: "https://github.githubassets.com/images/icons/emoji/unicode/26aa.png?v8", + white_flag: "https://github.githubassets.com/images/icons/emoji/unicode/1f3f3.png?v8", + white_flower: "https://github.githubassets.com/images/icons/emoji/unicode/1f4ae.png?v8", + white_haired_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f9b3.png?v8", + white_haired_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f9b3.png?v8", + white_heart: "https://github.githubassets.com/images/icons/emoji/unicode/1f90d.png?v8", + white_large_square: "https://github.githubassets.com/images/icons/emoji/unicode/2b1c.png?v8", + white_medium_small_square: "https://github.githubassets.com/images/icons/emoji/unicode/25fd.png?v8", + white_medium_square: "https://github.githubassets.com/images/icons/emoji/unicode/25fb.png?v8", + white_small_square: "https://github.githubassets.com/images/icons/emoji/unicode/25ab.png?v8", + white_square_button: "https://github.githubassets.com/images/icons/emoji/unicode/1f533.png?v8", + wilted_flower: "https://github.githubassets.com/images/icons/emoji/unicode/1f940.png?v8", + wind_chime: "https://github.githubassets.com/images/icons/emoji/unicode/1f390.png?v8", + wind_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f32c.png?v8", + wine_glass: "https://github.githubassets.com/images/icons/emoji/unicode/1f377.png?v8", + wink: "https://github.githubassets.com/images/icons/emoji/unicode/1f609.png?v8", + wolf: "https://github.githubassets.com/images/icons/emoji/unicode/1f43a.png?v8", + woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f469.png?v8", + woman_artist: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f3a8.png?v8", + woman_astronaut: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f680.png?v8", + woman_cartwheeling: "https://github.githubassets.com/images/icons/emoji/unicode/1f938-2640.png?v8", + woman_cook: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f373.png?v8", + woman_dancing: "https://github.githubassets.com/images/icons/emoji/unicode/1f483.png?v8", + woman_facepalming: "https://github.githubassets.com/images/icons/emoji/unicode/1f926-2640.png?v8", + woman_factory_worker: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f3ed.png?v8", + woman_farmer: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f33e.png?v8", + woman_firefighter: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f692.png?v8", + woman_health_worker: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-2695.png?v8", + woman_in_manual_wheelchair: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f9bd.png?v8", + woman_in_motorized_wheelchair: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f9bc.png?v8", + woman_judge: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-2696.png?v8", + woman_juggling: "https://github.githubassets.com/images/icons/emoji/unicode/1f939-2640.png?v8", + woman_mechanic: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f527.png?v8", + woman_office_worker: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f4bc.png?v8", + woman_pilot: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-2708.png?v8", + woman_playing_handball: "https://github.githubassets.com/images/icons/emoji/unicode/1f93e-2640.png?v8", + woman_playing_water_polo: "https://github.githubassets.com/images/icons/emoji/unicode/1f93d-2640.png?v8", + woman_scientist: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f52c.png?v8", + woman_shrugging: "https://github.githubassets.com/images/icons/emoji/unicode/1f937-2640.png?v8", + woman_singer: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f3a4.png?v8", + woman_student: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f393.png?v8", + woman_teacher: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f3eb.png?v8", + woman_technologist: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f4bb.png?v8", + woman_with_headscarf: "https://github.githubassets.com/images/icons/emoji/unicode/1f9d5.png?v8", + woman_with_probing_cane: "https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f9af.png?v8", + woman_with_turban: "https://github.githubassets.com/images/icons/emoji/unicode/1f473-2640.png?v8", + womans_clothes: "https://github.githubassets.com/images/icons/emoji/unicode/1f45a.png?v8", + womans_hat: "https://github.githubassets.com/images/icons/emoji/unicode/1f452.png?v8", + women_wrestling: "https://github.githubassets.com/images/icons/emoji/unicode/1f93c-2640.png?v8", + womens: "https://github.githubassets.com/images/icons/emoji/unicode/1f6ba.png?v8", + woozy_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f974.png?v8", + world_map: "https://github.githubassets.com/images/icons/emoji/unicode/1f5fa.png?v8", + worried: "https://github.githubassets.com/images/icons/emoji/unicode/1f61f.png?v8", + wrench: "https://github.githubassets.com/images/icons/emoji/unicode/1f527.png?v8", + wrestling: "https://github.githubassets.com/images/icons/emoji/unicode/1f93c.png?v8", + writing_hand: "https://github.githubassets.com/images/icons/emoji/unicode/270d.png?v8", + x: "https://github.githubassets.com/images/icons/emoji/unicode/274c.png?v8", + yarn: "https://github.githubassets.com/images/icons/emoji/unicode/1f9f6.png?v8", + yawning_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f971.png?v8", + yellow_circle: "https://github.githubassets.com/images/icons/emoji/unicode/1f7e1.png?v8", + yellow_heart: "https://github.githubassets.com/images/icons/emoji/unicode/1f49b.png?v8", + yellow_square: "https://github.githubassets.com/images/icons/emoji/unicode/1f7e8.png?v8", + yemen: "https://github.githubassets.com/images/icons/emoji/unicode/1f1fe-1f1ea.png?v8", + yen: "https://github.githubassets.com/images/icons/emoji/unicode/1f4b4.png?v8", + yin_yang: "https://github.githubassets.com/images/icons/emoji/unicode/262f.png?v8", + yo_yo: "https://github.githubassets.com/images/icons/emoji/unicode/1fa80.png?v8", + yum: "https://github.githubassets.com/images/icons/emoji/unicode/1f60b.png?v8", + zambia: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ff-1f1f2.png?v8", + zany_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f92a.png?v8", + zap: "https://github.githubassets.com/images/icons/emoji/unicode/26a1.png?v8", + zebra: "https://github.githubassets.com/images/icons/emoji/unicode/1f993.png?v8", + zero: "https://github.githubassets.com/images/icons/emoji/unicode/0030-20e3.png?v8", + zimbabwe: "https://github.githubassets.com/images/icons/emoji/unicode/1f1ff-1f1fc.png?v8", + zipper_mouth_face: "https://github.githubassets.com/images/icons/emoji/unicode/1f910.png?v8", + zombie: "https://github.githubassets.com/images/icons/emoji/unicode/1f9df.png?v8", + zombie_man: "https://github.githubassets.com/images/icons/emoji/unicode/1f9df-2642.png?v8", + zombie_woman: "https://github.githubassets.com/images/icons/emoji/unicode/1f9df-2640.png?v8", + zzz: "https://github.githubassets.com/images/icons/emoji/unicode/1f4a4.png?v8", }, }) } diff --git a/tests/mocks/api/github/rest/rateLimit/get.mjs b/tests/mocks/api/github/rest/rateLimit/get.mjs index 47b4f714..9a468bdb 100644 --- a/tests/mocks/api/github/rest/rateLimit/get.mjs +++ b/tests/mocks/api/github/rest/rateLimit/get.mjs @@ -1,23 +1,23 @@ /**Mocked data */ -export default function({faker}, target, that, args) { +export default function({ faker }, target, that, args) { return ({ - status:200, - url:"https://api.github.com/rate_limit", - headers:{ - server:"GitHub.com", - status:"200 OK", - "x-oauth-scopes":"repo", + status: 200, + url: "https://api.github.com/rate_limit", + headers: { + server: "GitHub.com", + status: "200 OK", + "x-oauth-scopes": "repo", }, - data:{ - resources:{ - core:{limit:5000, used:0, remaining:5000, reset:0}, - search:{limit:30, used:0, remaining:30, reset:0}, - graphql:{limit:5000, used:0, remaining:5000, reset:0}, - integration_manifest:{limit:5000, used:0, remaining:5000, reset:0}, - source_import:{limit:100, used:0, remaining:100, reset:0}, - code_scanning_upload:{limit:500, used:0, remaining:500, reset:0}, + data: { + resources: { + core: { limit: 5000, used: 0, remaining: 5000, reset: 0 }, + search: { limit: 30, used: 0, remaining: 30, reset: 0 }, + graphql: { limit: 5000, used: 0, remaining: 5000, reset: 0 }, + integration_manifest: { limit: 5000, used: 0, remaining: 5000, reset: 0 }, + source_import: { limit: 100, used: 0, remaining: 100, reset: 0 }, + code_scanning_upload: { limit: 500, used: 0, remaining: 500, reset: 0 }, }, - rate:{limit:5000, used:0, remaining:"MOCKED", reset:0}, + rate: { limit: 5000, used: 0, remaining: "MOCKED", reset: 0 }, }, }) } diff --git a/tests/mocks/api/github/rest/repos/getContributorsStats.mjs b/tests/mocks/api/github/rest/repos/getContributorsStats.mjs index 062cb916..bf6d70fa 100644 --- a/tests/mocks/api/github/rest/repos/getContributorsStats.mjs +++ b/tests/mocks/api/github/rest/repos/getContributorsStats.mjs @@ -1,25 +1,25 @@ /**Mocked data */ -export default function({faker}, target, that, [{owner, repo}]) { +export default function({ faker }, target, that, [{ owner, repo }]) { console.debug("metrics/compute/mocks > mocking rest api result > rest.repos.getContributorsStats") return ({ - status:200, - url:`https://api.github.com/repos/${owner}/${repo}/stats/contributors`, - headers:{ - server:"GitHub.com", - status:"200 OK", - "x-oauth-scopes":"repo", + status: 200, + url: `https://api.github.com/repos/${owner}/${repo}/stats/contributors`, + headers: { + server: "GitHub.com", + status: "200 OK", + "x-oauth-scopes": "repo", }, - data:[ + data: [ { - total:faker.datatype.number(10000), - weeks:[ - {w:1, a:faker.datatype.number(10000), d:faker.datatype.number(10000), c:faker.datatype.number(10000)}, - {w:2, a:faker.datatype.number(10000), d:faker.datatype.number(10000), c:faker.datatype.number(10000)}, - {w:3, a:faker.datatype.number(10000), d:faker.datatype.number(10000), c:faker.datatype.number(10000)}, - {w:4, a:faker.datatype.number(10000), d:faker.datatype.number(10000), c:faker.datatype.number(10000)}, + total: faker.datatype.number(10000), + weeks: [ + { w: 1, a: faker.datatype.number(10000), d: faker.datatype.number(10000), c: faker.datatype.number(10000) }, + { w: 2, a: faker.datatype.number(10000), d: faker.datatype.number(10000), c: faker.datatype.number(10000) }, + { w: 3, a: faker.datatype.number(10000), d: faker.datatype.number(10000), c: faker.datatype.number(10000) }, + { w: 4, a: faker.datatype.number(10000), d: faker.datatype.number(10000), c: faker.datatype.number(10000) }, ], - author:{ - login:owner, + author: { + login: owner, }, }, ], diff --git a/tests/mocks/api/github/rest/repos/getViews.mjs b/tests/mocks/api/github/rest/repos/getViews.mjs index 1a94c1da..8516271b 100644 --- a/tests/mocks/api/github/rest/repos/getViews.mjs +++ b/tests/mocks/api/github/rest/repos/getViews.mjs @@ -1,22 +1,22 @@ /**Mocked data */ -export default function({faker}, target, that, [{owner, repo}]) { +export default function({ faker }, target, that, [{ owner, repo }]) { console.debug("metrics/compute/mocks > mocking rest api result > rest.repos.getViews") const count = faker.datatype.number(10000) * 2 const uniques = faker.datatype.number(count) * 2 return ({ - status:200, - url:`https://api.github.com/repos/${owner}/${repo}/traffic/views`, - headers:{ - server:"GitHub.com", - status:"200 OK", - "x-oauth-scopes":"repo", + status: 200, + url: `https://api.github.com/repos/${owner}/${repo}/traffic/views`, + headers: { + server: "GitHub.com", + status: "200 OK", + "x-oauth-scopes": "repo", }, - data:{ + data: { count, uniques, - views:[ - {timestamp:`${faker.date.recent()}`, count:count / 2, uniques:uniques / 2}, - {timestamp:`${faker.date.recent()}`, count:count / 2, uniques:uniques / 2}, + views: [ + { timestamp: `${faker.date.recent()}`, count: count / 2, uniques: uniques / 2 }, + { timestamp: `${faker.date.recent()}`, count: count / 2, uniques: uniques / 2 }, ], }, }) diff --git a/tests/mocks/api/github/rest/repos/listCommits.mjs b/tests/mocks/api/github/rest/repos/listCommits.mjs index e996f3cb..60b15449 100644 --- a/tests/mocks/api/github/rest/repos/listCommits.mjs +++ b/tests/mocks/api/github/rest/repos/listCommits.mjs @@ -1,33 +1,33 @@ /**Mocked data */ -export default function({faker}, target, that, [{page, per_page, owner, repo}]) { +export default function({ faker }, target, that, [{ page, per_page, owner, repo }]) { console.debug("metrics/compute/mocks > mocking rest api result > rest.repos.listCommits") return ({ - status:200, - url:`https://api.github.com/repos/${owner}/${repo}/commits?per_page=${per_page}&page=${page}`, - headers:{ - server:"GitHub.com", - status:"200 OK", - "x-oauth-scopes":"repo", + status: 200, + url: `https://api.github.com/repos/${owner}/${repo}/commits?per_page=${per_page}&page=${page}`, + headers: { + server: "GitHub.com", + status: "200 OK", + "x-oauth-scopes": "repo", }, - data:page < 2 + data: page < 2 ? new Array(per_page).fill(null).map(() => ({ - sha:"MOCKED_SHA", + sha: "MOCKED_SHA", get author() { return this.commit.author }, - commit:{ - message:faker.lorem.sentence(), - author:{ - name:owner, - login:faker.internet.userName(), - avatar_url:null, - date:`${faker.date.recent(14)}`, + commit: { + message: faker.lorem.sentence(), + author: { + name: owner, + login: faker.internet.userName(), + avatar_url: null, + date: `${faker.date.recent(14)}`, }, - committer:{ - name:owner, - login:faker.internet.userName(), - avatar_url:null, - date:`${faker.date.recent(14)}`, + committer: { + name: owner, + login: faker.internet.userName(), + avatar_url: null, + date: `${faker.date.recent(14)}`, }, }, })) diff --git a/tests/mocks/api/github/rest/repos/listContributors.mjs b/tests/mocks/api/github/rest/repos/listContributors.mjs index 1fde85bf..22117a60 100644 --- a/tests/mocks/api/github/rest/repos/listContributors.mjs +++ b/tests/mocks/api/github/rest/repos/listContributors.mjs @@ -1,18 +1,18 @@ /**Mocked data */ -export default function({faker}, target, that, [{owner, repo}]) { +export default function({ faker }, target, that, [{ owner, repo }]) { console.debug("metrics/compute/mocks > mocking rest api result > rest.repos.listContributors") return ({ - status:200, - url:`https://api.github.com/repos/${owner}/${repo}/contributors`, - headers:{ - server:"GitHub.com", - status:"200 OK", - "x-oauth-scopes":"repo", + status: 200, + url: `https://api.github.com/repos/${owner}/${repo}/contributors`, + headers: { + server: "GitHub.com", + status: "200 OK", + "x-oauth-scopes": "repo", }, - data:new Array(40 + faker.datatype.number(60)).fill(null).map(() => ({ - login:faker.internet.userName(), - avatar_url:null, - contributions:faker.datatype.number(1000), + data: new Array(40 + faker.datatype.number(60)).fill(null).map(() => ({ + login: faker.internet.userName(), + avatar_url: null, + contributions: faker.datatype.number(1000), })), }) } diff --git a/tests/mocks/api/github/rest/request.mjs b/tests/mocks/api/github/rest/request.mjs index c038cc07..e96b30aa 100644 --- a/tests/mocks/api/github/rest/request.mjs +++ b/tests/mocks/api/github/rest/request.mjs @@ -1,55 +1,55 @@ /**Mocked data */ -export default function({faker}, target, that, args) { +export default function({ faker }, target, that, args) { //Arguments const [url] = args //Head request if (/^HEAD .$/.test(url)) { console.debug("metrics/compute/mocks > mocking rest api result > rest.request HEAD") return ({ - status:200, - url:"https://api.github.com/", - headers:{ - server:"GitHub.com", - status:"200 OK", - "x-oauth-scopes":"repo", + status: 200, + url: "https://api.github.com/", + headers: { + server: "GitHub.com", + status: "200 OK", + "x-oauth-scopes": "repo", }, - data:undefined, + data: undefined, }) } //Commit content if (/^https:..api.github.com.repos.lowlighter.metrics.commits.MOCKED_SHA/.test(url)) { console.debug(`metrics/compute/mocks > mocking rest api result > rest.request ${url}`) return ({ - status:200, - url:"https://api.github.com/repos/lowlighter/metrics/commits/MOCKED_SHA", - data:{ - sha:"MOCKED_SHA", - commit:{ - author:{ - name:faker.internet.userName(), - email:faker.internet.email(), - date:`${faker.date.recent(7)}`, + status: 200, + url: "https://api.github.com/repos/lowlighter/metrics/commits/MOCKED_SHA", + data: { + sha: "MOCKED_SHA", + commit: { + author: { + name: faker.internet.userName(), + email: faker.internet.email(), + date: `${faker.date.recent(7)}`, }, - committer:{ - name:faker.internet.userName(), - email:faker.internet.email(), - date:`${faker.date.recent(7)}`, + committer: { + name: faker.internet.userName(), + email: faker.internet.email(), + date: `${faker.date.recent(7)}`, }, - url:"https://api.github.com/repos/lowlighter/metrics/commits/MOCKED_SHA", + url: "https://api.github.com/repos/lowlighter/metrics/commits/MOCKED_SHA", }, - author:{ - login:faker.internet.userName(), - id:faker.datatype.number(100000000), + author: { + login: faker.internet.userName(), + id: faker.datatype.number(100000000), }, - committer:{ - login:faker.internet.userName(), - id:faker.datatype.number(100000000), + committer: { + login: faker.internet.userName(), + id: faker.datatype.number(100000000), }, - files:[ + files: [ { - sha:"MOCKED_SHA", - filename:faker.system.fileName(), - patch:'@@ -0,0 +1,5 @@\n+//Imports\n+ import app from "./src/app.mjs"\n+\n+//Start app\n+ await app()\n\\ No newline at end of file', + sha: "MOCKED_SHA", + filename: faker.system.fileName(), + patch: '@@ -0,0 +1,5 @@\n+//Imports\n+ import app from "./src/app.mjs"\n+\n+//Start app\n+ await app()\n\\ No newline at end of file', }, ], }, diff --git a/tests/mocks/api/github/rest/users/getByUsername.mjs b/tests/mocks/api/github/rest/users/getByUsername.mjs index 2e0e7d45..22d80e4f 100644 --- a/tests/mocks/api/github/rest/users/getByUsername.mjs +++ b/tests/mocks/api/github/rest/users/getByUsername.mjs @@ -1,18 +1,18 @@ /**Mocked data */ -export default function({faker}, target, that, [{username}]) { +export default function({ faker }, target, that, [{ username }]) { console.debug("metrics/compute/mocks > mocking rest api result > rest.repos.getByUsername") return ({ - status:200, - url:`https://api.github.com/users/${username}/`, - headers:{ - server:"GitHub.com", - status:"200 OK", - "x-oauth-scopes":"repo", + status: 200, + url: `https://api.github.com/users/${username}/`, + headers: { + server: "GitHub.com", + status: "200 OK", + "x-oauth-scopes": "repo", }, - data:{ - login:faker.internet.userName(), - avatar_url:null, - contributions:faker.datatype.number(1000), + data: { + login: faker.internet.userName(), + avatar_url: null, + contributions: faker.datatype.number(1000), }, }) } diff --git a/tests/mocks/index.mjs b/tests/mocks/index.mjs index a93088d8..07ec9cb0 100644 --- a/tests/mocks/index.mjs +++ b/tests/mocks/index.mjs @@ -10,29 +10,29 @@ import urls from "url" let mocked = false //Mocking -export default async function({graphql, rest}) { +export default async function({ graphql, rest }) { //Check if already mocked if (mocked) - return {graphql, rest} + return { graphql, rest } mocked = true console.debug("metrics/compute/mocks > mocking") //Load mocks const __mocks = paths.join(paths.dirname(urls.fileURLToPath(import.meta.url))) - const mock = async ({directory, mocks}) => { + const mock = async ({ directory, mocks }) => { for (const entry of await fs.readdir(directory)) { if ((await fs.lstat(paths.join(directory, entry))).isDirectory()) { if (!mocks[entry]) mocks[entry] = {} - await mock({directory:paths.join(directory, entry), mocks:mocks[entry]}) + await mock({ directory: paths.join(directory, entry), mocks: mocks[entry] }) } - else + else { mocks[entry.replace(/[.]mjs$/, "")] = (await import(urls.pathToFileURL(paths.join(directory, entry)).href)).default - + } } return mocks } - const mocks = await mock({directory:paths.join(__mocks, "api"), mocks:{}}) + const mocks = await mock({ directory: paths.join(__mocks, "api"), mocks: {} }) //GraphQL API mocking { @@ -49,7 +49,7 @@ export default async function({graphql, rest}) { //Search for mocked query for (const mocked of Object.keys(mocks.github.graphql)) { if (new RegExp(`^query ${mocked.replace(/([.]\w)/g, (_, g) => g.toLocaleUpperCase().substring(1)).replace(/^(\w)/g, (_, g) => g.toLocaleUpperCase())} `).test(query)) - return mocks.github.graphql[mocked]({faker, query, login}) + return mocks.github.graphql[mocked]({ faker, query, login }) } //Unmocked call @@ -64,26 +64,26 @@ export default async function({graphql, rest}) { console.debug("metrics/compute/mocks > mocking rest api") const unmocked = {} //Mocked - const mocker = ({path = "rest", mocks, mocked}) => { + const mocker = ({ path = "rest", mocks, mocked }) => { for (const [key, value] of Object.entries(mocks)) { console.debug(`metrics/compute/mocks > mocking rest api > mocking ${path}.${key}`) if (typeof value === "function") { unmocked[path] = value - mocked[key] = new Proxy(unmocked[path], {apply:value.bind(null, {faker})}) + mocked[key] = new Proxy(unmocked[path], { apply: value.bind(null, { faker }) }) + } + else { + mocker({ path: `${path}.${key}`, mocks: mocks[key], mocked: mocked[key] }) } - else - mocker({path:`${path}.${key}`, mocks:mocks[key], mocked:mocked[key]}) - } } - mocker({mocks:mocks.github.rest, mocked:rest}) + mocker({ mocks: mocks.github.rest, mocked: rest }) } //Axios mocking { //Unmocked console.debug("metrics/compute/mocks > mocking axios") - const unmocked = {get:axios.get, post:axios.post} + const unmocked = { get: axios.get, post: axios.post } //Mocked post requests axios.post = new Proxy(unmocked.post, { @@ -93,7 +93,7 @@ export default async function({graphql, rest}) { //Search for mocked request for (const service of Object.keys(mocks.axios.post)) { - const mocked = mocks.axios.post[service]({faker, url, body}) + const mocked = mocks.axios.post[service]({ faker, url, body }) if (mocked) return mocked } @@ -111,7 +111,7 @@ export default async function({graphql, rest}) { //Search for mocked request for (const service of Object.keys(mocks.axios.get)) { - const mocked = mocks.axios.get[service]({faker, url, options}) + const mocked = mocks.axios.get[service]({ faker, url, options }) if (mocked) return mocked } @@ -131,20 +131,20 @@ export default async function({graphql, rest}) { rss.prototype.parseURL = function(url) { console.debug(`metrics/compute/mocks > mocking rss feed result > ${url}`) return ({ - items:new Array(30).fill(null).map(_ => ({ - title:faker.lorem.sentence(), - link:faker.internet.url(), - content:faker.lorem.paragraphs(), - contentSnippet:faker.lorem.paragraph(), - isoDate:faker.date.recent(), + items: new Array(30).fill(null).map(_ => ({ + title: faker.lorem.sentence(), + link: faker.internet.url(), + content: faker.lorem.paragraphs(), + contentSnippet: faker.lorem.paragraph(), + isoDate: faker.date.recent(), })), - title:faker.lorem.words(), - description:faker.lorem.paragraph(), - link:url, + title: faker.lorem.words(), + description: faker.lorem.paragraph(), + link: url, }) } } //Return mocked elements - return {graphql, rest} + return { graphql, rest } }