{"version":3,"sources":["../src/utils/graph.ts","../src/utils/linkedList.ts","../src/LinkedNode.ts","../src/LinkedList.ts","../src/Queue.ts","../src/Graph.ts","../src/Stack.ts","../src/AcyclicGraph.ts","../src/utils/stringify.ts","../src/BinaryNode.ts","../src/utils/binaryTree.ts","../src/BinaryTree.ts","../src/BloomFilter.ts","../src/utils/bloomFilter.ts","../src/utils/heap.ts","../src/Heap.ts","../src/PriorityQueue.ts","../src/TrieNode.ts","../src/Trie.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Graph } from 'src/Graph.js';\n\nexport type GraphTraversalCallback<N> = (node: N, graph: Graph<N>) => void;\n\nexport function dfs<N>(\n  graph: Graph<N>,\n  node: N,\n  cb: GraphTraversalCallback<N>,\n  visited: Set<N> = new Set(),\n) {\n  if (!graph.has(node) || visited.has(node)) return;\n  cb(node, graph);\n  visited.add(node);\n  graph.getAdjacentNodes(node)!.forEach(neighbor => {\n    if (!visited.has(neighbor)) {\n      dfs(graph, neighbor, cb, visited);\n    }\n  });\n}\n\nexport function dfsbt<N>(\n  graph: Graph<N>,\n  node: N,\n  cb: GraphTraversalCallback<N>,\n  visited: Set<N> = new Set(),\n) {\n  if (!graph.has(node) || visited.has(node)) return;\n  visited.add(node);\n  graph.getAdjacentNodes(node)!.forEach(neighbor => {\n    if (!visited.has(neighbor)) {\n      dfsbt(graph, neighbor, cb, visited);\n    }\n  });\n  cb(node, graph);\n}\n\nexport function isCyclic<N>(\n  graph: Graph<N>,\n  source: N,\n  target: N,\n  visited = new Set<N>(),\n) {\n  if (source === target) return true;\n  if (!graph.has(source) || !graph.has(target)) return false;\n  if (graph.isAdjacent(target, source)) return true;\n  visited.add(target);\n  const neighbors = graph.getAdjacentNodes(target);\n  if (!neighbors?.length) return false;\n  for (const neighbor of neighbors) {\n    if (!visited.has(neighbor) && isCyclic(graph, source, neighbor, visited)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport class CycleError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = 'CycleError';\n  }\n}\n","import type { LinkedNode } from 'src/LinkedNode.js';\n\nexport class LinkedListIterator<Value> {\n  private current: LinkedNode<Value> | null;\n\n  constructor(head: LinkedNode<Value> | null) {\n    this.current = head;\n  }\n\n  [Symbol.iterator]() {\n    return this;\n  }\n\n  next() {\n    if (this.current) {\n      const result = { value: this.current.value, done: false };\n      this.current = this.current.next;\n      return result;\n    }\n    return { value: undefined, done: true };\n  }\n}\n","export class LinkedNode<Value> {\n  value: Value;\n\n  next: LinkedNode<Value> | null = null;\n\n  constructor(value: Value, next?: LinkedNode<Value> | null) {\n    this.value = value;\n    this.next = next ?? null;\n  }\n\n  setNext(node: LinkedNode<Value> | null) {\n    this.next = node;\n  }\n}\n","import { LinkedListIterator } from './utils/linkedList.js';\nimport { LinkedNode } from './LinkedNode.js';\n\nexport class LinkedList<Value> {\n  head: LinkedNode<Value> | null = null;\n\n  tail: LinkedNode<Value> | null = null;\n\n  constructor(value?: Value) {\n    if (arguments.length) {\n      this.head = new LinkedNode(value!);\n      this.tail = this.head;\n    }\n  }\n\n  static from<V>(iterable: Iterable<V>) {\n    const list = new LinkedList<V>();\n    for (const value of iterable) {\n      list.addTail(value);\n    }\n    return list;\n  }\n\n  [Symbol.iterator]() {\n    return new LinkedListIterator(this.head);\n  }\n\n  addHead(value: Value) {\n    const next = this.head;\n    this.head = new LinkedNode(value, next);\n    if (!this.tail) {\n      this.tail = this.head;\n    }\n    return this;\n  }\n\n  addTail(value: Value) {\n    const tail = new LinkedNode(value);\n    if (this.isEmpty()) {\n      this.head = tail;\n      this.tail = tail;\n    } else {\n      this.tail!.next = tail;\n      this.tail = tail;\n    }\n    return this;\n  }\n\n  clear() {\n    this.head = null;\n    this.tail = null;\n    return true;\n  }\n\n  contains(value: Value) {\n    let node = this.head;\n    if (!node) return false;\n    if (!node.next || node.next === this.head) {\n      return Object.is(node.value, value);\n    }\n    while (node.next) {\n      if (Object.is(node.next.value, value)) {\n        return true;\n      }\n      if (node.next === this.tail) {\n        return false;\n      }\n      node = node.next;\n    }\n    return false;\n  }\n\n  getHead() {\n    return this.head?.value;\n  }\n\n  getTail() {\n    return this.tail?.value;\n  }\n\n  isCircular() {\n    if (this.isEmpty()) return false;\n    let slow = this.head;\n    let fast = this.head;\n    while (fast && fast.next) {\n      slow = slow!.next;\n      fast = fast.next.next;\n      if (slow === fast) return true;\n    }\n    return false;\n  }\n\n  isEmpty() {\n    return this.head === null;\n  }\n\n  remove(value: Value) {\n    let node = this.head;\n    if (!node) return false;\n    if (!node.next || node.next === this.head) {\n      if (Object.is(node.value, value)) {\n        this.clear();\n        return true;\n      }\n      return false;\n    }\n    while (node.next) {\n      if (Object.is(node.next.value, value)) {\n        const removed = node.next;\n        node.setNext(removed.next);\n        if (this.tail === removed) {\n          this.tail = node;\n        }\n        return true;\n      }\n      if (node.next === this.tail) {\n        return false;\n      }\n      node = node.next;\n    }\n    return false;\n  }\n\n  removeHead() {\n    const removed = this.head;\n    if (!removed?.next) {\n      this.clear();\n    } else {\n      this.head = removed.next;\n    }\n    return removed?.value;\n  }\n\n  removeTail() {\n    let node = this.head;\n    if (!node) return undefined;\n    if (!node.next || node.next === this.head) {\n      this.clear();\n      return node.value;\n    }\n    while (node.next) {\n      if (node.next === this.tail) {\n        const removed = node.next;\n        node.setNext(removed.next);\n        this.tail = node;\n        return removed.value;\n      }\n      node = node.next;\n    }\n    return undefined;\n  }\n\n  size() {\n    let count = 0;\n    let node = this.head;\n    while (node) {\n      count++;\n      if (node === this.tail) break;\n      node = node.next;\n    }\n    return count;\n  }\n}\n","import { LinkedList } from './LinkedList.js';\n\nexport class Queue<Value> extends LinkedList<Value> {\n  constructor(iterable?: Iterable<Value>) {\n    super();\n    if (iterable) {\n      for (const value of iterable) {\n        this.enqueue(value);\n      }\n    }\n  }\n\n  static override from<V>(iterable: Iterable<V>) {\n    return new Queue(iterable);\n  }\n\n  enqueue(value: Value) {\n    return this.addTail(value);\n  }\n\n  dequeue() {\n    return this.removeHead();\n  }\n\n  peek() {\n    return this.getHead();\n  }\n}\n","import { dfs, type GraphTraversalCallback } from './utils/graph.js';\nimport { Queue } from './Queue.js';\n\nexport class Graph<N> {\n  private nodes = new Map<N, Set<N>>();\n\n  addNode(node: N) {\n    if (!this.has(node)) {\n      this.nodes.set(node, new Set());\n    }\n    return this;\n  }\n\n  removeNode(node: N) {\n    if (!this.has(node)) return false;\n    for (const [, adjacentNodes] of this.nodes.entries()) {\n      adjacentNodes.delete(node);\n    }\n    return this.nodes.delete(node);\n  }\n\n  addEdge(sourceNode: N, targerNode: N) {\n    if (!this.has(sourceNode)) {\n      this.addNode(sourceNode);\n    }\n    if (!this.has(targerNode)) {\n      this.addNode(targerNode);\n    }\n    const adjacentNodes = this.nodes.get(sourceNode)!;\n    if (adjacentNodes.has(targerNode)) return false;\n    adjacentNodes.add(targerNode);\n    return true;\n  }\n\n  removeEdge(sourceNode: N, targerNode: N) {\n    const adjacentNodes = this.nodes.get(sourceNode);\n    if (!adjacentNodes) return false;\n    return adjacentNodes.delete(targerNode);\n  }\n\n  has(node: N) {\n    return this.nodes.has(node);\n  }\n\n  getAdjacentNodes(node: N) {\n    const adjacentNodes = this.nodes.get(node);\n    if (!adjacentNodes) return undefined;\n    return Array.from(adjacentNodes);\n  }\n\n  isAdjacent(sourceNode: N, targerNode: N) {\n    const adjacentNodes = this.nodes.get(sourceNode);\n    if (!adjacentNodes) return false;\n    return adjacentNodes.has(targerNode);\n  }\n\n  getInDegree(node: N) {\n    let inDegree = 0;\n    for (const [, adjacentNodes] of this.nodes.entries()) {\n      if (adjacentNodes.has(node)) {\n        inDegree++;\n      }\n    }\n    return inDegree;\n  }\n\n  getOutDegree(node: N) {\n    return this.nodes.get(node)?.size ?? 0;\n  }\n\n  forEachDFS(node: N, cb: GraphTraversalCallback<N>) {\n    dfs(this, node, cb);\n  }\n\n  forEachBFS(node: N, cb: GraphTraversalCallback<N>) {\n    const queue = new Queue([node]);\n    const visited = new Set([node]);\n\n    while (!queue.isEmpty()) {\n      const currentNode = queue.dequeue()!;\n      cb(currentNode, this);\n      this.getAdjacentNodes(currentNode)?.forEach(neighbor => {\n        if (!visited.has(neighbor)) {\n          visited.add(neighbor);\n          queue.enqueue(neighbor);\n        }\n      });\n    }\n  }\n\n  entries() {\n    return this.nodes.entries();\n  }\n}\n","export class Stack<Value> extends Array<Value> {\n  constructor(iterable?: Iterable<Value>) {\n    super();\n    if (iterable) {\n      for (const value of iterable) {\n        this.push(value);\n      }\n    }\n  }\n\n  static override from<V>(arrayLike: ArrayLike<V> | Iterable<V>) {\n    return new Stack(Array.from(arrayLike));\n  }\n\n  clear() {\n    this.length = 0;\n  }\n\n  isEmpty() {\n    return !this.length;\n  }\n\n  peek() {\n    return this[this.length - 1];\n  }\n\n  size() {\n    return this.length;\n  }\n}\n","import { CycleError, dfsbt, isCyclic } from './utils/graph.js';\nimport { Graph } from './Graph.js';\nimport { Stack } from './Stack.js';\n\nexport class AcyclicGraph<N> extends Graph<N> {\n  override addEdge(sourceNode: N, targerNode: N): boolean {\n    if (isCyclic(this, sourceNode, targerNode)) {\n      throw new CycleError('Adding edge creates a cycle');\n    }\n    return super.addEdge(sourceNode, targerNode);\n  }\n\n  toSorted(sourceNode?: N) {\n    const stack = new Stack<N>();\n    const visited = new Set<N>();\n    const cb = (node: N) => stack.push(node);\n    if (arguments.length) {\n      dfsbt(this, sourceNode!, cb, visited);\n    } else {\n      Array.from(this.entries()).forEach(([node]) => {\n        dfsbt(this, node, cb, visited);\n      });\n    }\n    return Array.from(stack).reverse();\n  }\n}\n","const jsonPrimitiveTypes = ['string', 'number', 'boolean'];\n\nexport function stringify(value: unknown): string {\n  if (!arguments.length) return '';\n\n  if (value === null || jsonPrimitiveTypes.includes(typeof value)) {\n    return JSON.stringify(value);\n  }\n\n  if (value === undefined) return 'undefined';\n\n  if (typeof value === 'bigint') {\n    return `BigInt(${value.toString()})`;\n  }\n\n  if (typeof value === 'symbol') {\n    return value.toString();\n  }\n\n  if (typeof value === 'function') {\n    return `Function(${value.toString().replace(/\\s+/g, '')})`;\n  }\n\n  if (Array.isArray(value)) {\n    return `[${value.map(item => stringify(item)).join(',')}]`;\n  }\n\n  if (value instanceof Date) {\n    return `Date(${value.toISOString()})`;\n  }\n\n  if (value instanceof Set) {\n    return `Set(${stringify(Array.from(value))})`;\n  }\n\n  if (value instanceof Map) {\n    return `Map(${stringify(Array.from(value.entries()))})`;\n  }\n\n  const sortedKeys = Object.keys(value).sort();\n  // eslint-disable-next-line @typescript-eslint/no-base-to-string\n  const string = value.toString();\n\n  if (!sortedKeys.length && !string.startsWith('[object')) {\n    return `${value.constructor.name}(${string})`;\n  }\n\n  return `{${sortedKeys\n    .map(\n      key => `${stringify(key)}:${stringify(value[key as keyof typeof value])}`,\n    )\n    .join(',')}}`;\n}\n","import { stringify } from './utils/stringify.js';\n\nexport class BinaryNode<Value> {\n  private key: string;\n\n  value: Value;\n\n  left: BinaryNode<Value> | null = null;\n\n  right: BinaryNode<Value> | null = null;\n\n  constructor(value: Value) {\n    this.key = stringify(value);\n    this.value = value;\n  }\n\n  isNumeric() {\n    return (\n      (typeof this.value === 'number' || typeof this.value === 'bigint') &&\n      !Number.isNaN(this.value)\n    );\n  }\n\n  compare<V>(node: BinaryNode<V>) {\n    if (this.isNumeric() && node.isNumeric()) {\n      if ((this.value as number | bigint) > (node.value as number | bigint)) {\n        return 1;\n      }\n      if ((this.value as number | bigint) < (node.value as number | bigint)) {\n        return -1;\n      }\n      return 0;\n    }\n    return this.key.localeCompare(node.key);\n  }\n\n  equals<V>(node: BinaryNode<V>) {\n    return this.key === node.key;\n  }\n\n  strictEquals(node: BinaryNode<Value>) {\n    return Object.is(this.value, node.value);\n  }\n\n  getValue() {\n    return this.value;\n  }\n\n  getKey() {\n    return this.key;\n  }\n\n  setValue(value: Value) {\n    this.key = stringify(value);\n    this.value = value;\n  }\n}\n","import type { BinaryNode } from 'src/BinaryNode.js';\nimport type { BinaryTree } from 'src/BinaryTree.js';\n\nexport type BinaryTreeCallbackFn<V> = (\n  value: V,\n  node: BinaryNode<V>,\n  tree: BinaryTree<V>,\n) => void;\n\nexport function insertNode<Value>(\n  root: BinaryNode<Value>,\n  node: BinaryNode<Value>,\n) {\n  if (node.compare(root) < 0) {\n    if (!root.left) {\n      root.left = node;\n      return true;\n    }\n    return insertNode(root.left, node);\n  }\n  if (!root.right) {\n    root.right = node;\n    return true;\n  }\n  return insertNode(root.right, node);\n}\n\nexport function searchNode<Value>(\n  root: BinaryNode<Value> | null,\n  node: BinaryNode<Value>,\n) {\n  if (!root) return false;\n  if (node.compare(root) < 0) {\n    return searchNode(root.left, node);\n  }\n  if (node.compare(root) > 0 || !node.strictEquals(root)) {\n    return searchNode(root.right, node);\n  }\n  return true;\n}\n\nfunction findMax<Value>(root: BinaryNode<Value>) {\n  let node = root;\n  while (node.right) {\n    node = node.right;\n  }\n  return node;\n}\n\nexport function deleteNode<Value>(\n  root: BinaryNode<Value> | null,\n  node: BinaryNode<Value>,\n) {\n  if (!root) return null;\n  if (node.compare(root) < 0) {\n    root.left = deleteNode(root.left, node);\n    return root;\n  }\n  if (\n    node.compare(root) > 0 ||\n    (!node.compare(root) && !node.strictEquals(root))\n  ) {\n    root.right = deleteNode(root.right, node);\n    return root;\n  }\n  if (!root.left) return root.right;\n  if (!root.right) return root.left;\n  const deepestRight = findMax(root.left);\n  root.setValue(deepestRight.value);\n  root.left = deleteNode(root.left, deepestRight);\n  return root;\n}\n\nexport function traverseInOrder<Value>(\n  node: BinaryNode<Value> | null,\n  tree: BinaryTree<Value>,\n  cb: BinaryTreeCallbackFn<Value>,\n) {\n  if (node) {\n    traverseInOrder(node.left, tree, cb);\n    cb(node.value, node, tree);\n    traverseInOrder(node.right, tree, cb);\n  }\n}\n\nexport function traversePreOrder<Value>(\n  node: BinaryNode<Value> | null,\n  tree: BinaryTree<Value>,\n  cb: BinaryTreeCallbackFn<Value>,\n) {\n  if (node) {\n    cb(node.value, node, tree);\n    traverseInOrder(node.left, tree, cb);\n    traverseInOrder(node.right, tree, cb);\n  }\n}\n\nexport function traversePostOrder<Value>(\n  node: BinaryNode<Value> | null,\n  tree: BinaryTree<Value>,\n  cb: BinaryTreeCallbackFn<Value>,\n) {\n  if (node) {\n    traverseInOrder(node.left, tree, cb);\n    traverseInOrder(node.right, tree, cb);\n    cb(node.value, node, tree);\n  }\n}\n","import {\n  type BinaryTreeCallbackFn,\n  deleteNode,\n  insertNode,\n  searchNode,\n  traverseInOrder,\n  traversePostOrder,\n  traversePreOrder,\n} from './utils/binaryTree.js';\nimport { BinaryNode } from './BinaryNode.js';\n\nexport class BinaryTree<Value> {\n  root: BinaryNode<Value> | null = null;\n\n  constructor(rootValue?: Value) {\n    if (arguments.length) {\n      this.root = new BinaryNode(rootValue!);\n    }\n  }\n\n  static from<V>(values: Iterable<V>) {\n    const tree = new BinaryTree<V>();\n    for (const value of values) {\n      tree.add(value);\n    }\n    return tree;\n  }\n\n  add(value: Value) {\n    const node = new BinaryNode(value);\n    if (this.isEmpty()) {\n      this.root = node;\n      return this;\n    }\n    insertNode(this.root!, node);\n    return this;\n  }\n\n  isEmpty() {\n    return !this.root;\n  }\n\n  contains(value: Value) {\n    const node = new BinaryNode(value);\n    return searchNode(this.root, node);\n  }\n\n  delete(value: Value) {\n    const node = new BinaryNode(value);\n    this.root = deleteNode(this.root, node);\n  }\n\n  height(node = this.root): number {\n    if (!node) return -1;\n    const leftHeight = this.height(node.left);\n    const rightHeight = this.height(node.right);\n    return Math.max(leftHeight, rightHeight) + 1;\n  }\n\n  size(node = this.root): number {\n    if (!node) return 0;\n    return this.size(node.left) + this.size(node.right) + 1;\n  }\n\n  forEachInOrder(cb: BinaryTreeCallbackFn<Value>) {\n    traverseInOrder(this.root, this, cb);\n  }\n\n  forEachPreOrder(cb: BinaryTreeCallbackFn<Value>) {\n    traversePreOrder(this.root, this, cb);\n  }\n\n  forEachPostOrder(cb: BinaryTreeCallbackFn<Value>) {\n    traversePostOrder(this.root, this, cb);\n  }\n\n  toSortedArray() {\n    const result: Value[] = [];\n    this.forEachInOrder(value => {\n      result.push(value);\n    });\n    return result;\n  }\n}\n","import fnvPlus from 'fnv-plus';\nimport MurmurHash3 from 'imurmurhash';\n\nimport { clamp } from './utils/bloomFilter.js';\nimport { stringify } from './utils/stringify.js';\n\nconst MIN_SIZE = 64;\nconst DEFAULT_SIZE = 256;\nconst MAX_SIZE = 0xffffffff;\nconst BITS = 32;\nconst K = 2;\n\nexport class BloomFilter<Value> {\n  private bitArray: Uint32Array;\n\n  bitSize: number;\n\n  constructor(size?: number) {\n    const M =\n      size && Number.isFinite(size)\n        ? clamp(size, MIN_SIZE, MAX_SIZE)\n        : DEFAULT_SIZE;\n    const bitSize = Math.trunc((K * M) / Math.LN2);\n    this.bitArray = new Uint32Array(Math.ceil(bitSize / BITS));\n    this.bitSize = bitSize;\n  }\n\n  static from<V>(values: Iterable<V>) {\n    const array = Array.from(values);\n    return new BloomFilter(array.length).addAll(array);\n  }\n\n  add(value: Value) {\n    const stringValue = stringify(value);\n    const fnv = fnvPlus.fast1a32(stringValue) % this.bitSize;\n    const fnvIndex = Math.floor(fnv / BITS);\n    const fnvPosition = fnv % BITS;\n    const mur = MurmurHash3(stringValue).result() % this.bitSize;\n    const murIndex = Math.floor(mur / BITS);\n    const murPosition = mur % BITS;\n    this.bitArray[fnvIndex] |= 1 << fnvPosition;\n    this.bitArray[murIndex] |= 1 << murPosition;\n    return this;\n  }\n\n  addAll(values: Iterable<Value>) {\n    for (const value of values) {\n      this.add(value);\n    }\n    return this;\n  }\n\n  has(value: Value) {\n    const stringValue = stringify(value);\n    const fnv = fnvPlus.fast1a32(stringValue) % this.bitSize;\n    const fnvIndex = Math.floor(fnv / BITS);\n    const fnvPosition = fnv % BITS;\n    if ((this.bitArray[fnvIndex]! & (1 << fnvPosition)) === 0) {\n      return false;\n    }\n    const mur = MurmurHash3(stringValue).result() % this.bitSize;\n    const murIndex = Math.floor(mur / BITS);\n    const murPosition = mur % BITS;\n    return (this.bitArray[murIndex]! & (1 << murPosition)) !== 0;\n  }\n}\n","export function clamp(value: number, min: number, max: number) {\n  if (value < min) return min;\n  if (value > max) return max;\n  return value;\n}\n","import type { Heap } from 'src/Heap.js';\n\nimport { stringify } from './stringify.js';\n\nexport type CompareFn<V> = (a: V, b: V) => number;\nexport type PriorityPredicate<V> = (a: V, b: V) => boolean;\n\nfunction isNumeric(value: unknown): value is number | bigint {\n  return typeof value === 'number' || typeof value === 'bigint';\n}\n\nexport function defaultCompareFn<V>(a: V, b: V) {\n  if (isNumeric(a) && isNumeric(b)) {\n    return Number(a) - Number(b);\n  }\n  return stringify(a).localeCompare(stringify(b));\n}\n\nexport function defaultMinPredicate<V>(a: V, b: V) {\n  return defaultCompareFn(a, b) < 0;\n}\n\nexport function getParentIndex(index: number) {\n  return Math.floor((index - 1) / 2);\n}\n\nexport function getLeftChildIndex(parentIndex: number) {\n  return 2 * parentIndex + 1;\n}\n\nexport function getRightChildIndex(parentIndex: number) {\n  return 2 * parentIndex + 2;\n}\n\nexport function swap<V>(heap: Heap<V>, i1: number, i2: number) {\n  if (i1 < heap.length && i2 < heap.length) {\n    const v1 = heap[i1]!;\n    heap[i1] = heap[i2]!;\n    heap[i2] = v1;\n  }\n}\n\nexport function heapifyUp<V>(heap: Heap<V>, compareFn: CompareFn<V>) {\n  let index = heap.length - 1;\n  let parentIndex = getParentIndex(index);\n  while (parentIndex >= 0 && compareFn(heap[index]!, heap[parentIndex]!) < 0) {\n    swap(heap, index, parentIndex);\n    index = parentIndex;\n    parentIndex = getParentIndex(index);\n  }\n}\n\nexport function heapifyDown<V>(heap: Heap<V>, compareFn: CompareFn<V>) {\n  let index = 0;\n  let nextIndex = getLeftChildIndex(index);\n  while (nextIndex < heap.length) {\n    const rightChildIndex = getRightChildIndex(index);\n    if (\n      rightChildIndex < heap.length &&\n      compareFn(heap[rightChildIndex]!, heap[nextIndex]!) < 0\n    ) {\n      nextIndex = rightChildIndex;\n    }\n    if (compareFn(heap[index]!, heap[nextIndex]!) < 0) {\n      return;\n    }\n    swap(heap, index, nextIndex);\n    index = nextIndex;\n    nextIndex = getLeftChildIndex(index);\n  }\n}\n","import {\n  type CompareFn,\n  defaultCompareFn,\n  getLeftChildIndex,\n  getParentIndex,\n  getRightChildIndex,\n  heapifyDown,\n  heapifyUp,\n} from './utils/heap.js';\n\nexport class Heap<V> extends Array<V> {\n  private compareFn: CompareFn<V>;\n\n  constructor(compareFn: CompareFn<V> = defaultCompareFn) {\n    super();\n    this.compareFn = compareFn;\n  }\n\n  static override from<I>(arrayLike: ArrayLike<I>) {\n    const heap = new Heap<I>();\n    const items = Array.from(arrayLike);\n    heap.push(...items);\n    return heap;\n  }\n\n  parent(index: number) {\n    return this[getParentIndex(index)];\n  }\n\n  leftChild(index: number) {\n    return this[getLeftChildIndex(index)];\n  }\n\n  rightChild(index: number) {\n    return this[getRightChildIndex(index)];\n  }\n\n  override push(...items: V[]): number {\n    items.forEach(item => {\n      super.push(item);\n      heapifyUp(this, this.compareFn);\n    });\n    return this.length;\n  }\n\n  override pop() {\n    if (this.length < 2) return super.pop();\n    const top = this[0]!;\n    this[0] = super.pop()!;\n    heapifyDown(this, this.compareFn);\n    return top;\n  }\n\n  peek() {\n    return this[0];\n  }\n\n  size() {\n    return this.length;\n  }\n\n  clear() {\n    this.length = 0;\n  }\n\n  isEmpty() {\n    return !this.length;\n  }\n\n  updateComparator(compareFn: CompareFn<V>) {\n    this.compareFn = compareFn;\n  }\n}\n","import { defaultMinPredicate, type PriorityPredicate } from './utils/heap.js';\nimport { Heap } from './Heap.js';\n\nexport class PriorityQueue<V> extends Heap<V> {\n  constructor(priorityPredicate: PriorityPredicate<V> = defaultMinPredicate) {\n    super((a: V, b: V) => (priorityPredicate(a, b) ? -1 : 1));\n  }\n\n  static override from<I>(arrayLike: ArrayLike<I>) {\n    const heap = new PriorityQueue<I>();\n    const items = Array.from(arrayLike);\n    heap.push(...items);\n    return heap;\n  }\n\n  enqueue(...items: V[]) {\n    this.push(...items);\n    return this;\n  }\n\n  dequeue() {\n    return this.pop();\n  }\n\n  updatePriority(priorityPredicate: PriorityPredicate<V>) {\n    super.updateComparator((a: V, b: V) => (priorityPredicate(a, b) ? -1 : 1));\n  }\n}\n","export interface TrieNodeValues<V> {\n  complete: V[];\n  partial: V[];\n}\n\nexport class TrieNode<V> {\n  public key: string;\n\n  public parent: TrieNode<V> | null;\n\n  private children = new Map<string, TrieNode<V>>();\n\n  private complete = new Set<V>();\n\n  private partial = new Set<V>();\n\n  constructor(\n    parent: TrieNode<V> | null,\n    key: string,\n    value: V,\n    complete = false,\n  ) {\n    if (key.length !== 1) {\n      throw new TypeError('Key of TrieNode must be a single character');\n    }\n    this.parent = parent;\n    this.key = key;\n    this.addValue(value, complete);\n  }\n\n  isLeaf() {\n    return !this.children.size;\n  }\n\n  isEmpty() {\n    !this.complete.size && !this.partial.size;\n  }\n\n  size() {\n    return this.children.size;\n  }\n\n  clear() {\n    this.children.clear();\n  }\n\n  addChild(key: string, value: V, isLastIndex = false) {\n    let childnode = this.getChild(key);\n    if (!childnode) {\n      childnode = new TrieNode(this, key, value, isLastIndex);\n      this.children.set(key, childnode);\n    } else {\n      childnode.addValue(value, isLastIndex);\n    }\n    return childnode;\n  }\n\n  getChild(key: string) {\n    return this.children.get(key);\n  }\n\n  hasChild(key: string) {\n    return this.children.has(key);\n  }\n\n  isComplete() {\n    return !!this.complete.size;\n  }\n\n  addValue(value: V, complete = false) {\n    if (complete) {\n      this.complete.add(value);\n    } else {\n      this.partial.add(value);\n    }\n    return this;\n  }\n\n  getCompleteValues() {\n    return Array.from(this.complete);\n  }\n\n  keys() {\n    return Array.from(this.children.keys());\n  }\n\n  values(): TrieNodeValues<V> {\n    return {\n      complete: this.getCompleteValues(),\n      partial: Array.from(this.partial),\n    };\n  }\n\n  deleteNode(key: string) {\n    return this.children.delete(key);\n  }\n\n  deleteValue() {\n    this.complete.clear();\n  }\n\n  deletePartialValue(value: V) {\n    return this.partial.delete(value);\n  }\n}\n","import { TrieNode } from './TrieNode.js';\n\nconst ROOT_KEY = '*';\n\nexport class Trie<V> {\n  root = new TrieNode(null, ROOT_KEY, null as V, true);\n\n  add(string: string, value?: V) {\n    let node = this.root;\n    const _value = arguments.length > 1 ? value : string;\n    for (let i = 0; i < string.length; i++) {\n      const key = string[i]!;\n      const isLastIndex = i === string.length - 1;\n      node = node.addChild(key, _value as V, isLastIndex);\n    }\n    return this;\n  }\n\n  addMany(strings: string[], value?: V) {\n    strings.forEach(string => {\n      this.add(string, value);\n    });\n    return this;\n  }\n\n  getLastNode(substring: string) {\n    let node = this.root;\n    for (const key of substring) {\n      if (!node.hasChild(key)) return null;\n      node = node.getChild(key)!;\n    }\n    return node;\n  }\n\n  delete(string: string) {\n    let node = this.getLastNode(string);\n    if (!node || !node.isComplete()) return false;\n    node.deleteValue();\n    while (node.parent) {\n      if (!node.isLeaf()) return true;\n      node.parent.deleteNode(node.key);\n      node = node.parent;\n    }\n    return true;\n  }\n\n  clear() {\n    this.root.clear();\n  }\n\n  next(substring: string) {\n    const node = this.getLastNode(substring);\n    if (!node) return undefined;\n    return node.keys();\n  }\n\n  includes(substring: string) {\n    return !!this.getLastNode(substring);\n  }\n\n  has(string: string) {\n    return !!this.getLastNode(string)?.isComplete();\n  }\n\n  getValues(substring: string) {\n    return this.getLastNode(substring)?.values() ?? null;\n  }\n}\n"]}