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

@context-action/mutative-core

v0.8.8

Published

Context-Action maintained Mutative core for efficient immutable updates

Readme

@context-action/mutative-core

The Context-Action maintained core implementation of Mutative. It preserves the upstream Mutative API while carrying the maintained fork fixes from mineclover/mutative, including lazy array drafts, nested create() isolation, and the produce alias.

Installation

pnpm add @context-action/mutative-core

Usage

import { produce } from '@context-action/mutative-core';

const next = produce({ count: 0 }, (draft) => {
  draft.count += 1;
});

Core contracts

  • Drafts support plain objects, arrays, Map, and Set. Unchanged branches retain their original references through copy-on-write finalization.
  • Pass enablePatches: true to receive [nextState, patches, inversePatches]. Set changes are represented as a replace patch so inverse replay preserves insertion order.
  • The default patch path is an array. A string JSON Pointer path can only represent string Map keys and string properties; using pathAsArray: false with numeric/object Map keys or Symbol properties throws. Use array paths for those keys.
  • strict: true rejects non-draft replacement values. Use rawReturn(value) when an intentional raw replacement is required. unsafe(callback) is the scoped escape hatch for accessing mutable values in strict mode.
  • enableAutoFreeze: true freezes object, array, Map, and Set shells and blocks their normal mutators. As required by JavaScript collection semantics, a direct Map.prototype.set.call(map, ...)/Set.prototype.add.call(...) can still bypass an instance-level guard.

@context-action/mutative is the higher-level Context-Action adapter with patch helpers and time-travel controls. Most application code should use the adapter; use this package when the upstream-compatible immutable update API is needed directly.

Lineage and license

This package contains the MIT-licensed Mutative implementation maintained by the Context-Action project. See LICENSE and the fork changelog for the upstream issue and pull-request work carried forward.

The original project is unadlib/mutative; the maintained source fork is mineclover/mutative. The exact imported revision is recorded in UPSTREAM.md.