1.0.7 • Published 7 months ago

chalkit v1.0.7

Weekly downloads
-
License
MIT
Repository
github
Last release
7 months ago

Chalkit

A lightweight utility for managing nested state with command-driven operations. Perform atomic updates and batch operations with ease.


Installation

Install via npm:

npm install chalkit
yarn add chalkit

Getting Started

Import and Initialize

import { Chalkit } from "chalkit";

// Initialize store
const store = {};
const chalkit = new Chalkit(store, { marker: "$", divider: "_" });

Basic Operations

Setting and Merging Values

// Set a value in a deep path using the divider
chalkit.apply("user_profile_name$set", { name: "John" });

// Merge values into a deep path
chalkit.apply("user_profile_details$merge", {
  age: 30,
  email: "john@example.com",
});

Clearing Values

// Clear a value in a deep path
chalkit.apply("user_profile_name$remove");

Array Operations

Append to Array

// Append to an array in a deep path
chalkit.apply("user_profile_tags$arrayAppend", {
  data: ["typescript", "javascript"],
});

Toggle Item in Array

// Toggle an item in an array in a deep path
chalkit.apply("user_profile_favorites$arrayToggle", "item1");

Remove from Array

// Remove an item from an array in a deep path
chalkit.apply("user_profile_tags$arrayRemove", { item: "typescript" });

Collection Operations

Set Item in Collection

// Set an item in a collection at a deep path
chalkit.apply("organization_members$itemSet", {
  id: "user1",
  data: { name: "John", age: 30 },
});

Merge Item in Collection

// Merge an item in a collection at a deep path
chalkit.apply("organization_members$itemMerge", {
  id: "user1",
  data: { email: "john@example.com" },
});

Delete Item from Collection

// Delete an item from a collection at a deep path
chalkit.apply("organization_members$itemDelete", "user1");

Batch Operations

Perform Multiple Updates

chalkit.batch([
  { command: "user_profile_name$set", payload: { name: "John" } },
  { command: "settings_theme$set", payload: { theme: "dark" } },
  {
    command: "user_profile_tags$arrayAppend",
    payload: { data: ["typescript"] },
  },
]);

Handle Batch Errors

try {
  chalkit.batch([
    { command: "user_profile_name$set", payload: { name: "John" } },
    { command: "settings_invalid$set", payload: { theme: "dark" } }, // Invalid operation
  ]);
} catch (error) {
  console.log("Batch failed, all changes rolled back");
}

License

This project is licensed under the MIT License - see the LICENSE file for details.

1.0.7

7 months ago

1.0.6

7 months ago

1.0.5

7 months ago

1.0.4

7 months ago

1.0.3

8 months ago

1.0.2

8 months ago

1.0.1

8 months ago

1.0.0

8 months ago