feat: cleanup

This commit is contained in:
Naomi Carrigan 2025-01-23 00:19:43 -08:00
parent 4e3068b898
commit d3f795608c
Signed by: naomi
SSH Key Fingerprint: SHA256:rca1iUI2OhAM6n4FIUaFcZcicmri0jgocqKiTTAfrt8
69 changed files with 11 additions and 6695 deletions

View File

@ -1,50 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { NextResponse } from "next/server";
import { getCodebergActivty } from "../../../lib/codeberg";
import { getGithubData } from "../../../lib/github";
/**
* GET route handler for the activity API.
* Loads recent activity from Codeberg and GitHub.
* @returns The formatted data.
*/
export async function GET(): Promise<NextResponse> {
const codeberg = await getCodebergActivty();
const github = await getGithubData();
const normalised: Array<{
type: string;
date: Date;
repo: string;
repoName: string;
}> = [
...codeberg.map((index) => {
return {
date: new Date(index.created),
repo: index.repo.html_url,
repoName: index.repo.full_name,
type: index.op_type,
};
}),
...github.map((index) => {
return {
date: new Date(index.created_at),
repo: index.repo.url.replace("api.github.com/repos", "github.com"),
repoName: index.repo.name,
type: index.type,
};
}),
];
return NextResponse.json(
normalised.
toSorted((a, b) => {
return new Date(b.date).getTime() - new Date(a.date).getTime();
}).
slice(0, 100),
);
}

View File

@ -1,28 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { NextResponse } from "next/server";
import { getCodebergIssues } from "../../../lib/codeberg";
/**
* GET route handler for the activity API.
* Loads recent activity from Codeberg and GitHub.
* @returns The formatted data.
*/
export async function GET(): Promise<NextResponse> {
const issues = await getCodebergIssues();
const normalised = issues.map((issue) => {
return {
body: issue.body,
labels: issue.labels.map((label) => {
return label.name;
}),
number: issue.number,
title: issue.title,
url: issue.html_url,
};
});
return NextResponse.json(normalised);
}

View File

@ -1,48 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
"use client";
import Script from "next/script";
import type { JSX } from "react";
/**
* Renders the /polycule page.
* @returns A React Component.
*/
const Sales = (): JSX.Element => {
return (
<>
<main className="w-4/5 text-center
max-w-4xl m-auto mt-16 mb-1 rounded-lg">
<h1 className="text-5xl">{`Appeal a Sanction`}</h1>
<p>{`This form allows you to appeal a moderation action taken against you on one of our platforms.`}</p>
</main>
<style>
{`.hbspt-form {
max-width: 750px;
margin: auto;
background-color: #04624f;
border-radius: 1rem;
padding: 1rem;
margin-bottom: 100px;
font-family: "Fira Code", monospace;
}`}
</style>
<Script
src="//js.hsforms.net/forms/embed/v2.js"
strategy="beforeInteractive"
type="text/javascript"
></Script>
<Script strategy="afterInteractive">
{`hbspt.forms.create({
portalId: "47086586",
formId: "2db4284c-86a1-47d2-a019-c460ef809402",
});`}
</Script>
</>
);
};
export default Sales;

View File

@ -1,48 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
"use client";
import Script from "next/script";
import type { JSX } from "react";
/**
* Renders the /apply page.
* @returns A React Component.
*/
const Apply = (): JSX.Element => {
return (
<>
<main className="w-4/5 text-center
max-w-4xl m-auto mt-16 mb-1 rounded-lg">
<h1 className="text-5xl">{`Staff Application`}</h1>
<p>{`This form allows you to apply to join NHCarrigan's volunteer staff team.`}</p>
</main>
<style>
{`.hbspt-form {
max-width: 750px;
margin: auto;
background-color: #04624f;
border-radius: 1rem;
padding: 1rem;
margin-bottom: 100px;
font-family: "Fira Code", monospace;
}`}
</style>
<Script
src="//js.hsforms.net/forms/embed/v2.js"
strategy="beforeInteractive"
type="text/javascript"
></Script>
<Script strategy="afterInteractive">
{`hbspt.forms.create({
portalId: "47086586",
formId: "833ff1c0-6c24-4c26-9af0-331c1f7ce6d4",
});`}
</Script>
</>
);
};
export default Apply;

View File

@ -1,214 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
"use client";
import { useEffect, useState, type ChangeEvent, type JSX } from "react";
import { Rule } from "../../components/rule";
type Category = "question" | "compliment" | "confess" | "never";
const ColourMap: Record<Category, { background: string; foreground: string }>
= {
compliment: {
background: "#a6f1c6",
foreground: "#0f9d58",
},
confess: {
background: "#f7c6d2",
foreground: "#b03060",
},
never: {
background: "#f7e6c6",
foreground: "#b8860b",
},
question: {
background: "#a6e6fc",
foreground: "#03779e",
},
};
const TitleMap: Record<Category, string> = {
compliment: "Pay Naomi a Compliment",
confess: "Confess Your Sins to Naomi",
never: "Never Have I Ever?",
question: "Ask Naomi a Question",
};
const DescriptionMap: Record<Category, string> = {
compliment:
// eslint-disable-next-line stylistic/max-len
"Have you wanted to tell Naomi she's cute, but you've been too shy? Here's your chance!",
confess:
// eslint-disable-next-line stylistic/max-len
"Is there something weighing on your mind that you can't tell anyone else? Confess it here!",
never:
// eslint-disable-next-line stylistic/max-len
"What do you think Naomi has done that you haven't? Let's play a game of Never Have I Ever!",
question: "Do you have a question for Naomi? Ask it here!",
};
interface DataRecord {
category: Category;
question: string;
answer: string;
}
/**
* Renders the /ask page.
* @returns A React Component.
*/
const Ask = (): JSX.Element => {
const [ category, setCategory ] = useState<Category>("question");
const [ question, setQuestion ] = useState<string>("");
const [ submitted, setSubmitted ] = useState<boolean>(false);
const [ errored, setErrored ] = useState<boolean>(false);
const [ history, setHistory ] = useState<Array<DataRecord>>([]);
useEffect(() => {
fetch("https://anon.nhcarrigan.com/recent").then(async(response) => {
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
const result = await response.json() as Array<DataRecord>;
setHistory(result);
}).
catch((error: unknown) => {
// eslint-disable-next-line no-console
console.error(error);
setHistory([]);
});
}, []);
const handleCategoryChange = (
event: ChangeEvent<HTMLSelectElement>,
): void => {
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
setCategory(event.target.value as Category);
};
const handleQuestionUpdate = (
event: ChangeEvent<HTMLTextAreaElement>,
): void => {
setQuestion(event.target.value);
};
const submitForm = (): void => {
fetch("https://anon.nhcarrigan.com/api", {
body: JSON.stringify({
category,
question,
}),
headers: {
"Content-Type": "application/json",
},
method: "POST",
}).
then((response) => {
if (response.ok) {
setSubmitted(true);
} else {
setErrored(true);
}
}).
catch(() => {
setErrored(true);
});
};
return (
<main className="w-4/5 text-center max-w-4xl m-auto mt-16 mb-16 rounded-lg">
<h1 className="text-5xl">{`Ask Me Anything!`}</h1>
<p>
{`This page allows you to anonymously ask any question you might wish! Once approved and answered, your question and our response will be visible in our `}
<a
className="underline"
href="https://chat.nhcarrigan.com"
>{`Discord`}</a>
{`!`}
</p>
<Rule />
{!submitted && !errored
&& <section>
<h2 className="text-3xl">{TitleMap[category]}</h2>
<p className="mb-2">{DescriptionMap[category]}</p>
<form>
<select
className="text-center border-2 rounded-lg p-0.5 mb-0.5"
// eslint-disable-next-line react/jsx-no-bind
onChange={handleCategoryChange}
style={{
backgroundColor: ColourMap[category].background,
borderColor: ColourMap[category].foreground,
color: ColourMap[category].foreground,
}}
>
<option value="question">{`Question`}</option>
<option value="compliment">{`Compliment`}</option>
<option value="confess">{`Confession`}</option>
<option value="never">{`Never Have I Ever?`}</option>
</select>
<textarea
className={`w-full h-48 p-2 border-2`}
// eslint-disable-next-line react/jsx-no-bind
onChange={handleQuestionUpdate}
placeholder="Type your question here..."
style={{
backgroundColor: ColourMap[category].background,
borderColor: ColourMap[category].foreground,
color: ColourMap[category].foreground,
}}
/>
<button
className="font-bold py-2 px-4 rounded mt-2"
// eslint-disable-next-line react/jsx-no-bind
onClick={submitForm}
style={{
backgroundColor: ColourMap[category].background,
borderColor: ColourMap[category].foreground,
color: ColourMap[category].foreground,
}}
type="button"
>
{`Submit`}
</button>
</form>
</section>
}
{submitted
? <section>
<h2 className="text-3xl">{`Question Submitted!`}</h2>
<p>{`Your question has been submitted! Please wait for approval and response.`}</p>
</section>
: null}
{errored
? <section>
<h2 className="text-3xl">{`Submission Error`}</h2>
<p>{`An error occurred while submitting your question. Please try again later.`}</p>
</section>
: null}
<Rule />
<h2 className="text-3xl">{`Prior Questions`}</h2>
<p>{`Here are the most recently answered questions - if you want to see the full history, join our Discord!`}</p>
{history.length > 0
? history.map((record) => {
return (
<section
className="border-2 rounded-lg p-2 mt-2"
key={record.question}
style={{
backgroundColor: ColourMap[record.category].background,
borderColor: ColourMap[record.category].foreground,
color: ColourMap[record.category].foreground,
}}
>
<h3 className="text-2xl">{record.question}</h3>
<p>{record.answer}</p>
</section>
);
})
: <p>{`No questions have been answered yet!`}</p>
}
</main>
);
};
export default Ask;

View File

@ -1,108 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import Script from "next/script";
import { Rule } from "../../components/rule";
import { Social } from "../../components/social";
import { Donate, HireMe, Socials } from "../../config/Socials";
import type { JSX } from "react";
/**
* Renders the /contact page.
* @returns A React Component.
*/
const Contact = (): JSX.Element => {
return (
<main className="w-4/5 text-center max-w-4xl m-auto mt-16 mb-16 rounded-lg">
<style>
{`.hbspt-form {
max-width: 750px;
margin: auto;
background-color: #04624f;
border-radius: 1rem;
padding: 1rem;
margin-bottom: 100px;
font-family: "Fira Code", monospace;
}`}
</style>
<h1 className="text-5xl">{`Contact Us`}</h1>
<p>
{`We offer many different ways to get in touch with us. This page lists
all of our available social media accounts. Use the buttons below to
choose your preferred method.`}
</p>
<p>
{`Note that the items are sorted alphabetically, not by order of
response times. Monitoring levels and activity may vary by platform.`}
</p>
<p>
{`With ${Socials.length.toLocaleString("en-GB")} choices, you shouldn't have any complaints!
:3`}
</p>
<p>
{`But if none of these work for you at all, there's a direct contact form at the bottom of this list!`}
</p>
<Rule />
<section>
<p>A quick note that we have explicitly deactivated our accounts on the following platforms. If you see an account on these platforms using our branding (either as NaomiLGBT OR NHCarrigan), it is an impersonation and should be reported.</p>
<ul>
<li>Twitch</li>
<li>Twitter</li>
<li>Instagram</li>
<li>Threads</li>
<li>WhatsApp</li>
</ul>
</section>
<Rule />
<section>
<div>
{[ HireMe, Donate ].map(
({ link, label, alt, icon, color, background }) => {
return <Social
alt={alt}
background={background}
color={color}
icon={icon}
key={label}
label={label}
link={link}
/>;
}
,
)}
{Socials.toSorted((a, b) => {
return a.label.localeCompare(b.label);
}).map(
({ link, label, alt, icon, color, background }) => {
return <Social
alt={alt}
background={background}
color={color}
icon={icon}
key={label}
label={label}
link={link}
/>;
}
,
)}
</div>
</section>
<Script
src="//js.hsforms.net/forms/embed/v2.js"
strategy="beforeInteractive"
type="text/javascript"
></Script>
<Script strategy="afterInteractive">
{`hbspt.forms.create({
portalId: "47086586",
formId: "4db250c8-a1a7-4a62-94d7-82592fa83a58",
});`}
</Script>
</main>
);
};
export default Contact;

View File

@ -1,86 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
"use client";
import type { JSX } from "react";
/**
* Renders the /contribute page.
* @returns A React Component.
*/
const ContributeComponent = (): JSX.Element => {
return (
<main className="w-[95%] text-center
max-w-4xl m-auto mt-16 mb-16 rounded-lg">
<h1 className="text-5xl">{`Open for Contribution~!`}</h1>
<section>
<p className="mb-2">{`Our issue tracker is currently unavailable while we work with the Codeberg team to address rate limit issues.`}</p>
</section>
</main>
);
/*
*To be restored when rate-limit is lifted.
*const [ issues, setIssues ] = useState<
*Array<{
* labels: Array<string>;
* number: number;
* title: string;
* url: string;
* body: string;
*}>
*>([]);
*
*useEffect(() => {
*void fetch("/api/contribute").
* then(async(data) => {
* // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
* return (await data.json()) as Array<{
* labels: Array<string>;
* number: number;
* title: string;
* url: string;
* body: string;
* }>;
* }).
* then((data) => {
* setIssues(data);
* });
*}, []);
*
*if (issues.length === 0) {
*return (
* <main className="w-[95%] text-center
* max-w-4xl m-auto mt-16 mb-16 rounded-lg">
* <h1 className="text-5xl">{`Open for Contribution~!`}</h1>
* <section>
* <p className="text-3xl">{`Loading...`}</p>
* </section>
* </main>
*);
*}
*
*return (
* <main className="w-[95%] text-center
* max-w-4xl m-auto mt-16 mb-16 rounded-lg">
* <h1 className="text-5xl">{`Open for Contribution~!`}</h1>
* <section>
* <p className="mb-2">{`Heya! This page lists issues across all of our projects that are currently open for contribution.
* We'd love to have you work on one!`}</p>
* <Rule />
* <ol className="relative border-s border-[--primary] w-4/5 m-auto">
* {issues.map((act) => {
* return (
* <Issue key={act.url} {...act} />
* );
* })}
* </ol>
* </section>
* </main>
*);
*/
};
export default ContributeComponent;

View File

@ -1,48 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
"use client";
import Script from "next/script";
import type { JSX } from "react";
/**
* Renders the /polycule page.
* @returns A React Component.
*/
const Newsletter = (): JSX.Element => {
return (
<>
<main className="w-4/5 text-center
max-w-4xl m-auto mt-16 mb-1 rounded-lg">
<h1 className="text-5xl">{`Newsletter`}</h1>
<p>{`Don't want to join our chat server? Not a fan of our other platforms for announcing product updates? You can subscribe to our newsletter to receive the same information via a regular ol' email.`}</p>
</main>
<style>
{`.hbspt-form {
max-width: 750px;
margin: auto;
background-color: #04624f;
border-radius: 1rem;
padding: 1rem;
margin-bottom: 100px;
font-family: "Fira Code", monospace;
}`}
</style>
<Script
src="//js.hsforms.net/forms/embed/v2.js"
strategy="beforeInteractive"
type="text/javascript"
></Script>
<Script strategy="afterInteractive">
{`hbspt.forms.create({
portalId: "47086586",
formId: "1ed1ea33-a8f4-4956-8ccd-f72f44765ad9",
});`}
</Script>
</>
);
};
export default Newsletter;

View File

@ -1,42 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { Partner } from "../../components/partner";
import { Rule } from "../../components/rule";
import { Partners } from "../../config/Partners";
import type { JSX } from "react";
/**
* Renders the /polycule page.
* @returns A React Component.
*/
const Polycule = (): JSX.Element => {
return (
<main className="w-[95%] text-center
max-w-4xl m-auto mt-16 mb-16 rounded-lg">
<h1 className="text-5xl">{`Naomi's Polycule`}</h1>
<section>
<p className="mb-2">
{`Meet the people who love and support Naomi to the ends of the earth.`}
</p>
<Rule />
<div className="w-full">
{Partners.map((member) => {
return <Partner
anniversary={member.anniversary}
avatar={member.avatar}
key={member.name}
name={member.name}
relationship={member.relationship}
url={member.url}
/>;
})}
</div>
</section>
</main>
);
};
export default Polycule;

View File

@ -1,48 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
"use client";
import Script from "next/script";
import type { JSX } from "react";
/**
* Renders the /polycule page.
* @returns A React Component.
*/
const Sales = (): JSX.Element => {
return (
<>
<main className="w-4/5 text-center
max-w-4xl m-auto mt-16 mb-1 rounded-lg">
<h1 className="text-5xl">{`Sales Inquiry`}</h1>
<p>{`This form allows you to send a general sales inquiry to our team. Upon submission, you will be taken to our consultation booking page. Note that general inquiries are low priority - if you need an urgent response, you should use the booking page to schedule a paid consultation.`}</p>
</main>
<style>
{`.hbspt-form {
max-width: 750px;
margin: auto;
background-color: #04624f;
border-radius: 1rem;
padding: 1rem;
margin-bottom: 100px;
font-family: "Fira Code", monospace;
}`}
</style>
<Script
src="//js.hsforms.net/forms/embed/v2.js"
strategy="beforeInteractive"
type="text/javascript"
></Script>
<Script strategy="afterInteractive">
{`hbspt.forms.create({
portalId: "47086586",
formId: "fa90d8cb-40e2-4f36-b7a8-2bda6ac1d0cb",
});`}
</Script>
</>
);
};
export default Sales;

View File

@ -1,42 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { Member } from "../../components/member";
import { Rule } from "../../components/rule";
import { TeamMembers } from "../../config/TeamMembers";
import type { JSX } from "react";
/**
* Renders the /team page.
* @returns A React Component.
*/
const Team = (): JSX.Element => {
return (
<main className="w-[95%] text-center
max-w-4xl m-auto mt-16 mb-16 rounded-lg">
<h1 className="text-5xl">{`Our Team`}</h1>
<section>
<p className="mb-2">
{`Meet the people behind nhcarrigan's success!`}
</p>
<Rule />
<div className="w-full">
{TeamMembers.map((member) => {
return <Member
avatar={member.avatar}
joinDate={member.joinDate}
key={member.name}
name={member.name}
role={member.role}
url={member.url}
/>;
})}
</div>
</section>
</main>
);
};
export default Team;

View File

@ -21,7 +21,7 @@ const Work = (): JSX.Element => {
<h1 className="text-5xl">{`Our Work`}</h1>
<p>
{`We run a software engineering and community management firm known as
nhcarrigan.`}
NHCarrigan.`}
</p>
<Rule />
<section>

View File

@ -1,80 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { JSX } from "react";
interface ActivityProperties {
readonly type: string;
readonly date: Date;
readonly repo: string;
readonly repoName: string;
readonly heart: string;
}
const TypeToString: Record<string, string> = {
DeleteEvent: "deleted a branch on",
IssueCommentEvent: "commented on",
IssuesEvent: "created or updated an issue in",
PullRequestEvent: "created or merged a PR in",
PullRequestReviewCommentEvent: "commented on a PR in",
PullRequestReviewEvent: "reviewed a PR in",
PushEvent: "committed to",
close_issue: "closed an issue in",
commit_repo: "committed to",
create_branch: "created a branch in",
create_issue: "created an issue in",
create_pull_request: "created a PR in",
delete_branch: "deleted a branch on",
merge_pull_request: "merged a PR in",
};
const getType = (type: string): string => {
return TypeToString[type] ?? `performed a ${type}`;
};
/**
* Renders the view for a Github or Codeberg activity.
* @param properties - The activity to render.
* @returns A JSX element.
*/
export const Activity = (properties: ActivityProperties): JSX.Element => {
const { type, date, repo, repoName, heart } = properties;
return (
<li className="ms-6">
<span
className="absolute flex items-center
justify-center w-6 h-6 rounded-full -start-3"
>
{heart}
</span>
<div
className="items-center justify-between
p-4 bg-white border border-gray-200 rounded-lg
shadow-sm sm:flex dark:bg-gray-700 dark:border-gray-600"
>
<time
className="mb-1 text-xs font-normal
text-gray-400 sm:order-last sm:mb-0"
>
{date.toLocaleString("en-GB")}
</time>
<div
className="text-sm font-normal
text-gray-500 lex dark:text-gray-300"
>
{`Naomi has ${getType(type)} `}
<a
className="font-semibold text-[#abfcec] hover:underline"
href={repo}
rel="noopener noreferrer"
target="_blank"
>
{repoName}
</a>{" "}
</div>
</div>
</li>
);
};

View File

@ -1,70 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { JSX } from "react";
interface IssueProperties {
labels: Array<string>;
number: number;
title: string;
url: string;
body: string;
}
/**
* Renders the view for a Codeberg issue.
* @param properties - The issue to render.
* @returns A JSX element.
*/
export const Issue = (properties: IssueProperties): JSX.Element => {
const { labels, number, title, url, body } = properties;
return (
<div className="p-6 mb-2 bg-[--foreground] text-[--background]
border border-gray-200 rounded-lg shadow">
<h2 className="mb-2 text-2xl font-bold tracking-tight">{`#${number.toString()} ${title}`}</h2>
{labels.map((label) => {
return (
<span
className="inline-flex items-center bg-pink-100
text-pink-800 text-xsfont-medium px-2.5 py-0.5
rounded-full dark:bg-pink-900 dark:text-pink-300"
key={label}
>
{label}
</span>
);
})}
<p className="mb-3 font-normal text-gray-700 dark:text-gray-400">
{body}
</p>
<a
className="inline-flex items-center px-3 py-2 text-sm
font-medium text-center text-[--foreground] bg-[--background]
rounded-lg focus:ring-4 focus:outline-none focus:ring-blue-300
dark:focus:ring-blue-800"
href={url}
rel="noopener noreferrer"
target="_blank"
>
{`View Issue`}
<svg
aria-hidden="true"
className="rtl:rotate-180 w-3.5 h-3.5 ms-2"
fill="none"
viewBox="0 0 14 10"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M1 5h12m0 0L9 1m4 4L9 9"
stroke="currentColor"
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth="2"
/>
</svg>
</a>
</div>
);
};

View File

@ -1,60 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import Image from "next/image";
import type { JSX } from "react";
interface MemberProperties {
readonly name: string;
readonly avatar: string;
readonly role: string;
readonly url: string;
readonly joinDate: Date;
}
/**
* Renders the view for a team member.
* @param properties - The member to render.
* @returns A JSX element.
*/
export const Member = (properties: MemberProperties): JSX.Element => {
const { name, avatar, role, url, joinDate } = properties;
return (
<div className="flex items-start gap-2.5 pb-10 w-full">
<Image
alt={`${name}'s avatar.`}
className="rounded-full"
height={75}
src={`https://cdn.nhcarrigan.com/avatars/${avatar}`}
width={75}
/>
<div
className="flex flex-col w-full leading-1.5
p-4 border-gray-200 bg-gray-100 rounded-e-xl
rounded-es-xl dark:bg-gray-700"
>
<div>
<a
className="text-sm font-semibold text-[#abfcec]"
href={url}
target="noopener noreferrer"
>
{name}
</a>
<p className="text-sm font-normal text-gray-500 dark:text-gray-400">
{joinDate.toLocaleDateString("en-GB", {
month: "long",
year: "numeric",
})}
</p>
</div>
<p className="text-sm font-normal py-2.5 text-gray-900 dark:text-white">
{role}
</p>
</div>
</div>
);
};

View File

@ -1,59 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import Image from "next/image";
import type { JSX } from "react";
interface PartnerProperties {
readonly name: string;
readonly avatar: string;
readonly relationship: string;
readonly url: string;
readonly anniversary: Date;
}
/**
* Renders the view for a polycule member.
* @param properties - The member to render.
* @returns A JSX element.
*/
export const Partner = (properties: PartnerProperties): JSX.Element => {
const { name, avatar, relationship, url, anniversary } = properties;
return (
<div className="flex items-start gap-2.5 pb-10 w-full">
<Image
alt={`${name}'s avatar.`}
className="rounded-full"
height={75}
src={`https://cdn.nhcarrigan.com/avatars/${avatar}`}
width={75}
/>
<div className="flex flex-col w-full leading-1.5 p-4
border-gray-200 bg-gray-100 rounded-e-xl
rounded-es-xl dark:bg-gray-700">
<div>
<a
className="text-sm font-semibold text-[#abfcec]"
href={url}
target="noopener noreferrer"
>
{name}
</a>
<p className="text-sm font-normal text-gray-500 dark:text-gray-400">
{anniversary.toLocaleDateString("en-GB", {
day: "numeric",
month: "long",
year: "numeric",
})}
</p>
</div>
<p className="text-sm font-normal py-2.5 text-gray-900 dark:text-white">
{relationship}
</p>
</div>
</div>
);
};

View File

@ -1,45 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
import type { JSX } from "react";
interface SocialProperties {
readonly icon: IconDefinition;
readonly link: string;
readonly label: string;
readonly alt: string;
readonly color: string;
readonly background: string;
}
/**
* Renders the view for a social media link.
* @param properties - The link to render.
* @returns A JSX element.
*/
export const Social = (properties: SocialProperties): JSX.Element => {
const { icon, link, label, alt, background, color } = properties;
return (
<a
aria-label={label}
className="flex max-w-[300px] w-[95%] m-auto justify-between
items-center border-solid border-2 rounded-3xl h-14 p-8 my-4"
href={link}
rel="noreferrer"
style={{
background: background,
borderColor: color,
color: color,
}}
target="_blank"
>
<FontAwesomeIcon aria-label={alt} icon={icon} size="3x" />
<strong>{label}</strong>
</a>
);
};

View File

@ -119,4 +119,11 @@ export const Art: Array<{
name: "Ticket System",
url: "https://picrew.me/en/image_maker/625876",
},
{
alt: "Anime-style portrait of a character with brown hair and blue eyes, wearking a pink top with a mesh chest, against a pink background.",
artist: "Picrew",
img: "logs.png",
name: "Mod Logs",
url: " https://picrew.me/en/image_maker/2539784",
},
];

View File

