[GH-ISSUE #3642] Differentiating Unmainatined Repos #11236

Open
opened 2026-04-21 14:22:34 -05:00 by GiteaMirror · 16 comments
Owner

Originally created by @uzzy-buzzy on GitHub (Sep 14, 2025).
Original GitHub issue: https://github.com/sindresorhus/awesome/issues/3642

A lot of the repos here are unmaintained, it would be nice to have some sort of indicator for that

Originally created by @uzzy-buzzy on GitHub (Sep 14, 2025). Original GitHub issue: https://github.com/sindresorhus/awesome/issues/3642 A lot of the repos here are unmaintained, it would be nice to have some sort of indicator for that
Author
Owner

@tvorogec2009-code commented on GitHub (Oct 10, 2025):

import memoize from '@github/memoize'
import {getEnv} from '@github-ui/client-env'
import {IS_SERVER} from '@github-ui/ssr-utils'
import type {JSFeatureFlag} from './client-feature-flags'

function getEnabledFeaturesSet() {
return new Set(getEnv().featureFlags as JSFeatureFlag[])
}

const featuresSet =
IS_SERVER || process.env.NODE_ENV === 'test' || isStorybook() ? getEnabledFeaturesSet : memoize(getEnabledFeaturesSet)

export function getEnabledFeatures(): JSFeatureFlag[] {
return Array.from(featuresSet())
}

/**

// exported to allow mocking in tests
const featureFlag = {isFeatureEnabled}

export {featureFlag}

function isStorybook() {
try {
return process?.env?.STORYBOOK === 'true' || process?.env?.APP_ENV === 'storybook'
} catch {
return false
}
} In our code that we are doing here, an error occurs try {
return process?.env?.STORYBOOK === 'true' || process?.env?.APP_ENV === 'storybook'
} catch {
return false
} it says that something went wrong and that's why it doesn't work, your task will be to rewrite the code and make it work, then I can upload it to the page.

<!-- gh-comment-id:3389177489 --> @tvorogec2009-code commented on GitHub (Oct 10, 2025): import memoize from '@github/memoize' import {getEnv} from '@github-ui/client-env' import {IS_SERVER} from '@github-ui/ssr-utils' import type {JSFeatureFlag} from './client-feature-flags' function getEnabledFeaturesSet() { return new Set(getEnv().featureFlags as JSFeatureFlag[]) } const featuresSet = IS_SERVER || process.env.NODE_ENV === 'test' || isStorybook() ? getEnabledFeaturesSet : memoize(getEnabledFeaturesSet) export function getEnabledFeatures(): JSFeatureFlag[] { return Array.from(featuresSet()) } /** * This function accesses feature flag states which have been loaded into the client env via the `client-feature-flags.ts` file. * See https://thehub.github.com/epd/engineering/products-and-services/dotcom/features/feature-flags/typescript-frontend * for more details. * * If you're trying to check a feature flag that was added to the `enabled_features` of a React payload via `add_client_feature_flag` in a * Rails controller, you should use the `useFeatureFlag` hook (from `@github-ui/react-core/use-feature-flag`) instead to access the feature flag state. * https://thehub.github.com/epd/engineering/products-and-services/dotcom/features/feature-flags/typescript-frontend has * more information on `useFeatureFlag` and `add_client_feature_flag`. */ export function isFeatureEnabled(name: JSFeatureFlag): boolean { return featuresSet().has(name) } // exported to allow mocking in tests const featureFlag = {isFeatureEnabled} export {featureFlag} function isStorybook() { try { return process?.env?.STORYBOOK === 'true' || process?.env?.APP_ENV === 'storybook' } catch { return false } } In our code that we are doing here, an error occurs try { return process?.env?.STORYBOOK === 'true' || process?.env?.APP_ENV === 'storybook' } catch { return false } it says that something went wrong and that's why it doesn't work, your task will be to rewrite the code and make it work, then I can upload it to the page.
Author
Owner

@tvorogec2009-code commented on GitHub (Oct 10, 2025):

Where and what repositories.

<!-- gh-comment-id:3389183614 --> @tvorogec2009-code commented on GitHub (Oct 10, 2025): Where and what repositories.
Author
Owner

@rubydagrim commented on GitHub (Oct 11, 2025):

Seriously what share the

B•Gresham

On Fri, Oct 10, 2025 at 5:08 AM tvorogec2009-code @.***>
wrote:

tvorogec2009-code left a comment (sindresorhus/awesome#3642)
https://github.com/sindresorhus/awesome/issues/3642#issuecomment-3389183614

Where and what repositories.


Reply to this email directly, view it on GitHub
https://github.com/sindresorhus/awesome/issues/3642#issuecomment-3389183614,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/BYQKTRMMEH2QWMWG7DZUSZ33W6AR3AVCNFSM6AAAAACGOSD24WVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZTGOBZGE4DGNRRGQ
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>

<!-- gh-comment-id:3393362649 --> @rubydagrim commented on GitHub (Oct 11, 2025): Seriously what share the B•Gresham On Fri, Oct 10, 2025 at 5:08 AM tvorogec2009-code ***@***.***> wrote: > *tvorogec2009-code* left a comment (sindresorhus/awesome#3642) > <https://github.com/sindresorhus/awesome/issues/3642#issuecomment-3389183614> > > Where and what repositories. > > — > Reply to this email directly, view it on GitHub > <https://github.com/sindresorhus/awesome/issues/3642#issuecomment-3389183614>, > or unsubscribe > <https://github.com/notifications/unsubscribe-auth/BYQKTRMMEH2QWMWG7DZUSZ33W6AR3AVCNFSM6AAAAACGOSD24WVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZTGOBZGE4DGNRRGQ> > . > You are receiving this because you are subscribed to this thread.Message > ID: ***@***.***> >
Author
Owner

@uzzy-buzzy commented on GitHub (Oct 14, 2025):

@tvorogec2009-code sorry but I have no clue what u just said

<!-- gh-comment-id:3402755656 --> @uzzy-buzzy commented on GitHub (Oct 14, 2025): @tvorogec2009-code sorry but I have no clue what u just said
Author
Owner

@yahyagokmen51-ship-it commented on GitHub (Oct 30, 2025):

<html> <head> <script> function myFunction() { document.getElementById("demo").innerHTML = "slm; } </script> </head>

Script in head tag

nbr

Try it </html> <html lang="tr"> <head> <style> body { display: flex; flex-direction: column; justify-content: center; align-items: center; height: 100vh; margin: 0; /* Renkli Arka Plan */ background: linear-gradient(135deg, #ff9a9e 0%, #fad0c4 100%); font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; text-align: center; overflow: hidden; } #soru { font-size: 2.5em; margin-bottom: 40px; color: #444; text-shadow: 1px 1px 2px rgba(255, 255, 255, 0.5); z-index: 1; } #resim { /* Eğer resim kullanmak isterseniz bu kısmı açabilirsiniz */ /* margin-bottom: 30px; width: 80%; max-width: 500px; border-radius: 10px; box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2); z-index: 1; */ display: none; /* Bu örnekte resmi gizledik, isterseniz kaldırabilirsiniz */ } .cevap-butonu { padding: 15px 30px; margin: 10px; font-size: 1.3em; cursor: pointer; border: 2px solid #fff; border-radius: 50px; /* Yuvarlak butonlar */ transition: all 0.3s ease; font-weight: bold; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2); z-index: 100; } #evetBtn { background-color: #00b894; /* Turkuaz/Canlı Yeşil */ color: white; } #evetBtn:hover { transform: scale(1.05); background-color: #00a082; } #hayirBtn { background-color: #ff6b6b; /* Canlı Kırmızı */ color: white; position: absolute; /* Yer değiştirme için mutlak konumlandırma */ transition: transform 0.1s ease-out; /* Hızlı hareket */ } #mesaj-alani { position: fixed; top: 0; left: 0; width: 95%; height: 100%; display: none; flex-direction: column; justify-content: center; align-items: center; background-color: rgba(255, 255, 255, 0.95); /* Yarı saydam beyaz */ z-index: 999; } #sonMesaj { font-size: 3em; color: #e84393; /* Canlı Pembe */ text-align: center; padding: 20px; border-radius: 15px; background-color: #fff; box-shadow: 0 0 30px rgba(255, 105, 180, 0.6); animation: bounceIn 1s forwards; }
    /* Kalp ve Animasyonlar */
    .kalp {
        position: absolute;
        font-size: 4em;
        color: #ff6b6b; 
        animation: float 4s ease-in forwards;
        opacity: 0;
    }

    @keyframes bounceIn {
        0% { transform: scale(0.5); opacity: 0; }
        95% { transform: scale(1); opacity: 1; }
    }
    @keyframes float {
        0% { transform: translateY(0) rotate(0deg); opacity: 1; }
        100% { transform: translateY(-500px) rotate(30deg); opacity: 0; }
    }
</style>
</head>
<div id="soru">Benimle date'e çikarmısın👉👈?</div>

<div id="butonlar" style="position: relative; width: 80vw; height: 100px; display: flex; justify-content: center; align-items: center;">
    <button id="evetBtn" class="cevap-butonu" onclick="evetCevabi()">EVET</button>
    <button id="hayirBtn" class="cevap-butonu" onclick="hayirCevabi()">HAYIR</button>
</div>

<div id="mesaj-alani">
    <div id="sonMesaj"></div>
</div>

<script>
    const hayirBtn = document.getElementById('hayirBtn');
    const evetBtn = document.getElementById('evetBtn');
    const mesajAlani = document.getElementById('mesaj-alani');
    const sonMesajDiv = document.getElementById('sonMesaj');
    const body = document.body;
    const butonlarDiv = document.getElementById('butonlar');

    // "Hayır" butonuna tıklandığında çalışan fonksiyon
    function hayirCevabi() {
        // Butonun bulunduğu 'butonlar' div'inin boyutlarını al
        const containerRect = butonlarDiv.getBoundingClientRect();
        const btnRect = hayirBtn.getBoundingClientRect();

        // Yeni rastgele x ve y pozisyonları hesapla
        // Yeni konum, butonlar div'inin sınırları içinde kalmalı
        const maxX = containerRect.width - btnRect.width;
        const maxY = containerRect.height - btnRect.height;
        
        // Rastgele pozisyonları hesapla (0'dan maxX/maxY'a kadar)
        const newX = Math.random() * maxX; 
        const newY = Math.random() * maxY;
        
        // Butonu yeni konuma taşı (css transform kullanmak daha akıcıdır)
        // Butonun yer değiştirme animasyonu kısa ve hızlı görünecektir.
        hayirBtn.style.transform = `translate(${newX}px, ${newY}px)`;
    }

    // Kalp animasyonu oluşturan fonksiyon
    function kalpOlustur(sayi) {
        for (let i = 0; i < sayi; i++) {
            const kalp = document.createElement('div');
            kalp.textContent = '🫶';
            kalp.className = 'kalp';
            
            // Kalp başlangıç pozisyonunu rastgele ayarla
            kalp.style.left = Math.random() * 100 + 'vw';
            kalp.style.bottom = '-50px'; // Ekranın altından başlasın
            kalp.style.animationDelay = Math.random() * 1 + 's'; // Rastgele gecikme

            mesajAlani.appendChild(kalp);
        }
    }

    // "Evet" butonuna basıldığında çalışan fonksiyon
    function evetCevabi() {
        // Butonları ve soruyu gizle
        evetBtn.style.display = 'none';
        hayirBtn.style.display = 'none';
        document.getElementById('soru').style.display = 'none';

        // Mesaj alanını göster
        mesajAlani.style.display = 'flex';

        // Kalp animasyonunu başlat
        kalpOlustur(20); 

        // Cevap mesajını göster
        sonMesajDiv.innerHTML = 'ufak bir şaka yapmak istedim gül diye🌹! 🥰<br><br> (Anlayışın için teşekkür ederim) 😉';

        // Animasyon bittikten sonra kalpleri temizle
        setTimeout(() => {
            // Kalpleri silmek yerine sadece ana mesajı tutabiliriz
            // Amaç mesajın ve kalplerin görünmesiydi.
        }, Int32Array);
    }

</script>
</html>
<!-- gh-comment-id:3465892652 --> @yahyagokmen51-ship-it commented on GitHub (Oct 30, 2025): <!DOCTYPE html> <html> <head> <script> function myFunction() { document.getElementById("demo").innerHTML = "slm; } </script> </head> <body> <h1>Script in head tag </h1> <p id="demo">nbr </p> <button type="button" onclick="myFunction()">Try it </button> </body> </html> <!DOCTYPE html> <html lang="tr"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Sana Bir Sorum Var!</title> <style> body { display: flex; flex-direction: column; justify-content: center; align-items: center; height: 100vh; margin: 0; /* Renkli Arka Plan */ background: linear-gradient(135deg, #ff9a9e 0%, #fad0c4 100%); font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; text-align: center; overflow: hidden; } #soru { font-size: 2.5em; margin-bottom: 40px; color: #444; text-shadow: 1px 1px 2px rgba(255, 255, 255, 0.5); z-index: 1; } #resim { /* Eğer resim kullanmak isterseniz bu kısmı açabilirsiniz */ /* margin-bottom: 30px; width: 80%; max-width: 500px; border-radius: 10px; box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2); z-index: 1; */ display: none; /* Bu örnekte resmi gizledik, isterseniz kaldırabilirsiniz */ } .cevap-butonu { padding: 15px 30px; margin: 10px; font-size: 1.3em; cursor: pointer; border: 2px solid #fff; border-radius: 50px; /* Yuvarlak butonlar */ transition: all 0.3s ease; font-weight: bold; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2); z-index: 100; } #evetBtn { background-color: #00b894; /* Turkuaz/Canlı Yeşil */ color: white; } #evetBtn:hover { transform: scale(1.05); background-color: #00a082; } #hayirBtn { background-color: #ff6b6b; /* Canlı Kırmızı */ color: white; position: absolute; /* Yer değiştirme için mutlak konumlandırma */ transition: transform 0.1s ease-out; /* Hızlı hareket */ } #mesaj-alani { position: fixed; top: 0; left: 0; width: 95%; height: 100%; display: none; flex-direction: column; justify-content: center; align-items: center; background-color: rgba(255, 255, 255, 0.95); /* Yarı saydam beyaz */ z-index: 999; } #sonMesaj { font-size: 3em; color: #e84393; /* Canlı Pembe */ text-align: center; padding: 20px; border-radius: 15px; background-color: #fff; box-shadow: 0 0 30px rgba(255, 105, 180, 0.6); animation: bounceIn 1s forwards; } /* Kalp ve Animasyonlar */ .kalp { position: absolute; font-size: 4em; color: #ff6b6b; animation: float 4s ease-in forwards; opacity: 0; } @keyframes bounceIn { 0% { transform: scale(0.5); opacity: 0; } 95% { transform: scale(1); opacity: 1; } } @keyframes float { 0% { transform: translateY(0) rotate(0deg); opacity: 1; } 100% { transform: translateY(-500px) rotate(30deg); opacity: 0; } } </style> </head> <body> <div id="soru">Benimle date'e çikarmısın👉👈?</div> <div id="butonlar" style="position: relative; width: 80vw; height: 100px; display: flex; justify-content: center; align-items: center;"> <button id="evetBtn" class="cevap-butonu" onclick="evetCevabi()">EVET</button> <button id="hayirBtn" class="cevap-butonu" onclick="hayirCevabi()">HAYIR</button> </div> <div id="mesaj-alani"> <div id="sonMesaj"></div> </div> <script> const hayirBtn = document.getElementById('hayirBtn'); const evetBtn = document.getElementById('evetBtn'); const mesajAlani = document.getElementById('mesaj-alani'); const sonMesajDiv = document.getElementById('sonMesaj'); const body = document.body; const butonlarDiv = document.getElementById('butonlar'); // "Hayır" butonuna tıklandığında çalışan fonksiyon function hayirCevabi() { // Butonun bulunduğu 'butonlar' div'inin boyutlarını al const containerRect = butonlarDiv.getBoundingClientRect(); const btnRect = hayirBtn.getBoundingClientRect(); // Yeni rastgele x ve y pozisyonları hesapla // Yeni konum, butonlar div'inin sınırları içinde kalmalı const maxX = containerRect.width - btnRect.width; const maxY = containerRect.height - btnRect.height; // Rastgele pozisyonları hesapla (0'dan maxX/maxY'a kadar) const newX = Math.random() * maxX; const newY = Math.random() * maxY; // Butonu yeni konuma taşı (css transform kullanmak daha akıcıdır) // Butonun yer değiştirme animasyonu kısa ve hızlı görünecektir. hayirBtn.style.transform = `translate(${newX}px, ${newY}px)`; } // Kalp animasyonu oluşturan fonksiyon function kalpOlustur(sayi) { for (let i = 0; i < sayi; i++) { const kalp = document.createElement('div'); kalp.textContent = '🫶'; kalp.className = 'kalp'; // Kalp başlangıç pozisyonunu rastgele ayarla kalp.style.left = Math.random() * 100 + 'vw'; kalp.style.bottom = '-50px'; // Ekranın altından başlasın kalp.style.animationDelay = Math.random() * 1 + 's'; // Rastgele gecikme mesajAlani.appendChild(kalp); } } // "Evet" butonuna basıldığında çalışan fonksiyon function evetCevabi() { // Butonları ve soruyu gizle evetBtn.style.display = 'none'; hayirBtn.style.display = 'none'; document.getElementById('soru').style.display = 'none'; // Mesaj alanını göster mesajAlani.style.display = 'flex'; // Kalp animasyonunu başlat kalpOlustur(20); // Cevap mesajını göster sonMesajDiv.innerHTML = 'ufak bir şaka yapmak istedim gül diye🌹! 🥰<br><br> (Anlayışın için teşekkür ederim) 😉'; // Animasyon bittikten sonra kalpleri temizle setTimeout(() => { // Kalpleri silmek yerine sadece ana mesajı tutabiliriz // Amaç mesajın ve kalplerin görünmesiydi. }, Int32Array); } </script> </body> </html>
Author
Owner

@nalkarsuyash5 commented on GitHub (Oct 30, 2025):

Hii

<!-- gh-comment-id:3466228740 --> @nalkarsuyash5 commented on GitHub (Oct 30, 2025): Hii
Author
Owner

@TomatO-git2it commented on GitHub (Nov 11, 2025):

Ooh i still have mucho! To learn. Slowly but surely, git'n along🤓

<!-- gh-comment-id:3517519571 --> @TomatO-git2it commented on GitHub (Nov 11, 2025): Ooh i still have mucho! To learn. Slowly but surely, git'n along🤓
Author
Owner

@rubydagrim commented on GitHub (Nov 17, 2025):

He

<!-- gh-comment-id:3539577730 --> @rubydagrim commented on GitHub (Nov 17, 2025): He
Author
Owner

@xsaensaenpong-ai commented on GitHub (Nov 29, 2025):

@tvorogec2009-code

<!-- gh-comment-id:3591958665 --> @xsaensaenpong-ai commented on GitHub (Nov 29, 2025): @tvorogec2009-code
Author
Owner

@abiolaomobomi396-arch commented on GitHub (Dec 4, 2025):

Okay

<!-- gh-comment-id:3612779253 --> @abiolaomobomi396-arch commented on GitHub (Dec 4, 2025): Okay
Author
Owner

@Mo-way commented on GitHub (Dec 13, 2025):

Hi @uzzy-buzzy I'm seeing the same issue. I would even go further and remove them entirely or move them to an "archive".

The requirement for awesome lists is to contain only maintained projects. If the list isn't maintained, that requirement can't be fulfilled.

Regarding all those spam comments you received, I made an issue about them already: https://github.com/sindresorhus/awesome/issues/3538

But it seems Sindre is too busy with other things in their life. I suggested they ask a friend to help out with maintenance, but no reply.

<!-- gh-comment-id:3649410664 --> @Mo-way commented on GitHub (Dec 13, 2025): Hi @uzzy-buzzy I'm seeing the same issue. I would even go further and remove them entirely or move them to an "archive". The requirement for awesome lists is to contain only maintained projects. If the list isn't maintained, that requirement can't be fulfilled. Regarding all those spam comments you received, I made an issue about them already: https://github.com/sindresorhus/awesome/issues/3538 But it seems Sindre is too busy with other things in their life. I suggested they ask a friend to help out with maintenance, but no reply.
Author
Owner

@Prathikgowda360 commented on GitHub (Mar 7, 2026):

import memoize from '@github/memoize'
import {getEnv} from '@github-ui/client-env'
import {IS_SERVER} from '@github-ui/ssr-utils'
import type {JSFeatureFlag} from './client-feature-flags'

function getEnabledFeaturesSet() {
return new Set(getEnv().featureFlags as JSFeatureFlag[])
}

// Safe check for Storybook environment
function isStorybook(): boolean {
if (typeof process === 'undefined' || !process.env) {
return false
}
return process.env.STORYBOOK === 'true' || process.env.APP_ENV === 'storybook'
}

// Use memoized version unless server, test, or storybook
const featuresSet =
IS_SERVER || process.env.NODE_ENV === 'test' || isStorybook()
? getEnabledFeaturesSet
: memoize(getEnabledFeaturesSet)

export function getEnabledFeatures(): JSFeatureFlag[] {
return Array.from(featuresSet())
}

/**

  • This function accesses feature flag states loaded into the client env via client-feature-flags.ts.
  • For feature flags added via Rails controllers, use useFeatureFlag hook from @github-ui/react-core/use-feature-flag.
    */
    export function isFeatureEnabled(name: JSFeatureFlag): boolean {
    return featuresSet().has(name)
    }

// exported to allow mocking in tests
const featureFlag = {isFeatureEnabled}
export {featureFlag}

<!-- gh-comment-id:4015888734 --> @Prathikgowda360 commented on GitHub (Mar 7, 2026): import memoize from '@github/memoize' import {getEnv} from '@github-ui/client-env' import {IS_SERVER} from '@github-ui/ssr-utils' import type {JSFeatureFlag} from './client-feature-flags' function getEnabledFeaturesSet() { return new Set(getEnv().featureFlags as JSFeatureFlag[]) } // Safe check for Storybook environment function isStorybook(): boolean { if (typeof process === 'undefined' || !process.env) { return false } return process.env.STORYBOOK === 'true' || process.env.APP_ENV === 'storybook' } // Use memoized version unless server, test, or storybook const featuresSet = IS_SERVER || process.env.NODE_ENV === 'test' || isStorybook() ? getEnabledFeaturesSet : memoize(getEnabledFeaturesSet) export function getEnabledFeatures(): JSFeatureFlag[] { return Array.from(featuresSet()) } /** * This function accesses feature flag states loaded into the client env via client-feature-flags.ts. * For feature flags added via Rails controllers, use useFeatureFlag hook from @github-ui/react-core/use-feature-flag. */ export function isFeatureEnabled(name: JSFeatureFlag): boolean { return featuresSet().has(name) } // exported to allow mocking in tests const featureFlag = {isFeatureEnabled} export {featureFlag}
Author
Owner

@Prathikgowda360 commented on GitHub (Mar 7, 2026):

A lot of the repos here are unmaintained, it would be nice to have some sort of indicator for that

Ok
Here
import memoize from '@github/memoize'
import {getEnv} from '@github-ui/client-env'
import {IS_SERVER} from '@github-ui/ssr-utils'
import type {JSFeatureFlag} from './client-feature-flags'

function getEnabledFeaturesSet() {
return new Set(getEnv().featureFlags as JSFeatureFlag[])
}

// Safe check for Storybook environment
function isStorybook(): boolean {
if (typeof process === 'undefined' || !process.env) {
return false
}
return process.env.STORYBOOK === 'true' || process.env.APP_ENV === 'storybook'
}

// Use memoized version unless server, test, or storybook
const featuresSet =
IS_SERVER || process.env.NODE_ENV === 'test' || isStorybook()
? getEnabledFeaturesSet
: memoize(getEnabledFeaturesSet)

export function getEnabledFeatures(): JSFeatureFlag[] {
return Array.from(featuresSet())
}

/**

  • This function accesses feature flag states loaded into the client env via client-feature-flags.ts.
  • For feature flags added via Rails controllers, use useFeatureFlag hook from @github-ui/react-core/use-feature-flag.
    */
    export function isFeatureEnabled(name: JSFeatureFlag): boolean {
    return featuresSet().has(name)
    }

// exported to allow mocking in tests
const featureFlag = {isFeatureEnabled}
export {featureFlag}

<!-- gh-comment-id:4015891896 --> @Prathikgowda360 commented on GitHub (Mar 7, 2026): > A lot of the repos here are unmaintained, it would be nice to have some sort of indicator for that Ok Here import memoize from '@github/memoize' import {getEnv} from '@github-ui/client-env' import {IS_SERVER} from '@github-ui/ssr-utils' import type {JSFeatureFlag} from './client-feature-flags' function getEnabledFeaturesSet() { return new Set(getEnv().featureFlags as JSFeatureFlag[]) } // Safe check for Storybook environment function isStorybook(): boolean { if (typeof process === 'undefined' || !process.env) { return false } return process.env.STORYBOOK === 'true' || process.env.APP_ENV === 'storybook' } // Use memoized version unless server, test, or storybook const featuresSet = IS_SERVER || process.env.NODE_ENV === 'test' || isStorybook() ? getEnabledFeaturesSet : memoize(getEnabledFeaturesSet) export function getEnabledFeatures(): JSFeatureFlag[] { return Array.from(featuresSet()) } /** * This function accesses feature flag states loaded into the client env via client-feature-flags.ts. * For feature flags added via Rails controllers, use useFeatureFlag hook from @github-ui/react-core/use-feature-flag. */ export function isFeatureEnabled(name: JSFeatureFlag): boolean { return featuresSet().has(name) } // exported to allow mocking in tests const featureFlag = {isFeatureEnabled} export {featureFlag}
Author
Owner

@barnettsaul819-ui commented on GitHub (Mar 11, 2026):

Wow wow wow

<!-- gh-comment-id:4037766711 --> @barnettsaul819-ui commented on GitHub (Mar 11, 2026): Wow wow wow
Author
Owner

@Faisal106033 commented on GitHub (Mar 23, 2026):

EN:
Arab Monkey is not just a meme… it’s a movement 🐒🚀
Smart money rides early. Don’t miss the wave.

CA:
B6SCjwLig6iFBFL1cr4DvYJfcfr7L1wc8rf3w5acpump

#Crypto #Memecoin #Solana #100x #GEM #Altcoins #CryptoCommunity

<!-- gh-comment-id:4107563250 --> @Faisal106033 commented on GitHub (Mar 23, 2026): EN: Arab Monkey is not just a meme… it’s a movement 🐒🚀 Smart money rides early. Don’t miss the wave. CA: B6SCjwLig6iFBFL1cr4DvYJfcfr7L1wc8rf3w5acpump #Crypto #Memecoin #Solana #100x #GEM #Altcoins #CryptoCommunity
Author
Owner

@Jonhvmp commented on GitHub (Apr 7, 2026):

use Creator

<!-- gh-comment-id:4197758795 --> @Jonhvmp commented on GitHub (Apr 7, 2026): use [Creator](https://usecreator.app)
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/awesome-sindresorhus#11236