composite-key
TypeScript icon, indicating that this package has built-in type declarations

1.0.0 • Public • Published

composite-key

deno land deno doc GitHub release (latest by date) codecov GitHub

test NPM

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

Package Sidebar

Install

npm i composite-key

Weekly Downloads

543

Version

1.0.0

License

MIT

Unpacked Size

23.1 kB

Total Files

25

Last publish

Collaborators

  • miyauci