@ -12,28 +12,21 @@ export const NavItems = [
{ href: "/about", text: "About Naomi" },
{ href: "/manual", text: "User Manual" },
{ href: "/work", text: "Employment History" },
{ href: "/contact", text: "Contact Us" },
{ href: "https://contact.nhcarrigan.com", text: "Contact Us" },
{ href: "/certs", text: "Certifications" },
{ href: "/reviews", text: "Reviews" },
{ href: "/games", text: "Game Screenshots" },
{ href: "/team", text: "The NHCarrigan Team" },
{ href: "/polycule", text: "Polycule" },
{ href: "/art", text: "Art of Naomi" },
{ href: "/manifesto", text: "Transfemme Manifesto" },
{ href: "/ask", text: "Ask Me Anything!" },
{ href: "/tech", text: "Technologies" },
{ href: "/contribute", text: "Contribute to our Projects" },
{ href: "https://git.nhcarrigan.com", text: "Contribute to our Projects" },
{ href: "/koikatsu", text: "Koikatsu Scenes" },
{ href: "/ref", text: "Reference Sheet" },
{ href: "/projects", text: "Our Projects" },
{ href: "/sales", text: "Sales Inquiries" },
{ href: "/newsletter", text: "Newsletter" },
{ href: "/appeal", text: "Sanction Appeals" },
{ href: "https://games.nhcarrigan.com", text: "Game Dev" },
{ href: "https://merch.nhcarrigan.link", text: "Merchandise" },
{ href: "https://docs.nhcarrigan.com", text: "Documentation" },
{ href: "https://chat.nhcarrigan.com", text: "Support" },
{ href: "/apply", text: "Staff Application" },
{ href: "https://forum.nhcarrigan.com", text: "Support" },
].sort((a, b) => {
return a.text.localeCompare(b.text);
});

View File

@ -1,40 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
/**
* List of polycule members to render.
*/
export const Partners: Array<{
name: string;
avatar: string;
relationship: string;
url: string;
anniversary: Date;
}> = [
{
anniversary: new Date("January 1, 2023"),
avatar: "dashi.png",
name: "Sadashi",
relationship: "Romantic Partner",
url: "https://chat.nhcarrigan.com",
},
{
anniversary: new Date("November 17, 2023"),
avatar: "estel.png",
name: "Rain",
relationship: "Fiancée",
url: "https://chat.nhcarrigan.com",
},
{
anniversary: new Date("October 1, 2023"),
avatar: "fruit.png",
name: "Kaitlyn",
relationship: "Queer-Platonic Partner",
url: "https://kaitlyn.nhcarrigan.com",
},
].sort((a, b) => {
return a.anniversary.getTime() - b.anniversary.getTime();
});

View File

@ -1,536 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import {
faAngellist,
faBluesky,
faDiscord,
faFreeCodeCamp,
faGithub,
faGooglePlus,
faHashnode,
faItchIo,
faLinkedinIn,
faMastodon,
faMeetup,
faNpm,
faPatreon,
faPaypal,
faProductHunt,
faReddit,
faSignalMessenger,
faSlack,
faSteam,
faStripe,
faTelegramPlane,
faTiktok,
faTumblr,
faWordpress,
faYoutube,
faSnapchat,
} from "@fortawesome/free-brands-svg-icons";
import {
faAtom,
faBriefcase,
faChessKnight,
faComputer,
faEnvelope,
faGamepad,
faHashtag,
faMoneyBill,
} from "@fortawesome/free-solid-svg-icons";
import { Codeberg } from "../icons/Codeberg";
import { Coursera } from "../icons/Coursera";
import { Fiverr } from "../icons/Fiverr";
import { Gather } from "../icons/Gather";
import { Gog } from "../icons/Gog";
import { Gumroad } from "../icons/Gumroad";
import { Kofi } from "../icons/KoFi";
import { Matrix } from "../icons/Matrix";
import { Peerlist } from "../icons/Peerlist";
import { Pixiv } from "../icons/Pixiv";
import { Polywork } from "../icons/Polywork";
import { RetroAchievements } from "../icons/RetroAchievements";
import { Saylor } from "../icons/Saylor";
import { TeeSpring } from "../icons/TeeSpring";
import { Throne } from "../icons/Throne";
import { Topmate } from "../icons/Topmate";
import { TreeNation } from "../icons/TreeNation";
import { Udemy } from "../icons/Udemy";
import { VRoid } from "../icons/VRoid";
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
/**
* Custom button with gradient for hire CTA.
*/
const HireMe: {
icon: IconDefinition;
link: string;
label: string;
alt: string;
color: string;
background: string;
} = {
alt: "Briefcase Icon",
background: `linear-gradient(
90deg,
#5bcefa,
#f5a9b8,
#ffffff,
#f5a9b8,
#5bcefa
)`,
color: "#003600",
icon: faBriefcase,
label: "Hire Us!",
link: "https://docs.nhcarrigan.com/about/hire/",
};
/**
* Custom button with gradient for Donate CTA.
*/
const Donate: {
icon: IconDefinition;
link: string;
label: string;
alt: string;
color: string;
background: string;
} = {
alt: "Money Icon",
background: `linear-gradient(
90deg,
rgba(255, 0, 0, 1) 0%,
rgba(251, 7, 217, 1) 10%,
rgba(186, 12, 248, 1) 20%,
rgba(95, 21, 242, 1) 30%,
rgba(28, 127, 238, 1) 40%,
rgba(47, 201, 226, 1) 50%,
rgba(63, 218, 216, 1) 60%,
rgba(79, 220, 74, 1) 70%,
rgba(208, 222, 33, 1) 80%,
rgba(255, 154, 0, 1) 90%,
rgba(255, 0, 0, 1) 100%
)`,
color: "#003600",
icon: faMoneyBill,
label: "Donate 💜",
link: "https://docs.nhcarrigan.com/about/donate/",
};
/**
* List of social media buttons to render.
*/
const Socials: Array<{
icon: IconDefinition;
link: string;
label: string;
alt: string;
color: string;
background: string;
}> = [
{
alt: "Codeberg Logo",
background: "#0B3049",
color: "#B5DDFF",
icon: Codeberg,
label: "Codeberg",
link: "https://codeberg.org/naomi-lgbt",
},
{
alt: "GitHub Logo",
background: "#333333",
color: "#FFFFFF",
icon: faGithub,
label: "GitHub",
link: "https://github.com/nhcarrigan",
},
{
alt: "Discord Logo",
background: "#7289DA",
color: "#FFFFFF",
icon: faDiscord,
label: "Discord",
link: "https://chat.naomi.lgbt",
},
{
alt: "Element Logo",
background: "#29B6F6",
color: "#FFFFFF",
icon: Matrix,
label: "Matrix",
link: "https://matrix.to/#/#naomi:matrix.org",
},
{
alt: "Octothorpe",
background: "#000000",
color: "#FFFFFF",
icon: faHashtag,
label: "IRC",
link: "https://docs.nhcarrigan.com/about/contact/#33-irc-channels",
},
{
alt: "Slack Logo",
background: "#4A154B",
color: "#FFFFFF",
icon: faSlack,
label: "Slack",
link: "https://join.slack.com/t/naomi-lgbt/signup",
},
{
alt: "Reddit Logo",
background: "#FF4500",
color: "#FFFFFF",
icon: faReddit,
label: "Reddit",
link: "https://reddit.com/r/nhcarrigan",
},
{
alt: "Hashnode Logo",
background: "#2962FF",
color: "#FFFFFF",
icon: faHashnode,
label: "Blog",
link: "https://blog.nhcarrigan.com",
},
{
alt: "LinkedIn Logo",
background: "#0077B5",
color: "#FFFFFF",
icon: faLinkedinIn,
label: "LinkedIn",
link: "https://linkedin.com/in/naomi-lgbt",
},
{
alt: "Peerlist Logo",
background: "#219653",
color: "#FFFFFF",
icon: Peerlist,
label: "Peerlist",
link: "https://resume.nhcarrigan.com",
},
{
alt: "Polywork Logo",
background: "#7C3AED",
color: "#FFFFFF",
icon: Polywork,
label: "Polywork",
link: "https://polywork.nhcarrigan.com/",
},
{
alt: "Fiverr Logo",
background: "#1DBF73",
color: "#FFFFFF",
icon: Fiverr,
label: "Fiverr",
link: "https://www.fiverr.com/nhcarrigan",
},
{
alt: "Mastodon Logo",
background: "#2B90D9",
color: "#FFFFFF",
icon: faMastodon,
label: "Mastodon",
link: "https://mastodon.social/@naomi_lgbt",
},
{
alt: "Steam Logo",
background: "#1b2838",
color: "#c7d5e0",
icon: faSteam,
label: "Steam",
link: "https://steamcommunity.com/id/naomi-lgbt/",
},
{
alt: "How Long to Beat Logo",
background: "#333333",
color: "#FFFFFF",
icon: faGamepad,
label: "HLTB",
link: "https://howlongtobeat.com/user/naomi_lgbt",
},
{
alt: "Snapchat Logo",
background: "#FFFC00",
color: "#000000",
icon: faSnapchat,
label: "Snapchat",
link: "https://www.snapchat.com/add/naomi-lgbt",
},
{
alt: "GOG Logo",
background: "#863A3A",
color: "#FFFFFF",
icon: Gog,
label: "GOG",
link: "https://www.gog.com/u/naomi-lgbt",
},
{
alt: "Itch.io Logo",
background: "#FA5C5C",
color: "#FFFFFF",
icon: faItchIo,
label: "Itch.io",
link: "https://nhcarrigan.itch.io/",
},
{
alt: "Lichess Logo",
background: "#000000",
color: "#FFFFFF",
icon: faChessKnight,
label: "Lichess",
link: "https://lichess.org/../naomi-lgbt",
},
{
alt: "Saylor Academy Logo",
background: "#469dcc",
color: "#183140",
icon: Saylor,
label: "Saylor Academy",
link: "https://learn.saylor.org/user/profile.php?id=2074619",
},
{
alt: "Paypal Logo",
background: "#003087",
color: "#FFFFFF",
icon: faPaypal,
label: "Paypal",
link: "https://paypal.me/nhcarrigan",
},
{
alt: "Ko-Fi Logo",
background: "#FF5E5B",
color: "#FFFFFF",
icon: Kofi,
label: "Ko-Fi",
link: "https://ko-fi.com/nhcarrigan",
},
{
alt: "Patreon Logo",
background: "#F96854",
color: "#FFFFFF",
icon: faPatreon,
label: "Patreon",
link: "https://patreon.com/nhcarrigan",
},
{
alt: "freeCodeCamp Logo",
background: "#0a0a23",
color: "#FFFFFF",
icon: faFreeCodeCamp,
label: "freeCodeCamp",
link: "https://forum.freecodecamp.org/u/nhcarrigan/summary",
},
{
alt: "NPM Logo",
background: "#CB3837",
color: "#FFFFFF",
icon: faNpm,
label: "NPM",
link: "https://www.npmjs.com/~nhcarrigan",
},
{
alt: "GatherTown Logo",
background: "#7B68EE",
color: "#FFFFFF",
icon: Gather,
label: "GatherTown",
link: "https://app.gather.town/invite?token=CiIvbSnrQiW-akXFSPL_",
},
{
alt: "VRoid Logo",
background: "#ffe100",
color: "#000000",
icon: VRoid,
label: "VRoid",
link: "https://hub.vroid.com/en/characters/6033404747153826650/models/3483506204509065121",
},
{
alt: "Pixiv Logo",
background: "#0096FA",
color: "#FFFFFF",
icon: Pixiv,
label: "Pixiv",
link: "https://www.pixiv.net/en/users/77818154",
},
{
alt: "Email Icon",
background: "#000000",
color: "#FFFFFF",
icon: faEnvelope,
label: "Email",
link: "https://docs.nhcarrigan.com/about/contact/#7-email-communication",
},
{
alt: "Coursera Logo",
background: "#0056D2",
color: "#FFFFFF",
icon: Coursera,
label: "Coursera",
link: "https://www.coursera.org/learner/naomi-lgbt",
},
{
alt: "Udemy Logo",
background: "#EC5252",
color: "#FFFFFF",
icon: Udemy,
label: "Udemy",
link: "https://www.udemy.com/user/naomi-carrigan/",
},
{
alt: "Wordpress Logo",
background: "#1E8EDE",
color: "#FFFFFF",
icon: faWordpress,
label: "Gravatar",
link: "https://gravatar.com/nhcarrigan",
},
{
alt: "Computer Icon",
background: "#000000",
color: "#FFFFFF",
icon: faComputer,
label: "PC Part Picker",
link: "https://pcpartpicker.com/user/nhcarrigan/",
},
{
alt: "Throne.me Logo",
background: "#000000",
color: "#FFFFFF",
icon: Throne,
label: "Throne",
link: "https://throne.com/naomilgbt",
},
{
alt: "Stripe Logo",
background: "#6772E5",
color: "#FFFFFF",
icon: faStripe,
label: "Stripe",
link: "https://buy.stripe.com/cN24iTfqu1j6b3afZ2",
},
{
alt: "Signal Logo",
background: "#FFFFFF",
color: "#3A76F0",
icon: faSignalMessenger,
label: "Signal",
link: "https://signal.me/#eu/YGo6ag7kAwkdfkw863-J4qLK3VyKn8uWLhvyX60Jx5J0qrDZnz1B_aLrjM9yAMe6",
},
{
alt: "Angellist Logo",
background: "#000000",
color: "#FFFFFF",
icon: faAngellist,
label: "WellFound",
link: "https://wellfound.com/u/naomi-h-carrigan",
},
{
alt: "ProtonDB Logo",
background: "#000000",
color: "#FFFFFF",
icon: faAtom,
label: "ProtonDB",
link: "https://www.protondb.com/users/1717755560",
},
{
alt: "TeeSpring Logo",
background: "#000000",
color: "#FFFFFF",
icon: TeeSpring,
label: "Merch",
link: "https://nhcarrigan.creator-spring.com/",
},
{
alt: "BlueSky Logo",
background: "#1DA1F2",
color: "#FFFFFF",
icon: faBluesky,
label: "BlueSky",
link: "https://bsky.app/profile/naomi.lgbt",
},
{
alt: "Telegram Logo",
background: "#0088cc",
color: "#FFFFFF",
icon: faTelegramPlane,
label: "Telegram",
link: "https://t.me/naomi_lgbt",
},
{
alt: "Google Chat Logo",
background: "#DB4437",
color: "#FFFFFF",
icon: faGooglePlus,
label: "Google Chat",
link: "https://chat.google.com/room/AAAAK270m3M",
},
{
alt: "Tree Nation Logo",
background: "#FFFFFF",
color: "#55C1A8",
icon: TreeNation,
label: "Tree Nation",
link: "https://tree-nation.com/profile/naomi-carrigan",
},
{
alt: "Meetup Logo",
background: "#FF6D00",
color: "#FFFFFF",
icon: faMeetup,
label: "Meetup",
link: "https://www.meetup.com/members/437962584/",
},
{
alt: "Tumblr Logo",
background: "#36465D",
color: "#FFFFFF",
icon: faTumblr,
label: "Tumblr",
link: "https://www.tumblr.com/naomi-lgbt",
},
{
alt: "YouTube Logo",
background: "#FF0000",
color: "#FFFFFF",
icon: faYoutube,
label: "YouTube",
link: "https://www.youtube.com/@naomilgbt",
},
{
alt: "RetroAchievements Logo",
background: "#1066dd",
color: "#cc9a00",
icon: RetroAchievements,
label: "RetroAchievements",
link: "https://retroachievements.org/user/naomilgbt",
},
{
alt: "ProductHunt Logo",
background: "#da552f",
color: "#FFFFFF",
icon: faProductHunt,
label: "ProductHunt",
link: "https://www.producthunt.com/@naomi_lgbt",
},
{
alt: "Topmate Logo",
background: "#e44332",
color: "#FFFFFF",
icon: Topmate,
label: "Topmate",
link: "https://topmate.io/nhcarrigan",
},
{
alt: "Gumroad Logo",
background: "#fe90e7",
color: "#000000",
icon: Gumroad,
label: "Gumroad",
link: "https://nhcarrigan.gumroad.com",
},
];
export { HireMe, Donate, Socials };

View File

@ -1,45 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
/**
* List of nhcarrigan team members to render.
*/
export const TeamMembers: Array<{
name: string;
avatar: string;
role: string;
url: string;
joinDate: Date;
}> = [
{
avatar: "naomi.png",
joinDate: new Date("April 1, 2020"),
name: "Naomi Carrigan",
role: "Founder / CEO",
url: "https://chat.nhcarrigan.com",
},
{
avatar: "denna.png",
joinDate: new Date("April 2, 2020"),
name: "Denna",
role: "Chief Financial Officer",
url: "https://denna.nhcarrigan.com",
},
{
avatar: "tim.png",
joinDate: new Date("April 2, 2020"),
name: "Tim",
role: "Chief Technical Officer",
url: "https://chat.nhcarrigan.com",
},
{
avatar: "anna.png",
joinDate: new Date("August 29, 2023"),
name: "Anna",
role: "Software Engineering Intern",
url: "https://chat.nhcarrigan.com",
},
];

View File

@ -1,73 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
/**
* Custom FontAwesome icon definition for the
* Codeberg logo.
*/
export const Codeberg: IconDefinition = {
icon: [
474,
474,
[],
"U+E002",
`M 36.00,373.00
C 19.99,344.87 11.56,324.72 5.00,293.00
5.00,293.00 2.08,280.00 2.08,280.00
2.08,280.00 2.08,271.04 2.08,271.04
1.21,265.55 0.02,268.68 0.00,259.00
0.00,259.00 0.00,232.00 0.00,232.00
0.10,225.30 1.32,226.49 2.08,221.96
2.08,221.96 2.08,214.00 2.08,214.00
2.08,214.00 4.55,203.00 4.55,203.00
8.89,181.33 13.79,163.93 23.75,144.00
23.75,144.00 31.87,128.00 31.87,128.00
40.56,112.80 56.86,91.48 69.17,79.17
69.17,79.17 80.00,69.72 80.00,69.72
90.99,60.09 102.48,51.08 115.00,43.46
115.00,43.46 132.00,34.75 132.00,34.75
194.09,3.71 265.92,2.29 330.00,28.45
346.58,35.22 368.94,48.49 383.00,59.51
383.00,59.51 397.00,71.72 397.00,71.72
418.24,90.34 435.64,113.79 448.25,139.00
460.07,162.66 464.56,176.20 469.80,202.00
471.25,209.15 473.99,218.02 474.00,225.00
474.00,225.00 474.00,270.00 474.00,270.00
474.00,270.00 469.42,294.00 469.42,294.00
469.42,294.00 465.25,313.00 465.25,313.00
465.25,313.00 454.33,343.00 454.33,343.00
454.33,343.00 439.00,373.00 439.00,373.00
439.00,373.00 437.00,373.00 437.00,373.00
437.00,373.00 386.42,307.00 386.42,307.00
386.42,307.00 285.87,177.00 285.87,177.00
285.87,177.00 250.35,131.00 250.35,131.00
247.89,127.81 240.50,116.27 236.17,117.49
234.17,118.05 231.85,121.40 230.58,123.00
230.58,123.00 221.13,135.00 221.13,135.00
221.13,135.00 183.35,184.00 183.35,184.00
183.35,184.00 88.88,306.00 88.88,306.00
88.88,306.00 55.65,349.00 55.65,349.00
50.94,355.09 41.27,368.61 36.00,373.00 Z
M 244.00,138.00
C 244.00,138.00 272.65,174.00 272.65,174.00
272.65,174.00 327.65,245.00 327.65,245.00
327.65,245.00 401.88,341.00 401.88,341.00
401.88,341.00 433.00,382.00 433.00,382.00
433.00,382.00 409.96,410.00 409.96,410.00
409.96,410.00 400.00,419.17 400.00,419.17
400.00,419.17 389.00,429.68 389.00,429.68
389.00,429.68 361.00,449.54 361.00,449.54
361.00,449.54 346.00,457.31 346.00,457.31
346.00,457.31 331.00,465.00 331.00,465.00
331.00,465.00 315.85,409.00 315.85,409.00
315.85,409.00 283.85,289.00 283.85,289.00
283.85,289.00 257.12,189.00 257.12,189.00
257.12,189.00 244.00,138.00 244.00,138.00 Z`,
],
iconName: "yyy",
prefix: "xxx",
} as never;

View File

@ -1,126 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
/**
* Custom FontAwesome icon definition for the
* Coursera logo.
*/
export const Coursera: IconDefinition = {
icon: [
825,
825,
[],
"U+E002",
`M 397.00,0.23
C 397.00,0.23 421.00,0.23 421.00,0.23
421.00,0.23 436.00,1.92 436.00,1.92
436.00,1.92 445.00,1.92 445.00,1.92
464.83,2.24 500.36,9.70 520.00,14.91
564.71,26.78 604.32,45.18 642.72,70.91
642.72,70.91 666.54,87.59 666.54,87.59
679.69,97.87 691.91,109.49 703.71,121.29
750.05,167.63 785.48,224.18 804.76,287.00
804.76,287.00 816.55,331.00 816.55,331.00
816.55,331.00 818.37,344.00 818.37,344.00
820.23,353.40 822.89,368.59 823.09,378.00
823.09,378.00 823.09,390.00 823.09,390.00
823.81,395.27 824.91,394.72 825.00,402.00
825.00,402.00 825.00,419.00 825.00,419.00
824.99,427.76 823.88,428.69 823.08,436.00
823.08,436.00 823.08,446.00 823.08,446.00
822.88,455.97 820.17,471.99 818.31,482.00
818.31,482.00 816.76,493.00 816.76,493.00
813.29,511.46 806.77,533.13 800.72,551.00
800.72,551.00 789.17,579.17 789.17,579.17
743.04,685.52 649.01,770.68 538.00,804.76
514.40,812.01 493.53,817.23 469.00,820.29
469.00,820.29 445.00,823.09 445.00,823.09
445.00,823.09 435.00,823.09 435.00,823.09
427.99,823.92 429.93,824.98 420.00,825.00
420.00,825.00 405.00,825.00 405.00,825.00
405.00,825.00 389.00,823.08 389.00,823.08
389.00,823.08 379.00,823.08 379.00,823.08
368.84,822.88 353.18,820.20 343.00,818.31
343.00,818.31 332.00,816.76 332.00,816.76
308.66,812.37 277.98,802.81 256.00,793.71
211.64,775.33 173.47,751.31 137.46,719.58
137.46,719.58 121.29,703.71 121.29,703.71
74.93,657.35 39.53,600.84 20.24,538.00
20.24,538.00 8.24,493.00 8.24,493.00
8.24,493.00 6.81,482.00 6.81,482.00
6.81,482.00 5.21,475.00 5.21,475.00
3.59,463.77 2.02,452.36 2.00,441.00
2.00,441.00 0.00,421.00 0.00,421.00
0.00,421.00 0.00,405.00 0.00,405.00
0.00,405.00 1.92,389.00 1.92,389.00
1.92,389.00 1.92,380.00 1.92,380.00
2.15,367.31 4.82,354.46 6.86,342.00
12.62,306.62 23.37,271.55 38.55,239.00
85.92,137.42 175.10,56.39 282.00,21.68
301.73,15.28 321.55,10.19 342.00,6.86
342.00,6.86 350.00,5.18 350.00,5.18
350.00,5.18 378.00,2.00 378.00,2.00
387.62,1.89 387.16,2.56 397.00,0.23 Z
M 654.00,274.00
C 652.59,267.31 647.58,262.01 643.51,256.72
635.54,246.34 626.80,236.89 617.43,227.75
582.03,193.25 534.25,169.22 486.00,159.22
486.00,159.22 475.00,157.75 475.00,157.75
475.00,157.75 469.00,156.26 469.00,156.26
469.00,156.26 443.00,154.00 443.00,154.00
443.00,154.00 419.00,154.00 419.00,154.00
419.00,154.00 393.00,156.26 393.00,156.26
393.00,156.26 387.00,157.75 387.00,157.75
387.00,157.75 376.00,159.22 376.00,159.22
359.46,162.64 337.52,169.42 322.09,176.22
310.29,181.41 299.65,187.64 288.72,194.38
230.27,230.42 189.21,287.07 173.67,354.00
173.67,354.00 169.00,376.00 169.00,376.00
169.00,376.00 169.00,384.00 169.00,384.00
168.19,389.27 167.09,388.72 167.00,396.00
167.00,396.00 167.00,427.00 167.00,427.00
167.02,437.40 168.03,434.44 169.06,441.00
169.06,441.00 169.06,450.00 169.06,450.00
171.22,463.47 175.55,480.94 179.94,493.83
208.58,578.07 278.08,641.10 364.00,663.24
375.88,666.30 405.06,670.98 417.00,671.00
417.00,671.00 445.00,671.00 445.00,671.00
445.00,671.00 469.00,668.63 469.00,668.63
469.00,668.63 475.00,667.19 475.00,667.19
475.00,667.19 486.00,665.76 486.00,665.76
486.00,665.76 503.00,661.27 503.00,661.27
547.18,648.72 587.85,626.54 620.12,593.45
631.39,581.89 638.18,574.40 647.68,561.15
651.38,556.00 655.09,552.51 656.00,546.00
656.00,546.00 622.00,526.15 622.00,526.15
622.00,526.15 574.08,498.06 574.08,498.06
574.08,498.06 546.00,482.00 546.00,482.00
534.75,499.99 523.33,511.09 506.00,523.14
494.21,531.34 480.79,536.77 467.09,540.79
458.67,543.26 443.67,545.99 435.00,546.00
424.27,546.02 411.46,544.96 401.00,542.55
357.16,532.46 320.34,499.15 303.73,457.72
300.20,448.91 295.05,428.27 295.00,419.00
295.00,419.00 295.00,405.00 295.00,405.00
295.08,398.63 295.76,399.32 296.68,394.00
298.79,381.82 299.55,375.89 304.46,364.00
311.29,347.50 322.76,330.34 335.46,317.80
352.35,301.13 374.31,288.72 397.17,282.45
397.17,282.45 406.00,280.91 406.00,280.91
413.70,279.46 411.09,279.01 420.00,279.00
420.00,279.00 442.00,279.00 442.00,279.00
461.77,279.03 484.13,288.32 501.09,297.97
508.30,302.07 525.10,315.12 530.25,321.17
532.57,323.88 541.23,335.82 544.15,336.27
546.02,336.55 550.51,333.55 552.25,332.55
552.25,332.55 574.00,319.99 574.00,319.99
574.00,319.99 631.99,286.46 631.99,286.46
631.99,286.46 654.00,274.00 654.00,274.00 Z`,
],
iconName: "yyy",
prefix: "xxx",
} as never;

View File

