Skip to content

Latest commit

 

History

History

deep

npm version Deno

Licence

@rimbu/deep

Welcome to @rimbu/deep! This package offers powerful tools to handle plain JavaScript objects as immutable objects, making your code more robust and maintainable.

Key Features:

  • Immutable Modification: Use the Patch object for convenient and immutable modifications of simple objects.
  • Pattern Matching: The Match object allows easy pattern matching on plain objects.
  • Nested Value Querying: Easily query nested values with the Path object.
  • Compile-Time Protection: The Immutable type helps create plain objects with compile-time protection against mutation.
  • Flexible Tuples: The Tuple type provides similar functionality to as const but with more flexibility.

Documentation

For complete documentation, please visit the Immutable Objects overview in the Rimbu Docs, or directly explore the Rimbu Deep API Docs.

Try It Out

Experience @rimbu/deep in action! Try Out Rimbu on CodeSandBox.

Installation

Compabitity

Package Managers

Yarn:

yarn add @rimbu/deep

npm:

npm install @rimbu/deep

Bun:

bun add @rimbu/deep

Deno Setup

Create or edit import_map.json in your project root:

{
  "imports": {
    "@rimbu/": "https://deno.land/x/rimbu@x.y.z/"
  }
}

Replace x.y.z with the desired version.

In this way you can use relative imports from Rimbu in your code, like so:

import { List } from '@rimbu/core/mod.ts';
import { HashMap } from '@rimbu/hashed/mod.ts';

Note that for sub-packages, due to conversion limitations it is needed to import the index.ts instead of mod.ts, like so:

import { HashMap } from '@rimbu/hashed/map/index.ts';

To run your script (let's assume the entry point is in src/main.ts):

deno run --import-map import_map.json src/main.ts

Usage

import { patch } from '@rimbu/deep';

console.log(
  patch({
    a: 'a',
    b: { c: 1, d: true },
  })({
    a: 'q',
    b: { c: (v) => v + 1 },
  })
);
// => { a: 'q', b: { c: 2, d: true }}

Author

Created and maintained by Arvid Nicolaas.

Contributing

We welcome contributions! Please read our Contributing guide.

Contributors

Made with contributors-img.

License

This project is licensed under the MIT License. See the LICENSE for details.