composite-key
v1.0.0
Published
Composite keys, TC39 proposal-richer-keys of compositeKey implementation
Downloads
2,783
Maintainers
Readme
composite-key
Composite keys, TC39 proposal-richer-keys, compositeKey implementation.
Entrypoint
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
|
compositeKey
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 "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);
compositeSymbol
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 "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
Polyfill affects the global object. You must be very careful when using it.
import "https://deno.land/x/composite_key@$VERSION/polyfill.ts";
import { assert } from "https://deno.land/std/testing/asserts.ts";
assert(compositeKey);
assert(compositeSymbol);
API
See deno doc for all APIs.
License
Copyright © 2023-present Tomoki Miyauchi.
Released under the MIT license