@ -1,63 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
/**
* Custom FontAwesome icon definition for the
* Fiverr logo.
*/
export const Fiverr: IconDefinition = {
icon: [
300,
300,
[],
"U+E002",
`M 131.00,0.21
C 131.00,0.21 161.00,0.21 161.00,0.21
175.05,0.02 192.91,4.74 206.00,9.81
219.21,14.93 234.03,23.67 245.00,32.61
271.56,54.26 290.61,84.25 297.40,118.00
298.88,125.38 299.99,130.37 300.00,138.00
300.00,138.00 300.00,164.00 300.00,164.00
299.71,188.69 285.28,221.51 270.63,241.00
257.74,258.14 242.56,270.96 224.00,281.57
207.02,291.29 180.65,299.97 161.00,300.00
161.00,300.00 137.00,300.00 137.00,300.00
126.65,299.88 110.91,295.97 101.00,292.67
56.73,277.91 22.19,243.07 7.08,199.00
-1.16,174.97 -0.04,162.44 0.00,138.00
0.02,124.75 3.92,109.38 8.58,97.00
29.12,42.42 74.15,9.01 131.00,0.21 Z
M 176.00,58.00
C 152.33,58.00 122.24,54.22 107.10,77.00
104.97,80.22 103.13,84.29 102.04,88.00
100.10,94.62 100.00,104.07 100.00,111.00
100.00,111.00 78.00,111.00 78.00,111.00
78.00,111.00 78.00,141.00 78.00,141.00
95.43,141.00 99.81,138.98 100.00,149.00
100.00,149.00 100.00,200.00 100.00,200.00
100.00,200.00 100.00,220.00 100.00,220.00
100.00,221.94 99.75,225.72 100.99,227.26
102.70,229.38 107.50,229.00 110.00,229.00
110.00,229.00 138.00,229.00 138.00,229.00
138.00,229.00 138.00,163.00 138.00,163.00
138.00,158.95 136.99,145.29 139.60,142.74
141.71,140.68 146.23,141.00 149.00,141.00
149.00,141.00 169.00,141.00 169.00,141.00
171.37,141.04 174.58,140.96 176.40,142.74
178.34,144.64 177.99,148.47 178.00,151.00
178.00,151.00 178.00,229.00 178.00,229.00
178.00,229.00 215.00,229.00 215.00,229.00
215.00,229.00 215.00,111.00 215.00,111.00
215.00,111.00 138.00,111.00 138.00,111.00
138.00,106.78 137.73,101.98 139.34,98.01
143.35,88.13 153.31,89.00 162.00,89.00
162.00,89.00 176.00,89.00 176.00,89.00
176.00,89.00 176.00,58.00 176.00,58.00 Z`,
],
iconName: "yyy",
prefix: "xxx",
} as never;

View File

@ -1,83 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
/**
* Custom FontAwesome icon definition for the
* GatherTown logo.
*/
export const Gather: IconDefinition = {
icon: [
38,
42,
[],
"U+E002",
`M 5.00,0.00
C 5.00,0.00 7.00,0.00 7.00,0.00
7.00,0.00 17.00,10.00 17.00,10.00
17.00,10.00 10.00,9.00 10.00,9.00
10.00,9.00 9.00,15.00 9.00,15.00
9.00,15.00 5.00,14.00 5.00,14.00
6.50,6.48 5.94,8.12 4.00,1.00
4.00,1.00 5.00,0.00 5.00,0.00 Z
M 20.00,14.00
C 20.11,12.71 20.06,11.37 20.60,10.15
24.66,0.89 36.99,13.91 26.89,16.61
25.97,16.80 24.94,16.81 24.00,16.61
22.18,16.37 21.52,15.79 20.00,15.00
19.74,22.50 17.00,24.66 10.00,21.00
9.92,23.16 10.07,25.75 8.40,27.40
6.21,29.57 1.33,29.29 0.33,24.95
-0.95,19.37 3.30,16.65 10.00,21.00
10.26,13.53 12.65,11.13 20.00,14.00 Z
M 25.00,10.00
C 25.00,10.00 26.00,14.00 26.00,14.00
26.00,14.00 25.00,10.00 25.00,10.00 Z
M 16.00,16.00
C 16.00,16.00 14.00,16.00 14.00,16.00
14.00,16.00 13.00,17.00 13.00,17.00
13.00,17.00 13.00,19.00 13.00,19.00
13.00,19.00 14.00,20.00 14.00,20.00
14.00,20.00 16.00,20.00 16.00,20.00
16.00,20.00 17.00,19.00 17.00,19.00
17.00,19.00 17.00,17.00 17.00,17.00
17.00,17.00 16.00,16.00 16.00,16.00 Z
M 21.00,27.00
C 21.08,24.86 20.92,22.37 22.60,20.74
25.35,18.08 30.07,19.45 31.16,23.05
32.37,27.10 27.72,32.83 20.89,27.00
20.89,27.00 20.89,30.96 20.89,30.96
20.59,31.90 20.38,32.76 19.83,33.57
18.92,34.88 17.56,35.55 15.98,35.55
9.23,35.55 9.53,24.34 17.00,25.35
18.77,25.59 19.54,26.23 21.00,27.00 Z
M 7.00,23.00
C 7.00,23.00 4.00,22.00 4.00,22.00
4.00,22.00 3.00,25.00 3.00,25.00
3.00,25.00 7.00,23.00 7.00,23.00 Z
M 28.00,23.00
C 28.00,23.00 24.00,25.00 24.00,25.00
24.00,25.00 28.00,26.00 28.00,26.00
28.00,26.00 28.00,23.00 28.00,23.00 Z
M 18.00,30.00
C 18.00,30.00 14.00,29.00 14.00,29.00
15.59,31.26 15.58,31.39 18.00,30.00 Z
M 23.31,33.02
C 32.01,29.83 33.13,38.37 28.77,40.97
24.19,43.71 18.07,38.68 23.31,33.02 Z
M 27.00,35.00
C 27.00,35.00 25.00,35.00 25.00,35.00
25.00,35.00 24.00,36.00 24.00,36.00
24.00,36.00 24.00,38.00 24.00,38.00
24.00,38.00 25.00,39.00 25.00,39.00
25.00,39.00 27.00,39.00 27.00,39.00
27.00,39.00 28.00,38.00 28.00,38.00
28.00,38.00 28.00,36.00 28.00,36.00
28.00,36.00 27.00,35.00 27.00,35.00 Z`,
],
iconName: "yyy",
prefix: "xxx",
} as never;

View File

@ -1,22 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
/**
* Custom FontAwesome icon definition for the
* Good Ol' Games logo.
*/
export const Gog: IconDefinition = {
icon: [
34,
31,
[],
"U+E002",
`M31,31H3a3,3,0,0,1-3-3V3A3,3,0,0,1,3,0H31a3,3,0,0,1,3,3V28A3,3,0,0,1,31,31ZM4,24.5A1.5,1.5,0,0,0,5.5,26H11V24H6.5a.5.5,0,0,1-.5-.5v-3a.5.5,0,0,1,.5-.5H11V18H5.5A1.5,1.5,0,0,0,4,19.5Zm8-18A1.5,1.5,0,0,0,10.5,5h-5A1.5,1.5,0,0,0,4,6.5v5A1.5,1.5,0,0,0,5.5,13H9V11H6.5a.5.5,0,0,1-.5-.5v-3A.5.5,0,0,1,6.5,7h3a.5.5,0,0,1,.5.5v6a.5.5,0,0,1-.5.5H4v2h6.5A1.5,1.5,0,0,0,12,14.5Zm0,13v5A1.5,1.5,0,0,0,13.5,26h5A1.5,1.5,0,0,0,20,24.5v-5A1.5,1.5,0,0,0,18.5,18h-5A1.5,1.5,0,0,0,12,19.5Zm9-13A1.5,1.5,0,0,0,19.5,5h-5A1.5,1.5,0,0,0,13,6.5v5A1.5,1.5,0,0,0,14.5,13h5A1.5,1.5,0,0,0,21,11.5Zm9,0A1.5,1.5,0,0,0,28.5,5h-5A1.5,1.5,0,0,0,22,6.5v5A1.5,1.5,0,0,0,23.5,13H27V11H24.5a.5.5,0,0,1-.5-.5v-3a.5.5,0,0,1,.5-.5h3a.5.5,0,0,1,.5.5v6a.5.5,0,0,1-.5.5H22v2h6.5A1.5,1.5,0,0,0,30,14.5ZM30,18H22.5A1.5,1.5,0,0,0,21,19.5V26h2V20.5a.5.5,0,0,1,.5-.5h1v6h2V20H28v6h2ZM18.5,11h-3a.5.5,0,0,1-.5-.5v-3a.5.5,0,0,1,.5-.5h3a.5.5,0,0,1,.5.5v3A.5.5,0,0,1,18.5,11Zm-4,9h3a.5.5,0,0,1,.5.5v3a.5.5,0,0,1-.5.5h-3a.5.5,0,0,1-.5-.5v-3A.5.5,0,0,1,14.5,20Z`,
],
iconName: "yyy",
prefix: "xxx",
} as never;

View File

@ -1,212 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
/**
* Custom FontAwesome icon definition for the
* Gumroad logo.
*/
export const Gumroad: IconDefinition = {
icon: [
806,
807,
[],
"U+E002",
`M 364.00,13.21
C 364.00,13.21 407.00,13.21 407.00,13.21
407.00,13.21 430.00,14.84 430.00,14.84
470.27,19.14 502.77,27.65 540.00,43.72
576.05,59.28 613.12,82.48 642.00,109.08
675.08,139.56 703.05,173.90 723.74,214.00
738.19,241.99 750.78,274.21 757.58,305.00
784.23,425.71 753.19,550.83 669.83,643.00
639.15,676.93 601.80,705.56 561.00,726.24
516.61,748.75 475.34,760.23 426.00,765.17
426.00,765.17 402.00,767.00 402.00,767.00
402.00,767.00 376.00,767.00 376.00,767.00
376.00,767.00 366.00,766.09 366.00,766.09
330.81,763.68 296.20,757.84 263.00,745.42
204.49,723.54 155.94,692.99 113.09,647.00
65.89,596.34 30.94,528.28 18.61,460.00
15.57,443.12 13.03,422.08 13.00,405.00
13.00,405.00 12.02,391.00 12.02,391.00
12.02,391.00 13.00,367.00 13.00,367.00
13.00,367.00 14.84,347.00 14.84,347.00
18.92,308.86 29.28,269.90 45.31,235.00
88.37,141.20 166.12,67.87 264.00,33.86
287.93,25.55 309.94,20.14 335.00,16.43
335.00,16.43 364.00,13.21 364.00,13.21 Z
M 487.00,15.00
C 487.00,15.00 488.00,15.00 488.00,15.00
488.00,15.00 487.00,16.00 487.00,16.00
487.00,16.00 487.00,15.00 487.00,15.00 Z
M 279.00,16.00
C 279.00,16.00 280.00,16.00 280.00,16.00
280.00,16.00 279.00,17.00 279.00,17.00
279.00,17.00 279.00,16.00 279.00,16.00 Z
M 515.00,21.00
C 515.00,21.00 516.00,21.00 516.00,21.00
516.00,21.00 515.00,22.00 515.00,22.00
515.00,22.00 515.00,21.00 515.00,21.00 Z
M 259.00,25.00
C 259.00,25.00 260.00,25.00 260.00,25.00
260.00,25.00 259.00,26.00 259.00,26.00
259.00,26.00 259.00,25.00 259.00,25.00 Z
M 193.00,53.00
C 193.00,53.00 194.00,53.00 194.00,53.00
194.00,53.00 193.00,54.00 193.00,54.00
193.00,54.00 193.00,53.00 193.00,53.00 Z
M 642.00,93.00
C 642.00,93.00 643.00,93.00 643.00,93.00
643.00,93.00 642.00,94.00 642.00,94.00
642.00,94.00 642.00,93.00 642.00,93.00 Z
M 682.00,133.00
C 682.00,133.00 683.00,133.00 683.00,133.00
683.00,133.00 682.00,134.00 682.00,134.00
682.00,134.00 682.00,133.00 682.00,133.00 Z
M 591.00,314.00
C 591.00,314.00 589.71,302.00 589.71,302.00
588.99,296.11 587.42,289.73 585.85,284.00
578.82,258.31 565.04,234.46 546.91,215.00
519.65,185.73 479.11,167.16 440.00,160.59
430.57,159.00 419.52,157.05 410.00,157.00
410.00,157.00 389.00,156.00 389.00,156.00
389.00,156.00 374.00,157.00 374.00,157.00
328.27,157.53 280.79,174.27 245.00,202.67
204.83,234.54 180.07,285.67 173.29,336.00
170.87,353.96 170.79,371.90 171.00,390.00
171.10,397.99 173.12,413.92 174.58,422.00
182.77,467.44 200.62,508.93 235.00,540.91
259.89,564.06 294.39,579.29 328.00,583.71
341.20,585.45 354.70,585.15 368.00,585.00
395.65,584.67 429.52,572.90 451.00,555.54
475.68,535.59 490.57,509.76 500.49,480.00
500.49,480.00 505.79,460.00 505.79,460.00
505.79,460.00 508.00,449.00 508.00,449.00
508.00,449.00 508.00,576.00 508.00,576.00
508.00,576.00 603.00,576.00 603.00,576.00
603.00,576.00 603.00,366.00 603.00,366.00
603.00,366.00 387.00,366.00 387.00,366.00
387.00,374.75 386.09,401.28 388.00,408.00
388.00,408.00 423.00,407.00 423.00,407.00
423.00,407.00 490.00,407.00 490.00,407.00
481.72,435.57 476.08,457.30 454.58,479.83
425.65,510.14 379.12,514.70 342.00,497.69
325.65,490.20 311.69,478.08 300.67,464.00
282.46,440.74 273.94,411.05 271.91,382.00
271.91,382.00 271.00,370.00 271.00,370.00
271.00,370.00 274.46,338.00 274.46,338.00
282.81,293.71 310.68,253.08 355.00,239.03
401.17,224.39 455.83,241.98 476.27,288.00
479.83,296.01 482.60,305.22 483.00,314.00
483.00,314.00 591.00,314.00 591.00,314.00 Z
M 51.00,201.00
C 51.00,201.00 52.00,201.00 52.00,201.00
52.00,201.00 51.00,202.00 51.00,202.00
51.00,202.00 51.00,201.00 51.00,201.00 Z
M 42.00,213.00
C 42.00,213.00 43.00,213.00 43.00,213.00
43.00,213.00 42.00,214.00 42.00,214.00
42.00,214.00 42.00,213.00 42.00,213.00 Z
M 39.00,219.00
C 39.00,219.00 40.00,219.00 40.00,219.00
40.00,219.00 39.00,220.00 39.00,220.00
39.00,220.00 39.00,219.00 39.00,219.00 Z
M 36.00,225.00
C 36.00,225.00 37.00,225.00 37.00,225.00
37.00,225.00 36.00,226.00 36.00,226.00
36.00,226.00 36.00,225.00 36.00,225.00 Z
M 756.00,229.00
C 756.00,229.00 757.00,229.00 757.00,229.00
757.00,229.00 756.00,230.00 756.00,230.00
756.00,230.00 756.00,229.00 756.00,229.00 Z
M 771.00,259.00
C 771.00,259.00 772.00,259.00 772.00,259.00
772.00,259.00 771.00,260.00 771.00,260.00
771.00,260.00 771.00,259.00 771.00,259.00 Z
M 17.00,283.00
C 17.00,283.00 18.00,283.00 18.00,283.00
18.00,283.00 17.00,284.00 17.00,284.00
17.00,284.00 17.00,283.00 17.00,283.00 Z
M 783.00,289.00
C 783.00,289.00 784.00,289.00 784.00,289.00
784.00,289.00 783.00,290.00 783.00,290.00
783.00,290.00 783.00,289.00 783.00,289.00 Z
M 2.00,346.00
C 2.00,346.00 3.00,346.00 3.00,346.00
3.00,346.00 2.00,347.00 2.00,347.00
2.00,347.00 2.00,346.00 2.00,346.00 Z
M 5.00,454.00
C 5.00,454.00 6.00,454.00 6.00,454.00
6.00,454.00 5.00,455.00 5.00,455.00
5.00,455.00 5.00,454.00 5.00,454.00 Z
M 24.00,517.00
C 24.00,517.00 25.00,517.00 25.00,517.00
25.00,517.00 24.00,518.00 24.00,518.00
24.00,518.00 24.00,517.00 24.00,517.00 Z
M 689.00,539.00
C 689.97,545.46 701.63,554.40 707.00,558.00
704.77,551.47 694.61,543.33 689.00,539.00 Z
M 33.00,547.00
C 33.00,547.00 34.00,547.00 34.00,547.00
34.00,547.00 33.00,548.00 33.00,548.00
33.00,548.00 33.00,547.00 33.00,547.00 Z
M 48.00,577.00
C 48.00,577.00 49.00,577.00 49.00,577.00
49.00,577.00 48.00,578.00 48.00,578.00
48.00,578.00 48.00,577.00 48.00,577.00 Z
M 749.00,618.00
C 749.00,618.00 750.00,618.00 750.00,618.00
750.00,618.00 749.00,619.00 749.00,619.00
749.00,619.00 749.00,618.00 749.00,618.00 Z
M 79.00,625.00
C 79.00,625.00 80.00,625.00 80.00,625.00
80.00,625.00 79.00,626.00 79.00,626.00
79.00,626.00 79.00,625.00 79.00,625.00 Z
M 107.00,658.00
C 107.00,658.00 108.00,658.00 108.00,658.00
108.00,658.00 107.00,659.00 107.00,659.00
107.00,659.00 107.00,658.00 107.00,658.00 Z
M 721.00,658.00
C 721.00,658.00 722.00,658.00 722.00,658.00
722.00,658.00 721.00,659.00 721.00,659.00
721.00,659.00 721.00,658.00 721.00,658.00 Z
M 113.00,664.00
C 113.00,664.00 114.00,664.00 114.00,664.00
114.00,664.00 113.00,665.00 113.00,665.00
113.00,665.00 113.00,664.00 113.00,664.00 Z
M 588.00,766.00
C 588.00,766.00 589.00,766.00 589.00,766.00
589.00,766.00 588.00,767.00 588.00,767.00
588.00,767.00 588.00,766.00 588.00,766.00 Z
M 562.00,778.00
C 562.00,778.00 563.00,778.00 563.00,778.00
563.00,778.00 562.00,779.00 562.00,779.00
562.00,779.00 562.00,778.00 562.00,778.00 Z
M 559.00,779.00
C 559.00,779.00 560.00,779.00 560.00,779.00
560.00,779.00 559.00,780.00 559.00,780.00
559.00,780.00 559.00,779.00 559.00,779.00 Z
M 276.00,781.00
C 276.00,781.00 277.00,781.00 277.00,781.00
277.00,781.00 276.00,782.00 276.00,782.00
276.00,782.00 276.00,781.00 276.00,781.00 Z
M 543.00,785.00
C 543.00,785.00 544.00,785.00 544.00,785.00
544.00,785.00 543.00,786.00 543.00,786.00
543.00,786.00 543.00,785.00 543.00,785.00 Z
M 344.00,800.00
C 344.00,800.00 345.00,800.00 345.00,800.00
345.00,800.00 344.00,801.00 344.00,801.00
344.00,801.00 344.00,800.00 344.00,800.00 Z
M 467.00,803.00
C 467.00,803.00 468.00,803.00 468.00,803.00
468.00,803.00 467.00,804.00 467.00,804.00
467.00,804.00 467.00,803.00 467.00,803.00 Z`,
],
iconName: "yyy",
prefix: "xxx",
} as never;

View File

@ -1,77 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
/**
* Custom FontAwesome icon definition for the
* Ko-Fi logo.
*/
export const Kofi: IconDefinition = {
icon: [
245,
162,
[],
"U+E002",
`M 180.00,126.00
C 177.32,145.89 167.90,160.97 146.00,161.00
146.00,161.00 123.00,162.00 123.00,162.00
123.00,162.00 36.00,162.00 36.00,162.00
11.68,161.96 1.04,147.01 1.00,124.00
1.00,124.00 1.00,19.00 1.00,19.00
1.07,5.88 7.47,1.02 20.00,1.00
20.00,1.00 184.00,1.00 184.00,1.00
208.36,1.04 232.17,16.98 240.56,40.00
244.19,49.95 244.12,58.64 244.00,69.00
243.60,102.66 211.64,125.71 180.00,126.00 Z
M 18.31,15.60
C 15.32,18.12 16.01,20.28 16.00,24.00
16.00,24.00 15.00,42.00 15.00,42.00
15.00,42.00 15.00,75.00 15.00,75.00
15.00,75.00 16.00,92.00 16.00,92.00
16.00,92.00 16.00,125.00 16.00,125.00
16.02,140.23 21.27,146.98 37.00,147.00
37.00,147.00 132.00,147.00 132.00,147.00
132.00,147.00 143.00,146.17 143.00,146.17
153.16,145.20 158.48,145.34 163.07,134.00
167.02,124.25 162.50,117.54 169.13,113.01
173.46,110.04 179.93,111.34 185.00,110.83
185.00,110.83 194.00,109.10 194.00,109.10
215.15,103.72 228.06,87.48 229.68,66.00
229.90,63.01 229.34,60.94 229.07,58.00
226.37,28.64 203.62,15.04 176.00,15.00
176.00,15.00 70.00,15.00 70.00,15.00
70.00,15.00 36.00,15.00 36.00,15.00
30.94,15.00 22.97,14.47 18.31,15.60 Z
M 171.04,29.65
C 182.06,27.33 197.48,28.99 205.83,37.18
223.51,54.55 219.29,88.40 194.00,95.96
187.88,97.79 172.05,100.22 167.56,94.77
164.83,91.47 165.01,86.06 165.00,82.00
165.00,82.00 165.00,60.00 165.00,60.00
165.00,53.97 164.02,36.80 167.14,32.39
168.39,30.61 169.24,30.50 171.04,29.65 Z
M 111.00,41.44
C 125.13,39.94 137.62,49.59 138.81,64.00
140.27,81.55 119.30,98.75 108.00,110.00
105.33,112.66 95.11,122.59 92.00,123.26
89.18,123.85 87.00,121.74 85.00,120.11
79.95,115.98 76.58,112.53 72.00,108.00
72.00,108.00 58.00,94.00 58.00,94.00
48.82,84.73 43.00,78.85 43.01,65.00
43.01,60.36 43.76,56.05 46.22,52.01
52.64,41.47 69.42,39.75 80.00,44.09
85.80,46.47 88.14,49.98 91.00,49.98
93.15,49.99 97.00,46.83 99.00,45.63
103.65,42.84 105.80,42.41 111.00,41.44 Z
M 180.00,83.00
C 186.51,82.86 192.10,81.90 196.79,76.90
204.64,68.51 202.92,52.32 192.96,46.23
188.79,43.68 184.66,44.00 180.00,44.00
180.00,44.00 180.00,83.00 180.00,83.00 Z`,
],
iconName: "yyy",
prefix: "xxx",
} as never;

View File

@ -1,70 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
/**
* Custom FontAwesome icon definition for the
* Matrix.org logo.
*/
export const Matrix: IconDefinition = {
icon: [
342,
342,
[],
"U+E002",
`M 138.00,0.53
C 150.87,-1.59 166.46,0.98 179.00,4.13
230.88,17.15 270.41,61.51 279.08,114.00
279.08,114.00 281.00,131.00 281.00,131.00
281.08,137.92 281.47,143.03 277.20,148.99
268.97,160.46 252.22,161.04 243.39,149.98
237.90,143.12 239.56,138.59 238.83,131.00
238.25,124.97 237.10,118.87 235.63,113.00
230.45,92.32 217.03,73.13 200.00,60.48
188.68,52.07 173.95,45.62 160.00,43.28
149.18,41.47 136.43,43.78 128.21,34.91
117.46,23.31 123.25,5.13 138.00,0.53 Z
M 126.00,61.42
C 132.79,60.60 140.80,60.41 147.00,63.67
157.30,69.10 161.07,83.05 155.00,93.00
148.91,102.97 142.67,102.25 133.00,103.17
133.00,103.17 121.00,104.75 121.00,104.75
106.64,107.11 91.56,113.68 80.00,122.50
61.64,136.52 50.33,153.71 44.63,176.00
43.46,180.57 42.62,185.30 42.17,190.00
41.42,197.85 43.18,203.96 37.61,210.99
28.88,221.99 10.70,222.28 2.99,210.00
-0.87,203.84 -0.08,195.99 0.00,189.00
0.10,181.05 1.94,171.72 3.87,164.00
14.25,122.51 43.23,89.80 82.00,72.31
97.65,65.25 109.47,63.78 126.00,61.42 Z
M 315.00,123.64
C 330.97,120.43 341.97,128.41 342.00,145.00
342.03,164.57 338.91,182.06 330.69,200.00
308.91,247.57 260.01,281.64 207.00,281.00
183.02,280.71 177.62,255.16 192.04,243.39
198.72,237.94 203.50,239.55 211.00,238.83
217.03,238.25 223.12,237.09 229.00,235.63
249.81,230.42 269.96,216.52 282.28,199.00
290.55,187.24 296.09,175.19 298.74,161.00
301.56,145.87 296.54,130.60 315.00,123.64 Z
M 78.00,184.53
C 87.56,183.00 96.80,186.96 101.08,196.00
101.08,196.00 105.45,225.00 105.45,225.00
108.31,239.01 115.29,252.68 123.90,264.00
136.86,281.04 157.21,293.39 178.00,298.11
188.70,300.54 202.89,298.40 210.98,304.56
222.59,313.38 221.84,332.30 209.00,339.64
203.20,342.95 194.60,342.07 188.00,342.00
180.39,341.91 168.41,339.51 161.00,337.42
119.62,325.74 86.75,295.86 70.60,256.00
70.60,256.00 66.29,243.00 66.29,243.00
63.87,234.58 62.76,227.67 61.84,219.00
60.14,203.20 59.71,189.94 78.00,184.53 Z`,
],
iconName: "yyy",
prefix: "xxx",
} as never;

View File

