Composite keys, TC39 proposal-richer-keys, compositeKey implementation.
deno:
deno add @miyauci/composite-key
node:
npx jsr add @miyauci/composite-key
Return reference consisting of a component. This allows using a Map
, Set
and
WeakMap
to weakly and/or privately associate data with the lifetime of a group
of values.
It requires at least one component must be object that can be placed in a
WeakMap
.
import { compositeKey } from "@miyauci/composite-key";
import { assertEquals, assertNotEquals } from "@std/assert";
declare const fn: (a: number, b: number) => number;
assertEquals(compositeKey(fn, 0, 1), compositeKey(fn, 0, 1));
assertNotEquals(compositeKey(fn, 1, 0), compositeKey(fn, 0, 1));
// @ts-expect-error it require one of more object.
compositeKey(0, 1);
Return Symbol
consisting of a component. This allows strongly attaching data
to an object that is associated with a group of values.
import { compositeSymbol } from "@miyauci/composite-key";
import { assertEquals, assertNotEquals } from "@std/assert";
declare const object: object;
assertEquals(compositeSymbol(0, 1), compositeSymbol(0, 1));
assertEquals(compositeSymbol(0, object), compositeSymbol(0, object));
assertNotEquals(compositeSymbol(0), compositeSymbol(1));
assertNotEquals(compositeSymbol(0, {}), compositeSymbol(0, {}));
Polyfill affects the global object. You must be very careful when using it.
import "@miyauci/composite-key/polyfill";
import { assert } from "@std/assert";
assert(compositeKey);
assert(compositeSymbol);
See jsr doc for all APIs.
Copyright © 2023-present Tomoki Miyauchi.
Released under the MIT license