diff --git a/.gitignore b/.gitignore index 4a7f73a..92ce464 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ .nitro .cache dist +_site # Node dependencies node_modules diff --git a/docs/migration-architecture-brief.md b/docs/migration-architecture-brief.md new file mode 100644 index 0000000..3d616ec --- /dev/null +++ b/docs/migration-architecture-brief.md @@ -0,0 +1,130 @@ +# Forklore Migration Architecture Brief + +## Premise + +Forklore is not just a directory. It is a browsable archive of maintainer stories, projects, posts, and small pieces of personality. The migration should reduce dependency churn without flattening the experience into static HTML-only pages. + +## Goals + +- Keep authoring ergonomic for maintainers and contributors. +- Preserve interactive UI components for search, filtering, exploration, and story-led browsing. +- Move validation, normalization, and derived fields into one data pipeline. +- Keep generated routes static and GitHub Pages friendly. +- Reduce recurring maintenance from framework upgrades, generated feed commits, and schema drift. + +## Recommended Direction + +Use a dead-simple static site generator for the public site, with Markdown/frontmatter as the maintainer authoring format. + +Current spike candidate: Eleventy. + +Rationale: + +- Maintainers can be authored as readable Markdown instead of JSON. +- Structured fields stay in frontmatter for templates, validation, and automation. +- Long answers, notes, and profile content stay in Markdown where humans can edit them. +- One template can generate all maintainer detail pages. +- The landing page can still be interactive through small progressive-enhancement scripts. +- The dependency surface is much smaller than Nuxt plus Nuxt Content plus Nitro. + +Astro remains the fallback if the Eleventy spike proves too limiting for component ergonomics. Zola is less attractive for this repo because per-maintainer pages from structured content require an extra generation layer, which becomes another thing to maintain. + +## Content Model + +Maintainer profiles should move from machine-first JSON to human-first Markdown/frontmatter: + +```text +content/maintainers/.md +``` + +Frontmatter owns structured fields: + +- `username` +- `full_name` +- `photo` +- `designation` +- `socials` +- `projects` +- `created_on` + +Markdown body owns long-form answers and story content. + +GitHub issue automation can still generate or update these files later. The important shift is that humans reviewing a PR can read and edit the file without fighting JSON escaping. + +## Shared Data Layer + +All prototype branches should consume the same generated data artifacts: + +- `maintainers`: normalized profiles with canonical social labels. +- `projects`: flattened project index with maintainer references. +- `answers`: extracted form answers keyed by stable question IDs. +- `planet`: post metadata and optional full post content. +- `search`: lightweight precomputed search records. +- `stats`: counts and facets used by UI controls. + +## Migration Constraints + +- Preserve public routes where possible: + - `/` + - `/maintainers/:username` + - `/planet` + - `/planet/:username` + - `/planet/:username/:slug` + - `/rss.xml` + - `/planet/rss.xml` +- Do not commit recurring Planet refresh output unless explicitly curated. +- Keep images local, but add size validation and optimization checks. +- Treat the maintainer schema as a single source of truth and validate Markdown frontmatter against it. + +## Planet Strategy + +Planet remains part of the architecture, but it should not block the maintainer-page migration. + +- Maintainer RSS URLs live in maintainer frontmatter. +- Planet posts are machine-fetched content, not human-authored content. +- A later phase should fetch feeds during deploy or through a scheduled action. +- Generated Planet cache should either be deploy-only or committed through explicit review PRs, not recurring unreviewed churn. +- Existing Planet routes should be preserved when the Planet phase starts. + +## Spike Scope + +The first implementation spike should prove: + +- Markdown/frontmatter can represent current maintainer data. +- A landing page can list maintainers and projects. +- A detail page can render profile, image, socials, project buttons, and long-form body content. +- The current Nuxt app can remain in place while the static spike is evaluated. + +The spike must not change the production deployment path. Until the migration is explicitly accepted: + +- `yarn generate` continues to run the Nuxt site. +- GitHub Pages continues to publish `dist` from Nuxt. +- Eleventy is isolated under `site/` and is not installed by the root deployment workflow. +- Eleventy is only invoked from the spike package with `cd site && yarn build` or `cd site && yarn serve`. +- `_site/` remains ignored and is not a deployment artifact. + +## Visual Parity Requirement + +The migration baseline should look like the current Nuxt site before design exploration starts. + +The Eleventy spike should preserve: + +- Dark default palette. +- Centered `max-w-screen-md` style shell. +- Two-pixel dashed borders and dividers. +- Current header links. +- Current home intro copy and Planet CTA. +- Maintainer cards with profile header and project sections. +- Maintainer detail pages with project column and maintainer/story column. + +Intentional redesign work belongs on later `design/*` branches, not the migration branch. + +## Prototype Branches + +The three design branches should branch from this migration base: + +- `design/interactive-wall` +- `design/lore-map` +- `design/story-scroll` + +Each branch should first define the design system, interaction model, and data requirements before implementation. diff --git a/eleventy.config.js b/eleventy.config.js new file mode 100644 index 0000000..060425d --- /dev/null +++ b/eleventy.config.js @@ -0,0 +1,82 @@ +const SOCIAL_LABELS = { + github: "GitHub", + gitlab: "GitLab", + codeberg: "Codeberg", + bitbucket: "BitBucket", + linkedin: "LinkedIn", + x: "X", + "x/twitter": "X", + twitter: "X", + mastodon: "Mastodon", + bluesky: "Bluesky", + blog: "Web", + web: "Web", + website: "Web", + rss: "RSS", + medium: "Medium", + substack: "Substack", + reddit: "Reddit", + youtube: "Youtube", +}; + +export default function (eleventyConfig) { + eleventyConfig.addPassthroughCopy({ "public/images": "images" }); + eleventyConfig.addPassthroughCopy({ "public/logo": "logo" }); + eleventyConfig.addPassthroughCopy({ "public/favicon.svg": "favicon.svg" }); + eleventyConfig.addPassthroughCopy({ + "public/maintainer_photo_light.svg": "maintainer_photo_light.svg", + }); + eleventyConfig.addPassthroughCopy({ + "public/maintainer_photo_dark.svg": "maintainer_photo_dark.svg", + }); + eleventyConfig.addPassthroughCopy({ "site/assets": "assets" }); + + eleventyConfig.addCollection("maintainers", (collectionApi) => + collectionApi + .getFilteredByTag("maintainer") + .sort( + (a, b) => + new Date(b.data.created_on).getTime() - + new Date(a.data.created_on).getTime(), + ), + ); + + eleventyConfig.addFilter("socialLabel", (label) => { + if (!label) return "Web"; + return SOCIAL_LABELS[String(label).trim().toLowerCase()] || label; + }); + + eleventyConfig.addFilter("dateISO", (date) => { + const value = new Date(date); + return Number.isNaN(value.getTime()) ? "" : value.toISOString(); + }); + + eleventyConfig.addFilter("year", (date) => { + const value = new Date(date); + return Number.isNaN(value.getTime()) ? "" : value.getFullYear(); + }); + + eleventyConfig.addFilter("firstEmoji", (content) => { + const match = String(content || "").match( + /convey what it is like to be a FOSS maintainer[\s\S]*?

(.*?)<\/p>/i, + ); + if (!match) return ""; + const text = match[1].replace(/<[^>]*>/g, "").trim(); + const segmenter = new Intl.Segmenter("en", { granularity: "grapheme" }); + for (const item of segmenter.segment(text)) { + if (/\p{Extended_Pictographic}/u.test(item.segment)) return item.segment; + } + return ""; + }); + + return { + dir: { + input: "site", + includes: "_includes", + data: "_data", + output: "_site", + }, + markdownTemplateEngine: "njk", + htmlTemplateEngine: "njk", + }; +} diff --git a/site/_data/site.js b/site/_data/site.js new file mode 100644 index 0000000..82277a6 --- /dev/null +++ b/site/_data/site.js @@ -0,0 +1,6 @@ +export default { + title: "Forklore", + description: + "Confessions, quirks, and occasional rants from India's open source keepers.", + url: "https://forklore.in", +}; diff --git a/site/_includes/base.njk b/site/_includes/base.njk new file mode 100644 index 0000000..cf77d28 --- /dev/null +++ b/site/_includes/base.njk @@ -0,0 +1,59 @@ + + + + + + {% if full_name %}{{ full_name }} | Forklore{% else %}{{ title or site.title }}{% endif %} + + + + + + +

+ +
+ {{ content | safe }} +
+
+ + + + diff --git a/site/_includes/maintainer-card.njk b/site/_includes/maintainer-card.njk new file mode 100644 index 0000000..13f5371 --- /dev/null +++ b/site/_includes/maintainer-card.njk @@ -0,0 +1,46 @@ +
+ +
+ Photo of {{ maintainer.data.full_name }} +
+

{{ maintainer.data.full_name }}

+

{{ maintainer.data.designation }}

+
+
+
+ {% for project in maintainer.data.projects %} +
+ {% if project.logo %} + Logo of {{ project.name }} + {% endif %} +
+

{{ project.name }}

+ {% if project.project_link %} + + View Source + + {% endif %} +

{{ project.short_description }}

+
+
+ {% endfor %} + {% if maintainer.data.projects.length > 1 and maintainer.data.projects.length % 2 == 1 %} + + {% endif %} +
+
diff --git a/site/_includes/maintainer.njk b/site/_includes/maintainer.njk new file mode 100644 index 0000000..add9bc3 --- /dev/null +++ b/site/_includes/maintainer.njk @@ -0,0 +1,50 @@ +--- +layout: base.njk +--- + +
+
+ {% for project in projects %} + {% include "project-card.njk" %} + {% endfor %} +
+ + +
diff --git a/site/_includes/project-card.njk b/site/_includes/project-card.njk new file mode 100644 index 0000000..610040b --- /dev/null +++ b/site/_includes/project-card.njk @@ -0,0 +1,19 @@ +
+ {% if project.logo %} + + {% else %} + + {% endif %} +
+

{{ project.name }}

+

{{ project.description or project.short_description }}