@ -1,136 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
/**
* Custom FontAwesome icon definition for the
* Peerlist logo.
*/
export const Peerlist: IconDefinition = {
icon: [
512,
512,
[],
"U+E002",
`M 214.00,0.14
C 214.00,0.14 243.00,0.14 243.00,0.14
243.00,0.14 291.00,0.14 291.00,0.14
291.00,0.14 301.00,1.00 301.00,1.00
301.00,1.00 311.00,1.00 311.00,1.00
311.00,1.00 328.00,2.83 328.00,2.83
375.51,7.58 421.85,17.89 457.91,51.42
483.50,75.23 497.13,112.43 503.80,146.00
507.93,166.77 510.12,187.89 511.04,209.00
511.04,209.00 512.00,220.00 512.00,220.00
512.59,270.71 513.41,322.24 502.42,372.00
495.29,404.31 483.17,434.75 459.72,458.83
437.47,481.67 407.37,493.82 377.00,501.37
326.73,513.88 274.38,512.08 223.00,512.00
223.00,512.00 208.00,511.00 208.00,511.00
208.00,511.00 204.00,511.00 204.00,511.00
204.00,511.00 166.00,507.13 166.00,507.13
125.75,501.54 81.42,488.74 52.28,458.83
18.32,423.96 7.84,375.75 2.84,329.00
2.84,329.00 0.91,302.00 0.91,302.00
0.91,302.00 0.00,290.00 0.00,290.00
0.00,290.00 0.00,253.00 0.00,253.00
0.00,253.00 0.00,223.00 0.00,223.00
0.00,223.00 1.00,205.00 1.00,205.00
1.00,205.00 6.59,155.00 6.59,155.00
11.95,123.04 22.32,89.63 42.81,64.00
74.31,24.60 121.91,10.61 170.00,4.28
170.00,4.28 201.00,1.09 201.00,1.09
201.00,1.09 214.00,0.14 214.00,0.14 Z
M 234.00,18.14
C 227.52,19.22 223.42,18.99 217.00,19.00
217.00,19.00 205.00,20.04 205.00,20.04
205.00,20.04 197.00,20.04 197.00,20.04
149.57,24.69 92.98,33.42 60.44,72.00
34.70,102.51 25.98,143.28 21.84,182.00
21.84,182.00 19.00,224.00 19.00,224.00
19.00,224.00 18.00,241.00 18.00,241.00
18.00,241.00 18.00,273.00 18.00,273.00
18.00,273.00 18.96,283.00 18.96,283.00
18.96,283.00 18.96,297.00 18.96,297.00
18.96,297.00 19.91,307.00 19.91,307.00
19.91,307.00 24.92,353.00 24.92,353.00
30.18,384.75 40.74,418.98 63.09,443.00
93.04,475.19 139.93,485.66 182.00,490.16
182.00,490.16 205.00,492.09 205.00,492.09
205.00,492.09 215.00,493.04 215.00,493.04
215.00,493.04 229.00,493.04 229.00,493.04
229.00,493.04 241.00,494.00 241.00,494.00
241.00,494.00 271.00,494.00 271.00,494.00
271.00,494.00 283.00,493.04 283.00,493.04
283.00,493.04 295.00,493.04 295.00,493.04
295.00,493.04 307.00,492.09 307.00,492.09
327.86,490.66 348.55,488.59 369.00,483.88
398.65,477.06 426.42,466.49 447.96,444.00
469.93,421.06 480.00,389.49 486.00,359.00
490.02,338.59 492.97,308.77 493.00,288.00
493.00,288.00 494.00,271.00 494.00,271.00
494.00,271.00 494.00,241.00 494.00,241.00
494.00,241.00 493.04,229.00 493.04,229.00
493.04,229.00 493.04,217.00 493.04,217.00
493.04,217.00 492.09,205.00 492.09,205.00
490.82,186.52 489.06,168.22 485.40,150.00
478.89,117.63 467.20,84.85 442.00,62.17
412.18,35.33 368.80,25.99 330.00,21.84
330.00,21.84 307.00,19.91 307.00,19.91
307.00,19.91 295.00,18.96 295.00,18.96
295.00,18.96 283.00,18.96 283.00,18.96
283.00,18.96 271.00,18.14 271.00,18.14
271.00,18.14 234.00,18.14 234.00,18.14 Z
M 156.00,101.00
C 156.00,101.00 231.00,101.00 231.00,101.00
231.00,101.00 270.00,101.00 270.00,101.00
304.65,101.05 338.60,117.93 361.91,143.00
370.38,152.10 378.11,164.62 383.14,176.00
398.86,211.57 395.05,254.17 374.58,287.00
365.39,301.73 358.75,306.40 347.28,318.17
331.52,334.35 322.21,343.76 301.00,353.14
279.20,362.77 264.27,364.00 241.00,364.00
241.00,364.00 241.00,411.00 241.00,411.00
241.00,411.00 223.00,411.00 223.00,411.00
223.00,411.00 223.00,429.00 223.00,429.00
223.00,429.00 138.00,429.00 138.00,429.00
138.00,429.00 138.00,119.00 138.00,119.00
138.00,119.00 156.00,119.00 156.00,119.00
156.00,119.00 156.00,101.00 156.00,101.00 Z
M 223.00,329.00
C 263.91,329.00 301.86,332.36 336.00,304.54
349.16,293.81 359.70,280.51 366.69,265.00
374.05,248.67 375.20,234.53 375.00,217.00
374.56,179.46 346.33,143.35 313.00,128.31
291.09,118.42 270.44,118.00 247.00,118.00
247.00,118.00 207.00,118.00 207.00,118.00
207.00,118.00 182.00,118.00 182.00,118.00
180.01,118.00 176.19,117.77 174.60,119.02
172.62,120.59 173.00,124.70 173.00,127.00
173.00,127.00 173.00,332.00 173.00,332.00
173.00,332.00 173.00,385.00 173.00,385.00
173.02,393.64 173.36,393.98 182.00,394.00
182.00,394.00 223.00,394.00 223.00,394.00
223.00,394.00 223.00,329.00 223.00,329.00 Z
M 223.00,166.00
C 223.00,166.00 266.00,166.00 266.00,166.00
306.49,166.06 336.49,205.40 321.39,244.00
319.11,249.82 315.95,255.30 311.82,260.00
300.28,273.13 284.59,280.92 267.00,281.00
267.00,281.00 253.00,281.00 253.00,281.00
253.00,281.00 223.00,281.00 223.00,281.00
223.00,281.00 223.00,166.00 223.00,166.00 Z
M 241.00,202.00
C 241.00,202.00 241.00,255.00 241.00,255.00
241.02,263.64 241.36,263.98 250.00,264.00
258.53,264.02 277.96,264.47 284.58,259.01
289.25,255.16 289.06,244.57 289.00,239.00
288.79,221.67 275.23,207.53 259.00,203.16
253.08,201.56 247.07,202.00 241.00,202.00 Z`,
],
iconName: "yyy",
prefix: "xxx",
} as never;

View File

@ -1,104 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
/**
* Custom FontAwesome icon definition for the
* Pixiv logo.
*/
export const Pixiv: IconDefinition = {
icon: [
900,
900,
[],
"U+E002",
`M 163.00,0.11
C 163.00,0.11 227.00,0.11 227.00,0.11
227.00,0.11 352.00,0.11 352.00,0.11
352.00,0.11 729.00,0.11 729.00,0.11
746.13,0.03 770.08,6.03 786.00,12.40
841.04,34.42 882.48,82.12 895.65,140.00
897.84,149.64 899.98,161.14 900.00,171.00
900.00,171.00 900.00,729.00 900.00,729.00
899.98,740.77 897.22,753.60 894.37,765.00
878.79,827.30 827.30,878.79 765.00,894.37
753.60,897.22 740.77,899.98 729.00,900.00
729.00,900.00 171.00,900.00 171.00,900.00
153.87,899.97 129.92,893.97 114.00,887.60
59.04,865.61 17.50,817.79 4.35,760.00
2.16,750.36 0.02,738.86 0.00,729.00
0.00,729.00 0.00,171.00 0.00,171.00
0.02,161.14 2.16,149.64 4.35,140.00
17.02,84.31 55.24,39.01 107.00,15.31
126.46,6.40 142.16,3.45 163.00,0.11 Z
M 311.00,616.00
C 373.56,636.85 424.71,647.77 491.00,647.00
491.00,647.00 501.00,646.09 501.00,646.09
561.64,641.94 619.68,625.46 669.00,588.63
686.93,575.24 698.59,564.39 712.74,547.00
728.39,527.76 738.75,508.08 747.42,485.00
752.85,470.57 758.82,444.32 759.00,429.00
759.00,429.00 759.82,414.00 759.82,414.00
759.82,414.00 759.00,404.00 759.00,404.00
758.67,375.23 751.71,346.17 739.77,320.00
730.28,299.20 719.08,281.37 704.13,264.00
659.77,212.46 592.74,182.82 526.00,174.85
526.00,174.85 504.00,172.91 504.00,172.91
504.00,172.91 494.00,172.00 494.00,172.00
494.00,172.00 462.00,172.00 462.00,172.00
462.00,172.00 450.00,172.91 450.00,172.91
412.36,175.49 375.85,182.56 340.00,194.51
317.45,202.03 295.26,211.12 274.00,221.75
231.59,242.96 192.08,269.69 156.00,300.43
156.00,300.43 130.00,324.01 130.00,324.01
127.74,326.25 122.03,331.98 121.40,335.00
120.64,338.62 127.54,347.74 129.66,351.00
129.66,351.00 151.19,385.00 151.19,385.00
153.01,387.93 158.61,397.57 161.21,398.94
166.85,401.91 176.80,394.78 175.82,381.00
175.82,381.00 173.22,363.58 173.22,363.58
174.13,359.05 184.45,345.15 187.65,341.00
200.18,324.75 224.03,301.37 241.00,290.00
241.00,290.00 241.00,639.00 241.00,639.00
241.00,639.00 241.00,707.00 241.00,707.00
240.99,709.72 241.32,713.33 239.40,715.49
237.70,717.41 233.44,718.49 231.00,719.34
223.81,721.87 210.84,727.47 212.43,737.00
213.73,744.73 218.25,745.99 225.00,746.00
225.00,746.00 327.00,746.00 327.00,746.00
329.00,746.00 332.13,746.11 333.96,745.40
339.03,743.42 340.93,736.79 338.99,732.00
336.42,725.65 327.11,721.40 321.00,719.06
318.33,718.04 313.62,716.99 312.02,714.58
310.78,712.71 311.00,709.21 311.00,707.00
311.00,707.00 311.00,616.00 311.00,616.00 Z
M 450.00,209.21
C 450.00,209.21 484.00,209.21 484.00,209.21
484.00,209.21 510.00,211.92 510.00,211.92
552.94,219.03 591.07,237.96 620.91,270.00
649.77,300.99 665.37,339.51 671.13,381.00
672.06,387.70 672.99,395.27 673.00,402.00
673.00,402.00 673.00,424.00 673.00,424.00
672.82,438.76 668.47,460.87 663.97,475.00
656.91,497.22 644.57,519.21 629.56,537.00
600.09,571.93 557.72,594.50 513.00,602.58
491.49,606.46 470.75,606.25 449.00,606.00
449.00,606.00 439.00,605.09 439.00,605.09
405.01,602.76 374.70,598.15 342.00,587.98
342.00,587.98 321.00,580.00 321.00,580.00
318.39,578.88 313.56,577.02 312.02,574.61
310.78,572.66 311.00,569.27 311.00,567.00
311.00,567.00 311.00,263.00 311.00,263.00
311.00,260.56 310.79,257.34 312.02,255.18
313.46,252.66 317.52,250.33 320.00,248.81
320.00,248.81 342.00,237.22 342.00,237.22
367.65,225.16 397.00,216.77 425.00,212.42
425.00,212.42 450.00,209.21 450.00,209.21 Z
`,
],
iconName: "yyy",
prefix: "xxx",
} as never;

View File

@ -1,85 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
/**
* Custom FontAwesome icon definition for the
* Polywork logo.
*/
export const Polywork: IconDefinition = {
icon: [
225,
225,
[],
"U+E002",
`M 153.00,155.00
C 153.00,177.49 155.16,201.18 134.00,215.78
117.90,226.88 101.50,224.00 83.00,224.00
83.00,224.00 57.00,224.00 57.00,224.00
36.75,224.00 21.13,223.75 8.22,205.00
5.78,201.46 3.67,197.12 2.44,193.00
0.64,186.98 0.01,182.25 0.00,176.00
0.00,176.00 0.00,49.00 0.00,49.00
0.05,19.44 19.43,0.05 49.00,0.00
49.00,0.00 176.00,0.00 176.00,0.00
203.99,0.04 223.96,18.67 224.00,47.00
224.00,47.00 224.00,89.00 224.00,89.00
224.00,112.86 226.74,132.44 204.00,147.95
200.27,150.49 196.33,152.29 192.00,153.56
182.70,156.30 170.69,156.05 161.00,156.00
157.55,155.98 156.36,155.95 153.00,155.00 Z
M 70.00,11.00
C 52.54,11.00 34.21,8.10 21.09,22.01
17.77,25.54 15.22,29.35 13.77,34.00
11.01,42.87 12.00,61.03 12.00,71.00
12.00,71.00 70.00,71.00 70.00,71.00
70.00,71.00 70.00,11.00 70.00,11.00 Z
M 141.00,71.00
C 141.00,71.00 141.00,19.00 141.00,19.00
140.94,10.87 139.73,11.02 132.00,11.00
132.00,11.00 82.94,11.00 82.94,11.00
82.94,11.00 82.94,65.00 82.94,65.00
82.65,71.56 84.51,70.99 91.00,71.00
91.00,71.00 141.00,71.00 141.00,71.00 Z
M 212.00,71.00
C 212.00,71.00 212.00,46.00 212.00,46.00
211.99,40.91 212.06,38.94 210.30,34.00
200.99,7.84 175.95,12.00 154.00,12.00
154.00,12.00 154.00,71.00 154.00,71.00
154.00,71.00 212.00,71.00 212.00,71.00 Z
M 70.00,84.00
C 70.00,84.00 11.00,84.00 11.00,84.00
11.00,84.00 11.00,136.00 11.00,136.00
11.02,144.64 11.36,144.98 20.00,145.00
20.00,145.00 70.00,145.00 70.00,145.00
70.00,145.00 70.00,84.00 70.00,84.00 Z
M 141.00,84.00
C 141.00,84.00 83.00,84.00 83.00,84.00
83.00,84.00 83.00,144.00 83.00,144.00
83.00,144.00 141.00,144.00 141.00,144.00
141.00,144.00 141.00,84.00 141.00,84.00 Z
M 212.00,84.00
C 212.00,84.00 154.00,84.00 154.00,84.00
154.00,84.00 154.00,145.00 154.00,145.00
176.30,145.00 201.22,148.17 210.45,122.00
212.02,117.55 211.99,114.59 212.00,110.00
212.00,110.00 212.00,84.00 212.00,84.00 Z
M 70.00,157.00
C 70.00,157.00 11.00,157.00 11.00,157.00
11.00,177.94 8.44,201.56 33.00,210.30
37.94,212.06 39.91,211.99 45.00,212.00
45.00,212.00 70.00,212.00 70.00,212.00
70.00,212.00 70.00,157.00 70.00,157.00 Z
M 141.00,158.00
C 141.00,158.00 83.00,158.00 83.00,158.00
83.00,158.00 83.00,213.00 83.00,213.00
83.00,213.00 106.00,213.00 106.00,213.00
110.59,212.99 113.55,213.02 118.00,211.45
143.85,202.34 141.00,180.01 141.00,158.00 Z`,
],
iconName: "yyy",
prefix: "xxx",
} as never;

View File

@ -1,116 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
/**
* Custom FontAwesome icon definition for the
* RetroAchievements logo.
*/
export const RetroAchievements: IconDefinition = {
icon: [
500,
275,
[],
"U+E002",
`M 0.00,0.00
C 0.00,0.00 73.00,0.00 73.00,0.00
73.00,0.00 116.00,0.00 116.00,0.00
150.90,0.05 184.08,28.35 194.12,61.00
197.20,71.03 199.09,81.49 199.00,92.00
198.86,108.25 194.88,127.04 186.39,141.00
183.49,145.75 178.82,151.91 174.92,155.83
172.79,157.98 170.04,159.58 170.72,163.01
170.72,163.01 175.25,172.00 175.25,172.00
175.25,172.00 187.58,194.00 187.58,194.00
187.58,194.00 215.86,245.00 215.86,245.00
215.86,245.00 232.00,275.00 232.00,275.00
232.00,275.00 200.00,275.00 200.00,275.00
200.00,275.00 192.61,274.01 192.61,274.01
192.61,274.01 186.43,265.00 186.43,265.00
186.43,265.00 175.00,245.00 175.00,245.00
175.00,245.00 139.40,183.00 139.40,183.00
139.40,183.00 117.00,143.00 117.00,143.00
160.97,139.31 175.67,72.18 138.00,47.10
122.50,36.79 106.57,39.00 89.00,39.00
89.00,39.00 0.00,39.00 0.00,39.00
0.00,39.00 0.00,0.00 0.00,0.00 Z
M 238.00,275.00
C 238.00,275.00 253.58,229.00 253.58,229.00
253.58,229.00 278.31,159.00 278.31,159.00
278.31,159.00 308.66,73.00 308.66,73.00
308.66,73.00 326.32,24.00 326.32,24.00
332.59,12.07 343.55,2.89 357.00,0.23
357.00,0.23 375.00,0.23 375.00,0.23
381.82,0.08 386.99,1.57 393.00,4.79
412.88,15.46 416.50,37.70 423.81,57.00
423.81,57.00 446.69,122.00 446.69,122.00
446.69,122.00 474.69,201.00 474.69,201.00
474.69,201.00 492.34,251.00 492.34,251.00
494.69,257.75 499.30,268.27 500.00,275.00
500.00,275.00 336.00,275.00 336.00,275.00
336.00,275.00 336.00,241.00 336.00,241.00
336.00,241.00 452.00,241.00 452.00,241.00
452.00,241.00 435.95,197.00 435.95,197.00
435.95,197.00 397.42,90.00 397.42,90.00
397.42,90.00 384.42,54.00 384.42,54.00
381.75,46.85 381.24,41.88 373.00,39.11
367.19,37.16 360.56,39.79 357.53,45.09
357.53,45.09 351.95,60.00 351.95,60.00
351.95,60.00 341.33,90.00 341.33,90.00
341.33,90.00 299.31,210.00 299.31,210.00
299.31,210.00 285.95,248.00 285.95,248.00
285.95,248.00 277.00,275.00 277.00,275.00
277.00,275.00 238.00,275.00 238.00,275.00 Z
M 0.00,47.00
C 0.00,47.00 110.00,47.00 110.00,47.00
123.38,47.16 136.40,52.85 144.20,64.00
155.04,79.48 152.55,106.67 140.67,121.00
129.04,135.04 117.41,135.00 101.00,135.00
101.00,135.00 130.42,186.00 130.42,186.00
130.42,186.00 181.00,275.00 181.00,275.00
181.00,275.00 147.00,275.00 147.00,275.00
147.00,275.00 139.33,273.98 139.33,273.98
139.33,273.98 126.15,253.00 126.15,253.00
126.15,253.00 85.00,182.00 85.00,182.00
85.00,182.00 85.00,275.00 85.00,275.00
85.00,275.00 47.00,275.00 47.00,275.00
47.00,275.00 47.00,95.00 47.00,95.00
47.00,95.00 102.00,95.00 102.00,95.00
105.16,94.98 112.73,94.56 110.60,89.22
109.14,85.55 103.19,86.01 100.00,86.00
100.00,86.00 38.00,86.00 38.00,86.00
38.00,86.00 38.00,275.00 38.00,275.00
38.00,275.00 0.00,275.00 0.00,275.00
0.00,275.00 0.00,47.00 0.00,47.00 Z
M 285.00,275.00
C 285.00,275.00 302.00,224.00 302.00,224.00
302.00,224.00 344.00,102.00 344.00,102.00
344.00,102.00 358.14,61.00 358.14,61.00
359.89,56.05 361.21,48.97 367.02,47.43
373.36,45.76 376.14,49.86 378.19,55.00
378.19,55.00 390.00,88.00 390.00,88.00
390.00,88.00 423.05,182.00 423.05,182.00
423.05,182.00 434.34,214.00 434.34,214.00
436.60,220.49 439.37,226.04 440.00,233.00
440.00,233.00 336.00,233.00 336.00,233.00
336.00,233.00 335.00,229.00 335.00,229.00
335.00,229.00 325.00,261.00 325.00,261.00
325.00,261.00 320.16,273.40 320.16,273.40
320.16,273.40 313.00,275.00 313.00,275.00
313.00,275.00 285.00,275.00 285.00,275.00 Z
M 370.00,131.00
C 370.00,131.00 361.28,155.00 361.28,155.00
361.28,155.00 348.00,198.00 348.00,198.00
348.00,198.00 391.00,198.00 391.00,198.00
391.00,198.00 370.00,131.00 370.00,131.00 Z
M 337.00,227.00
C 337.00,227.00 336.00,227.00 336.00,227.00
336.00,227.00 337.00,228.00 337.00,228.00
337.00,228.00 337.00,227.00 337.00,227.00 Z`,
],
iconName: "yyy",
prefix: "xxx",
} as never;

View File

@ -1,70 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
/**
* Custom FontAwesome icon definition for the
* Saylor Academy logo.
*/
export const Saylor: IconDefinition = {
icon: [
171,
134,
[],
"U+E002",
`M 0.00,0.00
C 0.00,0.00 24.00,0.00 24.00,0.00
42.06,0.03 57.59,5.04 74.00,12.00
72.31,15.58 65.88,24.25 61.99,25.22
59.37,25.87 51.31,22.48 48.00,21.63
37.00,18.80 31.31,18.00 20.00,18.00
20.00,18.00 26.08,55.00 26.08,55.00
26.08,55.00 33.00,100.00 33.00,100.00
45.96,100.01 59.12,102.79 71.00,108.00
69.19,112.61 63.94,119.86 59.00,121.31
56.37,122.09 46.55,119.33 43.00,118.75
35.41,117.51 25.85,118.00 18.00,118.00
18.00,118.00 13.08,88.00 13.08,88.00
13.08,88.00 4.58,34.00 4.58,34.00
4.58,34.00 0.00,0.00 0.00,0.00 Z
M 67.00,126.00
C 70.80,117.82 83.00,108.14 81.81,94.00
80.97,83.99 74.07,77.87 69.09,70.00
65.00,63.53 62.41,53.66 63.17,46.00
64.82,29.19 75.60,19.06 90.00,11.76
114.41,-0.63 136.60,0.00 163.00,0.00
163.00,0.00 153.87,61.00 153.87,61.00
153.87,61.00 152.00,75.00 152.00,75.00
148.70,74.04 137.56,71.72 135.77,69.44
133.80,66.95 136.08,58.21 136.58,55.00
136.58,55.00 142.00,18.00 142.00,18.00
126.51,18.01 107.23,22.25 94.00,30.47
86.94,34.85 80.49,41.13 81.10,50.00
81.78,60.00 90.38,66.51 94.63,75.00
99.92,85.58 99.00,93.72 99.00,105.00
99.00,105.00 119.00,101.00 119.00,101.00
119.00,101.00 121.89,117.41 121.89,117.41
121.89,117.41 106.00,122.33 106.00,122.33
106.00,122.33 91.00,129.01 91.00,129.01
91.00,129.01 81.00,133.39 81.00,133.39
81.00,133.39 67.00,126.00 67.00,126.00 Z
M 118.00,72.00
C 118.00,72.00 150.00,80.86 150.00,80.86
150.00,80.86 168.00,87.00 168.00,87.00
168.00,87.00 154.00,95.00 154.00,95.00
156.53,98.54 166.08,107.66 166.66,110.00
167.68,114.07 159.11,122.25 155.00,120.83
152.31,119.90 143.54,110.54 141.00,108.00
138.65,112.89 135.79,119.24 131.00,122.00
131.00,122.00 118.00,72.00 118.00,72.00 Z
M 99.00,105.00
C 99.00,105.00 98.00,105.00 98.00,105.00
98.00,105.00 99.00,106.00 99.00,106.00
99.00,106.00 99.00,105.00 99.00,105.00 Z`,
],
iconName: "yyy",
prefix: "xxx",
} as never;

View File

@ -1,74 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
/**
* Custom FontAwesome icon definition for the
* TeeSpring logo.
*/
export const TeeSpring: IconDefinition = {
icon: [
475,
545,
[],
"U+E002",
`M 240.00,0.00
C 240.00,0.00 244.00,0.00 244.00,0.00
244.00,0.00 254.00,1.04 254.00,1.04
254.00,1.04 263.00,1.04 263.00,1.04
304.10,5.09 342.37,17.33 377.00,40.08
435.19,78.31 469.28,140.18 474.09,209.00
474.09,209.00 475.00,219.00 475.00,219.00
475.82,289.26 446.65,351.38 393.00,396.73
382.45,405.65 369.17,414.11 357.00,420.69
357.00,420.69 337.27,430.64 337.27,430.64
334.29,433.27 332.39,439.31 330.69,443.00
327.83,449.23 324.42,455.20 320.77,461.00
310.40,477.47 293.49,496.40 278.00,508.10
249.81,529.41 203.43,544.94 168.00,545.00
168.00,545.00 150.00,545.00 150.00,545.00
125.42,544.96 90.40,535.79 68.00,525.69
49.96,517.55 32.70,506.76 17.00,494.77
17.00,494.77 0.00,481.00 0.00,481.00
2.57,475.47 6.82,471.50 10.84,467.00
10.84,467.00 33.28,442.00 33.28,442.00
35.47,439.49 42.88,430.22 46.04,430.18
48.97,430.14 57.23,437.77 60.00,439.87
70.46,447.78 83.12,455.65 95.00,461.22
136.97,480.90 194.02,482.07 233.00,454.56
238.56,450.64 241.26,447.73 246.00,443.00
224.21,442.93 191.85,432.40 172.00,423.31
117.49,398.35 72.00,360.79 45.75,306.00
36.23,286.14 31.44,267.91 29.91,246.00
29.67,242.56 28.93,240.60 29.18,237.00
30.23,222.27 32.09,207.57 38.31,194.00
42.82,184.15 47.86,176.08 55.17,168.00
89.09,130.48 146.65,132.44 190.00,149.92
205.26,156.07 219.68,164.39 233.00,174.01
256.93,191.30 280.05,215.68 296.83,240.00
313.68,264.43 328.11,289.43 336.72,318.00
339.48,327.18 342.55,336.33 343.00,346.00
349.38,343.12 354.12,337.88 359.00,333.00
368.02,323.98 373.77,317.88 380.68,307.00
411.97,257.71 413.89,196.46 383.99,146.00
359.25,104.26 314.53,77.92 267.00,71.72
267.00,71.72 249.00,70.00 249.00,70.00
249.00,70.00 240.00,70.00 240.00,70.00
240.00,70.00 240.00,0.00 240.00,0.00 Z
M 277.00,375.00
C 276.73,345.54 264.44,317.53 249.05,293.00
232.19,266.12 210.91,241.80 184.00,224.69
172.49,217.38 153.57,209.06 140.00,207.15
140.00,207.15 126.00,207.15 126.00,207.15
115.14,207.13 104.29,213.21 100.92,224.00
98.90,230.49 98.93,234.35 99.00,241.00
99.27,263.45 112.66,287.80 126.21,305.00
151.90,337.62 201.72,367.04 243.00,373.56
254.27,375.34 265.63,375.00 277.00,375.00 Z`,
],
iconName: "yyy",
prefix: "xxx",
} as never;

