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

@septem/tool

v1.1.0

Published

A JavaScript utility library

Downloads

3

Readme

@septem/tool

A JavaScript utility library similar to lodash, providing various useful utility functions.

中文文档

Installation

npm install @septem/tool
# or
yarn add @septem/tool

Usage

Import the entire library

// ES modules
import tool from '@septem/tool';

tool.isEqual([1, 2, 3], [1, 2, 3]); // => true

// CommonJS
const tool = require('@septem/tool');

tool.isEqual([1, 2, 3], [1, 2, 3]); // => true

Import individual functions

// ES modules
import { isEqual } from '@septem/tool';

isEqual([1, 2, 3], [1, 2, 3]); // => true

// CommonJS
const { isEqual } = require('@septem/tool');

isEqual([1, 2, 3], [1, 2, 3]); // => true

API Documentation

isEqual(value, other)

Deep comparison to check if two values are equal.

Parameters

  • value (*): The first value to compare
  • other (*): The second value to compare

Returns

  • boolean: Returns true if the values are equal, otherwise false

Example

isEqual([1, 2, 3], [1, 2, 3]);
// => true

isEqual({ 'a': 1, 'b': 2 }, { 'b': 2, 'a': 1 });
// => true

isEqual('a', 'a');
// => true

isEqual('a', Object('a'));
// => false

deepClone(value)

Deep clone a value, creating a new value that is equal to the original but with different references.

Parameters

  • value (*): The value to clone

Returns

  • *: The cloned value

Example

const objects = [{ 'a': 1 }, { 'b': 2 }];
const deep = deepClone(objects);
console.log(deep[0] === objects[0]);
// => false

const obj = { a: 1, b: { c: 2 } };
const clone = deepClone(obj);
obj.b.c = 3;
console.log(clone.b.c);
// => 2

debounce(func, wait, [options])

Creates a debounced function that delays invoking func until after wait milliseconds have elapsed since the last time the debounced function was invoked.

Parameters

  • func (Function): The function to debounce
  • wait (number): The number of milliseconds to delay
  • options (Object): The options object
    • leading (boolean): Specify invoking on the leading edge of the timeout, defaults to false
    • trailing (boolean): Specify invoking on the trailing edge of the timeout, defaults to true

Returns

  • Function: Returns the new debounced function with the following methods:
    • cancel(): Cancels the debounced function call
    • flush(): Immediately invokes the function

Example

// Avoid updating layout during window resize too frequently
window.addEventListener('resize', debounce(calculateLayout, 150));

// Send request only after user stops typing
element.addEventListener('input', debounce(sendRequest, 300));

// Use leading option to invoke at the beginning of the timeout
const clickHandler = debounce(handleClick, 300, { leading: true });

// Cancel a debounced function call
const debouncedFunc = debounce(func, 1000);
debouncedFunc();
// Cancel the call
debouncedFunc.cancel();

Development

Install dependencies

npm install

Run tests

npm test

Build

npm run build

Generate documentation

npm run docs

License

MIT