npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@endgame/clara

v1.0.3

Published

Core Library And Refined Algorithms

Downloads

69

Readme

C.L.A.R.A.

Core Library And Refined Algorithms

Installation

npm i -S @endgame/clara

The global operation

You'll see that CLARA exports everything you need to build your JS projects from generators and coroutine helpers... to polyfills 👌

If you use the default es6 import you'll get all the "utils functions" from @endgame/clara.

But you can also deconstruct the import to get the specific functions you need.

The motherfu****g example :

import allTheSh_t from '@endgame/clara';
// OR
import { coroutine } from '@endgame/clara';

Async

wait

In an async function, wait allows us to wait in simple way with await.

Example:

// delay is in ms
const delay = 300;

const asyncFunction = async () => {
    ...
    // Do some stuff
    ...
    await wait(delay);
};

asyncFunction();

runPromisesSequence

This function allows us to add a timeout between promises (not possible with Promise.all).

Example:

// Say we want to download medias from urls
// For each url we want to apply the same process...
// With a delay... Because we wanna avoid a server overload

// Media download function
const handleMediaDownload = async (url, mediaName) => {
    const [mediaName] = url.split('/').reverse();
    const filePath = `static-path/${mediaName}`;
    await writeMedia({ filePath, url });
};

// Apply the delay
await runPromisesSequence(
    {
        array: urls, // For the examples' purpose, we'll say that urls is already defined as an array
        handler: handleMediaDownload,
        delay: 500 // In ms
    },
    () => {
        // The callback called when all promises are done
    }
);

Core

forEach

A cool while loop running under the hood to increase the native forEach's performances.

Example:

const emojisArray = ['🔥', '💪', '😏'];

forEach(emojisArray, (item, index) => {
    console.log(`${index}: ${item}`);
    // Will log "1: 🔥"...
});

coroutine

TODO:

DOM

createCrossBrowserEvent

This function will help you to make cross browser events (I hope internet explorer will die one day...).

Example:

const newEvent = createCrossBrowserEvent('test-new-event');

document.addEventListener(
    'test-new-event',
    () => {
        console.log('✅ Cross browser event dispatched');
    },
    false
);

document.dispatchEvent(newEvent);

isDisplayed

isDisplayed will allow you to test if your html element is in display: none mode.

Example:

const testingDisplay = isDisplayed(myElement);

if (testingDisplay) {
    // My element is displayed 💪
}

nodeIndex

With this function you'll be able to know the index of your html element position amongst his siblings.

Example:

const index = nodeIndex(myElement);

query

query will allow you to get any html element you want with performances you can only dream of ! getElementById, getElementsByClassName, getElementsByTagName, querySelectorAll... you don't need to choose anymore, it'll do it for you 😏

Example:

const [byId] = query({ selector: '#my-id' });
const [byClass] = query({ selector: '.my-class' });
const [myNestedElement] = query({
    selector: '.the-ancestor .my-nested-element'
});
const allTheClasses = query({
    selector: '.my-classes'
});
const withContext = query({ selector: '.my-class', ctx: myContextualElement });

requestAnimFrame

A requestAnimationFrame method for every browsers... yes that exists.

Example:

const animationFrameId = requestAnimFrame(() => {});

// The better, you can cancel it 😱
cancelAnimationFrame(animationFrameId);

throttle

throttle has been redisigned.

Example:

throttle({
    callback: () => {
        // Do whatever you want to
    },
    delay: 100
});

loop

TODO:

requestTimeout

TODO:

clearRequestTimeout

TODO:

bodyRouter

bodyRouter will allow you to execute whatever javascript piece of code... on the specific page you want, not the others. One more thing, it uses query under the hood 😏

Example:

bodyRouter({
    identifier: '.page-template-contact',
    callback: () => {
        // Dynamically load your imports for example 💪
    }
});

Fallback

spotMobile

Spot when a mobile is used by adding a class to the html element.

Example:

spotMobile(); // As simple as that

spotIOS

Spot when ios is used by adding a class to the html element.

Example:

spotIOS(); // As simple as that

spotSafari

Spot when safari is used by adding a class to the html element.

Example:

spotSafari(); // As simple as that

spotFF

Spot when firefox is used by adding a class to the html element.

Example:

spotFF(); // As simple as that

spotChromeAndroid

Spot when an android mobile uses chrome by adding a class to the html element.

Example:

spotChromeAndroid(); // As simple as that

spotMS

Spot when a microsoft device is used by adding a class to the html element.

Example:

spotMS(); // As simple as that

spotIE

Spot when internet explorer is used by adding a class to the html element.

Example:

spotIE(); // As simple as that

supportsWebp

To handle webp support correctly... test it in a simple way.

Example:

// In your async function:
const isWebpSupported = await supportsWebp();

if (isWebpSupported) {
    // YEAH WEBP IS COMING IN BABY ! 🔥
} else {
    // OKAY LET'S USE IMAGES THE OLD FASHION WAY
}

Math

roundNumbers

Rounding numbers could be a bit boring sometimes. Now rounding numbers became pretty easy.

Example:

const myNumber = roundNumbers({ number: 10.123456789, decimalOffset: 2 });

// myNumber = 10.12 now

average

TODO:

lerp

TODO:

Parsing

camalize

Just read the title.

Example:

const mySlug = 'test-slug';

const camalizedSlug = camalize(mySlug);
// camalizedSlug = testSlug now.

pascalize

Just read the title.

Example:

const mySlug = 'test-slug';

const pascalizedSlug = pascalize(mySlug);
// pascalizedSlug = TestSlug now.

reverseString

Just read the title.

Example:

const myString = 'emosewa';

const reversedString = reverseString(myString);
// myString = awesome now.

Polyfill

audioContextPolyfill

A sweet polyfill for the web audio api

audioContextPolyfill();

const audioContext = new window.AudioContext();

ie11Polyfills

Internet explorer again...

// Polyfills for matches, closest, entries elements functions
ie11Polyfills();

ioPolyfill

IntersectionObserver is pretty cool... but... like always... Internet explorer

ioPolyfill();

const options = {
    root: document.querySelector('#scrollArea'),
    rootMargin: '0px',
    threshold: 1.0
};

const observer = new IntersectionObserver(callback, options);

smoothScrollPolyfill

Smooth scrolling to anchors is cool... but don't forget IE

smoothScrollPolyfill();

const [scrollToElement] = query({ selector: '.scroll-to-selector' });

window.scroll({
    top: 100, // In px
    left: 0,
    behavior: 'smooth'
});

Snif

isIOS

Check for an ios device

if (isIOS()) {
    // Do some stuff
}

isAndroid

Check for an android device

if (isAndroid()) {
    // Do some stuff
}

isChrome

Check if the device uses chrome

if (isChrome()) {
    // Do some stuff
}

isMobile

Check if the device is a mobile

if (isMobile()) {
    // Do some stuff
}

isChromeAndroid

Check if the device running chrome on android

if (isChromeAndroid()) {
    // Do some stuff
}

isSafari

Check if the device is running safari

if (isSafari()) {
    // Do some stuff
}

isFF

Check if the device is running firefox

if (isFF()) {
    // Do some stuff
}

isMS

Check if the device is a Microsoft product (🤮)

if (isMS()) {
    // Do some stuff
}

mixBlendModeSupport

Check for mix blend mode support

if (mixBlendModeSupport()) {
    // Do some stuff
}

isIe11

Check if the device's running internet explorer

if (isIe11()) {
    // Do some stuff
}

P.S. 21st century's celebrating its 20 years old... Seriously... Internet explorer's not dead by now ??? WTF ???