View File

@ -1,93 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
/**
* Custom FontAwesome icon definition for the
* Throne.me logo.
*/
export const Throne: IconDefinition = {
icon: [
738,
621,
[],
"U+E002",
`M 364.00,0.65
C 380.58,-2.77 384.82,13.12 390.75,25.00
390.75,25.00 436.25,114.00 436.25,114.00
436.25,114.00 501.25,242.00 501.25,242.00
509.55,258.59 526.58,284.93 526.99,303.00
527.58,329.12 511.89,341.11 495.00,358.00
495.00,358.00 471.96,382.00 471.96,382.00
471.96,382.00 440.00,414.00 440.00,414.00
440.00,414.00 418.96,436.00 418.96,436.00
418.96,436.00 390.00,465.00 390.00,465.00
383.82,471.18 376.58,481.87 367.00,480.80
359.95,480.01 351.03,469.03 346.00,464.00
346.00,464.00 300.00,417.00 300.00,417.00
300.00,417.00 239.00,355.00 239.00,355.00
224.23,340.23 209.04,325.70 210.51,303.00
210.78,298.85 211.58,292.96 212.77,289.00
212.77,289.00 235.75,242.00 235.75,242.00
235.75,242.00 298.75,119.00 298.75,119.00
298.75,119.00 320.74,76.00 320.74,76.00
320.74,76.00 343.69,31.00 343.69,31.00
346.88,25.11 354.43,7.97 358.21,4.21
360.24,2.20 361.48,1.71 364.00,0.65 Z
M 11.00,204.59
C 13.62,204.13 15.36,203.84 18.00,204.59
23.76,206.43 34.33,218.33 39.00,223.00
39.00,223.00 102.00,287.00 102.00,287.00
102.00,287.00 131.96,317.00 131.96,317.00
131.96,317.00 141.01,327.00 141.01,327.00
141.01,327.00 176.96,363.00 176.96,363.00
176.96,363.00 186.01,373.00 186.01,373.00
186.01,373.00 235.96,423.00 235.96,423.00
235.96,423.00 316.00,505.00 316.00,505.00
316.00,505.00 361.00,551.00 361.00,551.00
366.28,556.28 376.33,564.19 376.52,572.00
376.65,577.57 372.41,583.22 367.00,584.58
367.00,584.58 360.00,585.17 360.00,585.17
360.00,585.17 345.00,586.00 345.00,586.00
345.00,586.00 334.00,586.96 334.00,586.96
299.43,588.47 264.60,593.98 231.00,602.37
212.72,606.95 183.56,617.64 167.00,618.82
163.80,619.04 161.15,618.37 158.00,618.07
135.75,616.01 118.33,604.57 107.44,585.00
102.99,577.01 98.68,561.24 96.15,552.00
96.15,552.00 64.42,443.00 64.42,443.00
64.42,443.00 26.02,311.00 26.02,311.00
26.02,311.00 3.42,233.00 3.42,233.00
0.08,221.29 -4.79,209.26 11.00,204.59 Z
M 720.00,204.61
C 730.62,202.68 739.38,209.98 737.53,221.00
737.53,221.00 729.71,249.00 729.71,249.00
729.71,249.00 714.58,301.00 714.58,301.00
714.58,301.00 678.42,425.00 678.42,425.00
678.42,425.00 646.72,534.00 646.72,534.00
638.26,562.21 633.90,594.97 606.00,611.13
601.21,613.90 595.29,616.69 590.00,618.28
569.52,624.42 556.97,616.60 538.00,611.14
538.00,611.14 500.00,600.87 500.00,600.87
491.51,598.75 482.71,597.52 475.00,593.12
465.90,587.93 450.35,570.35 442.00,562.00
442.00,562.00 416.72,536.00 416.72,536.00
412.08,530.66 408.35,526.63 410.43,519.00
411.45,515.25 414.38,512.76 416.92,510.00
416.92,510.00 432.00,494.00 432.00,494.00
432.00,494.00 465.96,460.01 465.96,460.01
465.96,460.01 483.00,442.00 483.00,442.00
483.00,442.00 509.96,415.00 509.96,415.00
509.96,415.00 519.01,405.00 519.01,405.00
519.01,405.00 552.96,371.01 552.96,371.01
552.96,371.01 651.00,271.00 651.00,271.00
651.00,271.00 665.04,256.00 665.04,256.00
665.04,256.00 696.00,225.00 696.00,225.00
702.65,218.35 711.22,207.67 720.00,204.61 Z`,
],
iconName: "yyy",
prefix: "xxx",
} as never;

View File

@ -1,52 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
/**
* Custom FontAwesome icon definition for the
* Topmate.io logo.
*/
export const Topmate: IconDefinition = {
icon: [
502,
503,
[],
"U+E002",
`M 240.00,0.42
C 256.32,-1.56 286.52,2.28 303.00,5.60
400.40,25.19 477.58,103.88 497.00,201.00
497.00,201.00 501.17,232.00 501.17,232.00
501.17,232.00 502.00,241.00 502.00,241.00
502.35,270.85 499.89,297.30 490.98,326.00
467.36,401.97 409.93,461.62 335.00,488.31
310.99,496.86 285.45,501.71 260.00,502.00
260.00,502.00 251.00,502.66 251.00,502.66
251.00,502.66 242.00,502.00 242.00,502.00
242.00,502.00 234.00,502.00 234.00,502.00
211.79,501.74 178.65,493.13 158.00,484.80
126.34,472.03 97.19,453.16 73.01,428.99
-2.96,353.01 -20.43,237.27 25.32,141.00
55.16,78.19 112.06,31.52 178.00,11.02
194.55,5.88 209.86,3.32 227.00,1.28
227.00,1.28 240.00,0.42 240.00,0.42 Z
M 376.00,177.00
C 368.26,163.21 357.11,149.88 345.00,139.75
284.88,89.46 195.07,94.22 142.17,153.00
130.81,165.62 121.94,180.30 115.60,196.00
110.16,209.48 105.17,229.47 105.00,244.00
105.00,244.00 105.00,255.00 105.00,255.00
105.01,263.83 107.03,276.36 109.13,285.00
119.96,329.56 149.30,364.60 191.00,383.69
237.19,404.84 292.51,398.62 334.00,369.98
344.45,362.76 364.10,345.47 369.00,334.00
369.00,334.00 295.00,281.71 295.00,281.71
295.00,281.71 251.00,250.00 251.00,250.00
251.00,250.00 297.00,223.60 297.00,223.60
297.00,223.60 376.00,177.00 376.00,177.00 Z`,
],
iconName: "yyy",
prefix: "xxx",
} as never;

View File

@ -1,148 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
/**
* Custom FontAwesome icon definition for the
* Tree Nation logo.
*/
export const TreeNation: IconDefinition = {
icon: [
52,
52,
[],
"U+E002",
`M 25.00,52.00
C 15.12,50.14 7.59,47.52 2.41,38.00
-0.15,33.27 -0.06,29.18 0.00,24.00
0.16,10.76 10.76,0.16 24.00,0.00
31.74,-0.09 36.64,0.42 42.96,5.53
54.40,14.78 54.92,33.47 44.82,43.90
39.64,49.24 33.11,51.04 26.00,52.00
26.00,46.30 24.65,37.69 28.00,33.00
24.79,30.12 25.93,24.77 27.00,21.00
27.00,21.00 23.00,36.00 23.00,36.00
26.19,40.33 25.00,46.83 25.00,52.00 Z
M 31.00,48.00
C 50.79,42.34 56.10,15.81 37.00,5.41
32.73,3.09 28.74,2.88 24.00,3.02
9.50,3.42 -0.31,18.27 3.64,32.00
6.11,40.60 11.93,45.13 20.00,48.00
20.00,45.66 20.29,41.35 18.98,39.43
17.24,36.88 13.97,37.30 11.11,35.27
4.88,30.84 6.93,25.10 12.00,21.00
10.87,15.81 11.98,10.65 18.00,9.33
20.79,8.72 23.27,9.99 26.00,9.85
28.83,9.92 31.54,8.42 34.98,9.85
38.83,11.21 42.64,19.18 44.00,23.04
47.45,32.86 35.14,33.49 32.60,36.43
30.43,38.94 31.00,44.75 31.00,48.00 Z
M 22.00,14.00
C 22.00,14.00 17.00,15.00 17.00,15.00
17.00,15.00 22.00,14.00 22.00,14.00 Z
M 23.00,15.00
C 23.00,15.00 21.00,20.00 21.00,20.00
21.00,20.00 24.00,20.00 24.00,20.00
24.00,20.00 23.00,15.00 23.00,15.00 Z
M 30.00,15.00
C 30.00,15.00 29.00,15.00 29.00,15.00
29.00,15.00 30.00,16.00 30.00,16.00
30.00,16.00 30.00,15.00 30.00,15.00 Z
M 35.00,15.00
C 35.00,15.00 34.00,15.00 34.00,15.00
34.00,15.00 35.00,16.00 35.00,16.00
35.00,16.00 35.00,15.00 35.00,15.00 Z
M 35.00,18.00
C 35.00,18.00 34.00,18.00 34.00,18.00
34.00,18.00 35.00,19.00 35.00,19.00
35.00,19.00 35.00,18.00 35.00,18.00 Z
M 18.00,19.00
C 18.00,19.00 17.00,19.00 17.00,19.00
17.00,19.00 18.00,20.00 18.00,20.00
18.00,20.00 18.00,19.00 18.00,19.00 Z
M 34.00,19.00
C 34.00,19.00 33.00,19.00 33.00,19.00
33.00,19.00 34.00,20.00 34.00,20.00
34.00,20.00 34.00,19.00 34.00,19.00 Z
M 20.00,20.00
C 20.00,20.00 19.00,20.00 19.00,20.00
19.00,20.00 20.00,21.00 20.00,21.00
20.00,21.00 20.00,20.00 20.00,20.00 Z
M 25.00,20.00
C 25.00,20.00 24.00,20.00 24.00,20.00
24.00,20.00 25.00,21.00 25.00,21.00
25.00,21.00 25.00,20.00 25.00,20.00 Z
M 28.00,20.00
C 28.00,20.00 27.00,20.00 27.00,20.00
27.00,20.00 28.00,21.00 28.00,21.00
28.00,21.00 28.00,20.00 28.00,20.00 Z
M 35.00,23.00
C 35.00,23.00 34.00,23.00 34.00,23.00
34.00,23.00 35.00,24.00 35.00,24.00
35.00,24.00 35.00,23.00 35.00,23.00 Z
M 39.00,23.00
C 39.00,23.00 38.00,23.00 38.00,23.00
38.00,23.00 39.00,24.00 39.00,24.00
39.00,24.00 39.00,23.00 39.00,23.00 Z
M 14.00,26.00
C 14.00,26.00 13.00,26.00 13.00,26.00
13.00,26.00 14.00,27.00 14.00,27.00
14.00,27.00 14.00,26.00 14.00,26.00 Z
M 18.00,26.00
C 18.00,26.00 17.00,26.00 17.00,26.00
17.00,26.00 18.00,27.00 18.00,27.00
18.00,27.00 18.00,26.00 18.00,26.00 Z
M 19.00,27.00
C 19.00,27.00 17.00,31.00 17.00,31.00
17.00,31.00 19.00,27.00 19.00,27.00 Z
M 39.00,27.00
C 39.00,27.00 38.00,27.00 38.00,27.00
38.00,27.00 39.00,28.00 39.00,28.00
39.00,28.00 39.00,27.00 39.00,27.00 Z
M 33.00,28.00
C 33.00,28.00 32.00,28.00 32.00,28.00
32.00,28.00 33.00,29.00 33.00,29.00
33.00,29.00 33.00,28.00 33.00,28.00 Z
M 32.00,29.00
C 32.00,29.00 31.00,29.00 31.00,29.00
31.00,29.00 32.00,30.00 32.00,30.00
32.00,30.00 32.00,29.00 32.00,29.00 Z
M 14.00,30.00
C 14.00,30.00 13.00,30.00 13.00,30.00
13.00,30.00 14.00,31.00 14.00,31.00
14.00,31.00 14.00,30.00 14.00,30.00 Z
M 31.00,30.00
C 31.00,30.00 30.00,30.00 30.00,30.00
30.00,30.00 31.00,31.00 31.00,31.00
31.00,31.00 31.00,30.00 31.00,30.00 Z
M 20.00,31.00
C 20.00,31.00 19.00,31.00 19.00,31.00
19.00,31.00 20.00,32.00 20.00,32.00
20.00,32.00 20.00,31.00 20.00,31.00 Z
M 30.00,31.00
C 30.00,31.00 29.00,31.00 29.00,31.00
29.00,31.00 30.00,32.00 30.00,32.00
30.00,32.00 30.00,31.00 30.00,31.00 Z
M 21.00,32.00
C 21.00,32.00 20.00,32.00 20.00,32.00
20.00,32.00 21.00,33.00 21.00,33.00
21.00,33.00 21.00,32.00 21.00,32.00 Z
M 29.00,32.00
C 29.00,32.00 28.00,32.00 28.00,32.00
28.00,32.00 29.00,33.00 29.00,33.00
29.00,33.00 29.00,32.00 29.00,32.00 Z
M 22.00,33.00
C 22.00,33.00 21.00,33.00 21.00,33.00
21.00,33.00 22.00,34.00 22.00,34.00
22.00,34.00 22.00,33.00 22.00,33.00 Z
M 23.00,34.00
C 23.00,34.00 22.00,34.00 22.00,34.00
22.00,34.00 23.00,35.00 23.00,35.00
23.00,35.00 23.00,34.00 23.00,34.00 Z`,
],
iconName: "yyy",
prefix: "xxx",
} as never;

View File

@ -1,155 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
/**
* Custom FontAwesome icon definition for the
* Udemy logo.
*/
export const Udemy: IconDefinition = {
icon: [
2118,
2118,
[],
"U+E002",
`M 1027.00,0.21
C 1027.00,0.21 1083.00,0.21 1083.00,0.21
1083.00,0.21 1098.00,1.00 1098.00,1.00
1098.00,1.00 1148.00,3.83 1148.00,3.83
1148.00,3.83 1185.00,7.28 1185.00,7.28
1242.11,14.33 1297.67,25.39 1353.00,41.29
1516.40,88.26 1668.12,175.50 1791.00,293.04
1933.98,429.80 2037.87,606.97 2085.87,799.00
2098.98,851.43 2107.96,904.25 2113.17,958.00
2113.17,958.00 2116.00,989.00 2116.00,989.00
2116.00,989.00 2116.00,998.00 2116.00,998.00
2116.00,998.00 2117.04,1008.00 2117.04,1008.00
2117.04,1008.00 2117.04,1023.00 2117.04,1023.00
2117.04,1023.00 2118.00,1035.00 2118.00,1035.00
2118.00,1035.00 2118.00,1083.00 2118.00,1083.00
2118.00,1083.00 2117.00,1100.00 2117.00,1100.00
2117.00,1100.00 2114.17,1148.00 2114.17,1148.00
2114.17,1148.00 2110.72,1185.00 2110.72,1185.00
2102.72,1249.75 2089.35,1313.67 2069.98,1376.00
2017.27,1545.58 1919.24,1702.31 1791.00,1824.96
1682.55,1928.69 1552.28,2008.03 1411.00,2058.31
1330.08,2087.10 1245.37,2104.90 1160.00,2113.17
1160.00,2113.17 1100.00,2117.00 1100.00,2117.00
1100.00,2117.00 1083.00,2118.00 1083.00,2118.00
1083.00,2118.00 1035.00,2118.00 1035.00,2118.00
1035.00,2118.00 1023.00,2117.04 1023.00,2117.04
1023.00,2117.04 1008.00,2117.04 1008.00,2117.04
1008.00,2117.04 982.00,2115.09 982.00,2115.09
982.00,2115.09 915.00,2108.28 915.00,2108.28
844.59,2099.01 767.69,2080.44 701.00,2056.05
586.65,2014.23 483.34,1956.90 389.00,1879.58
306.50,1811.96 237.26,1735.42 177.67,1647.00
84.91,1509.36 27.58,1349.41 7.28,1185.00
4.48,1162.30 1.03,1122.44 1.00,1100.00
1.00,1100.00 0.00,1083.00 0.00,1083.00
0.00,1083.00 0.00,1035.00 0.00,1035.00
0.00,1035.00 0.96,1023.00 0.96,1023.00
0.96,1023.00 0.96,1008.00 0.96,1008.00
0.96,1008.00 2.91,982.00 2.91,982.00
4.78,954.82 7.75,927.99 11.73,901.00
26.84,798.40 56.07,704.16 99.31,610.00
99.31,610.00 112.75,583.00 112.75,583.00
133.71,541.08 157.37,500.60 183.98,462.00
216.84,414.31 252.99,368.87 293.04,327.00
415.66,198.79 572.46,100.72 742.00,48.02
801.74,29.46 871.80,13.82 934.00,7.16
934.00,7.16 989.00,2.00 989.00,2.00
989.00,2.00 998.00,2.00 998.00,2.00
998.00,2.00 1009.00,1.00 1009.00,1.00
1015.02,0.97 1021.03,1.27 1027.00,0.21 Z
M 1518.00,690.00
C 1518.00,690.00 1518.00,426.00 1518.00,426.00
1518.00,423.77 1518.24,420.43 1517.01,418.53
1515.72,416.54 1512.07,414.78 1510.00,413.58
1510.00,413.58 1494.00,404.15 1494.00,404.15
1494.00,404.15 1419.00,359.80 1419.00,359.80
1419.00,359.80 1152.00,202.20 1152.00,202.20
1152.00,202.20 1083.00,161.58 1083.00,161.58
1083.00,161.58 1066.00,151.58 1066.00,151.58
1063.11,149.94 1060.49,148.08 1057.00,148.74
1054.06,149.29 1047.80,153.32 1045.00,155.00
1045.00,155.00 1024.00,167.40 1024.00,167.40
1024.00,167.40 952.00,209.99 952.00,209.99
952.00,209.99 789.00,306.01 789.00,306.01
789.00,306.01 704.00,356.28 704.00,356.28
704.00,356.28 624.00,403.42 624.00,403.42
624.00,403.42 608.00,412.99 608.00,412.99
605.78,414.29 601.33,416.46 599.99,418.53
598.76,420.43 599.00,423.77 599.00,426.00
599.00,426.00 599.00,689.00 599.00,689.00
599.00,689.00 638.00,667.20 638.00,667.20
638.00,667.20 710.00,624.60 710.00,624.60
710.00,624.60 940.00,488.99 940.00,488.99
940.00,488.99 1024.00,439.40 1024.00,439.40
1024.00,439.40 1048.00,425.15 1048.00,425.15
1048.00,425.15 1058.00,420.19 1058.00,420.19
1058.00,420.19 1068.00,424.72 1068.00,424.72
1068.00,424.72 1092.00,438.99 1092.00,438.99
1092.00,438.99 1183.00,492.60 1183.00,492.60
1183.00,492.60 1399.00,620.01 1399.00,620.01
1399.00,620.01 1481.00,668.42 1481.00,668.42
1481.00,668.42 1518.00,690.00 1518.00,690.00 Z
M 839.73,918.00
C 839.73,918.00 599.00,918.00 599.00,918.00
599.00,918.00 599.00,1443.00 599.00,1443.00
599.00,1443.00 599.00,1516.00 599.00,1516.00
599.00,1516.00 599.00,1560.00 599.00,1560.00
599.00,1560.00 603.45,1613.28 603.45,1613.28
614.91,1704.32 653.23,1790.62 722.00,1852.83
783.61,1908.57 850.45,1939.88 931.00,1957.58
951.57,1962.09 982.42,1966.56 1003.32,1967.81
1003.32,1967.81 1027.00,1969.00 1027.00,1969.00
1030.87,1969.05 1037.63,1969.15 1041.00,1971.00
1041.00,1971.00 1042.00,1969.00 1042.00,1969.00
1042.00,1969.00 1043.00,1971.00 1043.00,1971.00
1043.00,1971.00 1045.00,1969.00 1045.00,1969.00
1048.05,1971.81 1060.56,1971.10 1064.00,1969.00
1066.02,1970.69 1067.61,1969.70 1070.00,1969.00
1070.00,1969.00 1070.00,1971.00 1070.00,1971.00
1070.00,1971.00 1071.00,1971.00 1071.00,1971.00
1071.00,1971.00 1072.00,1969.00 1072.00,1969.00
1072.00,1969.00 1072.00,1971.00 1072.00,1971.00
1072.00,1971.00 1073.00,1971.00 1073.00,1971.00
1075.36,1968.47 1082.62,1969.01 1086.00,1969.00
1086.00,1969.00 1108.49,1967.78 1108.49,1967.78
1140.13,1965.79 1171.15,1959.99 1202.00,1952.99
1202.00,1952.99 1237.00,1942.67 1237.00,1942.67
1300.26,1921.58 1359.29,1886.83 1406.87,1839.86
1468.86,1778.64 1503.51,1693.23 1513.68,1607.58
1520.04,1554.02 1518.00,1499.86 1518.00,1446.00
1518.00,1446.00 1518.00,918.00 1518.00,918.00
1518.00,918.00 1277.21,918.00 1277.21,918.00
1277.21,918.00 1277.21,965.89 1277.21,965.89
1277.21,965.89 1277.21,1030.98 1277.21,1030.98
1277.21,1030.98 1277.21,1173.03 1277.21,1173.03
1277.21,1173.03 1277.21,1493.03 1277.21,1493.03
1277.21,1493.03 1277.21,1523.00 1277.21,1523.00
1276.78,1553.58 1270.07,1585.69 1258.55,1614.00
1225.82,1694.41 1146.00,1745.09 1060.00,1746.00
994.18,1746.69 928.60,1716.51 887.45,1665.00
876.49,1651.28 867.61,1635.94 860.31,1620.00
845.13,1586.86 839.80,1549.82 839.73,1513.67
839.73,1513.67 839.73,1116.33 839.73,1116.33
839.73,1116.33 839.73,984.33 839.73,984.33
839.73,984.33 839.73,941.67 839.73,941.67
839.73,941.67 839.73,918.00 839.73,918.00 Z
M 1048.00,1970.00
C 1048.00,1970.00 1047.00,1970.00 1047.00,1970.00
1047.00,1970.00 1048.00,1971.00 1048.00,1971.00
1048.00,1971.00 1048.00,1970.00 1048.00,1970.00 Z
M 1068.00,1970.00
C 1068.00,1970.00 1067.00,1970.00 1067.00,1970.00
1067.00,1970.00 1068.00,1971.00 1068.00,1971.00
1068.00,1971.00 1068.00,1970.00 1068.00,1970.00 Z`,
],
iconName: "yyy",
prefix: "xxx",
} as never;

View File

