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 🙏

© 2026 – Pkg Stats / Ryan Hefner

@merwynpatrick/lotide

v1.0.2

Published

Mini clone of the Lodash library

Readme

Lotide Description

  • A mini clone of the Lodash library

Purpose

BEWARE: This library was published for learning purposes. It is not intended for use in production-grade software.

  • This project was created and published by me as part of my learnings at Lighthouse Labs.

Usage

Install it:

npm i @merwynpatrick/lotide

Require it:

const _ = require('@merwynpatrick/lotide');

Call it:

const results = _.tail([1, 2, 3]) // => [2, 3]

Documentation

  • The following functions are currently implemented:

  • Functions in lotide

    • AssertEqual.js Implementing console.assert function.
    • _.assertEqual("Lighthouse Labs", "Bootcamp") // => ✗ Assertion Failed: Lighthouse Labs !== Bootcamp Logs whether Assertion passed or failed by comparing the 2 arguments.
    • head.js Implementing lodash head function.
    • _.head([5, 6, 7]) // 5 Returns the first element of an array or undefined if array is empty.
    • tail.js Implementing lodash tail function.
    • _.tail(["Hello", "Lighthouse", "Labs"]) // ["Lighthouse", "Labs"] Returns the array exluding the first element.
    • eqArrays.js Implementing function to test if 2 passed arrays are equal. Can compare 2 deeply nested arrays using recursion.
    • _.eqArrays(["1", "2", "3"], ["1", "2", 3]) // false Returns a boolean by comparing 2 arrays.
    • assertArraysEqual.js Use eqArrays function to test equality of 2 arrays using 2 methods: JSON.stringify() or comapring each element of the 2 arrays and using recursion.
    • _.assertArraysEqual(["1", "2", "3"], ["1", "2", "3"]) // => ✓ Assertion Passed: [ '1', '2', '3' ] === [ '1', '2', '3' ] Logs whether Assertion passed or failed by comparing the 2 arrays.
    • without.js Implementing lodash without function.
    • _.without(["hello", "world", "lighthouse"], ["hello"]) // ["world", "lighthouse"] Returns the filtered array by removing the arguments passed. Added more tests in without function and removed error.
    • flatten.js Implementing lodash flatten function.
    • _.flatten([1, [2, 3]]) // [1, 2, 3] Returns the flattened array.
    • middle.js Implementing lodash middle function.
    • _.middle([1, 2, 3]) // [2] Returns an array containing center element/s. If the array length is less than 3, it returns an empty array.
    • countOnly.js
    • _.countOnly(["a", "a", "b"]) // {a: 2, b: 1} This function takes in an array of items and return counts for a specific subset of those items.
    • countLetters.js _.countLetters("LHL") // {L : 2, H: 1} This function is similar to countOnly.js.
    • letterPositions.js _.letterPositions("LHL") // {L : 2, H: 1} This function takes an input string and returns an object with the positions of letters in the string. The positions are zero based and are in an array.
    • findKeyByValue.js _.findKeyByValue({sci_fi: "The Expanse", drama: "The Wire"}, "The Wire") // "drama" This function takes an object and a value as arguments and searches if the object has the key, value pair and returns the corresponding key.
    • eqObjects.js _.eqObjects({ a: "1", b: "2" }, { b: "2", a: "1" }) // true This function takes 2 objects as arguments and returns a boolean value if the key/value pairs are similar.
    • assertObjectsEqual.js _.assertObjectsEqual({ a: "1", b: "2" }, { b: "2", a: "1" }) // ✓ Assertion Passed: { a: '1', b: '2' } === { b: '2', a: '1' } This function leverages on eqObjects and writes a test to show if the assertion passes or fails. There is a mention to use utils.inspect() which converts objects to strings (similar to JSON.stringify()) but hasn't been used. This function logs, doesn't return a value.
    • map.js _.map(["ground", "control"], word => word[0]) // ["g", "c"] This function is our own implementation of Array.map() method which takes an array and a callback function and returns an array subject to the function called on every element of the input array.
    • takeUntil.js _.takeUntil([1, 2, 5, 7, 2, -1, 2, 4, 5], x => x < 0) // [1, 2, 5, 7, 2] This is similar to lowdash takeWhile. TakeUntil function takes an array and callback function and slices the array uptil the callback function condition is evaluated to be false.
    • findKey.js _.findKey({a: { stars: 1 }, b: { stars: 2 }}, x => x.stars === 2) // b This function is similar to findKeyByValue.js but it utlizes a callback function for more flexibility.
  • Tests in a separate folder for more details.

    • Testing using mocha chai. Please run npm install after cloning the repo.