{"version":3,"file":"FunctionalVector.cjs","sources":["../../../src/vector/FunctionalVector.ts"],"sourcesContent":["/**\n * @public\n * @deprecated use a simple Arrays\n */\nexport abstract class FunctionalVector<T = unknown> {\n  abstract get length(): number;\n\n  abstract get(index: number): T;\n\n  // Implement \"iterator protocol\"\n  *iterator(): Generator<T> {\n    for (let i = 0; i < this.length; i++) {\n      yield this.get(i);\n    }\n  }\n\n  set(index: number, value: T): void {\n    throw 'unsupported operation';\n  }\n\n  add(value: T): void {\n    throw 'unsupported operation';\n  }\n\n  push(...vals: T[]): number {\n    for (const v of vals) {\n      this.add(v);\n    }\n    return this.length;\n  }\n\n  // Implement \"iterable protocol\"\n  [Symbol.iterator]() {\n    return this.iterator();\n  }\n\n  forEach(iterator: (row: T, index: number, array: T[]) => void): void {\n    return vectorator(this).forEach(iterator);\n  }\n\n  map<V>(transform: (item: T, index: number, array: T[]) => V): V[] {\n    return vectorator(this).map(transform);\n  }\n\n  filter(predicate: (item: T, index: number, array: T[]) => boolean): T[] {\n    return vectorator(this).filter(predicate);\n  }\n\n  at(index: number): T | undefined {\n    return this.get(index);\n  }\n\n  toArray(): T[] {\n    const arr = new Array<T>(this.length);\n    for (let i = 0; i < this.length; i++) {\n      arr[i] = this.get(i);\n    }\n    return arr;\n  }\n\n  join(separator?: string | undefined): string {\n    return this.toArray().join(separator);\n  }\n\n  toJSON(): any {\n    return this.toArray();\n  }\n\n  //--------------------------\n  // Method not implemented\n  //--------------------------\n\n  [n: number]: T;\n\n  pop(): T | undefined {\n    throw new Error('Method not implemented.');\n  }\n  concat(...items: Array<ConcatArray<T>>): T[];\n  concat(...items: Array<T | ConcatArray<T>>): T[] {\n    throw new Error('Method not implemented.');\n  }\n  reverse(): T[] {\n    throw new Error('Method not implemented.');\n  }\n  shift(): T | undefined {\n    throw new Error('Method not implemented.');\n  }\n  sort(compareFn?: ((a: T, b: T) => number) | undefined): this {\n    throw new Error('Method not implemented.');\n  }\n  splice(start: number, deleteCount?: number | undefined): T[];\n  splice(start: number, deleteCount: number, ...items: T[]): T[] {\n    throw new Error('Method not implemented.');\n  }\n  unshift(...items: T[]): number {\n    throw new Error('Method not implemented.');\n  }\n  fill(value: T, start?: number | undefined, end?: number | undefined): this {\n    throw new Error('Method not implemented.');\n  }\n  copyWithin(target: number, start: number, end?: number | undefined): this {\n    throw new Error('Method not implemented.');\n  }\n  // Object not implemented\n  [Symbol.unscopables] = {};\n\n  //--------------------------------------------------------------------------------\n  // Delegated Array function -- these will not be efficient :grimmice:\n  //--------------------------------------------------------------------------------\n\n  slice(start?: number | undefined, end?: number | undefined): T[] {\n    return this.toArray().slice(start, end);\n  }\n  indexOf(searchElement: T, fromIndex?: number | undefined): number {\n    return this.toArray().indexOf(searchElement, fromIndex);\n  }\n  lastIndexOf(searchElement: T, fromIndex?: number | undefined): number {\n    return this.toArray().lastIndexOf(searchElement, fromIndex);\n  }\n  every<S extends T>(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): this is S[];\n  every(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean;\n  every(predicate: any, thisArg?: unknown): boolean {\n    return this.toArray().every(predicate, thisArg);\n  }\n  some(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean {\n    return this.toArray().some(predicate, thisArg);\n  }\n  reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T;\n  reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T, initialValue: T): T;\n  reduce<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): U;\n  reduce(callbackfn: unknown, initialValue?: unknown): T {\n    throw new Error('Method not implemented.');\n  }\n  reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): T;\n  reduceRight(\n    callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T,\n    initialValue: T\n  ): T;\n  reduceRight<U>(\n    callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U,\n    initialValue: U\n  ): U;\n  reduceRight(callbackfn: unknown, initialValue?: unknown): T {\n    throw new Error('Method not implemented.');\n  }\n  find<S extends T>(\n    predicate: (this: void, value: T, index: number, obj: T[]) => value is S,\n    thisArg?: any\n  ): S | undefined;\n  find(predicate: (value: T, index: number, obj: T[]) => unknown, thisArg?: any): T | undefined {\n    return this.toArray().find(predicate, thisArg);\n  }\n  findIndex(predicate: (value: T, index: number, obj: T[]) => unknown, thisArg?: any): number {\n    return this.toArray().findIndex(predicate, thisArg);\n  }\n  entries(): ArrayIterator<[number, T]> {\n    return this.toArray().entries();\n  }\n  keys(): ArrayIterator<number> {\n    return this.toArray().keys();\n  }\n  values(): ArrayIterator<T> {\n    return this.toArray().values();\n  }\n  includes(searchElement: T, fromIndex?: number | undefined): boolean {\n    return this.toArray().includes(searchElement, fromIndex);\n  }\n  flatMap<U, This = undefined>(\n    callback: (this: This, value: T, index: number, array: T[]) => U | readonly U[],\n    thisArg?: This | undefined\n  ): U[] {\n    return this.toArray().flatMap(callback, thisArg);\n  }\n  flat<A, D extends number = 1>(this: A, depth?: D | undefined): Array<FlatArray<A, D>> {\n    throw new Error('Method not implemented.');\n  }\n}\n\nconst emptyarray: any[] = [];\n\n/**\n * Use functional programming with your vector\n *\n * @deprecated use a simple Arrays\n */\nexport function vectorator<T>(vector: FunctionalVector<T>) {\n  return {\n    *[Symbol.iterator]() {\n      for (let i = 0; i < vector.length; i++) {\n        yield vector.get(i);\n      }\n    },\n\n    forEach(iterator: (row: T, index: number, array: T[]) => void): void {\n      for (let i = 0; i < vector.length; i++) {\n        iterator(vector.get(i), i, emptyarray);\n      }\n    },\n\n    map<V>(transform: (item: T, index: number, array: T[]) => V): V[] {\n      const result: V[] = [];\n      for (let i = 0; i < vector.length; i++) {\n        result.push(transform(vector.get(i), i, emptyarray));\n      }\n      return result;\n    },\n\n    /** Add a predicate where you return true if it should *keep* the value */\n    filter(predicate: (item: T, index: number, array: T[]) => boolean): T[] {\n      const result: T[] = [];\n      let count = 0;\n      for (const val of this) {\n        if (predicate(val, count++, emptyarray)) {\n          result.push(val);\n        }\n      }\n      return result;\n    },\n  };\n}\n"],"names":[],"mappings":"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"}