@ -1,355 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
/**
* Custom FontAwesome icon definition for the
* VRoid Hub logo.
*/
export const VRoid: IconDefinition = {
icon: [
280,
280,
[],
"U+E002",
`M 61.00,31.00
C 60.65,24.68 66.72,14.29 74.00,16.00
74.00,16.00 72.00,17.00 72.00,17.00
72.00,17.00 164.00,17.00 164.00,17.00
164.00,17.00 191.00,17.00 191.00,17.00
191.00,17.00 208.00,16.00 208.00,16.00
208.00,16.00 206.00,16.00 206.00,16.00
206.00,16.00 206.00,15.00 206.00,15.00
212.92,16.47 218.39,21.62 218.00,29.00
221.98,29.92 222.79,32.63 224.72,36.00
224.72,36.00 234.00,53.00 234.00,53.00
234.00,53.00 232.00,52.00 232.00,52.00
232.00,52.00 233.00,55.00 233.00,55.00
233.00,55.00 235.00,54.00 235.00,54.00
235.00,54.00 249.00,79.00 249.00,79.00
249.00,79.00 247.00,78.00 247.00,78.00
247.00,78.00 248.00,81.00 248.00,81.00
248.00,81.00 250.00,80.00 250.00,80.00
250.00,80.00 256.00,91.00 256.00,91.00
256.00,91.00 254.00,90.00 254.00,90.00
254.00,90.00 255.00,93.00 255.00,93.00
255.00,93.00 257.00,92.00 257.00,92.00
257.00,92.00 275.00,124.00 275.00,124.00
275.00,124.00 273.00,123.00 273.00,123.00
273.00,123.00 274.00,126.00 274.00,126.00
274.00,126.00 276.00,125.00 276.00,125.00
286.57,142.99 275.21,156.66 266.00,172.00
266.00,172.00 263.00,174.00 263.00,174.00
263.00,174.00 265.00,173.00 265.00,173.00
265.00,173.00 255.72,190.00 255.72,190.00
253.79,193.37 252.98,196.08 249.00,197.00
249.20,200.89 249.15,203.03 245.00,204.00
245.35,210.64 239.39,218.34 236.00,224.00
236.00,224.00 233.00,226.00 233.00,226.00
233.00,226.00 235.00,225.00 235.00,225.00
235.00,225.00 232.00,231.00 232.00,231.00
232.00,231.00 229.00,233.00 229.00,233.00
229.00,233.00 231.00,232.00 231.00,232.00
231.00,232.00 221.00,250.00 221.00,250.00
221.00,250.00 218.00,252.00 218.00,252.00
218.00,252.00 220.00,251.00 220.00,251.00
217.90,255.69 215.54,260.21 210.99,262.99
205.64,266.26 187.96,265.00 181.00,265.00
181.00,265.00 78.00,265.00 78.00,265.00
75.50,264.96 73.37,264.96 71.00,263.99
64.87,261.50 59.65,253.55 60.00,247.00
54.76,245.79 50.15,234.82 48.00,230.00
48.00,230.00 50.00,231.00 50.00,231.00
50.00,231.00 49.00,228.00 49.00,228.00
49.00,228.00 47.00,229.00 47.00,229.00
47.00,229.00 45.00,221.00 45.00,221.00
39.76,219.79 35.15,208.82 33.00,204.00
33.00,204.00 35.00,205.00 35.00,205.00
35.00,205.00 34.00,202.00 34.00,202.00
34.00,202.00 32.00,203.00 32.00,203.00
32.00,203.00 30.00,195.00 30.00,195.00
26.02,194.08 25.21,191.37 23.28,188.00
23.28,188.00 14.58,173.00 14.58,173.00
14.58,173.00 0.73,148.00 0.73,148.00
0.22,146.13 0.10,142.99 0.05,141.00
-0.22,128.88 4.95,123.08 11.00,113.00
11.00,113.00 29.00,82.00 29.00,82.00
29.00,82.00 32.00,80.00 32.00,80.00
32.00,80.00 30.00,81.00 30.00,81.00
30.00,81.00 51.40,43.00 51.40,43.00
53.84,38.87 55.99,32.15 61.00,31.00 Z
M 71.00,17.00
C 71.00,17.00 70.00,17.00 70.00,17.00
70.00,17.00 71.00,18.00 71.00,18.00
71.00,18.00 71.00,17.00 71.00,17.00 Z
M 210.00,17.00
C 210.00,17.00 209.00,17.00 209.00,17.00
209.00,17.00 210.00,18.00 210.00,18.00
210.00,18.00 210.00,17.00 210.00,17.00 Z
M 69.00,18.00
C 69.00,18.00 68.00,18.00 68.00,18.00
68.00,18.00 69.00,19.00 69.00,19.00
69.00,19.00 69.00,18.00 69.00,18.00 Z
M 212.00,18.00
C 212.00,18.00 211.00,18.00 211.00,18.00
211.00,18.00 212.00,19.00 212.00,19.00
212.00,19.00 212.00,18.00 212.00,18.00 Z
M 68.00,19.00
C 68.00,19.00 67.00,19.00 67.00,19.00
67.00,19.00 68.00,20.00 68.00,20.00
68.00,20.00 68.00,19.00 68.00,19.00 Z
M 213.00,19.00
C 213.00,19.00 212.00,19.00 212.00,19.00
212.00,19.00 213.00,20.00 213.00,20.00
213.00,20.00 213.00,19.00 213.00,19.00 Z
M 67.00,20.00
C 67.00,20.00 66.00,20.00 66.00,20.00
66.00,20.00 67.00,21.00 67.00,21.00
67.00,21.00 67.00,20.00 67.00,20.00 Z
M 214.00,20.00
C 214.00,20.00 213.00,20.00 213.00,20.00
213.00,20.00 214.00,21.00 214.00,21.00
214.00,21.00 214.00,20.00 214.00,20.00 Z
M 215.00,21.00
C 215.00,21.00 214.00,21.00 214.00,21.00
214.00,21.00 215.00,22.00 215.00,22.00
215.00,22.00 215.00,21.00 215.00,21.00 Z
M 218.00,26.00
C 218.00,26.00 217.00,26.00 217.00,26.00
217.00,26.00 218.00,27.00 218.00,27.00
218.00,27.00 218.00,26.00 218.00,26.00 Z
M 62.00,28.00
C 62.00,28.00 61.00,28.00 61.00,28.00
61.00,28.00 62.00,29.00 62.00,29.00
62.00,29.00 62.00,28.00 62.00,28.00 Z
M 222.00,33.00
C 222.00,33.00 221.00,33.00 221.00,33.00
221.00,33.00 222.00,34.00 222.00,34.00
222.00,34.00 222.00,33.00 222.00,33.00 Z
M 58.00,35.00
C 58.00,35.00 57.00,35.00 57.00,35.00
57.00,35.00 58.00,36.00 58.00,36.00
58.00,36.00 58.00,35.00 58.00,35.00 Z
M 226.00,40.00
C 226.00,40.00 225.00,40.00 225.00,40.00
225.00,40.00 226.00,41.00 226.00,41.00
226.00,41.00 226.00,40.00 226.00,40.00 Z
M 54.00,42.00
C 54.00,42.00 53.00,42.00 53.00,42.00
53.00,42.00 54.00,43.00 54.00,43.00
54.00,43.00 54.00,42.00 54.00,42.00 Z
M 237.00,59.00
C 237.00,59.00 236.00,59.00 236.00,59.00
236.00,59.00 237.00,60.00 237.00,60.00
237.00,60.00 237.00,59.00 237.00,59.00 Z
M 43.00,61.00
C 43.00,61.00 42.00,61.00 42.00,61.00
42.00,61.00 43.00,62.00 43.00,62.00
43.00,62.00 43.00,61.00 43.00,61.00 Z
M 241.00,66.00
C 241.00,66.00 240.00,66.00 240.00,66.00
240.00,66.00 241.00,67.00 241.00,67.00
241.00,67.00 241.00,66.00 241.00,66.00 Z
M 39.00,68.00
C 39.00,68.00 38.00,68.00 38.00,68.00
38.00,68.00 39.00,69.00 39.00,69.00
39.00,69.00 39.00,68.00 39.00,68.00 Z
M 230.00,107.00
C 227.93,100.49 221.87,92.94 218.05,87.00
215.87,83.61 213.79,79.70 209.91,78.01
205.93,76.27 186.57,76.99 181.00,77.00
178.57,77.00 175.25,76.87 173.00,77.74
167.52,79.86 162.48,89.99 159.32,95.00
159.32,95.00 134.05,135.00 134.05,135.00
130.60,140.50 123.07,151.60 121.00,157.00
121.00,157.00 119.00,157.00 119.00,157.00
116.73,149.81 105.10,132.46 100.60,125.00
98.47,121.46 93.21,111.99 90.48,109.70
87.49,107.18 83.71,107.05 80.00,107.00
80.00,107.00 50.00,107.00 50.00,107.00
50.91,115.07 63.16,132.35 67.95,140.00
67.95,140.00 102.95,197.00 102.95,197.00
107.53,204.32 113.56,216.86 120.00,222.00
120.00,222.00 174.32,134.00 174.32,134.00
174.32,134.00 184.81,117.00 184.81,117.00
184.81,117.00 192.09,108.17 192.09,108.17
192.09,108.17 201.00,107.00 201.00,107.00
201.00,107.00 230.00,107.00 230.00,107.00 Z
M 252.00,85.00
C 252.00,85.00 251.00,85.00 251.00,85.00
251.00,85.00 252.00,86.00 252.00,86.00
252.00,86.00 252.00,85.00 252.00,85.00 Z
M 28.00,87.00
C 28.00,87.00 27.00,87.00 27.00,87.00
27.00,87.00 28.00,88.00 28.00,88.00
28.00,88.00 28.00,87.00 28.00,87.00 Z
M 24.00,94.00
C 24.00,94.00 23.00,94.00 23.00,94.00
23.00,94.00 24.00,95.00 24.00,95.00
24.00,95.00 24.00,94.00 24.00,94.00 Z
M 263.00,104.00
C 263.00,104.00 262.00,104.00 262.00,104.00
262.00,104.00 263.00,105.00 263.00,105.00
263.00,105.00 263.00,104.00 263.00,104.00 Z
M 16.00,108.00
C 16.00,108.00 15.00,108.00 15.00,108.00
15.00,108.00 16.00,109.00 16.00,109.00
16.00,109.00 16.00,108.00 16.00,108.00 Z
M 267.00,111.00
C 267.00,111.00 266.00,111.00 266.00,111.00
266.00,111.00 267.00,112.00 267.00,112.00
267.00,112.00 267.00,111.00 267.00,111.00 Z
M 13.00,113.00
C 13.00,113.00 12.00,113.00 12.00,113.00
12.00,113.00 13.00,114.00 13.00,114.00
13.00,114.00 13.00,113.00 13.00,113.00 Z
M 270.00,116.00
C 270.00,116.00 269.00,116.00 269.00,116.00
269.00,116.00 270.00,117.00 270.00,117.00
270.00,117.00 270.00,116.00 270.00,116.00 Z
M 271.00,118.00
C 271.00,118.00 270.00,118.00 270.00,118.00
270.00,118.00 271.00,119.00 271.00,119.00
271.00,119.00 271.00,118.00 271.00,118.00 Z
M 278.00,130.00
C 278.00,130.00 277.00,130.00 277.00,130.00
277.00,130.00 278.00,131.00 278.00,131.00
278.00,131.00 278.00,130.00 278.00,130.00 Z
M 2.00,132.00
C 2.00,132.00 1.00,132.00 1.00,132.00
1.00,132.00 2.00,133.00 2.00,133.00
2.00,133.00 2.00,132.00 2.00,132.00 Z
M 279.00,147.00
C 279.00,147.00 278.00,147.00 278.00,147.00
278.00,147.00 279.00,148.00 279.00,148.00
279.00,148.00 279.00,147.00 279.00,147.00 Z
M 8.00,157.00
C 8.00,157.00 7.00,157.00 7.00,157.00
7.00,157.00 8.00,158.00 8.00,158.00
8.00,158.00 8.00,157.00 8.00,157.00 Z
M 272.00,159.00
C 272.00,159.00 271.00,159.00 271.00,159.00
271.00,159.00 272.00,160.00 272.00,160.00
272.00,160.00 272.00,159.00 272.00,159.00 Z
M 12.00,164.00
C 12.00,164.00 11.00,164.00 11.00,164.00
11.00,164.00 12.00,165.00 12.00,165.00
12.00,165.00 12.00,164.00 12.00,164.00 Z
M 268.00,166.00
C 268.00,166.00 267.00,166.00 267.00,166.00
267.00,166.00 268.00,167.00 268.00,167.00
268.00,167.00 268.00,166.00 268.00,166.00 Z
M 23.00,183.00
C 23.00,183.00 22.00,183.00 22.00,183.00
22.00,183.00 23.00,184.00 23.00,184.00
23.00,184.00 23.00,183.00 23.00,183.00 Z
M 257.00,185.00
C 257.00,185.00 256.00,185.00 256.00,185.00
256.00,185.00 257.00,186.00 257.00,186.00
257.00,186.00 257.00,185.00 257.00,185.00 Z
M 27.00,190.00
C 27.00,190.00 26.00,190.00 26.00,190.00
26.00,190.00 27.00,191.00 27.00,191.00
27.00,191.00 27.00,190.00 27.00,190.00 Z
M 253.00,192.00
C 253.00,192.00 252.00,192.00 252.00,192.00
252.00,192.00 253.00,193.00 253.00,193.00
253.00,193.00 253.00,192.00 253.00,192.00 Z
M 31.00,197.00
C 31.00,197.00 30.00,197.00 30.00,197.00
30.00,197.00 31.00,198.00 31.00,198.00
31.00,198.00 31.00,197.00 31.00,197.00 Z
M 249.00,199.00
C 249.00,199.00 248.00,199.00 248.00,199.00
248.00,199.00 249.00,200.00 249.00,200.00
249.00,200.00 249.00,199.00 249.00,199.00 Z
M 245.00,206.00
C 245.00,206.00 244.00,206.00 244.00,206.00
244.00,206.00 245.00,207.00 245.00,207.00
245.00,207.00 245.00,206.00 245.00,206.00 Z
M 38.00,209.00
C 38.00,209.00 37.00,209.00 37.00,209.00
37.00,209.00 38.00,210.00 38.00,210.00
38.00,210.00 38.00,209.00 38.00,209.00 Z
M 242.00,211.00
C 242.00,211.00 241.00,211.00 241.00,211.00
241.00,211.00 242.00,212.00 242.00,212.00
242.00,212.00 242.00,211.00 242.00,211.00 Z
M 42.00,216.00
C 42.00,216.00 41.00,216.00 41.00,216.00
41.00,216.00 42.00,217.00 42.00,217.00
42.00,217.00 42.00,216.00 42.00,216.00 Z
M 238.00,218.00
C 238.00,218.00 237.00,218.00 237.00,218.00
237.00,218.00 238.00,219.00 238.00,219.00
238.00,219.00 238.00,218.00 238.00,218.00 Z
M 46.00,223.00
C 46.00,223.00 45.00,223.00 45.00,223.00
45.00,223.00 46.00,224.00 46.00,224.00
46.00,224.00 46.00,223.00 46.00,223.00 Z
M 53.00,235.00
C 53.00,235.00 52.00,235.00 52.00,235.00
52.00,235.00 53.00,236.00 53.00,236.00
53.00,236.00 53.00,235.00 53.00,235.00 Z
M 227.00,237.00
C 227.00,237.00 226.00,237.00 226.00,237.00
226.00,237.00 227.00,238.00 227.00,238.00
227.00,238.00 227.00,237.00 227.00,237.00 Z
M 57.00,242.00
C 57.00,242.00 56.00,242.00 56.00,242.00
56.00,242.00 57.00,243.00 57.00,243.00
57.00,243.00 57.00,242.00 57.00,242.00 Z
M 224.00,242.00
C 224.00,242.00 223.00,242.00 223.00,242.00
223.00,242.00 224.00,243.00 224.00,243.00
224.00,243.00 224.00,242.00 224.00,242.00 Z
M 223.00,244.00
C 223.00,244.00 222.00,244.00 222.00,244.00
222.00,244.00 223.00,245.00 223.00,245.00
223.00,245.00 223.00,244.00 223.00,244.00 Z
M 61.00,249.00
C 61.00,249.00 60.00,249.00 60.00,249.00
60.00,249.00 61.00,250.00 61.00,250.00
61.00,250.00 61.00,249.00 61.00,249.00 Z
M 64.00,254.00
C 64.00,254.00 63.00,254.00 63.00,254.00
63.00,254.00 64.00,255.00 64.00,255.00
64.00,255.00 64.00,254.00 64.00,254.00 Z
M 216.00,256.00
C 216.00,256.00 215.00,256.00 215.00,256.00
215.00,256.00 216.00,257.00 216.00,257.00
216.00,257.00 216.00,256.00 216.00,256.00 Z
M 67.00,259.00
C 67.00,259.00 66.00,259.00 66.00,259.00
66.00,259.00 67.00,260.00 67.00,260.00
67.00,260.00 67.00,259.00 67.00,259.00 Z
M 214.00,259.00
C 214.00,259.00 213.00,259.00 213.00,259.00
213.00,259.00 214.00,260.00 214.00,260.00
214.00,260.00 214.00,259.00 214.00,259.00 Z
M 213.00,260.00
C 213.00,260.00 212.00,260.00 212.00,260.00
212.00,260.00 213.00,261.00 213.00,261.00
213.00,261.00 213.00,260.00 213.00,260.00 Z
M 70.00,261.00
C 70.00,261.00 69.00,261.00 69.00,261.00
69.00,261.00 70.00,262.00 70.00,262.00
70.00,262.00 70.00,261.00 70.00,261.00 Z
M 211.00,261.00
C 211.00,261.00 210.00,261.00 210.00,261.00
210.00,261.00 211.00,262.00 211.00,262.00
211.00,262.00 211.00,261.00 211.00,261.00 Z
M 208.00,263.00
C 208.00,263.00 113.00,263.00 113.00,263.00
113.00,263.00 86.00,263.00 86.00,263.00
86.00,263.00 72.00,264.00 72.00,264.00
72.00,264.00 167.00,264.00 167.00,264.00
167.00,264.00 194.00,264.00 194.00,264.00
194.00,264.00 208.00,263.00 208.00,263.00 Z`,
],
iconName: "yyy",
prefix: "xxx",
} as never;

View File

@ -1,300 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
interface ActivityData {
id: number;
user_id: number;
op_type: string;
act_user_id: number;
act_user: ActUser;
repo_id: number;
repo: Repo;
comment_id: number;
comment?: Comment;
ref_name: string;
is_private: boolean;
content: string;
created: string;
}
interface ActUser {
id: number;
login: string;
login_name: string;
source_id: number;
full_name: string;
email: string;
avatar_url: string;
html_url: string;
language: string;
is_admin: boolean;
last_login: string;
created: string;
restricted: boolean;
active: boolean;
prohibit_login: boolean;
location: string;
pronouns: string;
website: string;
description: string;
visibility: string;
followers_count: number;
following_count: number;
starred_repos_count: number;
username: string;
}
interface Repo {
id: number;
owner: Owner;
name: string;
full_name: string;
description: string;
empty: boolean;
private: boolean;
fork: boolean;
template: boolean;
parent: unknown;
mirror: boolean;
size: number;
language: string;
languages_url: string;
html_url: string;
url: string;
link: string;
ssh_url: string;
clone_url: string;
original_url: string;
website: string;
stars_count: number;
forks_count: number;
watchers_count: number;
open_issues_count: number;
open_pr_counter: number;
release_counter: number;
default_branch: string;
archived: boolean;
created_at: string;
updated_at: string;
archived_at: string;
permissions: Permissions;
has_issues: boolean;
external_tracker: ExternalTracker;
has_wiki: boolean;
wiki_branch: string;
globally_editable_wiki: boolean;
has_pull_requests: boolean;
has_projects: boolean;
has_releases: boolean;
has_packages: boolean;
has_actions: boolean;
ignore_whitespace_conflicts: boolean;
allow_merge_commits: boolean;
allow_rebase: boolean;
allow_rebase_explicit: boolean;
allow_squash_merge: boolean;
allow_fast_forward_only_merge: boolean;
allow_rebase_update: boolean;
default_delete_branch_after_merge: boolean;
default_merge_style: string;
default_allow_maintainer_edit: boolean;
avatar_url: string;
internal: boolean;
mirror_interval: string;
object_format_name: string;
mirror_updated: string;
repo_transfer: unknown;
topics: unknown;
}
interface Owner {
id: number;
login: string;
login_name: string;
source_id: number;
full_name: string;
email: string;
avatar_url: string;
html_url: string;
language: string;
is_admin: boolean;
last_login: string;
created: string;
restricted: boolean;
active: boolean;
prohibit_login: boolean;
location: string;
pronouns: string;
website: string;
description: string;
visibility: string;
followers_count: number;
following_count: number;
starred_repos_count: number;
username: string;
}
interface Permissions {
admin: boolean;
push: boolean;
pull: boolean;
}
interface ExternalTracker {
external_tracker_url: string;
external_tracker_format: string;
external_tracker_style: string;
external_tracker_regexp_pattern: string;
}
interface Comment {
id: number;
html_url: string;
pull_request_url: string;
issue_url: string;
user: unknown;
original_author: string;
original_author_id: number;
body: string;
assets: Array<unknown>;
created_at: string;
updated_at: string;
}
interface Issue {
id: number;
url: string;
html_url: string;
number: number;
user: Owner;
original_author: string;
original_author_id: number;
title: string;
body: string;
ref: string;
assets: Array<unknown>;
labels: Array<Label>;
milestone: unknown;
assignee: unknown;
assignees: unknown;
state: string;
is_locked: boolean;
comments: number;
created_at: string;
updated_at: string;
closed_at: unknown;
due_date: unknown;
pull_request?: PullRequest;
repository: Repo;
pin_order: number;
}
interface Label {
id: number;
name: string;
exclusive: boolean;
is_archived: boolean;
color: string;
description: string;
url: string;
}
interface PullRequest {
merged: boolean;
merged_at: unknown;
draft: boolean;
html_url: string;
}
class Codeberg {
private activityCache: Array<ActivityData>;
private readonly issueCache: Array<Issue>;
private lastUpdate: Date | null = null;
public constructor() {
this.activityCache = [];
this.issueCache = [];
}
public async getActivitiesWithCache(): Promise<Array<ActivityData>> {
// Stale after 6 hours
if (this.lastUpdate && Date.now()
- this.lastUpdate.getTime() < 6 * 60 * 60 * 1000) {
return this.activityCache;
}
return await this.getActivities().then(() => {
return this.activityCache;
});
}
/* istanbul ignore next -- @preserve */
public async getIssuesWithCache(): Promise<Array<Issue>> {
// Stale after 6 hours
if (this.lastUpdate && Date.now()
- this.lastUpdate.getTime() < 6 * 60 * 60 * 1000) {
return this.issueCache;
}
return await this.getIssues().then(() => {
return this.issueCache;
});
}
/* istanbul ignore next -- @preserve */
private async getIssues(): Promise<void> {
const repositoryRequest
= await fetch("https://codeberg.org/api/v1/orgs/nhcarrigan/repos");
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
const repositoryData = await repositoryRequest.json() as Array<Repo>;
for (const repo of repositoryData) {
const issueRequest
// eslint-disable-next-line no-await-in-loop
= await fetch(`https://codeberg.org/api/v1/repos/nhcarrigan/${repo.name}/issues`);
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions, no-await-in-loop
const issueData = await issueRequest.json() as Array<Issue>;
for (const issue of issueData) {
const isHelpWanted = issue.labels.some((label) => {
return label.name === "help wanted";
});
const isFirsstTimer = issue.labels.some((label) => {
return label.name === "good first issue";
});
if (isHelpWanted || isFirsstTimer) {
this.issueCache.push(issue);
}
}
}
this.lastUpdate = new Date();
}
private async getActivities(): Promise<void> {
const activityRequest = await
// eslint-disable-next-line stylistic/max-len
fetch("https://codeberg.org/api/v1/users/naomi-lgbt/activities/feeds?only-performed-by=true");
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
const activityData = await activityRequest.json() as Array<ActivityData>;
this.activityCache = activityData;
this.lastUpdate = new Date();
}
}
const instantiated = new Codeberg();
/**
* Fetches and caches the Codeberg activity.
* @returns An array of activity objects.
*/
const getCodebergActivty = async(): Promise<Array<ActivityData>> => {
return await instantiated.getActivitiesWithCache();
};
/**
* Fetches and caches the Codeberg issues.
* @returns An array of issue objects, filtered for help wanted and good first issues.
*/
const getCodebergIssues = async(): Promise<Array<Issue>> => {
/* istanbul ignore next -- @preserve */
return await instantiated.getIssuesWithCache();
};
export { getCodebergActivty, getCodebergIssues };

View File

