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

factori

v0.0.3

Published

A minimal Factory pattern in Typescript.

Downloads

2

Readme

Factori

A minimal Factory pattern in Typescript.

Documentation

Simple docs for a simple library.

import Factory from "factori";

interface Product {
	id: number;
	name: string;
}

// Create a factory
const productFactory = new Factory<Product>({
	id: 1,
	name: "Apple",
});

// Create a single object with overridden properties
// { id: 1, name: "Orange" }
productFactory.create({
	name: "Orange",
});

// Create a single object with an anon function that allows editing of the original.
// { id: 2, name: "Apple Juice" }
const result = productFactory.create((product) => ({
	id: product.id + 1,
	name: `${product.name} Juice`,
}));

// Create an array of objects
// [{ id: 1, name: "Apple" }, { id: 1, name: "Apple" }]
const results = productFactory.createList(2);

// Create an array of objects with overridden properties
// [{ id: 1, name: "Orange" }, { id: 1, name: "Orange" }]
const results = productFactory.createList(2, {
	name: "Orange",
});

// Create an array of objects with an anon function that allows editing of the original.
// This is useful for incremental fields, like ids/keys.
// [{ id: 0, name: "Orange Juice" }, { id: 1, name: "Orange Juice" }]
const results = productFactory.createList(2, (product, index) => ({
	id: index,
	name: `${product.name} Juice`,
}));

Roadmap

Someday…

  • Adding option to deep copy. This would fix nested object references which would be shared across instances. Disabled by default for performance reasons.
  • Adding incremental fields to auto-increment, e.g. { id: new Incrementor(i => i + 1) }. This would allow easier incremental updates on all methods as the only way to do that currently is to create an array and use the index in the map function. However the objects do become less predictable this way, especially with concurrent operations.