Composite keys, TC39 proposal-richer-keys of compositeKey implementation
npm install composite-key






Composite keys, TC39
proposal-richer-keys, compositeKey
implementation.
This project provides ponyfill and polyfill.
Polyfill has a side effect, so the endpoint is isolated.
The entrypoint of each are as follows:
| Type | Entrypoint |
| -------- | ------------- |
| Ponyfill | mod.ts |
| Polyfill | polyfill.ts |
Return reference consisting of a component. This allows using a Map, Set andWeakMap 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 aWeakMap.
``ts
import { compositeKey } from "https://deno.land/x/composite_key@$VERSION/mod.ts";
import {
assertEquals,
assertNotEquals,
} from "https://deno.land/std/testing/asserts.ts";
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.
`ts
import { compositeSymbol } from "https://deno.land/x/composite_key@$VERSION/mod.ts";
import {
assertEquals,
assertNotEquals,
} from "https://deno.land/std/testing/asserts.ts";
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.
`ts
import "https://deno.land/x/composite_key@$VERSION/polyfill.ts";
import { assert } from "https://deno.land/std/testing/asserts.ts";
assert(compositeKey);
assert(compositeSymbol);
``
See deno doc for all APIs.
Copyright © 2023-present Tomoki Miyauchi.
Released under the MIT license