@ -1,733 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
interface ActivityData {
id: string;
type: string;
actor: Actor;
repo: Repo;
payload: Payload;
public: boolean;
created_at: string;
}
interface Actor {
id: number;
login: string;
display_login: string;
gravatar_id: string;
url: string;
avatar_url: string;
}
interface Repo {
id: number;
name: string;
url: string;
}
interface Payload {
repository_id?: number;
push_id?: number;
size?: number;
distinct_size?: number;
ref?: string;
head?: string;
before?: string;
commits?: Array<Commit>;
ref_type?: string;
pusher_type?: string;
action?: string;
number?: number;
pull_request?: PullRequest;
review?: Review;
issue?: Issue2;
comment?: Comment;
}
interface Commit {
sha: string;
author: Author;
message: string;
distinct: boolean;
url: string;
}
interface Author {
email: string;
name: string;
}
interface PullRequest {
url: string;
id: number;
node_id: string;
html_url: string;
diff_url: string;
patch_url: string;
issue_url: string;
number: number;
state: string;
locked: boolean;
title: string;
user: User;
body?: string;
created_at: string;
updated_at: string;
closed_at?: string;
merged_at?: string;
merge_commit_sha: string;
assignee: unknown;
assignees: Array<unknown>;
requested_reviewers: Array<unknown>;
requested_teams: Array<unknown>;
labels: Array<Label>;
milestone: unknown;
draft: boolean;
commits_url: string;
review_comments_url: string;
review_comment_url: string;
comments_url: string;
statuses_url: string;
head: Head;
base: Base;
_links: Links;
author_association: string;
auto_merge: unknown;
active_lock_reason: unknown;
merged?: boolean;
mergeable: unknown;
rebaseable: unknown;
mergeable_state?: string;
merged_by?: MergedBy;
comments?: number;
review_comments?: number;
maintainer_can_modify?: boolean;
commits?: number;
additions?: number;
deletions?: number;
changed_files?: number;
}
interface User {
login: string;
id: number;
node_id: string;
avatar_url: string;
gravatar_id: string;
url: string;
html_url: string;
followers_url: string;
following_url: string;
gists_url: string;
starred_url: string;
subscriptions_url: string;
organizations_url: string;
repos_url: string;
events_url: string;
received_events_url: string;
type: string;
site_admin: boolean;
}
interface Label {
id: number;
node_id: string;
url: string;
name: string;
color: string;
default: boolean;
description: string;
}
interface Head {
label: string;
ref: string;
sha: string;
user: User2;
repo: Repo2;
}
interface User2 {
login: string;
id: number;
node_id: string;
avatar_url: string;
gravatar_id: string;
url: string;
html_url: string;
followers_url: string;
following_url: string;
gists_url: string;
starred_url: string;
subscriptions_url: string;
organizations_url: string;
repos_url: string;
events_url: string;
received_events_url: string;
type: string;
site_admin: boolean;
}
interface Repo2 {
id: number;
node_id: string;
name: string;
full_name: string;
private: boolean;
owner: Owner;
html_url: string;
description: string;
fork: boolean;
url: string;
forks_url: string;
keys_url: string;
collaborators_url: string;
teams_url: string;
hooks_url: string;
issue_events_url: string;
events_url: string;
assignees_url: string;
branches_url: string;
tags_url: string;
blobs_url: string;
git_tags_url: string;
git_refs_url: string;
trees_url: string;
statuses_url: string;
languages_url: string;
stargazers_url: string;
contributors_url: string;
subscribers_url: string;
subscription_url: string;
commits_url: string;
git_commits_url: string;
comments_url: string;
issue_comment_url: string;
contents_url: string;
compare_url: string;
merges_url: string;
archive_url: string;
downloads_url: string;
issues_url: string;
pulls_url: string;
milestones_url: string;
notifications_url: string;
labels_url: string;
releases_url: string;
deployments_url: string;
created_at: string;
updated_at: string;
pushed_at: string;
git_url: string;
ssh_url: string;
clone_url: string;
svn_url: string;
homepage: string;
size: number;
stargazers_count: number;
watchers_count: number;
language: string;
has_issues: boolean;
has_projects: boolean;
has_downloads: boolean;
has_wiki: boolean;
has_pages: boolean;
has_discussions: boolean;
forks_count: number;
mirror_url: unknown;
archived: boolean;
disabled: boolean;
open_issues_count: number;
license: License;
allow_forking: boolean;
is_template: boolean;
web_commit_signoff_required: boolean;
topics: Array<string>;
visibility: string;
forks: number;
open_issues: number;
watchers: number;
default_branch: string;
}
interface Owner {
login: string;
id: number;
node_id: string;
avatar_url: string;
gravatar_id: string;
url: string;
html_url: string;
followers_url: string;
following_url: string;
gists_url: string;
starred_url: string;
subscriptions_url: string;
organizations_url: string;
repos_url: string;
events_url: string;
received_events_url: string;
type: string;
site_admin: boolean;
}
interface License {
key: string;
name: string;
spdx_id: string;
url: string;
node_id: string;
}
interface Base {
label: string;
ref: string;
sha: string;
user: User3;
repo: Repo3;
}
interface User3 {
login: string;
id: number;
node_id: string;
avatar_url: string;
gravatar_id: string;
url: string;
html_url: string;
followers_url: string;
following_url: string;
gists_url: string;
starred_url: string;
subscriptions_url: string;
organizations_url: string;
repos_url: string;
events_url: string;
received_events_url: string;
type: string;
site_admin: boolean;
}
interface Repo3 {
id: number;
node_id: string;
name: string;
full_name: string;
private: boolean;
owner: Owner2;
html_url: string;
description: string;
fork: boolean;
url: string;
forks_url: string;
keys_url: string;
collaborators_url: string;
teams_url: string;
hooks_url: string;
issue_events_url: string;
events_url: string;
assignees_url: string;
branches_url: string;
tags_url: string;
blobs_url: string;
git_tags_url: string;
git_refs_url: string;
trees_url: string;
statuses_url: string;
languages_url: string;
stargazers_url: string;
contributors_url: string;
subscribers_url: string;
subscription_url: string;
commits_url: string;
git_commits_url: string;
comments_url: string;
issue_comment_url: string;
contents_url: string;
compare_url: string;
merges_url: string;
archive_url: string;
downloads_url: string;
issues_url: string;
pulls_url: string;
milestones_url: string;
notifications_url: string;
labels_url: string;
releases_url: string;
deployments_url: string;
created_at: string;
updated_at: string;
pushed_at: string;
git_url: string;
ssh_url: string;
clone_url: string;
svn_url: string;
homepage: string;
size: number;
stargazers_count: number;
watchers_count: number;
language: string;
has_issues: boolean;
has_projects: boolean;
has_downloads: boolean;
has_wiki: boolean;
has_pages: boolean;
has_discussions: boolean;
forks_count: number;
mirror_url: unknown;
archived: boolean;
disabled: boolean;
open_issues_count: number;
license: License2;
allow_forking: boolean;
is_template: boolean;
web_commit_signoff_required: boolean;
topics: Array<string>;
visibility: string;
forks: number;
open_issues: number;
watchers: number;
default_branch: string;
}
interface Owner2 {
login: string;
id: number;
node_id: string;
avatar_url: string;
gravatar_id: string;
url: string;
html_url: string;
followers_url: string;
following_url: string;
gists_url: string;
starred_url: string;
subscriptions_url: string;
organizations_url: string;
repos_url: string;
events_url: string;
received_events_url: string;
type: string;
site_admin: boolean;
}
interface License2 {
key: string;
name: string;
spdx_id: string;
url: string;
node_id: string;
}
interface Links {
self: Self;
html: Html;
issue: Issue;
comments: Comments;
review_comments: ReviewComments;
review_comment: ReviewComment;
commits: Commits;
statuses: Statuses;
}
interface Self {
href: string;
}
interface Html {
href: string;
}
interface Issue {
href: string;
}
interface Comments {
href: string;
}
interface ReviewComments {
href: string;
}
interface ReviewComment {
href: string;
}
interface Commits {
href: string;
}
interface Statuses {
href: string;
}
interface MergedBy {
login: string;
id: number;
node_id: string;
avatar_url: string;
gravatar_id: string;
url: string;
html_url: string;
followers_url: string;
following_url: string;
gists_url: string;
starred_url: string;
subscriptions_url: string;
organizations_url: string;
repos_url: string;
events_url: string;
received_events_url: string;
type: string;
site_admin: boolean;
}
interface Review {
id: number;
node_id: string;
user: User4;
body: unknown;
commit_id: string;
submitted_at: string;
state: string;
html_url: string;
pull_request_url: string;
author_association: string;
_links: Links2;
}
interface User4 {
login: string;
id: number;
node_id: string;
avatar_url: string;
gravatar_id: string;
url: string;
html_url: string;
followers_url: string;
following_url: string;
gists_url: string;
starred_url: string;
subscriptions_url: string;
organizations_url: string;
repos_url: string;
events_url: string;
received_events_url: string;
type: string;
site_admin: boolean;
}
interface Links2 {
html: Html2;
pull_request: PullRequest2;
}
interface Html2 {
href: string;
}
interface PullRequest2 {
href: string;
}
interface Issue2 {
url: string;
repository_url: string;
labels_url: string;
comments_url: string;
events_url: string;
html_url: string;
id: number;
node_id: string;
number: number;
title: string;
user: User5;
labels: Array<Label2>;
state: string;
locked: boolean;
assignee: unknown;
assignees: Array<unknown>;
milestone: unknown;
comments: number;
created_at: string;
updated_at: string;
closed_at?: string;
author_association: string;
active_lock_reason: unknown;
body: string;
reactions: Reactions;
timeline_url: string;
performed_via_github_app: unknown;
state_reason?: string;
}
interface User5 {
login: string;
id: number;
node_id: string;
avatar_url: string;
gravatar_id: string;
url: string;
html_url: string;
followers_url: string;
following_url: string;
gists_url: string;
starred_url: string;
subscriptions_url: string;
organizations_url: string;
repos_url: string;
events_url: string;
received_events_url: string;
type: string;
site_admin: boolean;
}
interface Label2 {
id: number;
node_id: string;
url: string;
name: string;
color: string;
default: boolean;
description: string;
}
interface Reactions {
"url": string;
"total_count": number;
"+1": number;
"-1": number;
"laugh": number;
"hooray": number;
"confused": number;
"heart": number;
"rocket": number;
"eyes": number;
}
interface Comment {
url: string;
html_url: string;
issue_url?: string;
id: number;
node_id: string;
user: User6;
created_at: string;
updated_at: string;
author_association: string;
body: string;
reactions: Reactions2;
performed_via_github_app: unknown;
pull_request_review_id?: number;
diff_hunk?: string;
path?: string;
commit_id?: string;
original_commit_id?: string;
pull_request_url?: string;
_links?: Links3;
start_line?: number;
original_start_line?: number;
start_side?: string;
line?: number;
original_line?: number;
side?: string;
in_reply_to_id?: number;
original_position?: number;
position?: number;
subject_type?: string;
}
interface User6 {
login: string;
id: number;
node_id: string;
avatar_url: string;
gravatar_id: string;
url: string;
html_url: string;
followers_url: string;
following_url: string;
gists_url: string;
starred_url: string;
subscriptions_url: string;
organizations_url: string;
repos_url: string;
events_url: string;
received_events_url: string;
type: string;
site_admin: boolean;
}
interface Reactions2 {
"url": string;
"total_count": number;
"+1": number;
"-1": number;
"laugh": number;
"hooray": number;
"confused": number;
"heart": number;
"rocket": number;
"eyes": number;
}
interface Links3 {
self: Self2;
html: Html3;
pull_request: PullRequest3;
}
interface Self2 {
href: string;
}
interface Html3 {
href: string;
}
interface PullRequest3 {
href: string;
}
class Github {
private cache: Array<ActivityData>;
private lastUpdate: Date | null = null;
public constructor() {
this.cache = [];
}
public async getActivities(): Promise<Array<ActivityData>> {
// Stale after 1 hour
if (this.lastUpdate && Date.now()
- this.lastUpdate.getTime() < 60 * 60 * 1000) {
return this.cache;
}
return await this.refreshData().then(() => {
return this.cache;
});
}
private async refreshData(): Promise<Github> {
const response
= await fetch("https://api.github.com/users/naomi-lgbt/events");
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
const data = await response.json() as Array<ActivityData>;
this.cache = data;
this.lastUpdate = new Date();
return this;
}
}
const instantiated = new Github();
/**
* Fetches and caches the Github activity.
* @returns An array of activity objects.
*/
export const getGithubData = async(): Promise<Array<ActivityData>> => {
return await instantiated.getActivities();
};

View File

@ -1,100 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
/* eslint-disable new-cap */
import { NextResponse } from "next/server";
import { describe, it, expect, vi } from "vitest";
import { GET } from "../../../../src/app/api/activity/route";
import { getCodebergActivty } from "../../../../src/lib/codeberg";
import { getGithubData } from "../../../../src/lib/github";
vi.mock("../../../../src/lib/codeberg");
vi.mock("../../../../src/lib/github");
describe("gET /api/activity", () => {
it("should return a sorted and limited list of activities", async() => {
expect.assertions(2);
const mockCodebergData = [
{
created: "2023-01-01T00:00:00Z",
op_type: "push",
repo: { full_name: "repo1", html_url: "https://codeberg.org/repo1" },
},
];
const mockGithubData = [
{
created_at: "2023-01-02T00:00:00Z",
repo: {
name: "repo2",
url: "https://api.github.com/repos/repo2",
},
type: "pull_request",
},
];
vi.mocked(getCodebergActivty).mockResolvedValue(mockCodebergData);
vi.mocked(getGithubData).mockResolvedValue(mockGithubData);
const response = await GET();
const json = await response.json();
expect(response, "did not respond with Next").toBeInstanceOf(NextResponse);
expect(json, "incorrect payload").toStrictEqual([
{
date: "2023-01-02T00:00:00.000Z",
repo: "https://github.com/repo2",
repoName: "repo2",
type: "pull_request",
},
{
date: "2023-01-01T00:00:00.000Z",
repo: "https://codeberg.org/repo1",
repoName: "repo1",
type: "push",
},
]);
});
it("should handle empty data from both sources", async() => {
expect.assertions(2);
vi.mocked(getCodebergActivty).mockResolvedValue([]);
vi.mocked(getGithubData).mockResolvedValue([]);
const response = await GET();
const json = await response.json();
expect(response, "did not use Next to respond").
toBeInstanceOf(NextResponse);
expect(json, "was not empty array").toStrictEqual([]);
});
it("should limit the results to 100 entries", async() => {
expect.assertions(2);
const mockCodebergData = Array.from({ length: 60 }, (_, index) => {
return {
created: `2023-01-${index + 1}T00:00:00Z`,
op_type: "push",
repo: { full_name: `repo${index + 1}`, html_url: `https://codeberg.org/repo${index + 1}` },
};
});
const mockGithubData = Array.from({ length: 60 }, (_, index) => {
return {
created_at: `2023-02-${index + 1}T00:00:00Z`,
repo: { name: `repo${index + 61}`, url: `https://api.github.com/repos/repo${index + 61}` },
type: "pull_request",
};
});
vi.mocked(getCodebergActivty).mockResolvedValue(mockCodebergData);
vi.mocked(getGithubData).mockResolvedValue(mockGithubData);
const response = await GET();
const json = await response.json();
expect(response, "did not use Next to respond").
toBeInstanceOf(NextResponse);
expect(json, "did not limit to 100 entries").toHaveLength(100);
});
});

View File

@ -1,55 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
/* eslint-disable new-cap */
import { NextResponse } from "next/server";
import { describe, it, expect, vi } from "vitest";
import { GET } from "../../../../src/app/api/contribute/route";
import { getCodebergIssues } from "../../../../src/lib/codeberg";
vi.mock("../../../../src/lib/codeberg");
describe("gET /api/contribute", () => {
it("should return a sorted and limited list of activities", async() => {
expect.assertions(2);
const mockCodebergData = [
{
body: "body1",
html_url: "https://codeberg.org/repo1/issue1",
labels: [ { name: "label1" } ],
number: 1,
title: "issue1",
},
];
vi.mocked(getCodebergIssues).mockResolvedValue(mockCodebergData);
const response = await GET();
const json = await response.json();
expect(response, "did not respond with Next").toBeInstanceOf(NextResponse);
expect(json, "incorrect payload").toStrictEqual([
{
body: "body1",
labels: [ "label1" ],
number: 1,
title: "issue1",
url: "https://codeberg.org/repo1/issue1",
},
]);
});
it("should handle empty data from both sources", async() => {
expect.assertions(2);
vi.mocked(getCodebergIssues).mockResolvedValue([]);
const response = await GET();
const json = await response.json();
expect(response, "did not use Next to respond").
toBeInstanceOf(NextResponse);
expect(json, "was not empty array").toStrictEqual([]);
});
});

View File

@ -1,29 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { describe, it, expect } from "vitest";
import { Partners } from "../../src/config/Partners";
describe("partner objects", () => {
it("should have unique names", () => {
expect.assertions(1);
const set = new Set(
Partners.map((p) => {
return p.name;
}),
);
expect(set, "are not unique").toHaveLength(Partners.length);
});
it("should have unique avatars", () => {
expect.assertions(1);
const set = new Set(
Partners.map((p) => {
return p.avatar;
}),
);
expect(set, "are not unique").toHaveLength(Partners.length);
});
});

View File

@ -1,117 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { faBriefcase, faMoneyBill } from "@fortawesome/free-solid-svg-icons";
import { describe, it, expect } from "vitest";
import { HireMe, Donate, Socials } from "../../src/config/Socials";
describe("socials objects", () => {
it("should have unique labels", () => {
expect.assertions(1);
const set = new Set(
Socials.map((s) => {
return s.label;
}),
);
expect(set, "are not unique").toHaveLength(Socials.length);
});
it("should have unique links", () => {
expect.assertions(1);
const set = new Set(
Socials.map((s) => {
return s.link;
}),
);
expect(set, "are not unique").toHaveLength(Socials.length);
});
it("should have unique icons", () => {
expect.assertions(1);
const set = new Set(
Socials.map((s) => {
return s.icon;
}),
);
expect(set, "are not unique").toHaveLength(Socials.length);
});
it("should have hex codes for colours", () => {
expect.hasAssertions();
for (const social of Socials) {
expect(social.color, `${social.label} is not a hex code`).toMatch(/^#[\da-f]{6}$/i);
expect(social.background, `${social.label} is not a hex code`).toMatch(/^#[\da-f]{6}$/i);
}
});
});
describe("hire me object", () => {
it("should have correct label", () => {
expect.assertions(1);
expect(HireMe.label, "does not").toBe("Hire Us!");
});
it("should have correct link", () => {
expect.assertions(1);
expect(HireMe.link, "does not").
toBe("https://docs.nhcarrigan.com/about/hire/");
});
it("should have correct colours", () => {
expect.assertions(2);
expect(HireMe.color, "colour is wrong").toBe("#003600");
expect(HireMe.background, "background is wrong").toBe(`linear-gradient(
90deg,
#5bcefa,
#f5a9b8,
#ffffff,
#f5a9b8,
#5bcefa
)`);
});
it("should have correct icon", () => {
expect.assertions(1);
expect(HireMe.icon, "does not").toBe(faBriefcase);
});
});
describe("donate object", () => {
it("should have correct label", () => {
expect.assertions(1);
expect(Donate.label, "does not").toBe("Donate 💜");
});
it("should have correct link", () => {
expect.assertions(1);
expect(Donate.link, "does not").
toBe("https://docs.nhcarrigan.com/about/donate/");
});
it("should have correct colours", () => {
expect.assertions(2);
expect(Donate.color, "has wrong colour").toBe("#003600");
expect(Donate.background, "has wrong background").toBe(`linear-gradient(
90deg,
rgba(255, 0, 0, 1) 0%,
rgba(251, 7, 217, 1) 10%,
rgba(186, 12, 248, 1) 20%,
rgba(95, 21, 242, 1) 30%,
rgba(28, 127, 238, 1) 40%,
rgba(47, 201, 226, 1) 50%,
rgba(63, 218, 216, 1) 60%,
rgba(79, 220, 74, 1) 70%,
rgba(208, 222, 33, 1) 80%,
rgba(255, 154, 0, 1) 90%,
rgba(255, 0, 0, 1) 100%
)`);
});
it("should have correct icon", () => {
expect.assertions(1);
expect(Donate.icon, "does not").toBe(faMoneyBill);
});
});

View File

@ -1,36 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { describe, it, expect } from "vitest";
import { TeamMembers } from "../../src/config/TeamMembers";
describe("partner objects", () => {
it("should have unique names", () => {
expect.assertions(1);
const set = new Set(
TeamMembers.map((t) => {
return t.name;
}),
);
expect(set, "are not unique").toHaveLength(TeamMembers.length);
});
it("should have unique avatars", () => {
expect.assertions(1);
const set = new Set(
TeamMembers.map((t) => {
return t.avatar;
}),
);
expect(set, "are not unique").toHaveLength(TeamMembers.length);
});
it("should have no future dates", () => {
expect.assertions(1);
expect(TeamMembers.filter((t) => {
return new Date(t.joinDate) > new Date();
}), "have future dates").toHaveLength(0);
});
});

View File

@ -1,38 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { describe, it, expect } from "vitest";
import { Codeberg } from "../../src/icons/Codeberg";
describe("codeberg icon", () => {
it("should have a valid width", () => {
expect.assertions(1);
expect(Codeberg.icon[0], "width is negative").toBeGreaterThan(0);
});
it("should have a valid height", () => {
expect.assertions(1);
expect(Codeberg.icon[1], "height is negative").toBeGreaterThan(0);
});
it("should not have any ligatures", () => {
expect.assertions(1);
expect(Codeberg.icon[2], "ligatures are present").toStrictEqual([]);
});
it("should have a valid unicode set", () => {
expect.assertions(1);
expect(Codeberg.icon[3], "unicode set is wrong").toBe("U+E002");
});
it("should have valid SVG path data", () => {
expect.assertions(1);
expect(Codeberg.icon[4], "path data is bad").toMatch(
// eslint-disable-next-line stylistic/max-len
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
);
});
});

View File

@ -1,38 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { describe, it, expect } from "vitest";
import { Coursera } from "../../src/icons/Coursera";
describe("coursera icon", () => {
it("should have a valid width", () => {
expect.assertions(1);
expect(Coursera.icon[0], "width is negative").toBeGreaterThan(0);
});
it("should have a valid height", () => {
expect.assertions(1);
expect(Coursera.icon[1], "height is negative").toBeGreaterThan(0);
});
it("should not have any ligatures", () => {
expect.assertions(1);
expect(Coursera.icon[2], "ligatures are present").toStrictEqual([]);
});
it("should have a valid unicode set", () => {
expect.assertions(1);
expect(Coursera.icon[3], "unicode set is wrong").toBe("U+E002");
});
it("should have valid SVG path data", () => {
expect.assertions(1);
expect(Coursera.icon[4], "path data is bad").toMatch(
// eslint-disable-next-line stylistic/max-len
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
);
});
});

View File

@ -1,38 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { describe, it, expect } from "vitest";
import { Fiverr } from "../../src/icons/Fiverr";
describe("fiverr icon", () => {
it("should have a valid width", () => {
expect.assertions(1);
expect(Fiverr.icon[0], "width is negative").toBeGreaterThan(0);
});
it("should have a valid height", () => {
expect.assertions(1);
expect(Fiverr.icon[1], "height is negative").toBeGreaterThan(0);
});
it("should not have any ligatures", () => {
expect.assertions(1);
expect(Fiverr.icon[2], "ligatures are present").toStrictEqual([]);
});
it("should have a valid unicode set", () => {
expect.assertions(1);
expect(Fiverr.icon[3], "unicode set is wrong").toBe("U+E002");
});
it("should have valid SVG path data", () => {
expect.assertions(1);
expect(Fiverr.icon[4], "path data is bad").toMatch(
// eslint-disable-next-line stylistic/max-len
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
);
});
});

View File

@ -1,38 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { describe, it, expect } from "vitest";
import { Gather } from "../../src/icons/Gather";
describe("gather icon", () => {
it("should have a valid width", () => {
expect.assertions(1);
expect(Gather.icon[0], "width is negative").toBeGreaterThan(0);
});
it("should have a valid height", () => {
expect.assertions(1);
expect(Gather.icon[1], "height is negative").toBeGreaterThan(0);
});
it("should not have any ligatures", () => {
expect.assertions(1);
expect(Gather.icon[2], "ligatures are present").toStrictEqual([]);
});
it("should have a valid unicode set", () => {
expect.assertions(1);
expect(Gather.icon[3], "unicode set is wrong").toBe("U+E002");
});
it("should have valid SVG path data", () => {
expect.assertions(1);
expect(Gather.icon[4], "path data is bad").toMatch(
// eslint-disable-next-line stylistic/max-len
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
);
});
});

View File

@ -1,38 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { describe, it, expect } from "vitest";
import { Gog } from "../../src/icons/Gog";
describe("gog icon", () => {
it("should have a valid width", () => {
expect.assertions(1);
expect(Gog.icon[0], "width is negative").toBeGreaterThan(0);
});
it("should have a valid height", () => {
expect.assertions(1);
expect(Gog.icon[1], "height is negative").toBeGreaterThan(0);
});
it("should not have any ligatures", () => {
expect.assertions(1);
expect(Gog.icon[2], "ligatures are present").toStrictEqual([]);
});
it("should have a valid unicode set", () => {
expect.assertions(1);
expect(Gog.icon[3], "unicode set is wrong").toBe("U+E002");
});
it("should have valid SVG path data", () => {
expect.assertions(1);
expect(Gog.icon[4], "path data is bad").toMatch(
// eslint-disable-next-line stylistic/max-len
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
);
});
});

View File

@ -1,38 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { describe, it, expect } from "vitest";
import { Gumroad } from "../../src/icons/Gumroad";
describe("gumroad icon", () => {
it("should have a valid width", () => {
expect.assertions(1);
expect(Gumroad.icon[0], "width is negative").toBeGreaterThan(0);
});
it("should have a valid height", () => {
expect.assertions(1);
expect(Gumroad.icon[1], "height is negative").toBeGreaterThan(0);
});
it("should not have any ligatures", () => {
expect.assertions(1);
expect(Gumroad.icon[2], "ligatures are present").toStrictEqual([]);
});
it("should have a valid unicode set", () => {
expect.assertions(1);
expect(Gumroad.icon[3], "unicode set is wrong").toBe("U+E002");
});
it("should have valid SVG path data", () => {
expect.assertions(1);
expect(Gumroad.icon[4], "path data is bad").toMatch(
// eslint-disable-next-line stylistic/max-len
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
);
});
});

View File

@ -1,38 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { describe, it, expect } from "vitest";
import { Kofi } from "../../src/icons/KoFi";
describe("kofi icon", () => {
it("should have a valid width", () => {
expect.assertions(1);
expect(Kofi.icon[0], "width is negative").toBeGreaterThan(0);
});
it("should have a valid height", () => {
expect.assertions(1);
expect(Kofi.icon[1], "height is negative").toBeGreaterThan(0);
});
it("should not have any ligatures", () => {
expect.assertions(1);
expect(Kofi.icon[2], "ligatures are present").toStrictEqual([]);
});
it("should have a valid unicode set", () => {
expect.assertions(1);
expect(Kofi.icon[3], "unicode set is wrong").toBe("U+E002");
});
it("should have valid SVG path data", () => {
expect.assertions(1);
expect(Kofi.icon[4], "path data is bad").toMatch(
// eslint-disable-next-line stylistic/max-len
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
);
});
});

View File

@ -1,38 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { describe, it, expect } from "vitest";
import { Matrix } from "../../src/icons/Matrix";
describe("matrix icon", () => {
it("should have a valid width", () => {
expect.assertions(1);
expect(Matrix.icon[0], "width is negative").toBeGreaterThan(0);
});
it("should have a valid height", () => {
expect.assertions(1);
expect(Matrix.icon[1], "height is negative").toBeGreaterThan(0);
});
it("should not have any ligatures", () => {
expect.assertions(1);
expect(Matrix.icon[2], "ligatures are present").toStrictEqual([]);
});
it("should have a valid unicode set", () => {
expect.assertions(1);
expect(Matrix.icon[3], "unicode set is wrong").toBe("U+E002");
});
it("should have valid SVG path data", () => {
expect.assertions(1);
expect(Matrix.icon[4], "path data is bad").toMatch(
// eslint-disable-next-line stylistic/max-len
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
);
});
});

View File

@ -1,38 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { describe, it, expect } from "vitest";
import { Peerlist } from "../../src/icons/Peerlist";
describe("peerlist icon", () => {
it("should have a valid width", () => {
expect.assertions(1);
expect(Peerlist.icon[0], "width is negative").toBeGreaterThan(0);
});
it("should have a valid height", () => {
expect.assertions(1);
expect(Peerlist.icon[1], "height is negative").toBeGreaterThan(0);
});
it("should not have any ligatures", () => {
expect.assertions(1);
expect(Peerlist.icon[2], "ligatures are present").toStrictEqual([]);
});
it("should have a valid unicode set", () => {
expect.assertions(1);
expect(Peerlist.icon[3], "unicode set is wrong").toBe("U+E002");
});
it("should have valid SVG path data", () => {
expect.assertions(1);
expect(Peerlist.icon[4], "path data is bad").toMatch(
// eslint-disable-next-line stylistic/max-len
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
);
});
});

View File

@ -1,38 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { describe, it, expect } from "vitest";
import { Pixiv } from "../../src/icons/Pixiv";
describe("pixiv icon", () => {
it("should have a valid width", () => {
expect.assertions(1);
expect(Pixiv.icon[0], "width is negative").toBeGreaterThan(0);
});
it("should have a valid height", () => {
expect.assertions(1);
expect(Pixiv.icon[1], "height is negative").toBeGreaterThan(0);
});
it("should not have any ligatures", () => {
expect.assertions(1);
expect(Pixiv.icon[2], "ligatures are present").toStrictEqual([]);
});
it("should have a valid unicode set", () => {
expect.assertions(1);
expect(Pixiv.icon[3], "unicode set is wrong").toBe("U+E002");
});
it("should have valid SVG path data", () => {
expect.assertions(1);
expect(Pixiv.icon[4], "path data is bad").toMatch(
// eslint-disable-next-line stylistic/max-len
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
);
});
});

View File

@ -1,38 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { describe, it, expect } from "vitest";
import { Polywork } from "../../src/icons/Polywork";
describe("polywork icon", () => {
it("should have a valid width", () => {
expect.assertions(1);
expect(Polywork.icon[0], "width is negative").toBeGreaterThan(0);
});
it("should have a valid height", () => {
expect.assertions(1);
expect(Polywork.icon[1], "height is negative").toBeGreaterThan(0);
});
it("should not have any ligatures", () => {
expect.assertions(1);
expect(Polywork.icon[2], "ligatures are present").toStrictEqual([]);
});
it("should have a valid unicode set", () => {
expect.assertions(1);
expect(Polywork.icon[3], "unicode set is wrong").toBe("U+E002");
});
it("should have valid SVG path data", () => {
expect.assertions(1);
expect(Polywork.icon[4], "path data is bad").toMatch(
// eslint-disable-next-line stylistic/max-len
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
);
});
});

View File

@ -1,39 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { describe, it, expect } from "vitest";
import { RetroAchievements } from "../../src/icons/RetroAchievements";
describe("retroachievements icon", () => {
it("should have a valid width", () => {
expect.assertions(1);
expect(RetroAchievements.icon[0], "width is negative").toBeGreaterThan(0);
});
it("should have a valid height", () => {
expect.assertions(1);
expect(RetroAchievements.icon[1], "height is negative").toBeGreaterThan(0);
});
it("should not have any ligatures", () => {
expect.assertions(1);
expect(RetroAchievements.icon[2], "ligatures are present").
toStrictEqual([]);
});
it("should have a valid unicode set", () => {
expect.assertions(1);
expect(RetroAchievements.icon[3], "unicode set is wrong").toBe("U+E002");
});
it("should have valid SVG path data", () => {
expect.assertions(1);
expect(RetroAchievements.icon[4], "path data is bad").toMatch(
// eslint-disable-next-line stylistic/max-len
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
);
});
});

View File

@ -1,38 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { describe, it, expect } from "vitest";
import { Saylor } from "../../src/icons/Saylor";
describe("saylor icon", () => {
it("should have a valid width", () => {
expect.assertions(1);
expect(Saylor.icon[0], "width is negative").toBeGreaterThan(0);
});
it("should have a valid height", () => {
expect.assertions(1);
expect(Saylor.icon[1], "height is negative").toBeGreaterThan(0);
});
it("should not have any ligatures", () => {
expect.assertions(1);
expect(Saylor.icon[2], "ligatures are present").toStrictEqual([]);
});
it("should have a valid unicode set", () => {
expect.assertions(1);
expect(Saylor.icon[3], "unicode set is wrong").toBe("U+E002");
});
it("should have valid SVG path data", () => {
expect.assertions(1);
expect(Saylor.icon[4], "path data is bad").toMatch(
// eslint-disable-next-line stylistic/max-len
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
);
});
});

View File

@ -1,38 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { describe, it, expect } from "vitest";
import { TeeSpring } from "../../src/icons/TeeSpring";
describe("teespring icon", () => {
it("should have a valid width", () => {
expect.assertions(1);
expect(TeeSpring.icon[0], "width is negative").toBeGreaterThan(0);
});
it("should have a valid height", () => {
expect.assertions(1);
expect(TeeSpring.icon[1], "height is negative").toBeGreaterThan(0);
});
it("should not have any ligatures", () => {
expect.assertions(1);
expect(TeeSpring.icon[2], "ligatures are present").toStrictEqual([]);
});
it("should have a valid unicode set", () => {
expect.assertions(1);
expect(TeeSpring.icon[3], "unicode set is wrong").toBe("U+E002");
});
it("should have valid SVG path data", () => {
expect.assertions(1);
expect(TeeSpring.icon[4], "path data is bad").toMatch(
// eslint-disable-next-line stylistic/max-len
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
);
});
});

View File

@ -1,38 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { describe, it, expect } from "vitest";
import { Throne } from "../../src/icons/Throne";
describe("throne icon", () => {
it("should have a valid width", () => {
expect.assertions(1);
expect(Throne.icon[0], "width is negative").toBeGreaterThan(0);
});
it("should have a valid height", () => {
expect.assertions(1);
expect(Throne.icon[1], "height is negative").toBeGreaterThan(0);
});
it("should not have any ligatures", () => {
expect.assertions(1);
expect(Throne.icon[2], "ligatures are present").toStrictEqual([]);
});
it("should have a valid unicode set", () => {
expect.assertions(1);
expect(Throne.icon[3], "unicode set is wrong").toBe("U+E002");
});
it("should have valid SVG path data", () => {
expect.assertions(1);
expect(Throne.icon[4], "path data is bad").toMatch(
// eslint-disable-next-line stylistic/max-len
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
);
});
});

View File

@ -1,38 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { describe, it, expect } from "vitest";
import { Topmate } from "../../src/icons/Topmate";
describe("topmate icon", () => {
it("should have a valid width", () => {
expect.assertions(1);
expect(Topmate.icon[0], "width is negative").toBeGreaterThan(0);
});
it("should have a valid height", () => {
expect.assertions(1);
expect(Topmate.icon[1], "height is negative").toBeGreaterThan(0);
});
it("should not have any ligatures", () => {
expect.assertions(1);
expect(Topmate.icon[2], "ligatures are present").toStrictEqual([]);
});
it("should have a valid unicode set", () => {
expect.assertions(1);
expect(Topmate.icon[3], "unicode set is wrong").toBe("U+E002");
});
it("should have valid SVG path data", () => {
expect.assertions(1);
expect(Topmate.icon[4], "path data is bad").toMatch(
// eslint-disable-next-line stylistic/max-len
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
);
});
});

View File

@ -1,38 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { describe, it, expect } from "vitest";
import { TreeNation } from "../../src/icons/TreeNation";
describe("treenation icon", () => {
it("should have a valid width", () => {
expect.assertions(1);
expect(TreeNation.icon[0], "width is negative").toBeGreaterThan(0);
});
it("should have a valid height", () => {
expect.assertions(1);
expect(TreeNation.icon[1], "height is negative").toBeGreaterThan(0);
});
it("should not have any ligatures", () => {
expect.assertions(1);
expect(TreeNation.icon[2], "ligatures are present").toStrictEqual([]);
});
it("should have a valid unicode set", () => {
expect.assertions(1);
expect(TreeNation.icon[3], "unicode set is wrong").toBe("U+E002");
});
it("should have valid SVG path data", () => {
expect.assertions(1);
expect(TreeNation.icon[4], "path data is bad").toMatch(
// eslint-disable-next-line stylistic/max-len
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
);
});
});

View File

@ -1,38 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { describe, it, expect } from "vitest";
import { Udemy } from "../../src/icons/Udemy";
describe("udemy icon", () => {
it("should have a valid width", () => {
expect.assertions(1);
expect(Udemy.icon[0], "width is negative").toBeGreaterThan(0);
});
it("should have a valid height", () => {
expect.assertions(1);
expect(Udemy.icon[1], "height is negative").toBeGreaterThan(0);
});
it("should not have any ligatures", () => {
expect.assertions(1);
expect(Udemy.icon[2], "ligatures are present").toStrictEqual([]);
});
it("should have a valid unicode set", () => {
expect.assertions(1);
expect(Udemy.icon[3], "unicode set is wrong").toBe("U+E002");
});
it("should have valid SVG path data", () => {
expect.assertions(1);
expect(Udemy.icon[4], "path data is bad").toMatch(
// eslint-disable-next-line stylistic/max-len
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
);
});
});

View File

@ -1,38 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { describe, it, expect } from "vitest";
import { VRoid } from "../../src/icons/VRoid";
describe("vroid icon", () => {
it("should have a valid width", () => {
expect.assertions(1);
expect(VRoid.icon[0], "width is negative").toBeGreaterThan(0);
});
it("should have a valid height", () => {
expect.assertions(1);
expect(VRoid.icon[1], "height is negative").toBeGreaterThan(0);
});
it("should not have any ligatures", () => {
expect.assertions(1);
expect(VRoid.icon[2], "ligatures are present").toStrictEqual([]);
});
it("should have a valid unicode set", () => {
expect.assertions(1);
expect(VRoid.icon[3], "unicode set is wrong").toBe("U+E002");
});
it("should have valid SVG path data", () => {
expect.assertions(1);
expect(VRoid.icon[4], "path data is bad").toMatch(
// eslint-disable-next-line stylistic/max-len
/(?:[lm]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:[hv]\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))|(?:c\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){5})|(?:q\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3}(?:\s?t?\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+)))*)|(?:a\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2}[\s,]?(?:[01][\s,]+){2}(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){2})|(?:s\s?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))(?:[\s,]?-?(?:(?:\d+(?:\.\d+)?)|(?:\.\d+))){3})|z/gi,
);
});
});

