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

awrys

v0.0.4

Published

`Awry` is a simple little extension to the JavaScript `Array` object to solve the age old debate of whether or not indices should be index `0`, or `1`. `Awry` posits that neither are optimal in every circumstance and allowing the user to change where arra

Downloads

1

Readme

Awry(1, 2, 3, 4);

Awry is a simple little extension to the JavaScript Array object to solve the age old debate of whether or not indices should be index 0, or 1. Awry posits that neither are optimal in every circumstance and allowing the user to change where arrays start may be confusing to readers. When doing computery stuff, we still suggest using index 0 which Awry obviously supports; BUT when it comes to those icky-squishy humans, Awry offers an alternative.

const myFavouriteNumbersInAscendingPreferenceOrder = Awry(3, 5, 9, 11);
console.log(`My favourite number is ${myFavouriteNumbersInAscendingPreferenceOrder.first}`);
// -> My favourite number is 3

I hope you can see where we are going with this. All features explained below. But .first we need to get you up and running.

Getting started

Installation

You can install Awry into any JavaScript project using any tool that can grab packages from NPM. For examples:

# The NPM package manager (Node's Node Package Manager package manager)
npm i -S 'awrys'

# Yarn (Facebook's Node Package Manager)
yarn i 'awrys'

# PNPM (🔥🔥NPM🔥🔥)
pnpm i 'awrys'

# Bun (🥟)
bun i 'awrys'

We are confident this will be picked up by all the popular CDNs and can be directly injected into your HTML via <script> tag really soon. The minified size is only 1.96 KB!

Using in your project

Just import or require it. We are only outputting ESM just now because that's all Bun can do and since Bun's release I've forgotten how JavaScript works.

// TypeScript standard
import Awry from 'awrys';

// REPL?
const { Awry } = await import('./build/awry.js');

Features

As alluded to up top, Awry can do a little more than coolGifs.first.

Accessing the first few elements - Awry 100

What if we want to access anything but the first element? Well it may come as no surprise that you can also do the following:

Awry(1, 2, 3, 4).second; // -> 2
Awry(1, 2, 3, 4).third; // -> 3
Awry(1, 2, 3, 4).fourth; // -> 4

Pretty neat huh?!

Accessing more elements - Awry 101

"Four elements? Big whoop! My array has tens of elements". Well not to worry, Awry has got you there too:

const dopeNumbers = Awry();

for (let x = 1; x <= 37; x++)
  dopeNumbers.push(x);

console.log(dopeNumber.twelfth); // -> 12
console.log(dopeNumber.twentyEighth); // -> 28

Accessing even more elements - kinda how it works

Now the curious among you might be wondering if I just pre-generated a load of number words and am simply adding them as properties to the 'Awry' object. My sweet summer child no, we like to get a bit more stupid around here. We use Proxys! Lets increase the previous example to 1,000 and you can watch in "slow-motion" that something else is at play.

const dopeNumbers = Awry();

for (let x = 1; x <= 1000; x++)
  dopeNumbers.push(x);

console.log(dopeNumber.nineHundredAndNinetyNinth); // -> 999
console.log(dopeNumber.oneThousandth); // -> 1000

This took my tired and overworked 5-year-old HP Ultrabook G4 1,848.21ms to run as a Bun test. I'll work on performance once I see how successful this becomes. You can theoretically reference elements by name up-to:

console.log(dopeNumbers.nineHundredAndNinetyNineTrillionNineHundredAndNinetyNineBillionNineHundredAndNinetyNineMillionNineHundredAndNinetyNineThousandNineHundredAndNinetyNinth.toLocaleString('en-GB'));
// -> 999,999,999,999,999 (that's a lot of dope numbers!)

JavaScriptCore can start going a bit weird after that — Not tested outside of Bun. I don't think JavaScript arrays can even have that many elements anyway. And also adding that many properties to an object will take longer than we all have.

Accessing the end - but what about sickAssList.last?

What about it? You can do it, you can even go two (or considerably more) steps further. Check this out:

const sickAssList = Awry(1, 2, 3);

console.log(sickAssList.last); // -> 3
console.log(sickAssList.secondLast); // -> 2
console.log(sickAssList.thirdLast); // -> 1

💅

Converting an Awry to a POJSO - what does an Awry look like?

The ordinal properties are not enumerable for reasons but you can see under the bonnet (hood) doing this:

const anotherAwry = Awry(1, 2, 3);

console.log(anotherAwry.toObject());
/* -> {
  "0": 1,
  "1": 2,
  "2": 3,
  first: 1,
  thirdLast: 1,
  second: 2,
  secondLast: 2,
  third: 3,
  last: 3
} */

Future features

I genuinely think it might be neat to provide extensions for Array iterator functions that passes the worded ordinal index as a last parameter.

Known issues

  • It adds a bit of latency where you wouldn't usually expect it, but hey, it's all about the journey.
  • Sometimes for some reason under some circumstances, properties may not be immediately available. I have my suspicions but haven't bothered to do anything about it.

FAQ

...