UNPKG

@triviality/core

Version:
33 lines (23 loc) 882 B
import { Registry } from './Registry'; export const REGISTER_LIST_ARGUMENTS = Symbol.for('REGISTER_LIST_ARGUMENTS'); export class ImmutableRegistryList<T> extends Array<T> implements Registry<T> { public static create<T>(...items: T[]): ImmutableRegistryList<T> { const instance: ImmutableRegistryList<T> = Object.create(ImmutableRegistryList.prototype); instance.splice(0, 0, ...items); Object.freeze(instance); return instance; } public [REGISTER_LIST_ARGUMENTS]!: T; /* istanbul ignore next */ private constructor() { super(); } public register(...args: T[]): ImmutableRegistryList<T> { return ImmutableRegistryList.create(...[...this, ...args]); } public toArray(): T[] { return [...this]; } } export type RegistryList<T> = ImmutableRegistryList<T>; export const makeImmutableRegistryList = ImmutableRegistryList.create;