+
+ {% if project.project_link %} + View Source + {% endif %} + {% if project.website_link %} + Website + {% endif %} +
+
+
diff --git a/site/assets/main.css b/site/assets/main.css new file mode 100644 index 0000000..0fb81ca --- /dev/null +++ b/site/assets/main.css @@ -0,0 +1,593 @@ +:root { + --primary-dark: #18222a; + --primary-light: #fafafa; + --secondary-dark: #cff2da; + --secondary-light: #18222a; + --tertiary-dark: #3c4b4e; + --tertiary-light: #eef0f1; + --bg: var(--primary-dark); + --text: var(--secondary-dark); + --panel: var(--tertiary-dark); + --button-bg: var(--secondary-dark); + --button-text: var(--primary-dark); + --line: #464e55; + --muted: color-mix(in srgb, var(--text), transparent 35%); + --mono: "Geist Mono", ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace; + --sans: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; +} + +.light-mode { + --bg: var(--primary-light); + --text: var(--secondary-light); + --panel: var(--tertiary-light); + --button-bg: var(--secondary-light); + --button-text: var(--primary-light); + --muted: color-mix(in srgb, var(--text), transparent 35%); +} + +* { + box-sizing: border-box; +} + +body { + margin: 0; + background: var(--bg); + color: var(--text); + font-family: var(--mono); + font-size: 16px; + line-height: 1.5; +} + +a { + color: inherit; +} + +.page-shell { + width: min(100%, 768px); + min-height: 100vh; + margin: 0 auto; + border-left: 2px dashed var(--line); + border-right: 2px dashed var(--line); +} + +.site-header { + display: flex; + align-items: center; + justify-content: space-between; + gap: 1rem; + padding: 2.25rem; + border-bottom: 2px dashed var(--line); +} + +.brand, +.site-nav, +.button-row, +.social-list, +.footer-links { + display: flex; + align-items: center; + gap: 0.75rem; + flex-wrap: wrap; +} + +.brand { + text-decoration: none; + font-weight: 700; +} + +.brand-mark { + display: block; + width: 8rem; + max-height: 2.5rem; +} + +.site-nav a, +.button, +.social-list a, +.footer-links a { + border: 1px solid currentColor; + padding: 0.5rem 0.625rem; + text-decoration: none; + font-size: 0.85rem; +} + +.site-nav { + justify-content: flex-end; + font-size: 0.875rem; + flex: 1; +} + +.site-nav a { + border: 0; + padding: 0.5rem 0.75rem; +} + +.site-nav a:hover, +.hero a:hover, +.control-actions a:hover, +.footer-copy a:hover { + text-decoration: underline; +} + +.theme-toggle { + min-width: 2.5rem; + justify-content: center; +} + +.hero { + padding: 5rem 2rem 2rem; + border-bottom: 2px dashed var(--line); + background: transparent; +} + +.home-logo-row { + margin-bottom: 1.5rem; +} + +.home-logo { + width: 12rem; + max-width: 100%; +} + +.home-meta { + display: flex; + justify-content: space-between; + gap: 1rem; + flex-wrap: wrap; +} + +.hero p { + margin: 0; +} + +.hero a { + font-weight: 700; +} + +.intro { + display: grid; + gap: 1rem; + padding: 3rem 2rem; + border-bottom: 2px dashed var(--line); +} + +.intro p { + margin: 0; +} + +.intro-strong { + font-weight: 700; +} + +.intro-button { + margin-top: 0.5rem; +} + +.directory-controls { + display: flex; + justify-content: space-between; + gap: 1.25rem; + padding: 2.5rem 2rem 0; +} + +.search-sort, +.control-actions { + display: flex; + gap: 0.5rem; + flex-wrap: wrap; +} + +.search-box { + display: flex; + align-items: center; + gap: 1rem; + width: min(100%, 300px); + border: 1px solid currentColor; + border-radius: 0.375rem; + padding: 0.5rem 1rem; +} + +.search-box input { + width: 100%; + min-width: 0; + border: 0; + outline: 0; + background: transparent; + color: inherit; + font: inherit; + font-size: 0.875rem; +} + +.search-box input::placeholder { + color: var(--text); + opacity: 0.75; +} + +.search-box kbd { + display: inline-block; + white-space: nowrap; + border: 1px solid currentColor; + border-radius: 0.25rem; + padding: 0.1rem 0.4rem; + font: inherit; + font-size: 0.75rem; + opacity: 0.8; +} + +.search-sort select { + border: 1px solid currentColor; + border-radius: 0.375rem; + padding: 0.5rem; + background: var(--bg); + color: var(--text); + font: inherit; + font-size: 0.875rem; +} + +.eyebrow, +.count { + color: var(--muted); + font-size: 0.8rem; + text-transform: uppercase; + letter-spacing: 0.08em; +} + +.maintainer-list { + display: grid; + gap: 2rem; + padding: 2.5rem 2rem; +} + +.maintainer-card { + position: relative; + border: 1px solid currentColor; + background: transparent; + outline: 0; +} + +.card-hit { + position: absolute; + inset: 0; + z-index: 1; +} + +.maintainer-card:focus-within, +.maintainer-card:hover { + outline: 1px solid currentColor; + outline-offset: 0; +} + +.maintainer-card-header, +.profile-card { + display: flex; + gap: 1rem; + align-items: center; + padding: 2rem; + background: var(--panel); +} + +.avatar { + width: 3.5rem; + height: 3.5rem; + object-fit: cover; + outline: 1px solid currentColor; + background: var(--primary-light); +} + +.avatar.large { + width: 3.5rem; + height: 3.5rem; +} + +.maintainer-card h2, +.profile-card h1 { + margin: 0; + font-size: 1rem; + line-height: 1.3; +} + +.maintainer-card p, +.profile-card p { + margin: 0.35rem 0 0; +} + +.project-strip { + position: relative; + display: grid; + grid-template-columns: 1fr; + overflow: hidden; +} + +.project-strip-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); +} + +.project-summary { + display: flex; + gap: 1.25rem; + align-items: flex-start; + padding: 2rem; + border-top: 2px dashed var(--line); +} + +.project-summary:nth-child(even) { + border-left: 2px dashed var(--line); +} + +.project-summary-empty { + min-height: 1px; +} + +.project-summary img { + width: 5rem; + height: 5rem; + object-fit: contain; + padding: 0.75rem; + background: var(--primary-light); +} + +.project-summary h3, +.project-summary p { + margin: 0; +} + +.project-summary h3 { + margin-bottom: 0.75rem; + font-size: 1rem; +} + +.project-summary p { + margin-top: 1rem; + font-size: 0.875rem; +} + +.card-source { + position: relative; + z-index: 2; +} + +.profile-layout { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); + min-height: 100vh; +} + +.profile-main { + border-right: 2px dashed var(--line); +} + +.project-card { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 1.5rem; + padding: 2rem; + border-bottom: 2px dashed var(--line); +} + +.project-logo { + width: 7.5rem; + height: 5rem; + object-fit: contain; + padding: 0.75rem; + background: var(--primary-light); +} + +.project-logo-fallback { + display: grid; + place-items: center; + font-size: 2rem; + font-weight: 700; +} + +.project-copy p, +.story-content { + font-family: var(--sans); + line-height: 2; +} + +.project-copy h3 { + margin: 0 0 1rem; + font-size: 1.25rem; +} + +.project-copy p { + margin: 0 0 1.5rem; +} + +.button { + display: inline-flex; + align-items: center; + gap: 0.25rem; + width: fit-content; + font-family: var(--mono); + cursor: pointer; +} + +.button.solid { + background: var(--button-bg); + color: var(--button-text); +} + +.button.subtle { + background: var(--panel); + color: var(--text); +} + +.empty-state { + text-align: center; + margin: 3rem 0; +} + +.emoji-page { + padding: 2rem; +} + +.emoji-page h1 { + margin: 0 0 1.5rem; + font-size: 1.5rem; +} + +.emoji-grid { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 1.5rem; +} + +.emoji-card { + display: grid; + place-items: center; + min-height: 7rem; + border-radius: 0.25rem; + background: color-mix(in srgb, var(--panel), transparent 35%); + text-decoration: none; + font-size: 3.5rem; + transition: transform 0.2s ease, background-color 0.2s ease; +} + +.emoji-card:hover, +.emoji-card:focus { + transform: scale(1.08); + background: var(--button-bg); + color: var(--button-text); +} + +.profile-aside { + background: transparent; +} + +.profile-panel { + background: var(--panel); + border-bottom: 2px dashed var(--line); +} + +.social-list, +.story-content, +.planet-link { + margin: 1rem; +} + +.story-content { + padding-top: 0; + border-top: 2px dashed var(--line); +} + +.story-content h2 { + margin: 3rem 0 1.5rem; + padding: 0.5rem; + background: var(--button-bg); + color: var(--button-text); + font-family: var(--mono); + font-size: 1rem; + font-weight: 400; +} + +.story-content h2:first-child { + margin-top: 1rem; +} + +.site-footer { + background: var(--secondary-light); + color: var(--primary-light); + border-top: 2px solid currentColor; +} + +.footer-inner { + width: min(100%, 768px); + margin: 0 auto; + display: flex; + justify-content: space-between; + gap: 2rem; + padding: 3.5rem 1rem; +} + +.footer-copy { + display: grid; + gap: 1rem; +} + +.footer-copy p { + margin: 0; +} + +.footer-copy a { + color: inherit; +} + +.footer-links a { + background: var(--panel); + color: var(--text); +} + +.footer-logo { + width: 3rem; + align-self: start; +} + +@media (max-width: 760px) { + .page-shell { + border: 0; + } + + .site-header, + .profile-layout, + .project-card, + .home-meta, + .directory-controls { + display: block; + } + + .site-nav { + margin-top: 1rem; + justify-content: flex-start; + } + + .theme-toggle { + margin-top: 1rem; + } + + .search-sort, + .control-actions { + margin-top: 0.75rem; + } + + .search-box { + width: 100%; + } + + .profile-main { + border-right: 0; + } + + .project-logo { + margin-bottom: 1rem; + } + + .project-strip-grid { + grid-template-columns: 1fr; + } + + .project-summary, + .project-summary:nth-child(even), + .project-summary:nth-child(n + 3) { + border-left: 0; + border-top: 2px dashed var(--line); + } + + .project-summary:first-child { + border-top: 0; + } + + .project-strip-grid.project-strip-odd::after { + display: none; + } + + .emoji-grid { + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 0.75rem; + } + + .footer-inner { + padding-inline: 1rem; + } +} diff --git a/site/assets/main.js b/site/assets/main.js new file mode 100644 index 0000000..f94e636 --- /dev/null +++ b/site/assets/main.js @@ -0,0 +1,90 @@ +(function () { + const root = document.documentElement; + const themeToggle = document.querySelector("[data-theme-toggle]"); + const logos = document.querySelectorAll("[data-theme-logo]"); + + function setTheme(theme) { + const isLight = theme === "light"; + root.classList.toggle("light-mode", isLight); + root.classList.toggle("dark-mode", !isLight); + localStorage.setItem("forklore-theme", isLight ? "light" : "dark"); + logos.forEach((logo) => { + logo.setAttribute("src", isLight ? "/logo/logo_dark.svg" : "/logo/logo_light.svg"); + }); + if (themeToggle) { + themeToggle.textContent = isLight ? "☾" : "☀"; + themeToggle.setAttribute( + "aria-label", + isLight ? "Switch to Dark Mode" : "Switch to Light Mode", + ); + } + } + + setTheme(localStorage.getItem("forklore-theme") || "dark"); + themeToggle?.addEventListener("click", () => { + setTheme(root.classList.contains("light-mode") ? "dark" : "light"); + }); + + const searchInput = document.querySelector("[data-search-input]"); + const sortSelect = document.querySelector("[data-sort-select]"); + const list = document.querySelector(".maintainer-list"); + const emptyState = document.querySelector("[data-empty-state]"); + const shortcutLabel = document.querySelector("[data-shortcut-label]"); + + if (shortcutLabel && /Mac|iPhone|iPod|iPad/i.test(navigator.userAgent)) { + shortcutLabel.textContent = "⌘+k"; + } + + function cards() { + return Array.from(document.querySelectorAll("[data-maintainer-card]")); + } + + function applyDirectoryState() { + if (!list) return; + const query = (searchInput?.value || "").trim().toLowerCase(); + const sorted = cards().sort((a, b) => { + const mode = sortSelect?.value || "newest"; + if (mode === "a-z") return a.dataset.name.localeCompare(b.dataset.name); + if (mode === "z-a") return b.dataset.name.localeCompare(a.dataset.name); + const aDate = new Date(a.dataset.created || 0).getTime(); + const bDate = new Date(b.dataset.created || 0).getTime(); + return mode === "oldest" ? aDate - bDate : bDate - aDate; + }); + + let visible = 0; + sorted.forEach((card) => { + const haystack = `${card.dataset.name} ${card.dataset.username} ${card.dataset.projects}`.toLowerCase(); + const match = !query || haystack.includes(query); + card.hidden = !match; + if (match) visible += 1; + list.insertBefore(card, emptyState || null); + }); + + if (emptyState) emptyState.hidden = visible !== 0; + } + + searchInput?.addEventListener("input", applyDirectoryState); + sortSelect?.addEventListener("change", applyDirectoryState); + applyDirectoryState(); + + document.addEventListener("keydown", (event) => { + const target = event.target; + const isTyping = + target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement; + if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === "k") { + event.preventDefault(); + searchInput?.focus(); + } + if (!isTyping && event.key === "/") { + event.preventDefault(); + searchInput?.focus(); + } + }); + + document.querySelector("[data-surprise]")?.addEventListener("click", () => { + const visibleCards = cards().filter((card) => !card.hidden); + const card = visibleCards[Math.floor(Math.random() * visibleCards.length)]; + const href = card?.querySelector(".card-hit")?.getAttribute("href"); + if (href) window.location.href = href; + }); +})(); diff --git a/site/commit-emoji.njk b/site/commit-emoji.njk new file mode 100644 index 0000000..a7ac696 --- /dev/null +++ b/site/commit-emoji.njk @@ -0,0 +1,19 @@ +--- +layout: base.njk +title: Commit to Emoji +description: Maintainers grouped by their open-source emoji. +--- + +
+

Commit to Emoji

+
+ {% for maintainer in collections.maintainers %} + {% set emoji = maintainer.templateContent | firstEmoji %} + {% if emoji %} + + {{ emoji }} + + {% endif %} + {% endfor %} +
+
diff --git a/site/index.njk b/site/index.njk new file mode 100644 index 0000000..bea46b7 --- /dev/null +++ b/site/index.njk @@ -0,0 +1,59 @@ +--- +layout: base.njk +title: Forklore +description: Confessions, quirks, and occasional rants from India's open source keepers. +--- + +
+
+ +
+
+

+ by + FOSS United +

+

+ {{ collections.maintainers.length }} + {% if collections.maintainers.length == 1 %}maintainer{% else %}maintainers{% endif %} +

+
+
+ +
+

Like a slam book, but with fewer crushes and more commits

+

+ Forklore brings you confessions, quirks, and the occasional rant from + India's open source keepers. +

+ + Read Planet + +
+ +
+
+ + +
+
+ + Commit to Emoji +
+
+ +
+ {% for maintainer in collections.maintainers %} + {% include "maintainer-card.njk" %} + {% endfor %} + +
diff --git a/site/maintainers/VishnuSanal.md b/site/maintainers/VishnuSanal.md new file mode 100644 index 0000000..22dcf9c --- /dev/null +++ b/site/maintainers/VishnuSanal.md @@ -0,0 +1,94 @@ +--- +layout: maintainer.njk +tags: maintainer +permalink: /maintainers/VishnuSanal/ +username: VishnuSanal +full_name: Vishnu Sanal T +photo: /images/VishnuSanal_photo.jpg +designation: Android Developer +created_on: 2026-04-18T14:42:27.492443+05:30 +socials: + - label: GitHub + link: https://github.com/VishnuSanal + - label: Codeberg + link: https://codeberg.org/VishnuSanal + - label: Mastodon + link: https://fosstodon.org/@VishnuSanal + - label: Web + link: https://vishnusanal.github.io/ + - label: Gitlab + link: https://gitlab.com/VishnuSanal + - label: Twitter + link: https://twitter.com/VishnuSanalT + - label: LinkedIn + link: https://www.linkedin.com/in/vishnu-sanal-t/ +projects: + - name: Amaze File Manager + project_link: https://github.com/TeamAmaze/AmazeFileManager + website_link: https://f-droid.org/packages/com.amaze.filemanager/ + logo: /images/VishnuSanal_amaze_file_manager.png + short_description: Material design file manager for Android + description: Simple and attractive Material Design file manager for Android + - name: WhatsApp Cleaner + project_link: https://github.com/VishnuSanal/WhatsAppCleaner/ + website_link: https://f-droid.org/packages/com.vishnu.whatsappcleaner/ + logo: /images/VishnuSanal_whatsapp_cleaner.png + short_description: Cleaner for WhatsApp - Clean Redundant Media and Files from Storage + description: Did you know that WhatsApp is cluttering your phone with unnecessary media, old + - name: RemindMe! + project_link: https://github.com/VishnuSanal/RemindMe + website_link: https://f-droid.org/packages/com.vishnu.remindme/ + logo: /images/VishnuSanal_remindme.png + short_description: Set alarms for a specific date in the future (alarm, not a reminder!) + description: Have you found yourself in a situation where you wanted a *strong* reminder to something someday in the future?! + - name: Prav + project_link: https://codeberg.org/prav/prav + website_link: https://f-droid.org/packages/app.prav.client/ + logo: /images/VishnuSanal_prav.png + short_description: A user-friendly XMPP messenger for everyone with a focus on privacy and freedom + description: Whether you want to text your friends and family, or to make calls, Prav app makes it easy for you. It provides convenient onboarding and user-friendly interface. It is based on XMPP protocol, so users can talk to any other XMPP users all over the world, without being locked-in to a service. + - name: DialogMusicPlayer + project_link: https://github.com/VishnuSanal/DialogMusicPlayer + website_link: https://f-droid.org/packages/phone.vishnu.dialogmusicplayer + logo: /images/VishnuSanal_dialogmusicplayer.png + short_description: A simple and minimal music player dialog :) + description: "The stock music player on my phone needed unnecessary permissions! So, I created one on my own :D" + - name: Quotes Status Creator + project_link: https://github.com/VishnuSanal/Quotes + website_link: https://f-droid.org/packages/phone.vishnu.quotes/ + logo: /images/VishnuSanal_quotes_status_creator.png + short_description: Quotes Status Creator lets you share quotations as status images on social media + description: Quotes Status Creator lets you share quotations as images on social media +--- + +## How to support + +https://buymeacoffee.com/vishnusanal + +## A small brief about your project + +I contribute to / maintain some native android open source projects including a file manager, and some utility applications. + +## One FOSS maintainer lesson for your younger self + +It takes time! Be patient, all these works count in on you someday, keep going! :) + +## Why do you do it? Why do you bother maintaining a FOSS project? + +Joy of building stuff, thank you notes that make my day, and TBH for validation and self esteem boost too somedays (trust me this is more often than you think)! ;) + +## If your repo had a theme song, what would it be? + +https://www.youtube.com/watch?v=Oextk-If8HQ&themeRefresh=1 + +## Which file in your project would you most like to set on fire? + +Almost all of it TBF 🫠🌝 + +## What's your open-source villain origin story? + +Collaboration over unhealthy competition / rigour felt appealing. + +## If you had to use one emoji to convey what it is like to be a FOSS maintainer, what would it be? + +🧘🏽‍♀️ diff --git a/site/maintainers/abhisek.md b/site/maintainers/abhisek.md new file mode 100644 index 0000000..ea5a8f0 --- /dev/null +++ b/site/maintainers/abhisek.md @@ -0,0 +1,69 @@ +--- +layout: maintainer.njk +tags: maintainer +permalink: /maintainers/abhisek/ +username: "abhisek" +full_name: "Abhisek Datta" +photo: "/images/abhisek_photo.jpg" +designation: "Co-Founder at [SafeDep](https://safedep.io)" +created_on: "2025-11-17T13:01:17+05:30" +socials: + - label: "GitHub" + link: "https://github.com/abhisek" + - label: "LinkedIn" + link: "https://www.linkedin.com/in/abh1sek/" + - label: "Twitter" + link: "https://x.com/abh1sek" +projects: + - name: "vet" + project_link: "https://github.com/safedep/vet" + website_link: "https://safedep.io" + logo: "/images/abhisek_vet.svg" + short_description: "Protect against malicious open source packages" + description: "vet is an open source software supply chain security tool built for developers and security engineers for enforcing policy driven guardrails against risky open source packages. vet has a built-in code analysis engine to identify risky open source packages that actually impacts an application. vet leverage SafeDep's malicious package scanning infrastructure to provide near real-time protection against malicious open source packages." + - name: "pmg" + project_link: "https://github.com/safedep/pmg" + website_link: "https://safedep.io" + logo: "/images/abhisek_pmg.svg" + short_description: "PMG protects developers from getting hacked due to malicious open source packages." + description: "Package Manager Guard (PMG) wraps popular package managers such as npm, pnpm, yarn, pip and more to proactively detect and prevent installation of malicious open source packages in developer machines." + - name: "xbom" + project_link: "https://github.com/safedep/xbom" + website_link: "https://safedep.io" + logo: "/images/abhisek_xbom.svg" + short_description: "xBOM builds AI, Crypto and more usage inventory (bill of materials) for a code repository through static code analysis." + description: "xBOM is designed to build contextual bill of materials for a given software through static code analysis. While software composition analysis (SCA) tools build SBOM for 3rd party OSS usage in an application, xBOM augments them with information about AI / Crypto / SaaS BOM." +--- + +## How to support + +Advocate the need for safeguarding the open source software supply chain. +Driving adoption among OSS maintainers, contributing code, documentation and roadmap. + +## A small brief about your project + +SafeDep develops and maintains open source tools to safeguard an organization's open source software supply chain. vet for CI/CD and AI IDEs, pmg for developer tooling, xBOM for 3rd party code capability identification. Together they are built to help an organization protect against open source software supply chain attacks. + +## One FOSS maintainer lesson for your younger self + +Keep things simple. Clear documentation for users and contributors. Software needs to be designed to enable easy community contribution. Without community, the project will die. + +## Why do you do it? Why do you bother maintaining a FOSS project? + +Started as a hobby project to solve a problem at work. Eventually saw traction outside immediate circle. Now the usage, asks and community participation keeps me going. + +## If your repo had a theme song, what would it be? + +Paranoid by Black Sabbath. + +## Which file in your project would you most like to set on fire? + +./api + +## What's your open-source villain origin story? + +Let me reverse engineer that and build OSS + +## If you had to use one emoji to convey what it's like to be a FOSS maintainer, what would it be? + +😮 diff --git a/site/maintainers/adityaathalye.md b/site/maintainers/adityaathalye.md new file mode 100644 index 0000000..4fb86e2 --- /dev/null +++ b/site/maintainers/adityaathalye.md @@ -0,0 +1,86 @@ +--- +layout: maintainer.njk +tags: maintainer +permalink: /maintainers/adityaathalye/ +username: "adityaathalye" +full_name: "Aditya Athalye" +photo: "/images/adityaathalye_photo.jpg" +designation: "Owner and Principal at evalapply.org" +created_on: "2025-12-09T16:07:28.300474" +socials: + - label: "Web" + link: "https://www.evalapply.org" + - label: "GitHub" + link: "https://github.com/adityaathalye" + - label: "LinkedIn" + link: "https://www.linkedin.com/in/adityaathalye/" + - label: "RSS" + link: "https://www.evalapply.org/index.xml" +projects: + - name: "shite" + project_link: "https://github.com/adityaathalye/shite" + website_link: "https://www.evalapply.org/posts/shite-the-static-sites-from-shell-part-1/" + logo: "/images/adityaathalye_shite.png" + short_description: "The little hot-reloadin' static site maker from shell." + description: "shite's job is to help me make my website (https://evalapply.org). Thus, shite's scope, (mis)feature set, polish will always be production-grade, where production is 'works on my machine(s)' :)" + - name: "Clojure 'Multiproject'" + project_link: "https://github.com/adityaathalye/clojure-multiproject-example/" + website_link: "https://www.evalapply.org/tags/web_development/" + logo: "/images/adityaathalye_clojure_'multiproject'.png" + short_description: "Layout and tooling to conveniently develop many Clojure projects in a single source repo." + description: "See the 'Concept' section in the README. Basically, 'multiproject' addresses my own specific requirements; viz. indie and hobby SaaS apps of my own; RAD for outcomes-driven customers (like me) who want long-lived, stable software; and to benefit from the Clojure ecosystem's creativity, reach, stewardship, and software stability. Polylith (https://polylith.gitbook.io/) is the (far) more sophisticated alternative to my approach." + - name: "Clojure By Example" + project_link: "https://github.com/adityaathalye/clojure-by-example" + website_link: "https://www.evalapply.org/tags/clojure" + logo: "/images/adityaathalye_clojure_by_example.png" + short_description: "Workshop for programmers who are new to Clojure." + description: "This workshop aims to get your brain and fingers accustomed to just enough of the Clojure programming language to start doing useful things with it. In other words, 'What could one do with just a little bit of Clojure?'." + - name: "usermanager-first-principles" + project_link: "https://github.com/adityaathalye/usermanager-first-principles" + website_link: "https://www.evalapply.org/posts/clojure-web-app-from-scratch/" + logo: "/images/adityaathalye_usermanager-first-principles.png" + short_description: "A 'from first principles' variant of 'usermanager-example', the tutorial Clojure web application by Sean Corfield." + description: "Sean's original 'User Manager' example project and its variants (including this one), aim to demystify 'How to construct a Clojure web application using only libraries?'. 'Composition over inheritance', 'Libraries over frameworks', and 'Data orientation' feature prominently in the Clojure world's canonical mental model of programming, including programming the web. Absent some of these key intuitions, even experienced developers who are new to Clojure tend to struggle to build apps using libraries. The 'User Manager' collective of demos aim to address this specific challenge." +--- + +## How to support + +GOTO [evalapply.org](https://www.evalapply.org) && do that 'like, share, subscribe, sponsor' thing :) + +## A small brief about your project + +Typically, I release software for programmer education and instruction, developer workflow / experience ('DevX'), and personal software for fun and utility (see: https://justforfunnoreally.dev and 'houseplant programming': https://www.hannahilea.com/blog/houseplant-programming . + +## One FOSS maintainer lesson for your younger self + +Be license-savvy. Pick one that protects your own time, interests, and goals as maintainer, first and foremost. + +## Why do you do it? Why do you bother maintaining a FOSS project? + +'Learn Generously' is the guiding principle behind everything I open source to the Wild Wild Web. + +## If your repo had a theme song, what would it be? + +Why one? Here are one zero songs... Because the lone open source 'artist's way' feels like any (or all) of that in any given week. + - *Giorgio by Moroder* - Daft Punk + - *It's a Long Way to the Top (If You Wanna Rock'N'Roll)* - AC/DC + - *Daydream* - Lily Meola + - *Another One Bites the Dust* - Queen + - *Poison* - Alice Cooper + - *Levitating* - Dua Lipa + - *Hell You Call A Dream* - The Warning + - *Lose Yourself* - Eminem + - *Break Stuff* - Limp Bizkit. + And song no. 10, for when Big Cloud co-opts your work into a money-machine (giving nothing back)... *Hot Dog* - Limp Bizkit. + +## Which file in your project would you most like to set on fire? + +templating.sh in shite, because of this gawdawful case statement: https://github.com/adityaathalye/shite/blob/6d30eb1df29d65945e445287798ca1ce4c987a51/bin/templating.sh#L188. + +## What's your open-source villain origin story? + +Small crimes, er, commits led to bigger commits... and now there's not going back. + +## If you had to use one emoji to convey what it is like to be a FOSS maintainer, what would it be? + +☯️ diff --git a/site/maintainers/aravindavk.md b/site/maintainers/aravindavk.md new file mode 100644 index 0000000..19245e3 --- /dev/null +++ b/site/maintainers/aravindavk.md @@ -0,0 +1,92 @@ +--- +layout: maintainer.njk +tags: maintainer +permalink: /maintainers/aravindavk/ +username: "aravindavk" +full_name: "Aravinda VK" +photo: "/images/aravindavk_photo.jpg" +designation: "Partner at Kadalu Investments" +created_on: "2026-02-23T19:16:50+05:30" +socials: + - label: "GitHub" + link: "https://github.com/aravindavk" + - label: "Twitter" + link: "https://x.com/aravindavk" + - label: "LinkedIn" + link: "https://www.linkedin.com/in/aravindavk" + - label: "Web" + link: "https://aravindavk.in" +projects: + - name: "Chitra" + project_link: "https://github.com/aravindavk/chitra-d" + website_link: "https://github.com/aravindavk/chitra-d" + logo: "/images/aravindavk_chitra.png" + short_description: "2D graphics library" + description: "Chitra (Chitra means Drawing in Kannada language) is a 2D graphics library that lets you write simple https://dlang.org/[D] code to generate 2D graphics. WIP Lua bindings helps to integrate Chitra with other programming languages very easily. This is based on Cairo graphics and Pango libraries. The syntax is inspired by Drawbot (https://www.drawbot.com) and Processing (https://processing.org). The library is not only limited to D language apps, but it can be used with other programming languages or CLI using the Lua bindings. Lua bindings, curve support, and many other feature development work is in progress." + - name: "Sanka" + project_link: "https://github.com/aravindavk/kannada" + website_link: "https://aravindavk.in/sanka" + logo: "/images/aravindavk_sanka.png" + short_description: "Kannada language tools and encoding converter." + description: "Collection of tools to analyze the Kannada language text and encoding conversions. ASCII to Unicode Conversion tool is used by many organizations, and government offices and it is also used in the Alar dictionary from Zerodha (ASCII to Unicode project link mentioned in https://zerodha.tech/blog/alar-the-making-of-an-open-source-dictionary). This project also focuses on developing/maintaining fonts for the Kannada language." + - name: "Dataframes (D)" + project_link: "https://github.com/aravindavk/dataframes-d" + website_link: "https://github.com/aravindavk/dataframes-d" + logo: "/images/aravindavk_dataframes_(d).png" + short_description: "DataFrame for D programming language" + description: "This project aims to provide DataFrame to D programming similar to Python Pandas. DataFrame library helps organizations to use D programming language for analysing financial market data or other data sources." + - name: "Binnacle" + project_link: "https://github.com/aravindavk/binnacle-python" + website_link: "https://github.com/aravindavk/binnacle-python" + logo: "/images/aravindavk_binnacle.png" + short_description: "A simple imperative tool for Tests and Infra automation." + description: "Binnacle is a simple imperative tool for infrastructure and test automation. Its modern, intuitive syntax helps the admins or test case writers to get started in minutes. Use this for testing ReST APIs, command line applications or others. Binnacle also helps to write easy scripts to deploy applications or other server automation." + - name: "Gluster Metrics Exporter" + project_link: "https://github.com/kadalu/gluster-metrics-exporter" + website_link: "https://github.com/kadalu/gluster-metrics-exporter" + logo: "/images/aravindavk_gluster_metrics_exporter.png" + short_description: "Lightweight and efficient Prometheus(and JSON) exporter for Gluster metrics." + description: "[GlusterFS](https://github.com/gluster/glusterfs) is a software defined distributed storage that can scale to several petabytes. Gluster Metrics exporter project exports the metrics in Prometheus and JSON format." + - name: "Gdash" + project_link: "https://github.com/kadalu/gdash" + website_link: "https://github.com/kadalu/gdash" + logo: "/images/aravindavk_gdash.png" + short_description: "Lightweight GlusterFS dashboard." + description: "Lightweight dashboard to view the status of the [GlusterFS](https://github.com/gluster/glusterfs) cluster." +--- + +## How to support + +You can use the projects and share with others, report bugs or request for new features. PRs are welcome. + +If you use any of these projects or are interested in helping these projects, a contribution would mean A LOT to me. With your help, continuing my work can be sustainable. Thanks in advance. + +[Sponsor](https://github.com/sponsors/aravindavk) + +## A small brief about your project + +I maintain and contribute to many Open source projects along with the ones listed here. Please do visit my [Github profile](https://github.com/aravindavk) for libraries and the projects related to Kannada, Finance, D programming language and GlusterFS. + +## One FOSS maintainer lesson for your younger self + +First write the documentation of your future project and then start working on it. + +## Why do you do it? Why do you bother maintaining a FOSS project? + +I was introduced to FOSS when I joined local Linux user groups and participated in Linux install fests from 2006. I was very amazed by the idea of publishing our code for others to use and contribute. Since then, I have been contributing and maintaining many open-source projects. + +## If your repo had a theme song, what would it be? + +https://www.youtube.com/watch?v=gH_RYRwVrVM + +## Which file in your project would you most like to set on fire? + +Documentation in code and the test cases. + +## What's your open-source villain origin story? + +Don't have any! + +## If you had to use one emoji to convey what it is like to be a FOSS maintainer, what would it be? + +🐧🐧 diff --git a/site/maintainers/aryak.md b/site/maintainers/aryak.md new file mode 100644 index 0000000..4d5bf9d --- /dev/null +++ b/site/maintainers/aryak.md @@ -0,0 +1,70 @@ +--- +layout: maintainer.njk +tags: maintainer +permalink: /maintainers/aryak/ +username: aryak +full_name: Arya K. +photo: /images/aryak_photo.png +designation: Student +created_on: 2026-01-10T15:10:21.726593 +socials: + - label: GitHub + link: https://github.com/gi-yt + - label: Codeberg + link: https://codeberg.org/aryak + - label: web + link: https://aryak.me + - label: linkedin + link: https://www.linkedin.com/in/arya-kiran + - label: RSS + link: https://aryak.me/rss.xml +projects: + - name: Project Segfault + project_link: https://psf.lt + website_link: https://psf.lt + logo: /images/aryak_project_segfault.svg + short_description: Open Source Development and Hosted Services + description: We have been hosting free, privacy-respecting services for the public since 2022. We also have a pubnix, which allows people to experiment and learn more about hosting services and interaction with a linux shell/server. + - name: Mozhi + project_link: https://codeberg.org/aryak/mozhi + website_link: https://codeberg.org/aryak/mozhi + logo: /images/aryak_mozhi.png + short_description: An alternative-frontend for many translation engines + description: Initially a rewrite of simplytranslate, we are a privacy frontend that supports multiple engines including google, deepl, yandex, and duckduckgo/bing. This allows you to perform translations and gain other language-related information like synonyms without being tracked. + - name: Internet Chowkidar + project_link: https://github.com/gnulinuxindia/internet-chowkidar + website_link: https://inet.watch + logo: /images/aryak_internet_chowkidar.jpg + short_description: Crowdsourced internet-blockage monitoring. + description: Internet Chowkidar helps mitigate the problem of transparency for lakhs of activists across India, who have been trying to gain access to accurate statistics regarding the illegal blockages and censorship of websites in the country. +--- + +## How to support + +Fix issues in the projects instead of just submitting them. I can't solve every issue. + +For Project Segfault: https://psf.lt/donate + +## One FOSS maintainer lesson for your younger self + +Don't take part in more things than you can handle. + +## Why do you do it? Why do you bother maintaining a FOSS project? + +If I won't, who will? + +## If your repo had a theme song, what would it be? + +None, just silent suffering. + +## Which file in your project would you most like to set on fire? + +ci.yml + +## What's your open-source villain origin story? + +An old computer that couldn't run Windows. + +## If you had to use one emoji to convey what it is like to be a FOSS maintainer, what would it be? + +🧹 diff --git a/site/maintainers/captn3m0.md b/site/maintainers/captn3m0.md new file mode 100644 index 0000000..b39ff6e --- /dev/null +++ b/site/maintainers/captn3m0.md @@ -0,0 +1,82 @@ +--- +layout: maintainer.njk +tags: maintainer +permalink: /maintainers/captn3m0/ +username: "captn3m0" +full_name: "Nemo" +photo: "/images/captn3m0_photo.jpg" +designation: "Making and Breaking things, sometimes intentionally" +created_on: "2025-06-03T17:51:36+05:30" +socials: + - label: "GitHub" + link: "https://github.com/captn3m0" + - label: "Mastodon" + link: "https://tatooine.club/@nemo" + - label: "X" + link: "https://x.com/captn3m0" + - label: "Web" + link: "https://captnemo.in/" + - label: "RSS" + link: "https://captnemo.in/atom.xml" +projects: + - name: "endoflife.date" + project_link: "https://github.com/endoflife-date" + website_link: "https://endoflife.date/" + logo: "/images/captn3m0_endoflife.date.png" + short_description: "Informative site with EoL dates of everything" + description: "End-of-life (EOL) and support information is often hard to track, or very badly presented. endoflife.date documents EOL dates and support lifecycles for various products." + - name: "blr.today" + project_link: "https://github.com/blr-today" + website_link: "https://blr.today/" + logo: "/images/captn3m0_blr.today.png" + short_description: "This is an open-source semi-curated event calendar for Bangalore." + description: "blr.today is an open-source project by Nemo that curates events happening in Bangalore.\n\nIt curates events from multiple sources, cleans them up, then curates them further by tagging them nicely, and makes all event data available as calendars you can subscribe to." +--- + +## How to support + +1. You can help us by adding a new product - https://endoflife.date/contribute + 2. You can sponsor us via Open Collective or GitHub Sponsors at https://github.com/sponsors/endoflife-date or https://opencollective.com/endoflife-date + 3. Tell us if your organization is using the endoflife.date data or APIs - https://github.com/endoflife-date/endoflife.date/wiki/Known-Users. Drop us a mail at nemo@endoflife.date + +## A small brief about your project + +endoflife.date is an informational website that tracks support cycles and release schedules of over 340 products. + + Not all product websites can easily answer the question: "How long is this product supported?". + We track it, and showcase exact dates along with a concise summary of the release policy. + + The complete website is open-source, and we are always working to make it better. We have been doing this since 2019, as a collective effort involving over 500 contributors + +## One FOSS maintainer lesson for your younger self + +Document tribal knowledge and decision rationale, so newer maintainers can learn from previous mistakes and attempts. + +## Why do you do it? Why do you bother maintaining a FOSS project? + +Because Aaron Swartz would have loved it. + +## Which file in your project would you most like to set on fire? + +/products/omnissa-horizon. + +Broadcom recently acquired VMWare, but this acquisition did not include the VMWare End-User Computing division, which made a product called VMWare Horizon. This division was sold to a private equity firm called KKR, which renamed it to Omnissa. Since we track Horizon, I added this 600 word text to the page: +> After [Broadcom's acquisition of VMWare](https://investors.broadcom.com/news-releases/news-release-details/broadcom-completes-acquisition-vmware), +> Broadcom [divested the End-User Computing Division +> (which includes Horizon) to KKR](https://media.kkr.com/news-details/?news_id=48701629-ae4d-4d88-b1a9-90a438c6bf6c) +> and branded it as [Omnissa](https://www.omnissa.com/introducing-omnissa-the-former-vmware-end-user-computing-business/) as part of the restructuring - which is still in process. +> Omnissa and Broadcom have entered into [a reseller agreement enabling EUC to offer the "combined offering"](https://www.omnissa.com/setting-the-record-straight-euc-to-continue-to-offer-horizon-with-vsphere-and-vsan/) +> versions of Horizon SaaS and Horizon Term SKUs with vSphere Foundation for VDI. This +> [combined offering](https://kb.omnissa.com/s/article/14804) will be available +> in both Named User and Concurrent User license metrics and for 1-, 3-, and 5-year terms. +> EUC has no plans to increase Horizon list prices beyond normal annual adjustments. + +Writing the above 600 words took me roughly 3 hours, because neither of the companies involved (VMWare, KKR, Omnissa, Broadcom) make it easy to get the above information. I wouldn't still set on fire though, because this information needs to be more accessible. + +## What's your open-source villain origin story? + +The MP4 Player I owned was very slow, and Rockbox didn't support it. Rockbox was the coolest firmware, but unfortunately my device wasn't powerful enough to run it. However, there was another firmware called S1MP3 which was attempting the same, and I found refuge there. + +## If you had to use one emoji to convey what it is like to be a FOSS maintainer, what would it be? + +👾 diff --git a/site/maintainers/dalmia.md b/site/maintainers/dalmia.md new file mode 100644 index 0000000..5c2508b --- /dev/null +++ b/site/maintainers/dalmia.md @@ -0,0 +1,71 @@ +--- +layout: maintainer.njk +tags: maintainer +permalink: /maintainers/dalmia/ +username: "dalmia" +full_name: "Aman Dalmia" +photo: "/images/dalmia_photo.png" +designation: "AI engineer @ agency.fund & artpark.in" +created_on: "2026-05-30T14:26:19.545038+05:30" +socials: + - label: "GitHub" + link: "https://github.com/dalmia" + - label: "LinkedIn" + link: "https://www.linkedin.com/in/aman-dalmia" + - label: "Web" + link: "https://amandalmia.com" + - label: "Substack" + link: "https://substack.com/@amandalmia" + - label: "Medium" + link: "https://amandalmia18.medium.com/" +projects: + - name: "Calibrate" + project_link: "https://linktr.ee/calibrate_agent" + website_link: "https://calibrate.artpark.ai" + logo: "/images/dalmia_calibrate.svg" + short_description: "AI agent evaluation tool for non-profits" + description: "Most AI evaluation platforms are either too expensive, closed source or super hard to use for non-engineers. Most non-profits have very limited or no engineering capacity. Calibrate aims to democratize AI agent evaluation and empower more people to easily evaluate their AI agents. Calibrate helps you find the best speech-to-text model, text-to-speech model, and LLM for your use case, automate evaluation using LLM judges, align them with human feedback and simulate conversations with your agent to surface failure modes before deployment." + - name: "SensAI" + project_link: "https://linktr.ee/sens_ai" + website_link: "https://sensai.hyperverge.org/" + logo: "/images/dalmia_sensai.svg" + short_description: "AI-powered LMS for teachers and learners" + description: "SensAI is an AI-powered LMS that automates assessments for educators and gives personalized, real-time coaching to every learner using the socratic method to help them learn by doing, at their own pace. Originally built for the educators and learners of [HyperVerge Academy](https://academy.hyperverge.org/)." + - name: "Plio" + project_link: "https://linktr.ee/learnplio" + website_link: "https://plio.in/" + logo: "/images/dalmia_plio.svg" + short_description: "Convert youtube videos into interactive lessons" + description: "Plio helps educators convert passive youtube videos into interactive lessons by inserting questions in the middle to increase student engagement and gather rich data on how students are learning to help them improve how they teach. Originally built for the teachers and students of [Avanti Fellows](https://avantifellows.org/)." +--- + +## How to support + +- Help spread the word +- If it solves your problem, try it out and report bugs/give feedback/contribute code +- Help keep our documentation and demo videos up to date +- Refer us to relevant events/communities where this might be useful + +## A small brief about your project + +Most AI evaluation platforms are either too expensive, closed source or super hard to use for non-engineers. Calibrate aims to democratize AI agent evaluation and empower more people to easily evaluate their AI agents. Calibrate helps you find the best speech-to-text model, text-to-speech model, and LLM for your use case, automate evaluation using LLM judges, align them with human feedback and simulate conversations with your agent to surface failure modes before deployment. + +## One FOSS maintainer lesson for your younger self + +Talk more about what you have built. Spreading the word does not have to mean "bad marketing". There are people out there who might genuinely benefit from what you have built. As much as you enjoy building, you will enjoy it even more with people actually using it. Give talks, write blog posts, tell people what you have built and why. People want to hear your story. Don't be too shy or worry about taking up space! + +## Why do you do it? Why do you bother maintaining a FOSS project? + +I love building tools that help propagate the benefits of technology to people it wouldn't reach by default. Open-source is the best way for doing that since there is no monetary incentive attached. I love freedom and the ethos of open-source bleeds into my identity. I have benefitted so much from it and want to pass on the same to others who might benefit from my work. + +## If your repo had a theme song, what would it be? + +Chak lein de - Kailash Kher (Chandni Chowk to China) + +## What's your open-source villain origin story? + +I was just starting my journey in Machine Learning about a decade back. I love learning by doing and came across scikit-learn, the famous ML package, when I was looking for ways to get hands-on. I randomly picked up issues and probably asked a lot of dumb questions. But the maintainers were kind enough to help me with my doubts and guide me. Soon, after a lot of struggle, I made my first contribution. The idea of something I built getting shipped and run by millions of people across the world felt super cool and left a deep impression on me. The random act of kindness from strangers across the world who don't share anything except a passion that drives them to spend their time and energy on a shared vision, free of monetary incentives, primarily to help others, cemented open-source as an identity I wanted to imbibe. + +## If you had to use one emoji to convey what it is like to be a FOSS maintainer, what would it be? + +🥷 diff --git a/site/maintainers/knadh.md b/site/maintainers/knadh.md new file mode 100644 index 0000000..aa36d16 --- /dev/null +++ b/site/maintainers/knadh.md @@ -0,0 +1,56 @@ +--- +layout: maintainer.njk +tags: maintainer +permalink: /maintainers/knadh/ +username: knadh +full_name: Kailash Nadh +photo: /images/knadh_photo.jpg +designation: Hobbyist developer, CTO +created_on: 2025-06-03T18:14:02+05:30 +socials: + - label: GitHub + link: https://github.com/knadh/ + - label: LinkedIn + link: https://linkedin.com/in/kailashnadh + - label: Web + link: https://nadh.in/ + - label: RSS + link: https://nadh.in/index.xml +projects: + - name: DictPress + project_link: https://github.com/knadh/dictpress + website_link: https://dict.press/ + logo: /images/knadh_dictpress.svg + short_description: A stand-alone web server application for building and publishing full fledged dictionary websites and APIs for any language. + description: Build dictionaries for any language - dictpress is a free and open source, single binary webserver application for building and publishing fast, searchable dictionaries for any language. + - name: listmonk + project_link: https://github.com/knadh/listmonk + website_link: https://listmonk.app/ + logo: /images/knadh_listmonk.svg + short_description: High performance, self-hosted, newsletter and mailing list manager with a modern dashboard. Single binary app. + description: listmonk is a self-hosted, high performance one-way mailing list and newsletter manager. It comes as a standalone binary and the only dependency is a Postgres database. +--- + +## How to support + +Use dictpress to build dictionaries, glossaries etc. + +## A small brief about your project + +dictpress is a webserver application for building and publishing fast, searchable dictionaries for any language. + +## One FOSS maintainer lesson for your younger self + +Learn to say No confidently, where warranted. + +## Why do you do it? Why do you bother maintaining a FOSS project? + +I love doing it. I find it joyful and satisfying. + +## Which file in your project would you most like to set on fire? + +None. I put in effort to not have inflammable files. + +## If you had to use one emoji to convey what it is like to be a FOSS maintainer, what would it be? + +✊ diff --git a/site/maintainers/pnudupa.md b/site/maintainers/pnudupa.md new file mode 100644 index 0000000..da0580c --- /dev/null +++ b/site/maintainers/pnudupa.md @@ -0,0 +1,50 @@ +--- +layout: maintainer.njk +tags: maintainer +permalink: /maintainers/pnudupa/ +username: "pnudupa" +full_name: "Prashanth N Udupa" +photo: "/images/pnudupa_photo.jpg" +designation: "Creator, Scrite" +created_on: "2025-06-04T16:06:02+05:30" +socials: + - label: "GitHub" + link: "https://github.com/pnudupa" + - label: "LinkedIn" + link: "https://www.linkedin.com/in/praud/" + - label: "Web" + link: "https://www.prashanthudupa.com/" + - label: "RSS" + link: "https://www.prashanthudupa.com/feed" +projects: + - name: "Scrite" + project_link: "https://github.com/teriflix/scrite" + website_link: "https://www.scrite.io/" + logo: "/images/pnudupa_scrite.png" + short_description: "Multilingual Screenwriting App for Mac and PC" + description: "Scrite is open-source multi-lingual screenwriting app, that lets you write your films better. With support for industry standard formatting, visual mapping of screenplay structures, elaborate research & note-taking features and a comprehensive set of pre-production reports, Scrite is a great place to start writing your next screenplay, or even import & continue working on your existing ones." +--- + +## How to support + +Spread the word—invite filmmakers to try the app, share video reviews, contribute guides or code, and join our Discord to help new users. + +## A small brief about your project + +Scrite is a screenwriting software designed for Indian languages, enabling writers to create professionally formatted scripts, visually structure stories, refine narratives with ease, and generate detailed pre-production reports. + +## One FOSS maintainer lesson for your younger self + +You don't have to respond to everything immediately. Breathe. Relax. Take your time. + +## Why do you do it? Why do you bother maintaining a FOSS project? + +I love watching films, and it’s exciting to know that many of them are now being written using Scrite. + +## If your repo had a theme song, what would it be? + +Not sure if this can be a theme song, but this is one song that got me through a lot of coding in Scrite. I have no idea why. Its my go-to song to unlock the mood to build long and elaborate stuff in the app: https://music.youtube.com/watch?v=jt96zlTUyLQ + +## If you had to use one emoji to convey what it is like to be a FOSS maintainer, what would it be? + +🙏 diff --git a/site/maintainers/ravidwivedi.md b/site/maintainers/ravidwivedi.md new file mode 100644 index 0000000..03b7c2a --- /dev/null +++ b/site/maintainers/ravidwivedi.md @@ -0,0 +1,50 @@ +--- +layout: maintainer.njk +tags: maintainer +permalink: /maintainers/ravidwivedi/ +username: "ravidwivedi" +full_name: "Ravi Dwivedi" +photo: "/images/ravidwivedi_photo.jpg" +designation: "" +created_on: "2025-06-05T07:53:26+05:30" +socials: + - label: "Codeberg" + link: "https://codeberg.org/ravidwivedi" + - label: "Mastodon" + link: "https://toot.io/@ravi" + - label: "Web" + link: "https://ravidwivedi.in" + - label: "RSS" + link: "https://ravidwivedi.in/posts/index.xml" +projects: + - name: "Prav" + project_link: "https://codeberg.org/prav" + website_link: "https://prav.app/" + logo: "/images/ravidwivedi_prav.png" + short_description: "Prav is a messaging service which can be used to exchange messages, audio/video calls, files, images and videos over the Internet. Inspired by the Quicksy app, Prav provides the convenience of registering with a phone number." + description: "Popular messaging apps only allow you to talk to users using the same app. However, Prav allows you to talk to all the users on the same network even if they use other apps like Quicksy, Monocles Chat, Dino, Gajim, Monal, and many more. In other words, Prav has no vendor lock-in. Lastly, Prav is a cooperative (in the process of registration) which allows anyone to become a member and vote on decisions, such as the privacy policy or what features should be added." +--- + +## How to support + +By installing Prav app (check https://prav.app), sending donations https://prav.app/donate , volunteering (https://prav.app/get-involved/) or by becoming a member of the cooperative https://prav.app/become-a-member/ + +## A small brief about your project + +Prav is a messaging service which can be used to exchange messages, audio/video calls, files, images and videos over the Internet. Inspired by the Quicksy app, Prav provides the convenience of registering with a phone number. It is federated with other XMPP providers, while at the same time easy to use. + +## One FOSS maintainer lesson for your younger self + +Help run community-run services instead of self-hosting a lot of services on your own. + +## Why do you do it? Why do you bother maintaining a FOSS project? + +I think Prav project is doing what no other project is doing - mass adoption of a federated XMPP service with convenient onboarding process. I also feel ownership and responsibility towards the project. Mass adoption of messaging services is important because messaging services are based on network effects. Otherwise, I would myself need to use proprietary services for chatting. + +## If your repo had a theme song, what would it be? + +Frolic by Luciano Michelini + +## If you had to use one emoji to convey what it is like to be a FOSS maintainer, what would it be? + +🐦(Pigeon) diff --git a/site/package.json b/site/package.json new file mode 100644 index 0000000..1994f50 --- /dev/null +++ b/site/package.json @@ -0,0 +1,11 @@ +{ + "private": true, + "type": "module", + "scripts": { + "build": "cd .. && site/node_modules/.bin/eleventy", + "serve": "cd .. && site/node_modules/.bin/eleventy --serve" + }, + "devDependencies": { + "@11ty/eleventy": "^3.1.6" + } +} diff --git a/site/yarn.lock b/site/yarn.lock new file mode 100644 index 0000000..80bc6ad --- /dev/null +++ b/site/yarn.lock @@ -0,0 +1,868 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@11ty/dependency-tree-esm@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@11ty/dependency-tree-esm/-/dependency-tree-esm-2.0.4.tgz#447cb7916766e1ec4f14030efd717bf412fb9002" + integrity sha512-MYKC0Ac77ILr1HnRJalzKDlb9Z8To3kXQCltx299pUXXUFtJ1RIONtULlknknqW8cLe19DLVgmxVCtjEFm7h0A== + dependencies: + "@11ty/eleventy-utils" "^2.0.7" + acorn "^8.15.0" + dependency-graph "^1.0.0" + normalize-path "^3.0.0" + +"@11ty/dependency-tree@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@11ty/dependency-tree/-/dependency-tree-4.0.2.tgz#d3a9343e149b5f0f67a8cf80f458dfb974d77be0" + integrity sha512-RTF6VTZHatYf7fSZBUN3RKwiUeJh5dhWV61gDPrHhQF2/gzruAkYz8yXuvGLx3w3ZBKreGrR+MfYpSVkdbdbLA== + dependencies: + "@11ty/eleventy-utils" "^2.0.1" + +"@11ty/eleventy-dev-server@^2.0.8": + version "2.0.8" + resolved "https://registry.yarnpkg.com/@11ty/eleventy-dev-server/-/eleventy-dev-server-2.0.8.tgz#0986a33416fdf95aa21f98ce1608137ce3f15c05" + integrity sha512-15oC5M1DQlCaOMUq4limKRYmWiGecDaGwryr7fTE/oM9Ix8siqMvWi+I8VjsfrGr+iViDvWcH/TVI6D12d93mA== + dependencies: + "@11ty/eleventy-utils" "^2.0.1" + chokidar "^3.6.0" + debug "^4.4.0" + finalhandler "^1.3.1" + mime "^3.0.0" + minimist "^1.2.8" + morphdom "^2.7.4" + please-upgrade-node "^3.2.0" + send "^1.1.0" + ssri "^11.0.0" + urlpattern-polyfill "^10.0.0" + ws "^8.18.1" + +"@11ty/eleventy-plugin-bundle@^3.0.7": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@11ty/eleventy-plugin-bundle/-/eleventy-plugin-bundle-3.0.7.tgz#1ec9b950659ed252b4416c5552bf029cc5c31f95" + integrity sha512-QK1tRFBhQdZASnYU8GMzpTdsMMFLVAkuU0gVVILqNyp09xJJZb81kAS3AFrNrwBCsgLxTdWHJ8N64+OTTsoKkA== + dependencies: + "@11ty/eleventy-utils" "^2.0.2" + debug "^4.4.0" + posthtml-match-helper "^2.0.3" + +"@11ty/eleventy-utils@^2.0.1", "@11ty/eleventy-utils@^2.0.2", "@11ty/eleventy-utils@^2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@11ty/eleventy-utils/-/eleventy-utils-2.0.7.tgz#40fa604864d64e98412f4f068a34379b471beddd" + integrity sha512-6QE+duqSQ0GY9rENXYb4iPR4AYGdrFpqnmi59tFp9VrleOl0QSh8VlBr2yd6dlhkdtj7904poZW5PvGr9cMiJQ== + +"@11ty/eleventy@^3.1.6": + version "3.1.6" + resolved "https://registry.yarnpkg.com/@11ty/eleventy/-/eleventy-3.1.6.tgz#27d581de3c59b8598ef2e1c6eb8472cadd31cfd1" + integrity sha512-ZlSiR1PLdS2lv7TelBgWAhcvMiLNZkPBlLEb+lh7kGYZ+Mk0bo9qcYgVsewvw9W7Em0RH3wd01h5fAstNDh0zA== + dependencies: + "@11ty/dependency-tree" "^4.0.2" + "@11ty/dependency-tree-esm" "^2.0.4" + "@11ty/eleventy-dev-server" "^2.0.8" + "@11ty/eleventy-plugin-bundle" "^3.0.7" + "@11ty/eleventy-utils" "^2.0.7" + "@11ty/lodash-custom" "^4.17.21" + "@11ty/posthtml-urls" "^1.0.3" + "@11ty/recursive-copy" "^4.0.4" + "@sindresorhus/slugify" "^2.2.1" + bcp-47-normalize "^2.3.0" + chokidar "^3.6.0" + debug "^4.4.3" + dependency-graph "^1.0.0" + entities "^6.0.1" + filesize "^10.1.6" + gray-matter "^4.0.3" + iso-639-1 "^3.1.5" + js-yaml "^4.1.1" + kleur "^4.1.5" + liquidjs "^10.27.0" + luxon "^3.7.2" + markdown-it "^14.2.0" + minimist "^1.2.8" + moo "0.5.2" + node-retrieve-globals "^6.0.1" + nunjucks "^3.2.4" + picomatch "^4.0.4" + please-upgrade-node "^3.2.0" + posthtml "^0.16.7" + posthtml-match-helper "^2.0.3" + semver "^7.8.1" + slugify "^1.6.9" + tinyglobby "^0.2.16" + +"@11ty/lodash-custom@^4.17.21": + version "4.17.21" + resolved "https://registry.yarnpkg.com/@11ty/lodash-custom/-/lodash-custom-4.17.21.tgz#a8d2e25a47ee3bb58b71cde4edc2ae8dd3d1b269" + integrity sha512-Mqt6im1xpb1Ykn3nbcCovWXK3ggywRJa+IXIdoz4wIIK+cvozADH63lexcuPpGS/gJ6/m2JxyyXDyupkMr5DHw== + +"@11ty/posthtml-urls@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@11ty/posthtml-urls/-/posthtml-urls-1.0.3.tgz#68b4877dd0e41c7fcfb7b307d6b9fa9195b0da58" + integrity sha512-1YvhnkaNlFnnJic1rBMWmTC2adbuy+JQiBfl1Hecr1Wjjik1pQZmGyk/eC9zKX/FQv52s2Nht1Gi/UwhYqrBeg== + dependencies: + evaluate-value "^2.0.0" + http-equiv-refresh "^2.0.1" + list-to-array "^1.1.0" + parse-srcset "^1.0.2" + +"@11ty/recursive-copy@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@11ty/recursive-copy/-/recursive-copy-4.0.4.tgz#1655eaf0846a0b803fbe061cf9288c4a804b4219" + integrity sha512-oI7m8pa7/IAU/3lqRU9vjBbs20iKFo7x+1K9kT3aVira6scc1X9MjBdgLCHzLJeJ7iB6wydioA+kr9/qPnvmlQ== + dependencies: + errno "^1.0.0" + junk "^3.1.0" + minimatch "^3.1.5" + slash "^3.0.0" + +"@sindresorhus/slugify@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@sindresorhus/slugify/-/slugify-2.2.1.tgz#fa2e2e25d6e1e74a2eeb5e2c37f5ccc516ed2c4b" + integrity sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw== + dependencies: + "@sindresorhus/transliterate" "^1.0.0" + escape-string-regexp "^5.0.0" + +"@sindresorhus/transliterate@^1.0.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/transliterate/-/transliterate-1.6.0.tgz#2309fff65a868047e6d2dd70dec747c5b36a8327" + integrity sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ== + dependencies: + escape-string-regexp "^5.0.0" + +a-sync-waterfall@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz#75b6b6aa72598b497a125e7a2770f14f4c8a1fa7" + integrity sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA== + +acorn-walk@^8.3.4: + version "8.3.5" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.5.tgz#8a6b8ca8fc5b34685af15dabb44118663c296496" + integrity sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw== + dependencies: + acorn "^8.11.0" + +acorn@^8.11.0, acorn@^8.14.1, acorn@^8.15.0: + version "8.17.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.17.0.tgz#1785adb84faf8d8add10369b93826fc2bd08f1fe" + integrity sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +asap@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +bcp-47-match@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/bcp-47-match/-/bcp-47-match-2.0.3.tgz#603226f6e5d3914a581408be33b28a53144b09d0" + integrity sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ== + +bcp-47-normalize@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/bcp-47-normalize/-/bcp-47-normalize-2.3.0.tgz#00f7de9dfdd0f6901c048083be5ac60903bf4f7a" + integrity sha512-8I/wfzqQvttUFz7HVJgIZ7+dj3vUaIyIxYXaTRP1YWoSDfzt6TUmxaKZeuXR62qBmYr+nvuWINFRl6pZ5DlN4Q== + dependencies: + bcp-47 "^2.0.0" + bcp-47-match "^2.0.0" + +bcp-47@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bcp-47/-/bcp-47-2.1.1.tgz#f3e90d378b21aa1dba6db3845dbcd95bbf1daaaa" + integrity sha512-KLw+H/gd2p4zly1X7Yh/qziuyae5/w/QFnvTng9eZL5fvszL7Whl3MBoWF8yxL7ksUjBfOD+OxkytiqbBpG+Fw== + dependencies: + is-alphabetical "^2.0.0" + is-alphanumerical "^2.0.0" + is-decimal "^2.0.0" + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +brace-expansion@^1.1.7: + version "1.1.15" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.15.tgz#a6d90d54067236e5f42570a3b7378d594d9b7738" + integrity sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +chokidar@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +commander@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^4.4.0, debug@^4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + +depd@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +dependency-graph@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-1.0.0.tgz#bb5e85aec1310bc13b22dbd76e3196c4ee4c10d2" + integrity sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg== + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^4.2.0, domhandler@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +encodeurl@^2.0.0, encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +entities@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" + integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== + +entities@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +entities@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-6.0.1.tgz#c28c34a43379ca7f61d074130b2f5f7020a30694" + integrity sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g== + +errno@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/errno/-/errno-1.0.0.tgz#0ea47d701864accf996412f09e29b4dc2cf3856d" + integrity sha512-3zV5mFS1E8/1bPxt/B0xxzI1snsg3uSCIh6Zo1qKg6iMw93hzPANk9oBFzSFBFrwuVoQuE3rLoouAUfwOAj1wQ== + dependencies: + prr "~1.0.1" + +escape-html@^1.0.3, escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + +esm-import-transformer@^3.0.3: + version "3.0.5" + resolved "https://registry.yarnpkg.com/esm-import-transformer/-/esm-import-transformer-3.0.5.tgz#ad66aa1bd94e85fc655f1f354978846af173e107" + integrity sha512-1GKLvfuMnnpI75l8c6sHoz0L3Z872xL5akGuBudgqTDPv4Vy6f2Ec7jEMKTxlqWl/3kSvNbHELeimJtnqgYniw== + dependencies: + acorn "^8.15.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +etag@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +evaluate-value@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/evaluate-value/-/evaluate-value-2.0.0.tgz#bb7169ab4a49fb76b7ab5631c7d327797fd8e65f" + integrity sha512-VonfiuDJc0z4sOO7W0Pd130VLsXN6vmBWZlrog1mCb/o7o/Nl5Lr25+Kj/nkCCAhG+zqeeGjxhkK9oHpkgTHhQ== + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + +filesize@^10.1.6: + version "10.1.6" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-10.1.6.tgz#31194da825ac58689c0bce3948f33ce83aabd361" + integrity sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w== + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.2.tgz#1ebc2228fc7673aac4a472c310cc05b77d852b88" + integrity sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg== + dependencies: + debug "2.6.9" + encodeurl "~2.0.0" + escape-html "~1.0.3" + on-finished "~2.4.1" + parseurl "~1.3.3" + statuses "~2.0.2" + unpipe "~1.0.0" + +fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4" + integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +gray-matter@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" + integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== + dependencies: + js-yaml "^3.13.1" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + +htmlparser2@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-7.2.0.tgz#8817cdea38bbc324392a90b1990908e81a65f5a5" + integrity sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.2" + domutils "^2.8.0" + entities "^3.0.1" + +http-equiv-refresh@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/http-equiv-refresh/-/http-equiv-refresh-2.0.1.tgz#2816aee5ccce42734a13ecfe79dacc0db29c39b1" + integrity sha512-XJpDL/MLkV3dKwLzHwr2dY05dYNfBNlyPu4STQ8WvKCFdc6vC5tPXuq28of663+gHVg03C+16pHHs/+FmmDjcw== + +http-errors@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" + integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== + dependencies: + depd "~2.0.0" + inherits "~2.0.4" + setprototypeof "~1.2.0" + statuses "~2.0.2" + toidentifier "~1.0.1" + +inherits@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-alphabetical@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b" + integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== + +is-alphanumerical@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875" + integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== + dependencies: + is-alphabetical "^2.0.0" + is-decimal "^2.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-decimal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7" + integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== + +is-extendable@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-json@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-json/-/is-json-2.0.1.tgz#6be166d144828a131d686891b983df62c39491ff" + integrity sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +iso-639-1@^3.1.5: + version "3.1.6" + resolved "https://registry.yarnpkg.com/iso-639-1/-/iso-639-1-3.1.6.tgz#19f3edfc0ad105fe5d6b95c24572142ec4332141" + integrity sha512-ZFar/L4ngX7wZh2QX+Fiftmuf0igWJsrJtfizrovWifF1gAWkfmRa5Z1m0LQZbm0hKCHRDYhLRSLFrSqNe4EJA== + +js-yaml@^3.13.1: + version "3.15.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.15.0.tgz#586e5214eafe3e893756a41e979b50d89d3e4a67" + integrity sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.3.0.tgz#d1900572a7f7cf0b5f540c83673e60bad3436592" + integrity sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q== + dependencies: + argparse "^2.0.1" + +junk@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1" + integrity sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== + +linkify-it@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-5.0.2.tgz#d3be0a693af3da9df3883f1e346a0e97461a8c19" + integrity sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q== + dependencies: + uc.micro "^2.0.0" + +liquidjs@^10.27.0: + version "10.27.1" + resolved "https://registry.yarnpkg.com/liquidjs/-/liquidjs-10.27.1.tgz#4cd3ac2a8590bae0d415572161978b26f72e944b" + integrity sha512-ylE+1q2kSef1UxAyxqbyuWM3FRWS1v48JK1Y3CoW3bD6TSNXZh0+GsVnihujEpKyR+Jejx2aRAFfC3AHm9rElg== + dependencies: + commander "^10.0.0" + +list-to-array@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/list-to-array/-/list-to-array-1.1.0.tgz#ca7dff640606433cac75cbe8446acd864b15bf6f" + integrity sha512-+dAZZ2mM+/m+vY9ezfoueVvrgnHIGi5FvgSymbIgJOFwiznWyA59mav95L+Mc6xPtL3s9gm5eNTlNtxJLbNM1g== + +luxon@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.7.2.tgz#d697e48f478553cca187a0f8436aff468e3ba0ba" + integrity sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew== + +markdown-it@^14.2.0: + version "14.3.0" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-14.3.0.tgz#8542fa5506e3530f7e2b08dc3885630135c5620e" + integrity sha512-RCEsPjR+sr0x+AuYp601tKTkgFG4YEPLCzHST3cQ/fhlJkqAkz1L2/Qbp1j9qw5SBwQHFBoW8+hoN5xssOF0Tw== + dependencies: + argparse "^2.0.1" + entities "^4.5.0" + linkify-it "^5.0.2" + mdurl "^2.0.0" + punycode.js "^2.3.1" + uc.micro "^2.1.0" + +mdurl@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-2.0.0.tgz#80676ec0433025dd3e17ee983d0fe8de5a2237e0" + integrity sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w== + +mime-db@^1.54.0: + version "1.54.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" + integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== + +mime-types@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.2.tgz#39002d4182575d5af036ffa118100f2524b2e2ab" + integrity sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A== + dependencies: + mime-db "^1.54.0" + +mime@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" + integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== + +minimatch@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e" + integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass@^7.0.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.3.tgz#79389b4eb1bb2d003a9bba87d492f2bd37bdc65b" + integrity sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A== + +moo@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.2.tgz#f9fe82473bc7c184b0d32e2215d3f6e67278733c" + integrity sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q== + +morphdom@^2.7.4: + version "2.7.8" + resolved "https://registry.yarnpkg.com/morphdom/-/morphdom-2.7.8.tgz#9a81aae144136702d58cfae8226470bfd64fe74c" + integrity sha512-D/fR4xgGUyVRbdMGU6Nejea1RFzYxYtyurG4Fbv2Fi/daKlWKuXGLOdXtl+3eIwL110cI2hz1ZojGICjjFLgTg== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +node-retrieve-globals@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/node-retrieve-globals/-/node-retrieve-globals-6.0.1.tgz#7c2559304c292d627646bc4494cdcece5c55879e" + integrity sha512-j0DeFuZ/Wg3VlklfbxUgZF/mdHMTEiEipBb3q0SpMMbHaV3AVfoUQF8UGxh1s/yjqO0TgRZd4Pi/x2yRqoQ4Eg== + dependencies: + acorn "^8.14.1" + acorn-walk "^8.3.4" + esm-import-transformer "^3.0.3" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +nunjucks@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/nunjucks/-/nunjucks-3.2.4.tgz#f0878eef528ce7b0aa35d67cc6898635fd74649e" + integrity sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ== + dependencies: + a-sync-waterfall "^1.0.0" + asap "^2.0.3" + commander "^5.1.0" + +on-finished@^2.4.1, on-finished@~2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +parse-srcset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1" + integrity sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q== + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.2.tgz#5a942915e26b372dc0f0e6753149a16e6b1c5601" + integrity sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA== + +picomatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.5.tgz#51ea57a17d86f605f81039595fbc40ed06a55fab" + integrity sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A== + +please-upgrade-node@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" + integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== + dependencies: + semver-compare "^1.0.0" + +posthtml-match-helper@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/posthtml-match-helper/-/posthtml-match-helper-2.0.3.tgz#04afcadd3a3306bf0445b6d6ead79d4e4083c6d6" + integrity sha512-p9oJgTdMF2dyd7WE54QI1LvpBIkNkbSiiECKezNnDVYhGhD1AaOnAkw0Uh0y5TW+OHO8iBdSqnd8Wkpb6iUqmw== + +posthtml-parser@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/posthtml-parser/-/posthtml-parser-0.11.0.tgz#25d1c7bf811ea83559bc4c21c189a29747a24b7a" + integrity sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw== + dependencies: + htmlparser2 "^7.1.1" + +posthtml-render@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/posthtml-render/-/posthtml-render-3.0.0.tgz#97be44931496f495b4f07b99e903cc70ad6a3205" + integrity sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA== + dependencies: + is-json "^2.0.1" + +posthtml@^0.16.7: + version "0.16.7" + resolved "https://registry.yarnpkg.com/posthtml/-/posthtml-0.16.7.tgz#6010a59633c7190b38cbfee40562accbdb861464" + integrity sha512-7Hc+IvlQ7hlaIfQFZnxlRl0jnpWq2qwibORBhQYIb0QbNtuicc5ZxvKkVT71HJ4Py1wSZ/3VR1r8LfkCtoCzhw== + dependencies: + posthtml-parser "^0.11.0" + posthtml-render "^3.0.0" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== + +punycode.js@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.3.1.tgz#6b53e56ad75588234e79f4affa90972c7dd8cdb7" + integrity sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA== + +range-parser@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.3.0.tgz#d7f19be812bb62721472b45d3be219ef09572b47" + integrity sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw== + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== + +semver@^7.8.1: + version "7.8.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.8.5.tgz#39b646037dd50c14fb451e7e4cac58ed8b863f69" + integrity sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA== + +send@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/send/-/send-1.2.1.tgz#9eab743b874f3550f40a26867bf286ad60d3f3ed" + integrity sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ== + dependencies: + debug "^4.4.3" + encodeurl "^2.0.0" + escape-html "^1.0.3" + etag "^1.8.1" + fresh "^2.0.0" + http-errors "^2.0.1" + mime-types "^3.0.2" + ms "^2.1.3" + on-finished "^2.4.1" + range-parser "^1.2.1" + statuses "^2.0.2" + +setprototypeof@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slugify@^1.6.9: + version "1.6.9" + resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.9.tgz#610957dea21e56b65e3a153215ef7b265715c8e8" + integrity sha512-vZ7rfeehZui7wQs438JXBckYLkIIdfHOXsaVEUMyS5fHo1483l1bMdo0EDSWYclY0yZKFOipDy4KHuKs6ssvdg== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +ssri@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-11.0.0.tgz#ab39fc4382264839d1803ee7c53d00e5fa467739" + integrity sha512-aZpUoMN/Jj2MqA4vMCeiKGnc/8SuSyHbGSBdgFbZxP8OJGF/lFkIuElzPxsN0q8TQQ+prw3P4EDfB3TBHHgfXw== + dependencies: + minipass "^7.0.3" + +statuses@^2.0.2, statuses@~2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" + integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== + +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== + +tinyglobby@^0.2.16: + version "0.2.17" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.17.tgz#562a9a6c9eb2b3b123d39719f9af5bb44fcd7631" + integrity sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g== + dependencies: + fdir "^6.5.0" + picomatch "^4.0.4" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +uc.micro@^2.0.0, uc.micro@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee" + integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A== + +unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +urlpattern-polyfill@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz#1b2517e614136c73ba32948d5e7a3a063cba8e74" + integrity sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw== + +ws@^8.18.1: + version "8.21.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.21.0.tgz#012e413fc07429945121b0c153158c4343086951" + integrity sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==