View File

@ -1,437 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { describe, it, expect, vi, beforeEach } from "vitest";
import { getCodebergActivty, getCodebergIssues } from "../../src/lib/codeberg";
describe("codeberg activity", () => {
beforeEach(() => {
vi.resetAllMocks();
});
it("should fetch and cache activities", async() => {
expect.assertions(1);
const mockResponse = [
{
act_user: {
active: true,
avatar_url: "https://example.com/avatar.png",
created: "2023-01-01T00:00:00Z",
description: "Developer",
email: "naomi@example.com",
followers_count: 100,
following_count: 50,
full_name: "Naomi Carrigan",
html_url: "https://example.com",
id: 1,
is_admin: false,
language: "en",
last_login: "2023-01-01T00:00:00Z",
location: "Earth",
login: "naomi",
login_name: "naomi",
prohibit_login: false,
pronouns: "she/her",
restricted: false,
source_id: 1,
starred_repos_count: 10,
username: "naomi",
visibility: "public",
website: "https://example.com",
},
act_user_id: 1,
comment: {
assets: [],
body: "A comment",
created_at: "2023-01-01T00:00:00Z",
html_url: "https://example.com/comment",
id: 1,
issue_url: "https://example.com/issue",
original_author: "naomi",
original_author_id: 1,
pull_request_url: "https://example.com/pr",
updated_at: "2023-01-01T00:00:00Z",
user: null,
},
comment_id: 1,
content: "Activity content",
created: "2023-01-01T00:00:00Z",
id: 1,
is_private: false,
op_type: "create",
ref_name: "main",
repo: {
allow_fast_forward_only_merge: false,
allow_merge_commits: true,
allow_rebase: true,
allow_rebase_explicit: true,
allow_rebase_update: true,
allow_squash_merge: true,
archived: false,
archived_at: "2023-01-01T00:00:00Z",
avatar_url: "https://example.com/avatar.png",
clone_url: "https://example.com/repo.git",
created_at: "2023-01-01T00:00:00Z",
default_allow_maintainer_edit: true,
default_branch: "main",
default_delete_branch_after_merge: true,
default_merge_style: "merge",
description: "A repository",
empty: false,
external_tracker: {
external_tracker_format: "format",
external_tracker_regexp_pattern: "pattern",
external_tracker_style: "style",
external_tracker_url: "https://example.com/tracker",
},
fork: false,
forks_count: 5,
full_name: "naomi/repo",
globally_editable_wiki: false,
has_actions: true,
has_issues: true,
has_packages: true,
has_projects: true,
has_pull_requests: true,
has_releases: true,
has_wiki: true,
html_url: "https://example.com/repo",
id: 1,
ignore_whitespace_conflicts: false,
internal: false,
language: "TypeScript",
languages_url: "https://example.com/languages",
link: "https://example.com/repo",
mirror: false,
mirror_interval: "24h",
mirror_updated: "2023-01-01T00:00:00Z",
name: "repo",
object_format_name: "format",
open_issues_count: 1,
open_pr_counter: 0,
original_url: "https://example.com/repo",
owner: {
active: true,
avatar_url: "https://example.com/avatar.png",
created: "2023-01-01T00:00:00Z",
description: "Developer",
email: "naomi@example.com",
followers_count: 100,
following_count: 50,
full_name: "Naomi Carrigan",
html_url: "https://example.com",
id: 1,
is_admin: false,
language: "en",
last_login: "2023-01-01T00:00:00Z",
location: "Earth",
login: "naomi",
login_name: "naomi",
prohibit_login: false,
pronouns: "she/her",
restricted: false,
source_id: 1,
starred_repos_count: 10,
username: "naomi",
visibility: "public",
website: "https://example.com",
},
parent: null,
permissions: {
admin: true,
pull: true,
push: true,
},
private: false,
release_counter: 0,
repo_transfer: null,
size: 100,
ssh_url: "git@example.com:repo.git",
stars_count: 10,
template: false,
topics: [],
updated_at: "2023-01-01T00:00:00Z",
url: "https://example.com/repo",
watchers_count: 3,
website: "https://example.com",
wiki_branch: "main",
},
repo_id: 1,
user_id: 1,
},
];
vi.spyOn(global, "fetch").mockResolvedValue({
json: () => {
return Promise.resolve(mockResponse);
},
});
const data = await getCodebergActivty();
expect(data, "did not have correct payload").
toStrictEqual(mockResponse);
});
it("should return cached data if not stale", async() => {
expect.assertions(3);
const mockResponse = [
{
act_user: {
active: true,
avatar_url: "https://example.com/avatar.png",
created: "2023-01-01T00:00:00Z",
description: "Developer",
email: "naomi@example.com",
followers_count: 100,
following_count: 50,
full_name: "Naomi Carrigan",
html_url: "https://example.com",
id: 1,
is_admin: false,
language: "en",
last_login: "2023-01-01T00:00:00Z",
location: "Earth",
login: "naomi",
login_name: "naomi",
prohibit_login: false,
pronouns: "she/her",
restricted: false,
source_id: 1,
starred_repos_count: 10,
username: "naomi",
visibility: "public",
website: "https://example.com",
},
act_user_id: 1,
comment: {
assets: [],
body: "A comment",
created_at: "2023-01-01T00:00:00Z",
html_url: "https://example.com/comment",
id: 1,
issue_url: "https://example.com/issue",
original_author: "naomi",
original_author_id: 1,
pull_request_url: "https://example.com/pr",
updated_at: "2023-01-01T00:00:00Z",
user: null,
},
comment_id: 1,
content: "Activity content",
created: "2023-01-01T00:00:00Z",
id: 1,
is_private: false,
op_type: "create",
ref_name: "main",
repo: {
allow_fast_forward_only_merge: false,
allow_merge_commits: true,
allow_rebase: true,
allow_rebase_explicit: true,
allow_rebase_update: true,
allow_squash_merge: true,
archived: false,
archived_at: "2023-01-01T00:00:00Z",
avatar_url: "https://example.com/avatar.png",
clone_url: "https://example.com/repo.git",
created_at: "2023-01-01T00:00:00Z",
default_allow_maintainer_edit: true,
default_branch: "main",
default_delete_branch_after_merge: true,
default_merge_style: "merge",
description: "A repository",
empty: false,
external_tracker: {
external_tracker_format: "format",
external_tracker_regexp_pattern: "pattern",
external_tracker_style: "style",
external_tracker_url: "https://example.com/tracker",
},
fork: false,
forks_count: 5,
full_name: "naomi/repo",
globally_editable_wiki: false,
has_actions: true,
has_issues: true,
has_packages: true,
has_projects: true,
has_pull_requests: true,
has_releases: true,
has_wiki: true,
html_url: "https://example.com/repo",
id: 1,
ignore_whitespace_conflicts: false,
internal: false,
language: "TypeScript",
languages_url: "https://example.com/languages",
link: "https://example.com/repo",
mirror: false,
mirror_interval: "24h",
mirror_updated: "2023-01-01T00:00:00Z",
name: "repo",
object_format_name: "format",
open_issues_count: 1,
open_pr_counter: 0,
original_url: "https://example.com/repo",
owner: {
active: true,
avatar_url: "https://example.com/avatar.png",
created: "2023-01-01T00:00:00Z",
description: "Developer",
email: "naomi@example.com",
followers_count: 100,
following_count: 50,
full_name: "Naomi Carrigan",
html_url: "https://example.com",
id: 1,
is_admin: false,
language: "en",
last_login: "2023-01-01T00:00:00Z",
location: "Earth",
login: "naomi",
login_name: "naomi",
prohibit_login: false,
pronouns: "she/her",
restricted: false,
source_id: 1,
starred_repos_count: 10,
username: "naomi",
visibility: "public",
website: "https://example.com",
},
parent: null,
permissions: {
admin: true,
pull: true,
push: true,
},
private: false,
release_counter: 0,
repo_transfer: null,
size: 100,
ssh_url: "git@example.com:repo.git",
stars_count: 10,
template: false,
topics: [],
updated_at: "2023-01-01T00:00:00Z",
url: "https://example.com/repo",
watchers_count: 3,
website: "https://example.com",
wiki_branch: "main",
},
repo_id: 1,
user_id: 1,
},
];
vi.spyOn(global, "fetch").mockResolvedValue({
json: () => {
return Promise.resolve(mockResponse);
},
});
const data = await getCodebergActivty();
expect(data, "did not have correct payload").
toStrictEqual(mockResponse);
// Call again to check if cached data is returned
const cachedData = await getCodebergActivty();
expect(cachedData, "did not cache correct payload").
toStrictEqual(mockResponse);
expect(global.fetch, "did not hit cache").not.toHaveBeenCalled();
});
});
describe.todo("codeberg issues", () => {
beforeEach(() => {
vi.resetAllMocks();
});
it("should fetch and cache issues", async() => {
expect.assertions(1);
const mockResponse = [
{
assignee: null,
assignees: [],
body: "Issue body",
closed_at: null,
comments: 0,
comments_url: "https://example.com/comments",
created_at: "2023-01-01T00:00:00Z",
html_url: "https://example.com/issue",
id: 1,
labels: [ { name: "good first issue" } ],
milestone: null,
number: 1,
original_author: "naomi",
original_author_id: 1,
pull_request: null,
state: "open",
title: "Issue title",
updated_at: "2023-01-01T00:00:00Z",
user: null,
},
];
vi.spyOn(global, "fetch").mockResolvedValueOnce({
json: () => {
return Promise.resolve([ { name: "mock repo" } ]);
},
});
vi.spyOn(global, "fetch").mockResolvedValueOnce({
json: () => {
return Promise.resolve(mockResponse);
},
});
const data = await getCodebergIssues();
expect(data, "did not have correct payload").
toStrictEqual(mockResponse);
});
it("should return cached data if not stale", async() => {
expect.assertions(3);
const mockResponse = [
{
assignee: null,
assignees: [],
body: "Issue body",
closed_at: null,
comments: 0,
comments_url: "https://example.com/comments",
created_at: "2023-01-01T00:00:00Z",
html_url: "https://example.com/issue",
id: 1,
labels: [ { name: "good first issue" } ],
milestone: null,
number: 1,
original_author: "naomi",
original_author_id: 1,
pull_request: null,
state: "open",
title: "Issue title",
updated_at: "2023-01-01T00:00:00Z",
user: null,
},
];
vi.spyOn(global, "fetch").mockResolvedValue({
json: () => {
return Promise.resolve(mockResponse);
},
});
const data = await getCodebergIssues();
expect(data, "did not have correct payload").
toStrictEqual(mockResponse);
// Call again to check if cached data is returned
const cachedData = await getCodebergActivty();
expect(cachedData, "did not cache correct payload").
toStrictEqual(mockResponse);
expect(global.fetch, "did not hit cache").not.toHaveBeenCalled();
});
});

View File

@ -1,343 +0,0 @@
/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { describe, it, expect, vi, beforeEach } from "vitest";
import { getGithubData } from "../../src/lib/github";
describe("github", () => {
beforeEach(() => {
vi.resetAllMocks();
});
it("should fetch and cache activities", async() => {
expect.assertions(1);
const mockResponse = [
{
act_user: {
active: true,
avatar_url: "https://example.com/avatar.png",
created: "2023-01-01T00:00:00Z",
description: "Developer",
email: "naomi@example.com",
followers_count: 100,
following_count: 50,
full_name: "Naomi Carrigan",
html_url: "https://example.com",
id: 1,
is_admin: false,
language: "en",
last_login: "2023-01-01T00:00:00Z",
location: "Earth",
login: "naomi",
login_name: "naomi",
prohibit_login: false,
pronouns: "she/her",
restricted: false,
source_id: 1,
starred_repos_count: 10,
username: "naomi",
visibility: "public",
website: "https://example.com",
},
act_user_id: 1,
comment: {
assets: [],
body: "A comment",
created_at: "2023-01-01T00:00:00Z",
html_url: "https://example.com/comment",
id: 1,
issue_url: "https://example.com/issue",
original_author: "naomi",
original_author_id: 1,
pull_request_url: "https://example.com/pr",
updated_at: "2023-01-01T00:00:00Z",
user: null,
},
comment_id: 1,
content: "Activity content",
created: "2023-01-01T00:00:00Z",
id: 1,
is_private: false,
op_type: "create",
ref_name: "main",
repo: {
allow_fast_forward_only_merge: false,
allow_merge_commits: true,
allow_rebase: true,
allow_rebase_explicit: true,
allow_rebase_update: true,
allow_squash_merge: true,
archived: false,
archived_at: "2023-01-01T00:00:00Z",
avatar_url: "https://example.com/avatar.png",
clone_url: "https://example.com/repo.git",
created_at: "2023-01-01T00:00:00Z",
default_allow_maintainer_edit: true,
default_branch: "main",
default_delete_branch_after_merge: true,
default_merge_style: "merge",
description: "A repository",
empty: false,
external_tracker: {
external_tracker_format: "format",
external_tracker_regexp_pattern: "pattern",
external_tracker_style: "style",
external_tracker_url: "https://example.com/tracker",
},
fork: false,
forks_count: 5,
full_name: "naomi/repo",
globally_editable_wiki: false,
has_actions: true,
has_issues: true,
has_packages: true,
has_projects: true,
has_pull_requests: true,
has_releases: true,
has_wiki: true,
html_url: "https://example.com/repo",
id: 1,
ignore_whitespace_conflicts: false,
internal: false,
language: "TypeScript",
languages_url: "https://example.com/languages",
link: "https://example.com/repo",
mirror: false,
mirror_interval: "24h",
mirror_updated: "2023-01-01T00:00:00Z",
name: "repo",
object_format_name: "format",
open_issues_count: 1,
open_pr_counter: 0,
original_url: "https://example.com/repo",
owner: {
active: true,
avatar_url: "https://example.com/avatar.png",
created: "2023-01-01T00:00:00Z",
description: "Developer",
email: "naomi@example.com",
followers_count: 100,
following_count: 50,
full_name: "Naomi Carrigan",
html_url: "https://example.com",
id: 1,
is_admin: false,
language: "en",
last_login: "2023-01-01T00:00:00Z",
location: "Earth",
login: "naomi",
login_name: "naomi",
prohibit_login: false,
pronouns: "she/her",
restricted: false,
source_id: 1,
starred_repos_count: 10,
username: "naomi",
visibility: "public",
website: "https://example.com",
},
parent: null,
permissions: {
admin: true,
pull: true,
push: true,
},
private: false,
release_counter: 0,
repo_transfer: null,
size: 100,
ssh_url: "git@example.com:repo.git",
stars_count: 10,
template: false,
topics: [],
updated_at: "2023-01-01T00:00:00Z",
url: "https://example.com/repo",
watchers_count: 3,
website: "https://example.com",
wiki_branch: "main",
},
repo_id: 1,
user_id: 1,
},
];
vi.spyOn(global, "fetch").mockResolvedValue({
json: () => {
return Promise.resolve(mockResponse);
},
});
const data = await getGithubData();
expect(data, "did not have correct payload").toStrictEqual(mockResponse);
});
it("should return cached data if not stale", async() => {
expect.assertions(3);
const mockResponse = [
{
act_user: {
active: true,
avatar_url: "https://example.com/avatar.png",
created: "2023-01-01T00:00:00Z",
description: "Developer",
email: "naomi@example.com",
followers_count: 100,
following_count: 50,
full_name: "Naomi Carrigan",
html_url: "https://example.com",
id: 1,
is_admin: false,
language: "en",
last_login: "2023-01-01T00:00:00Z",
location: "Earth",
login: "naomi",
login_name: "naomi",
prohibit_login: false,
pronouns: "she/her",
restricted: false,
source_id: 1,
starred_repos_count: 10,
username: "naomi",
visibility: "public",
website: "https://example.com",
},
act_user_id: 1,
comment: {
assets: [],
body: "A comment",
created_at: "2023-01-01T00:00:00Z",
html_url: "https://example.com/comment",
id: 1,
issue_url: "https://example.com/issue",
original_author: "naomi",
original_author_id: 1,
pull_request_url: "https://example.com/pr",
updated_at: "2023-01-01T00:00:00Z",
user: null,
},
comment_id: 1,
content: "Activity content",
created: "2023-01-01T00:00:00Z",
id: 1,
is_private: false,
op_type: "create",
ref_name: "main",
repo: {
allow_fast_forward_only_merge: false,
allow_merge_commits: true,
allow_rebase: true,
allow_rebase_explicit: true,
allow_rebase_update: true,
allow_squash_merge: true,
archived: false,
archived_at: "2023-01-01T00:00:00Z",
avatar_url: "https://example.com/avatar.png",
clone_url: "https://example.com/repo.git",
created_at: "2023-01-01T00:00:00Z",
default_allow_maintainer_edit: true,
default_branch: "main",
default_delete_branch_after_merge: true,
default_merge_style: "merge",
description: "A repository",
empty: false,
external_tracker: {
external_tracker_format: "format",
external_tracker_regexp_pattern: "pattern",
external_tracker_style: "style",
external_tracker_url: "https://example.com/tracker",
},
fork: false,
forks_count: 5,
full_name: "naomi/repo",
globally_editable_wiki: false,
has_actions: true,
has_issues: true,
has_packages: true,
has_projects: true,
has_pull_requests: true,
has_releases: true,
has_wiki: true,
html_url: "https://example.com/repo",
id: 1,
ignore_whitespace_conflicts: false,
internal: false,
language: "TypeScript",
languages_url: "https://example.com/languages",
link: "https://example.com/repo",
mirror: false,
mirror_interval: "24h",
mirror_updated: "2023-01-01T00:00:00Z",
name: "repo",
object_format_name: "format",
open_issues_count: 1,
open_pr_counter: 0,
original_url: "https://example.com/repo",
owner: {
active: true,
avatar_url: "https://example.com/avatar.png",
created: "2023-01-01T00:00:00Z",
description: "Developer",
email: "naomi@example.com",
followers_count: 100,
following_count: 50,
full_name: "Naomi Carrigan",
html_url: "https://example.com",
id: 1,
is_admin: false,
language: "en",
last_login: "2023-01-01T00:00:00Z",
location: "Earth",
login: "naomi",
login_name: "naomi",
prohibit_login: false,
pronouns: "she/her",
restricted: false,
source_id: 1,
starred_repos_count: 10,
username: "naomi",
visibility: "public",
website: "https://example.com",
},
parent: null,
permissions: {
admin: true,
pull: true,
push: true,
},
private: false,
release_counter: 0,
repo_transfer: null,
size: 100,
ssh_url: "git@example.com:repo.git",
stars_count: 10,
template: false,
topics: [],
updated_at: "2023-01-01T00:00:00Z",
url: "https://example.com/repo",
watchers_count: 3,
website: "https://example.com",
wiki_branch: "main",
},
repo_id: 1,
user_id: 1,
},
];
vi.spyOn(global, "fetch").mockResolvedValue({
json: () => {
return Promise.resolve(mockResponse);
},
});
const data = await getGithubData();
expect(data, "did not have correct payload").toStrictEqual(mockResponse);
// Call again to check if cached data is returned
const cachedData = await getGithubData();
expect(cachedData, "did not cache correct payload").
toStrictEqual(mockResponse);
expect(global.fetch, "did not hit cache").not.toHaveBeenCalled();
});
});