collection-core
NOTE: collection-core
has been deprecated in favor of @esfx/collection-core
and @esfx/collection-core-shim
.
Please update your references.
The collection-core
package provides a low-level Symbol-based API for defining common collection characteristics.
Overview
Installation
npm i collection-core
Usage
Basic Usage
import { Collection } from "collection-core";
class MyCollection {
constructor() {
this._items = new Set();
}
get count() { return this._items.size; }
contains(value) { return this._items.has(value); }
add(value) { this._items.add(value); }
remove(value) { return this._items.delete(value); }
clear() { this._items.clear(); }
get [Collection.size]() { return this.count; }
[Collection.has](value) { return this.contains(value); }
[Collection.add](value) { this.add(value); }
[Collection.delete](value) { return this.remove(value); }
[Collection.clear]() { this.clear(); }
[Symbol.iterator]() { return this._items.values(); }
}
Global Shim
The global shim adds a default implementation the collection interfaces to the following global objects:
Array
implements:
ReadonlyCollection
Collection
ReadonlyIndexedCollection
FixedSizeIndexedCollection
IndexedCollection
Uint8Array
implements:
ReadonlyCollection
ReadonlyIndexedCollection
FixedSizeIndexedCollection
Uint8ClampedArray
implements:
ReadonlyCollection
ReadonlyIndexedCollection
FixedSizeIndexedCollection
Uint16Array
implements:
ReadonlyCollection
ReadonlyIndexedCollection
FixedSizeIndexedCollection
Uint32Array
implements:
ReadonlyCollection
ReadonlyIndexedCollection
FixedSizeIndexedCollection
Int8Array
implements:
ReadonlyCollection
ReadonlyIndexedCollection
FixedSizeIndexedCollection
Int16Array
implements:
ReadonlyCollection
ReadonlyIndexedCollection
FixedSizeIndexedCollection
Int32Array
implements:
ReadonlyCollection
ReadonlyIndexedCollection
FixedSizeIndexedCollection
Float32Array
implements:
ReadonlyCollection
ReadonlyIndexedCollection
FixedSizeIndexedCollection
Float64Array
implements:
ReadonlyCollection
ReadonlyIndexedCollection
FixedSizeIndexedCollection
BigUint64Array
implements:
ReadonlyCollection
ReadonlyIndexedCollection
FixedSizeIndexedCollection
BigInt64Array
implements:
ReadonlyCollection
ReadonlyIndexedCollection
FixedSizeIndexedCollection
Set
implements:
ReadonlyCollection
Collection
Map
implements:
ReadonlyKeyedCollection
KeyedCollection
To install the global shim, import collection-core/global
:
import "collection-core/global";
[1, 2, 3][Collection.size];
API
- ReadonlyCollection - The minimal set of operations needed to read from a collection.
- Collection - The minimal set of operations needed to read from and write to a collection.
- ReadonlyIndexedCollection - The minimal set of operations needed to read from an integer-indexed collection.
- FixedSizeIndexedCollection - The minimal set of operations needed to read from or write to an integer-indexed collection where the size may be fixed (such as with Typed Arrays).
- IndexedCollection - The minimal set of operations needed to read from or write to an integer-indexed collection.
- ReadonlyKeyedCollection - The minimal set of operations needed to read from a keyed collection.
- KeyedCollection - The minimal set of operations needed to read from or write to a keyed collection.
ReadonlyCollection
export interface ReadonlyCollection<T> extends Iterable<T> {
readonly [ReadonlyCollection.size]: number;
[ReadonlyCollection.has](value: T): boolean;
}
export declare namespace ReadonlyCollection {
export const size: unique symbol;
export const has: unique symbol;
export function isReadonlyCollection<T>(value: Iterable<T>): value is ReadonlyCollection<T>;
export function isReadonlyCollection(value: any): value is ReadonlyCollection<unknown>;
}
Collection
export interface Collection<T> extends ReadonlyCollection<T> {
[Collection.add](value: T): void;
[Collection.delete](value: T): boolean;
[Collection.clear](): void;
}
export declare namespace Collection {
export import size = ReadonlyCollection.size;
export import has = ReadonlyCollection.has;
export import isReadonlyCollection = ReadonlyCollection.isReadonlyCollection;
export const add: unique symbol;
export const clear: unique symbol;
const _delete: unique symbol;
export { _delete as delete };
export function isCollection<T>(value: Iterable<T>): value is Collection<T>;
export function isCollection(value: any): value is Collection<unknown>;
}
ReadonlyIndexedCollection
export interface ReadonlyIndexedCollection<T> extends ReadonlyCollection<T> {
[ReadonlyIndexedCollection.indexOf](value: T, fromIndex?: number): number;
[ReadonlyIndexedCollection.getAt](index: number): T | undefined;
}
export declare namespace ReadonlyIndexedCollection {
export import size = ReadonlyCollection.size;
export import has = ReadonlyCollection.has;
export import isReadonlyCollection = ReadonlyCollection.isReadonlyCollection;
export const indexOf: unique symbol;
export const getAt: unique symbol;
export function isReadonlyIndexedCollection<T>(value: Iterable<T>): value is ReadonlyIndexedCollection<T>;
export function isReadonlyIndexedCollection(value: unknown): value is ReadonlyIndexedCollection<unknown>;
}
FixedSizeIndexedCollection
export interface FixedSizeIndexedCollection<T> extends ReadonlyIndexedCollection<T> {
[FixedSizeIndexedCollection.setAt](index: number, value: T): boolean;
}
export declare namespace FixedSizeIndexedCollection {
export import size = ReadonlyCollection.size;
export import has = ReadonlyCollection.has;
export import isReadonlyCollection = ReadonlyCollection.isReadonlyCollection;
export import indexOf = ReadonlyIndexedCollection.indexOf;
export import getAt = ReadonlyIndexedCollection.getAt;
export import isReadonlyIndexedCollection = ReadonlyIndexedCollection.isReadonlyIndexedCollection;
export const setAt: unique symbol;
export function isFixedSizeIndexedCollection<T>(value: Iterable<T>): value is FixedSizeIndexedCollection<T>;
export function isFixedSizeIndexedCollection(value: unknown): value is FixedSizeIndexedCollection<unknown>;
}
IndexedCollection
export interface IndexedCollection<T> extends FixedSizeIndexedCollection<T>, Collection<T> {
[IndexedCollection.insertAt](index: number, value: T): void;
[IndexedCollection.removeAt](index: number): void;
}
export declare namespace IndexedCollection {
export import size = ReadonlyCollection.size;
export import has = ReadonlyCollection.has;
export import isReadonlyCollection = ReadonlyCollection.isReadonlyCollection;
export import indexOf = ReadonlyIndexedCollection.indexOf;
export import getAt = ReadonlyIndexedCollection.getAt;
export import isReadonlyIndexedCollection = ReadonlyIndexedCollection.isReadonlyIndexedCollection;
export import setAt = FixedSizeIndexedCollection.setAt;
export import isFixedSizeIndexedCollection = FixedSizeIndexedCollection.isFixedSizeIndexedCollection;
export import add = Collection.add;
export import clear = Collection.clear;
export import isCollection = Collection.isCollection;
const _delete: typeof Collection.delete;
export { _delete as delete };
export const insertAt: unique symbol;
export const removeAt: unique symbol;
export function isIndexedCollection<T>(value: Iterable<T>): value is IndexedCollection<T>;
export function isIndexedCollection(value: unknown): value is IndexedCollection<unknown>;
}
ReadonlyKeyedCollection
export interface ReadonlyKeyedCollection<K, V> extends Iterable<[K, V]> {
readonly [ReadonlyKeyedCollection.size]: number;
[ReadonlyKeyedCollection.has](key: K): boolean;
[ReadonlyKeyedCollection.get](key: K): V | undefined;
[ReadonlyKeyedCollection.keys](): IterableIterator<K>;
[ReadonlyKeyedCollection.values](): IterableIterator<V>;
}
export declare namespace ReadonlyKeyedCollection {
export const size: unique symbol;
export const has: unique symbol;
export const get: unique symbol;
export const keys: unique symbol;
export const values: unique symbol;
export function isReadonlyKeyedCollection<K, V>(value: Iterable<[K, V]>): value is ReadonlyKeyedCollection<K, V>;
export function isReadonlyKeyedCollection(value: unknown): value is ReadonlyKeyedCollection<unknown, unknown>;
}
KeyedCollection
export interface KeyedCollection<K, V> extends ReadonlyKeyedCollection<K, V> {
[KeyedCollection.set](key: K, value: V): void;
[KeyedCollection.delete](key: K): boolean;
[KeyedCollection.clear](): void;
}
export declare namespace KeyedCollection {
export import size = ReadonlyKeyedCollection.size;
export import has = ReadonlyKeyedCollection.has;
export import get = ReadonlyKeyedCollection.get;
export import keys = ReadonlyKeyedCollection.keys;
export import values = ReadonlyKeyedCollection.values;
export import isReadonlyKeyedCollection = ReadonlyKeyedCollection.isReadonlyKeyedCollection;
export const set: unique symbol;
const _delete: unique symbol;
export { _delete as delete };
export const clear: unique symbol;
export function isKeyedCollection<K, V>(value: Iterable<[K, V]>): value is KeyedCollection<K, V>;
export function isKeyedCollection(value: unknown): value is KeyedCollection<unknown, unknown>;
}