1.3.4 • Published 3 months ago

record-tuple v1.3.4

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

Record & Tuple

Lightweight, typed implementation of the Records and Tuples proposal, only supports standard library. See @bloomberg/record-tuple-polyfill for experimental syntax support with a babel transform.

Installation

npm install record-tuple

Basic Usage

import { Tuple, Record } from "record-tuple";

// Returns native data structures
JSON.stringify(Tuple(1, 2, 3)); // "[1, 2, 3]"
JSON.stringify(Record({ a: "a", b: "b" })); // '{"a":"a","b":"b"}'

// Structural equality
Tuple(1, 2, 3) === Tuple(1, 2, 3); // true
Record({ a: "a", b: "b" }) === Record({ a: "a", b: "b" }); // true

// Records ignore property order
Record({ a: "a", b: "b" }) === Record({ b: "b", a: "a" }); // true
JSON.stringify(Record({ b: "b", a: "a" })); // '{"a":"a","b":"b"}'

// As Map/Set keys
const map = new Map();

map.set(Tuple(1, 2, 3), "value 1");
map.set(Record({ a: "a" }), "value 2");

map.get(Tuple(1, 2, 3)); // "value 1"
map.get(Record({ a: "a" })); // "value 2"

// Types
const tuple: Tuple<[number, number]> = Tuple(1, 2);
const tuple: Tuple<[number, number]> = [1, 2]; // TypeError
const tuple: Tuple<[number, number]> = Tuple(1, 2, 3); // TypeError

const record: Record<{ a: string }> = Record({ a: "a" });
const record: Record<{ a: string }> = { a: "a" }; // TypeError

RecordTuple

RecordTuple allows for generic immutable data structure creation.\ RecordTuple.deep does the same, but deeply.

import { RecordTuple, Tuple, Record } from "record-tuple";

RecordTuple([1, 2, 3]) === Tuple(1, 2, 3);
RecordTuple({ a: "a", b: "b" }) === Record({ a: "a", b: "b" });

RecordTuple.deep([
  { a: "a", b: "b" },
  { c: "c", d: "d" },
]) === Tuple(Record({ a: "a", b: "b" }), Record({ c: "c", d: "d" }));
1.3.4

3 months ago

1.3.3

3 months ago

1.3.2

10 months ago

1.2.0

1 year ago

1.1.1

1 year ago

1.0.2

1 year ago

1.1.0

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago

1.3.1

1 year ago

1.3.0

1 year ago

0.1.0

1 year ago

0.0.5

1 year ago

0.0.4

1 year ago

0.0.3

1 year ago

0.0.2

1 year ago

0.0.1

1 year ago