Skip to content

The sole purpose of this immutable record is to simply act as a class factory for immutable types. For this implementation, it piggybacks off immer and adds a 'with' method to the record class.

License

Notifications You must be signed in to change notification settings

myty/immutable-record

Folders and files

NameName
Last commit message
Last commit date
Nov 5, 2024
Nov 5, 2024
Nov 5, 2024
Nov 5, 2024
Nov 5, 2024
Nov 5, 2024
Nov 5, 2024
Mar 27, 2022
Feb 14, 2021
Nov 5, 2024
Nov 5, 2024
Nov 5, 2024
Nov 5, 2024

Repository files navigation

Introduction

Built on immer, immutable recorda are class factories for immutable types.

Deno

deno add jsr:@myty/immutable-record

Node

npm install @myty/immutable-record

Usage

import { ImmutableConstructor, ImmutableRecord, ImmutableWith } from "@myty/immutable-record";

interface TestDataInterface {
  testNumber: number;
  testString: string;
  optionalString?: string;
}

const defaultValues: TestDataInterface = {
  testNumber: 1,
  testString: "test",
};

class TestClass extends ImmutableRecord<TestDataInterface>(defaultValues) {
  withTestNumber(testNumber: number) {
    return this.with({ testNumber });
  }
}

const value = new TestClass();
// { testNumber: 1, testString: 'test' }

const newValue = value.with({ testNumber: 2, optionalString: "test-optional" });
// { testNumber: 2, testString: 'test', optionalString: 'test-optional' }

Processing Nested Classes

interface TestParentClassInterface {
  data: TestDataInterface;
}

class TestParentClass extends ImmutableRecord<TestParentClassInterface>(
  { data: new TestClass() },
  (values) => {
    let { data } = values;

    if (!(data instanceof TestClass)) {
      data = new TestClass(data);
    }

    return { ...values, data };
  },
) {}

const value = new TestParentClass({
  data: { testNumber, testString },
});
// value.data instanceof TestClass === true

const value = new TestParentClass().with({
  data: { testNumber, testString },
});
// value.data instanceof TestClass === true

About

The sole purpose of this immutable record is to simply act as a class factory for immutable types. For this implementation, it piggybacks off immer and adds a 'with' method to the record class.

Topics

Resources

License

Stars

Watchers

Forks