@triviality/core
Version:
Purely typed service container
33 lines (23 loc) • 882 B
text/typescript
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;