import { _shuffle } from './array.util.js' /** * Better Array. * * @experimental */ export class Array2 extends Array { static override of(...items: T[]): Array2 { return new Array2(...items) } // oxlint-disable-next-line @typescript-eslint/class-literal-property-style get [Symbol.toStringTag](): string { return 'Array2' } firstOrUndefined(): T | undefined { return this[0] } first(): T { if (!this.length) throw new Error('Array.first called on empty array') return this[0]! } lastOrUndefined(): T | undefined { return this[this.length - 1] } last(): T { const { length } = this if (!length) throw new Error('Array.last called on empty array') return this[length - 1]! } uniq(): Array2 { return new Array2(...new Set(this)) } shuffle(): Array2 { return new Array2(..._shuffle(this)) } isEmpty(): boolean { return this.length === 0 } isNotEmpty(): boolean { return this.length !== 0 } }