@holoscript/std 7.0.0 → 7.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/README.md +8 -0
  2. package/dist/chunk-DGUM43GV.js +11 -0
  3. package/dist/{chunk-PFX2JM4X.js → chunk-FAMOLKH3.js} +2 -1
  4. package/dist/{chunk-PFX2JM4X.js.map → chunk-FAMOLKH3.js.map} +1 -1
  5. package/dist/{chunk-DZHAVOCH.js → chunk-SOKH6FJ7.js} +31 -6
  6. package/dist/chunk-SOKH6FJ7.js.map +1 -0
  7. package/dist/collections.cjs +1 -0
  8. package/dist/collections.cjs.map +1 -1
  9. package/dist/collections.js +2 -2
  10. package/dist/fs/fs.d.ts.map +1 -1
  11. package/dist/fs/index.cjs +221 -8510
  12. package/dist/fs/index.cjs.map +1 -1
  13. package/dist/fs/index.js +832 -118
  14. package/dist/fs/index.js.map +1 -1
  15. package/dist/fs/sandbox.d.ts +49 -0
  16. package/dist/fs/sandbox.d.ts.map +1 -0
  17. package/dist/index.cjs +3494 -12672
  18. package/dist/index.cjs.map +1 -1
  19. package/dist/index.d.ts +0 -1
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +17 -7
  22. package/dist/index.js.map +1 -1
  23. package/dist/math.cjs +18 -3
  24. package/dist/math.cjs.map +1 -1
  25. package/dist/math.js +2 -2
  26. package/dist/string.js +1 -1
  27. package/dist/time.js +1 -1
  28. package/dist/traits/EconomicPrimitives.js +1 -1
  29. package/dist/traits/EconomicTraits.js +1 -1
  30. package/dist/types.d.ts.map +1 -1
  31. package/package.json +19 -9
  32. package/dist/__tests__/EconomicPrimitives.test.d.ts +0 -2
  33. package/dist/__tests__/EconomicPrimitives.test.d.ts.map +0 -1
  34. package/dist/__tests__/EconomicTraits.test.d.ts +0 -2
  35. package/dist/__tests__/EconomicTraits.test.d.ts.map +0 -1
  36. package/dist/__tests__/SimulationLabPrimitives.test.d.ts +0 -2
  37. package/dist/__tests__/SimulationLabPrimitives.test.d.ts.map +0 -1
  38. package/dist/__tests__/collections.test.d.ts +0 -2
  39. package/dist/__tests__/collections.test.d.ts.map +0 -1
  40. package/dist/__tests__/events.test.d.ts +0 -2
  41. package/dist/__tests__/events.test.d.ts.map +0 -1
  42. package/dist/__tests__/index.test.d.ts +0 -2
  43. package/dist/__tests__/index.test.d.ts.map +0 -1
  44. package/dist/__tests__/materials.test.d.ts +0 -2
  45. package/dist/__tests__/materials.test.d.ts.map +0 -1
  46. package/dist/__tests__/math.test.d.ts +0 -2
  47. package/dist/__tests__/math.test.d.ts.map +0 -1
  48. package/dist/__tests__/physics.test.d.ts +0 -2
  49. package/dist/__tests__/physics.test.d.ts.map +0 -1
  50. package/dist/__tests__/spatial.test.d.ts +0 -2
  51. package/dist/__tests__/spatial.test.d.ts.map +0 -1
  52. package/dist/__tests__/standard-library-fundamentals.test.d.ts +0 -2
  53. package/dist/__tests__/standard-library-fundamentals.test.d.ts.map +0 -1
  54. package/dist/__tests__/string-and-time-utilities.test.d.ts +0 -2
  55. package/dist/__tests__/string-and-time-utilities.test.d.ts.map +0 -1
  56. package/dist/__tests__/string-decoupled.test.d.ts +0 -2
  57. package/dist/__tests__/string-decoupled.test.d.ts.map +0 -1
  58. package/dist/__tests__/string.test.d.ts +0 -2
  59. package/dist/__tests__/string.test.d.ts.map +0 -1
  60. package/dist/__tests__/time.test.d.ts +0 -2
  61. package/dist/__tests__/time.test.d.ts.map +0 -1
  62. package/dist/chunk-DZHAVOCH.js.map +0 -1
  63. package/dist/chunk-PR4QN5HX.js +0 -43
  64. package/dist/chunk-XBA4ARST.js +0 -9313
  65. package/dist/chunk-XBA4ARST.js.map +0 -1
  66. package/dist/fs/__tests__/file-watch-system.test.d.ts +0 -2
  67. package/dist/fs/__tests__/file-watch-system.test.d.ts.map +0 -1
  68. package/dist/fs/__tests__/path-utilities.test.d.ts +0 -2
  69. package/dist/fs/__tests__/path-utilities.test.d.ts.map +0 -1
  70. package/dist/fs/__tests__/path.test.d.ts +0 -2
  71. package/dist/fs/__tests__/path.test.d.ts.map +0 -1
  72. package/dist/string.basic.test.d.ts +0 -5
  73. package/dist/string.basic.test.d.ts.map +0 -1
  74. package/dist/string.test.d.ts +0 -5
  75. package/dist/string.test.d.ts.map +0 -1
  76. package/dist/traits/__tests__/ARTraits.test.d.ts +0 -2
  77. package/dist/traits/__tests__/ARTraits.test.d.ts.map +0 -1
  78. package/dist/traits/__tests__/EconomicPrimitives.test.d.ts +0 -2
  79. package/dist/traits/__tests__/EconomicPrimitives.test.d.ts.map +0 -1
  80. package/dist/traits/__tests__/EconomicTraits.test.d.ts +0 -2
  81. package/dist/traits/__tests__/EconomicTraits.test.d.ts.map +0 -1
  82. package/error-utf8.log +0 -6
  83. package/error.log +0 -0
  84. package/src/__tests__/EconomicPrimitives.test.ts +0 -690
  85. package/src/__tests__/EconomicTraits.test.ts +0 -425
  86. package/src/__tests__/SimulationLabPrimitives.test.ts +0 -415
  87. package/src/__tests__/collections.test.ts +0 -182
  88. package/src/__tests__/events.test.ts +0 -135
  89. package/src/__tests__/index.test.ts +0 -14
  90. package/src/__tests__/materials.test.ts +0 -84
  91. package/src/__tests__/math.test.ts +0 -246
  92. package/src/__tests__/physics.test.ts +0 -83
  93. package/src/__tests__/spatial.test.ts +0 -333
  94. package/src/__tests__/standard-library-fundamentals.test.ts +0 -1318
  95. package/src/__tests__/string-and-time-utilities.test.ts +0 -1070
  96. package/src/__tests__/string-decoupled.test.ts +0 -13
  97. package/src/__tests__/string.test.ts +0 -164
  98. package/src/__tests__/time.test.ts +0 -110
  99. package/src/collections.ts +0 -850
  100. package/src/events.ts +0 -88
  101. package/src/fs/__tests__/file-watch-system.test.ts +0 -675
  102. package/src/fs/__tests__/path-utilities.test.ts +0 -375
  103. package/src/fs/__tests__/path.test.ts +0 -287
  104. package/src/fs/fs.ts +0 -692
  105. package/src/fs/index.ts +0 -194
  106. package/src/fs/path.ts +0 -310
  107. package/src/fs/watch.ts +0 -413
  108. package/src/index.ts +0 -476
  109. package/src/materials.ts +0 -109
  110. package/src/math.ts +0 -674
  111. package/src/physics.ts +0 -141
  112. package/src/spatial.ts +0 -320
  113. package/src/string.basic.test.ts +0 -14
  114. package/src/string.test.ts +0 -335
  115. package/src/string.ts +0 -531
  116. package/src/time.ts +0 -621
  117. package/src/traits/ARTraits.ts +0 -103
  118. package/src/traits/EconomicPrimitives.ts +0 -755
  119. package/src/traits/EconomicTraits.ts +0 -552
  120. package/src/traits/IoTTraits.ts +0 -102
  121. package/src/traits/SimulationLabPrimitives.ts +0 -650
  122. package/src/traits/SimulationLabTraits.ts +0 -191
  123. package/src/traits/VRRTraits.ts +0 -326
  124. package/src/traits/__tests__/ARTraits.test.ts +0 -8
  125. package/src/traits/__tests__/EconomicPrimitives.test.ts +0 -14
  126. package/src/traits/__tests__/EconomicTraits.test.ts +0 -16
  127. package/src/types.ts +0 -418
  128. package/std_error.log +0 -5
  129. package/tsconfig.json +0 -18
  130. package/tsup.config.ts +0 -20
  131. package/vitest.config.ts +0 -10
  132. /package/dist/{chunk-PR4QN5HX.js.map → chunk-DGUM43GV.js.map} +0 -0
package/README.md CHANGED
@@ -192,6 +192,14 @@ equals({ a: 1 }, { a: 1 }); // true
192
192
  pipe(5, double, addOne, toString); // '11'
193
193
  ```
194
194
 
195
+ ## Package boundary & release posture
196
+
197
+ `@holoscript/std` is a **v0-preview** standard library for external, public, and agent-framework consumers building HoloScript-adjacent tooling — it is a pure utility library, not a service. Every function is caller-owned: you pass in your own vectors, collections, strings, and timers, and the library holds no ambient state, network calls, or credentials of its own.
198
+
199
+ `@holoscript/std/fs` is the one boundary-sensitive entry point: filesystem helpers pass through to the host filesystem by default and do not ship any sandboxing unless the caller opts in. Path-boundary enforcement is disabled by default (a no-op, matching pre-existing call sites) and only activates when the operator sets the `HOLOSCRIPT_FS_SANDBOX_ROOT` environment variable — this package does not ship a default sandbox root, and it is not the package default to restrict paths.
200
+
201
+ **Known limitations:** `@holoscript/std/fs` assumes a Node.js-like filesystem (`fs`/`path`) and is not usable in a browser bundle; import the browser-safe entry points (`math`, `collections`, `string`, `time`) instead if you need this library client-side. Interfaces may change before a v1 release.
202
+
195
203
  ## License
196
204
 
197
205
  MIT
@@ -0,0 +1,11 @@
1
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
2
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
3
+ }) : x)(function(x) {
4
+ if (typeof require !== "undefined") return require.apply(this, arguments);
5
+ throw Error('Dynamic require of "' + x + '" is not supported');
6
+ });
7
+
8
+ export {
9
+ __require
10
+ };
11
+ //# sourceMappingURL=chunk-DGUM43GV.js.map
@@ -611,6 +611,7 @@ var PriorityQueue = class _PriorityQueue {
611
611
  constructor(compareFn = (a, b) => a - b) {
612
612
  this.compareFn = compareFn;
613
613
  }
614
+ compareFn;
614
615
  heap = [];
615
616
  static minHeap() {
616
617
  return new _PriorityQueue((a, b) => a - b);
@@ -680,4 +681,4 @@ export {
680
681
  SpatialGrid,
681
682
  PriorityQueue
682
683
  };
683
- //# sourceMappingURL=chunk-PFX2JM4X.js.map
684
+ //# sourceMappingURL=chunk-FAMOLKH3.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/collections.ts"],"sourcesContent":["/**\n * @holoscript/std - Collections Module\n *\n * Provides List, Map, and Set implementations with functional operations\n * for use in HoloScript Plus programs.\n */\n\nimport type { Vec3 } from './types.js';\n\n/**\n * Immutable List with functional operations\n */\nexport class List<T> {\n private readonly items: readonly T[];\n\n constructor(items: Iterable<T> = []) {\n this.items = Array.from(items);\n }\n\n static of<T>(...items: T[]): List<T> {\n return new List(items);\n }\n\n static from<T>(iterable: Iterable<T>): List<T> {\n return new List(iterable);\n }\n\n static range(start: number, end: number, step = 1): List<number> {\n const items: number[] = [];\n for (let i = start; step > 0 ? i < end : i > end; i += step) {\n items.push(i);\n }\n return new List(items);\n }\n\n static repeat<T>(value: T, count: number): List<T> {\n return new List(Array(count).fill(value));\n }\n\n get length(): number {\n return this.items.length;\n }\n\n get isEmpty(): boolean {\n return this.items.length === 0;\n }\n\n get(index: number): T | undefined {\n return index < 0 ? this.items[this.items.length + index] : this.items[index];\n }\n\n first(): T | undefined {\n return this.items[0];\n }\n\n last(): T | undefined {\n return this.items[this.items.length - 1];\n }\n\n map<U>(fn: (item: T, index: number) => U): List<U> {\n return new List(this.items.map(fn));\n }\n\n flatMap<U>(fn: (item: T, index: number) => List<U> | U[]): List<U> {\n const result: U[] = [];\n this.items.forEach((item, index) => {\n const mapped = fn(item, index);\n if (mapped instanceof List) {\n result.push(...mapped.toArray());\n } else {\n result.push(...mapped);\n }\n });\n return new List(result);\n }\n\n filter(predicate: (item: T, index: number) => boolean): List<T> {\n return new List(this.items.filter(predicate));\n }\n\n reject(predicate: (item: T, index: number) => boolean): List<T> {\n return this.filter((item, index) => !predicate(item, index));\n }\n\n reduce<U>(fn: (acc: U, item: T, index: number) => U, initial: U): U {\n return this.items.reduce(fn, initial);\n }\n\n fold<U>(initial: U, fn: (acc: U, item: T) => U): U {\n return this.items.reduce(fn, initial);\n }\n\n find(predicate: (item: T, index: number) => boolean): T | undefined {\n return this.items.find(predicate);\n }\n\n findIndex(predicate: (item: T, index: number) => boolean): number {\n return this.items.findIndex(predicate);\n }\n\n indexOf(item: T): number {\n return this.items.indexOf(item);\n }\n\n includes(item: T): boolean {\n return this.items.includes(item);\n }\n\n some(predicate: (item: T, index: number) => boolean): boolean {\n return this.items.some(predicate);\n }\n\n every(predicate: (item: T, index: number) => boolean): boolean {\n return this.items.every(predicate);\n }\n\n none(predicate: (item: T, index: number) => boolean): boolean {\n return !this.some(predicate);\n }\n\n count(predicate: (item: T, index: number) => boolean): number {\n return this.filter(predicate).length;\n }\n\n forEach(fn: (item: T, index: number) => void): void {\n this.items.forEach(fn);\n }\n\n concat(...lists: (List<T> | T[])[]): List<T> {\n const arrays = lists.map((l) => (l instanceof List ? l.toArray() : l));\n return new List([...this.items, ...arrays.flat()]);\n }\n\n append(item: T): List<T> {\n return new List([...this.items, item]);\n }\n\n prepend(item: T): List<T> {\n return new List([item, ...this.items]);\n }\n\n insert(index: number, item: T): List<T> {\n const arr = [...this.items];\n arr.splice(index, 0, item);\n return new List(arr);\n }\n\n remove(index: number): List<T> {\n const arr = [...this.items];\n arr.splice(index, 1);\n return new List(arr);\n }\n\n update(index: number, item: T): List<T> {\n const arr = [...this.items];\n arr[index] = item;\n return new List(arr);\n }\n\n slice(start?: number, end?: number): List<T> {\n return new List(this.items.slice(start, end));\n }\n\n take(n: number): List<T> {\n return this.slice(0, n);\n }\n\n takeLast(n: number): List<T> {\n return this.slice(-n);\n }\n\n takeWhile(predicate: (item: T, index: number) => boolean): List<T> {\n const result: T[] = [];\n for (let i = 0; i < this.items.length; i++) {\n if (!predicate(this.items[i], i)) break;\n result.push(this.items[i]);\n }\n return new List(result);\n }\n\n drop(n: number): List<T> {\n return this.slice(n);\n }\n\n dropLast(n: number): List<T> {\n return this.slice(0, -n);\n }\n\n dropWhile(predicate: (item: T, index: number) => boolean): List<T> {\n let startIndex = 0;\n for (let i = 0; i < this.items.length; i++) {\n if (!predicate(this.items[i], i)) break;\n startIndex = i + 1;\n }\n return this.slice(startIndex);\n }\n\n reverse(): List<T> {\n return new List([...this.items].reverse());\n }\n\n sort(compareFn?: (a: T, b: T) => number): List<T> {\n return new List([...this.items].sort(compareFn));\n }\n\n sortBy<U>(fn: (item: T) => U): List<T> {\n return this.sort((a, b) => {\n const va = fn(a);\n const vb = fn(b);\n if (va < vb) return -1;\n if (va > vb) return 1;\n return 0;\n });\n }\n\n shuffle(): List<T> {\n const arr = [...this.items];\n for (let i = arr.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [arr[i], arr[j]] = [arr[j], arr[i]];\n }\n return new List(arr);\n }\n\n unique(): List<T> {\n return new List([...new Set(this.items)]);\n }\n\n uniqueBy<U>(fn: (item: T) => U): List<T> {\n const seen = new Set<U>();\n const result: T[] = [];\n for (const item of this.items) {\n const key = fn(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n return new List(result);\n }\n\n groupBy<K>(fn: (item: T) => K): HoloMap<K, List<T>> {\n const groups = new Map<K, T[]>();\n for (const item of this.items) {\n const key = fn(item);\n const group = groups.get(key) || [];\n group.push(item);\n groups.set(key, group);\n }\n const result = new Map<K, List<T>>();\n for (const [key, items] of groups) {\n result.set(key, new List(items));\n }\n return new HoloMap(result);\n }\n\n partition(predicate: (item: T, index: number) => boolean): [List<T>, List<T>] {\n const pass: T[] = [];\n const fail: T[] = [];\n this.items.forEach((item, index) => {\n if (predicate(item, index)) {\n pass.push(item);\n } else {\n fail.push(item);\n }\n });\n return [new List(pass), new List(fail)];\n }\n\n zip<U>(other: List<U>): List<[T, U]> {\n const length = Math.min(this.length, other.length);\n const result: [T, U][] = [];\n for (let i = 0; i < length; i++) {\n result.push([this.items[i], other.get(i)!]);\n }\n return new List(result);\n }\n\n zipWith<U, V>(other: List<U>, fn: (a: T, b: U) => V): List<V> {\n return this.zip(other).map(([a, b]) => fn(a, b));\n }\n\n flatten<U>(this: List<List<U> | U[]>): List<U> {\n const result: U[] = [];\n for (const item of this.items) {\n if (item instanceof List) {\n result.push(...item.toArray());\n } else if (Array.isArray(item)) {\n result.push(...item);\n }\n }\n return new List(result);\n }\n\n sum(this: List<number>): number {\n return this.reduce((acc, n) => acc + n, 0);\n }\n\n min(this: List<number>): number | undefined {\n if (this.isEmpty) return undefined;\n return Math.min(...this.items);\n }\n\n max(this: List<number>): number | undefined {\n if (this.isEmpty) return undefined;\n return Math.max(...this.items);\n }\n\n average(this: List<number>): number | undefined {\n if (this.isEmpty) return undefined;\n return this.sum() / this.length;\n }\n\n join(separator = ','): string {\n return this.items.join(separator);\n }\n\n toArray(): T[] {\n return [...this.items];\n }\n\n toSet(): HoloSet<T> {\n return new HoloSet(this.items);\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.items[Symbol.iterator]();\n }\n\n toString(): string {\n return `List(${this.items.join(', ')})`;\n }\n}\n\n/**\n * Immutable Map with functional operations\n */\nexport class HoloMap<K, V> {\n private readonly _map: ReadonlyMap<K, V>;\n\n constructor(entries?: Iterable<[K, V]> | Map<K, V>) {\n this._map = entries instanceof Map ? entries : new Map(entries);\n }\n\n static of<K, V>(...entries: [K, V][]): HoloMap<K, V> {\n return new HoloMap(entries);\n }\n\n static from<K, V>(entries: Iterable<[K, V]>): HoloMap<K, V> {\n return new HoloMap(entries);\n }\n\n static fromObject<V>(obj: Record<string, V>): HoloMap<string, V> {\n return new HoloMap(Object.entries(obj));\n }\n\n get size(): number {\n return this._map.size;\n }\n\n get isEmpty(): boolean {\n return this._map.size === 0;\n }\n\n get(key: K): V | undefined {\n return this._map.get(key);\n }\n\n getOrDefault(key: K, defaultValue: V): V {\n return this._map.has(key) ? this._map.get(key)! : defaultValue;\n }\n\n has(key: K): boolean {\n return this._map.has(key);\n }\n\n set(key: K, value: V): HoloMap<K, V> {\n const newMap = new Map(this._map);\n newMap.set(key, value);\n return new HoloMap(newMap);\n }\n\n delete(key: K): HoloMap<K, V> {\n const newMap = new Map(this._map);\n newMap.delete(key);\n return new HoloMap(newMap);\n }\n\n update(key: K, fn: (value: V | undefined) => V): HoloMap<K, V> {\n return this.set(key, fn(this.get(key)));\n }\n\n merge(other: HoloMap<K, V>): HoloMap<K, V> {\n const newMap = new Map(this._map);\n for (const [key, value] of other) {\n newMap.set(key, value);\n }\n return new HoloMap(newMap);\n }\n\n keys(): List<K> {\n return new List(this._map.keys());\n }\n\n values(): List<V> {\n return new List(this._map.values());\n }\n\n entries(): List<[K, V]> {\n return new List(this._map.entries());\n }\n\n map<U>(fn: (value: V, key: K) => U): HoloMap<K, U> {\n const entries: [K, U][] = [];\n for (const [key, value] of this._map) {\n entries.push([key, fn(value, key)]);\n }\n return new HoloMap(entries);\n }\n\n mapKeys<K2>(fn: (key: K, value: V) => K2): HoloMap<K2, V> {\n const entries: [K2, V][] = [];\n for (const [key, value] of this._map) {\n entries.push([fn(key, value), value]);\n }\n return new HoloMap(entries);\n }\n\n filter(predicate: (value: V, key: K) => boolean): HoloMap<K, V> {\n const entries: [K, V][] = [];\n for (const [key, value] of this._map) {\n if (predicate(value, key)) {\n entries.push([key, value]);\n }\n }\n return new HoloMap(entries);\n }\n\n reduce<U>(fn: (acc: U, value: V, key: K) => U, initial: U): U {\n let acc = initial;\n for (const [key, value] of this._map) {\n acc = fn(acc, value, key);\n }\n return acc;\n }\n\n forEach(fn: (value: V, key: K) => void): void {\n this._map.forEach(fn);\n }\n\n find(predicate: (value: V, key: K) => boolean): [K, V] | undefined {\n for (const [key, value] of this._map) {\n if (predicate(value, key)) {\n return [key, value];\n }\n }\n return undefined;\n }\n\n some(predicate: (value: V, key: K) => boolean): boolean {\n for (const [key, value] of this._map) {\n if (predicate(value, key)) return true;\n }\n return false;\n }\n\n every(predicate: (value: V, key: K) => boolean): boolean {\n for (const [key, value] of this._map) {\n if (!predicate(value, key)) return false;\n }\n return true;\n }\n\n toObject(this: HoloMap<string, V>): Record<string, V> {\n const obj: Record<string, V> = {};\n for (const [key, value] of this._map) {\n obj[key] = value;\n }\n return obj;\n }\n\n toNativeMap(): Map<K, V> {\n return new Map(this._map);\n }\n\n [Symbol.iterator](): Iterator<[K, V]> {\n return this._map[Symbol.iterator]();\n }\n\n toString(): string {\n const entries = [...this._map].map(([k, v]) => `${k}: ${v}`).join(', ');\n return `HoloMap { ${entries} }`;\n }\n}\n\n/**\n * Immutable Set with functional operations\n */\nexport class HoloSet<T> {\n private readonly set: ReadonlySet<T>;\n\n constructor(items?: Iterable<T>) {\n this.set = new Set(items);\n }\n\n static of<T>(...items: T[]): HoloSet<T> {\n return new HoloSet(items);\n }\n\n static from<T>(iterable: Iterable<T>): HoloSet<T> {\n return new HoloSet(iterable);\n }\n\n get size(): number {\n return this.set.size;\n }\n\n get isEmpty(): boolean {\n return this.set.size === 0;\n }\n\n has(item: T): boolean {\n return this.set.has(item);\n }\n\n add(item: T): HoloSet<T> {\n const newSet = new Set(this.set);\n newSet.add(item);\n return new HoloSet(newSet);\n }\n\n delete(item: T): HoloSet<T> {\n const newSet = new Set(this.set);\n newSet.delete(item);\n return new HoloSet(newSet);\n }\n\n addAll(items: Iterable<T>): HoloSet<T> {\n const newSet = new Set(this.set);\n for (const item of items) {\n newSet.add(item);\n }\n return new HoloSet(newSet);\n }\n\n union(other: HoloSet<T>): HoloSet<T> {\n return this.addAll(other);\n }\n\n intersection(other: HoloSet<T>): HoloSet<T> {\n const result = new Set<T>();\n for (const item of this.set) {\n if (other.has(item)) {\n result.add(item);\n }\n }\n return new HoloSet(result);\n }\n\n difference(other: HoloSet<T>): HoloSet<T> {\n const result = new Set<T>();\n for (const item of this.set) {\n if (!other.has(item)) {\n result.add(item);\n }\n }\n return new HoloSet(result);\n }\n\n symmetricDifference(other: HoloSet<T>): HoloSet<T> {\n return this.difference(other).union(other.difference(this));\n }\n\n isSubsetOf(other: HoloSet<T>): boolean {\n for (const item of this.set) {\n if (!other.has(item)) return false;\n }\n return true;\n }\n\n isSupersetOf(other: HoloSet<T>): boolean {\n return other.isSubsetOf(this);\n }\n\n isDisjointFrom(other: HoloSet<T>): boolean {\n return this.intersection(other).isEmpty;\n }\n\n map<U>(fn: (item: T) => U): HoloSet<U> {\n const result = new Set<U>();\n for (const item of this.set) {\n result.add(fn(item));\n }\n return new HoloSet(result);\n }\n\n filter(predicate: (item: T) => boolean): HoloSet<T> {\n const result = new Set<T>();\n for (const item of this.set) {\n if (predicate(item)) {\n result.add(item);\n }\n }\n return new HoloSet(result);\n }\n\n reduce<U>(fn: (acc: U, item: T) => U, initial: U): U {\n let acc = initial;\n for (const item of this.set) {\n acc = fn(acc, item);\n }\n return acc;\n }\n\n forEach(fn: (item: T) => void): void {\n this.set.forEach(fn);\n }\n\n find(predicate: (item: T) => boolean): T | undefined {\n for (const item of this.set) {\n if (predicate(item)) return item;\n }\n return undefined;\n }\n\n some(predicate: (item: T) => boolean): boolean {\n for (const item of this.set) {\n if (predicate(item)) return true;\n }\n return false;\n }\n\n every(predicate: (item: T) => boolean): boolean {\n for (const item of this.set) {\n if (!predicate(item)) return false;\n }\n return true;\n }\n\n toArray(): T[] {\n return [...this.set];\n }\n\n toList(): List<T> {\n return new List(this.set);\n }\n\n toNativeSet(): Set<T> {\n return new Set(this.set);\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.set[Symbol.iterator]();\n }\n\n toString(): string {\n return `HoloSet { ${[...this.set].join(', ')} }`;\n }\n}\n\n/**\n * Spatial grid for efficient spatial queries (useful for game worlds)\n */\nexport class SpatialGrid<T> {\n private readonly cellSize: number;\n private readonly cells: Map<string, T[]> = new Map();\n\n constructor(cellSize: number) {\n this.cellSize = cellSize;\n }\n\n private getCellKey(x: number, y: number, z: number): string {\n const cx = Math.floor(x / this.cellSize);\n const cy = Math.floor(y / this.cellSize);\n const cz = Math.floor(z / this.cellSize);\n return `${cx},${cy},${cz}`;\n }\n\n insert(position: Vec3, item: T): void {\n const key = this.getCellKey(position.x, position.y, position.z);\n if (!this.cells.has(key)) {\n this.cells.set(key, []);\n }\n this.cells.get(key)!.push(item);\n }\n\n remove(position: Vec3, item: T): boolean {\n const key = this.getCellKey(position.x, position.y, position.z);\n const cell = this.cells.get(key);\n if (!cell) return false;\n const index = cell.indexOf(item);\n if (index === -1) return false;\n cell.splice(index, 1);\n if (cell.length === 0) {\n this.cells.delete(key);\n }\n return true;\n }\n\n query(center: Vec3, radius: number): T[] {\n const results: T[] = [];\n const cellRadius = Math.ceil(radius / this.cellSize);\n const cx = Math.floor(center.x / this.cellSize);\n const cy = Math.floor(center.y / this.cellSize);\n const cz = Math.floor(center.z / this.cellSize);\n\n for (let x = cx - cellRadius; x <= cx + cellRadius; x++) {\n for (let y = cy - cellRadius; y <= cy + cellRadius; y++) {\n for (let z = cz - cellRadius; z <= cz + cellRadius; z++) {\n const cell = this.cells.get(`${x},${y},${z}`);\n if (cell) {\n results.push(...cell);\n }\n }\n }\n }\n\n return results;\n }\n\n queryBox(min: Vec3, max: Vec3): T[] {\n const results: T[] = [];\n const minCx = Math.floor(min.x / this.cellSize);\n const minCy = Math.floor(min.y / this.cellSize);\n const minCz = Math.floor(min.z / this.cellSize);\n const maxCx = Math.floor(max.x / this.cellSize);\n const maxCy = Math.floor(max.y / this.cellSize);\n const maxCz = Math.floor(max.z / this.cellSize);\n\n for (let x = minCx; x <= maxCx; x++) {\n for (let y = minCy; y <= maxCy; y++) {\n for (let z = minCz; z <= maxCz; z++) {\n const cell = this.cells.get(`${x},${y},${z}`);\n if (cell) {\n results.push(...cell);\n }\n }\n }\n }\n\n return results;\n }\n\n clear(): void {\n this.cells.clear();\n }\n\n get cellCount(): number {\n return this.cells.size;\n }\n\n get itemCount(): number {\n let count = 0;\n for (const cell of this.cells.values()) {\n count += cell.length;\n }\n return count;\n }\n}\n\n/**\n * Priority queue (min-heap by default)\n */\nexport class PriorityQueue<T> {\n private heap: { item: T; priority: number }[] = [];\n\n constructor(private compareFn: (a: number, b: number) => number = (a, b) => a - b) {}\n\n static minHeap<T>(): PriorityQueue<T> {\n return new PriorityQueue((a, b) => a - b);\n }\n\n static maxHeap<T>(): PriorityQueue<T> {\n return new PriorityQueue((a, b) => b - a);\n }\n\n get size(): number {\n return this.heap.length;\n }\n\n get isEmpty(): boolean {\n return this.heap.length === 0;\n }\n\n enqueue(item: T, priority: number): void {\n this.heap.push({ item, priority });\n this.bubbleUp(this.heap.length - 1);\n }\n\n dequeue(): T | undefined {\n if (this.isEmpty) return undefined;\n const result = this.heap[0].item;\n const last = this.heap.pop()!;\n if (this.heap.length > 0) {\n this.heap[0] = last;\n this.bubbleDown(0);\n }\n return result;\n }\n\n peek(): T | undefined {\n return this.heap[0]?.item;\n }\n\n peekPriority(): number | undefined {\n return this.heap[0]?.priority;\n }\n\n clear(): void {\n this.heap = [];\n }\n\n private bubbleUp(index: number): void {\n while (index > 0) {\n const parentIndex = Math.floor((index - 1) / 2);\n if (this.compareFn(this.heap[index].priority, this.heap[parentIndex].priority) >= 0) break;\n [this.heap[index], this.heap[parentIndex]] = [this.heap[parentIndex], this.heap[index]];\n index = parentIndex;\n }\n }\n\n private bubbleDown(index: number): void {\n while (true) {\n const leftChild = 2 * index + 1;\n const rightChild = 2 * index + 2;\n let smallest = index;\n\n if (\n leftChild < this.heap.length &&\n this.compareFn(this.heap[leftChild].priority, this.heap[smallest].priority) < 0\n ) {\n smallest = leftChild;\n }\n if (\n rightChild < this.heap.length &&\n this.compareFn(this.heap[rightChild].priority, this.heap[smallest].priority) < 0\n ) {\n smallest = rightChild;\n }\n\n if (smallest === index) break;\n [this.heap[index], this.heap[smallest]] = [this.heap[smallest], this.heap[index]];\n index = smallest;\n }\n }\n}\n\n// Convenience aliases\nexport { HoloMap as Map };\nexport { HoloSet as Set };\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/collections.ts"],"sourcesContent":["/**\n * @holoscript/std - Collections Module\n *\n * Provides List, Map, and Set implementations with functional operations\n * for use in HoloScript Plus programs.\n */\n\nimport type { Vec3 } from './types.js';\n\n/**\n * Immutable List with functional operations\n */\nexport class List<T> {\n private readonly items: readonly T[];\n\n constructor(items: Iterable<T> = []) {\n this.items = Array.from(items);\n }\n\n static of<T>(...items: T[]): List<T> {\n return new List(items);\n }\n\n static from<T>(iterable: Iterable<T>): List<T> {\n return new List(iterable);\n }\n\n static range(start: number, end: number, step = 1): List<number> {\n const items: number[] = [];\n for (let i = start; step > 0 ? i < end : i > end; i += step) {\n items.push(i);\n }\n return new List(items);\n }\n\n static repeat<T>(value: T, count: number): List<T> {\n return new List(Array(count).fill(value));\n }\n\n get length(): number {\n return this.items.length;\n }\n\n get isEmpty(): boolean {\n return this.items.length === 0;\n }\n\n get(index: number): T | undefined {\n return index < 0 ? this.items[this.items.length + index] : this.items[index];\n }\n\n first(): T | undefined {\n return this.items[0];\n }\n\n last(): T | undefined {\n return this.items[this.items.length - 1];\n }\n\n map<U>(fn: (item: T, index: number) => U): List<U> {\n return new List(this.items.map(fn));\n }\n\n flatMap<U>(fn: (item: T, index: number) => List<U> | U[]): List<U> {\n const result: U[] = [];\n this.items.forEach((item, index) => {\n const mapped = fn(item, index);\n if (mapped instanceof List) {\n result.push(...mapped.toArray());\n } else {\n result.push(...mapped);\n }\n });\n return new List(result);\n }\n\n filter(predicate: (item: T, index: number) => boolean): List<T> {\n return new List(this.items.filter(predicate));\n }\n\n reject(predicate: (item: T, index: number) => boolean): List<T> {\n return this.filter((item, index) => !predicate(item, index));\n }\n\n reduce<U>(fn: (acc: U, item: T, index: number) => U, initial: U): U {\n return this.items.reduce(fn, initial);\n }\n\n fold<U>(initial: U, fn: (acc: U, item: T) => U): U {\n return this.items.reduce(fn, initial);\n }\n\n find(predicate: (item: T, index: number) => boolean): T | undefined {\n return this.items.find(predicate);\n }\n\n findIndex(predicate: (item: T, index: number) => boolean): number {\n return this.items.findIndex(predicate);\n }\n\n indexOf(item: T): number {\n return this.items.indexOf(item);\n }\n\n includes(item: T): boolean {\n return this.items.includes(item);\n }\n\n some(predicate: (item: T, index: number) => boolean): boolean {\n return this.items.some(predicate);\n }\n\n every(predicate: (item: T, index: number) => boolean): boolean {\n return this.items.every(predicate);\n }\n\n none(predicate: (item: T, index: number) => boolean): boolean {\n return !this.some(predicate);\n }\n\n count(predicate: (item: T, index: number) => boolean): number {\n return this.filter(predicate).length;\n }\n\n forEach(fn: (item: T, index: number) => void): void {\n this.items.forEach(fn);\n }\n\n concat(...lists: (List<T> | T[])[]): List<T> {\n const arrays = lists.map((l) => (l instanceof List ? l.toArray() : l));\n return new List([...this.items, ...arrays.flat()]);\n }\n\n append(item: T): List<T> {\n return new List([...this.items, item]);\n }\n\n prepend(item: T): List<T> {\n return new List([item, ...this.items]);\n }\n\n insert(index: number, item: T): List<T> {\n const arr = [...this.items];\n arr.splice(index, 0, item);\n return new List(arr);\n }\n\n remove(index: number): List<T> {\n const arr = [...this.items];\n arr.splice(index, 1);\n return new List(arr);\n }\n\n update(index: number, item: T): List<T> {\n const arr = [...this.items];\n arr[index] = item;\n return new List(arr);\n }\n\n slice(start?: number, end?: number): List<T> {\n return new List(this.items.slice(start, end));\n }\n\n take(n: number): List<T> {\n return this.slice(0, n);\n }\n\n takeLast(n: number): List<T> {\n return this.slice(-n);\n }\n\n takeWhile(predicate: (item: T, index: number) => boolean): List<T> {\n const result: T[] = [];\n for (let i = 0; i < this.items.length; i++) {\n if (!predicate(this.items[i], i)) break;\n result.push(this.items[i]);\n }\n return new List(result);\n }\n\n drop(n: number): List<T> {\n return this.slice(n);\n }\n\n dropLast(n: number): List<T> {\n return this.slice(0, -n);\n }\n\n dropWhile(predicate: (item: T, index: number) => boolean): List<T> {\n let startIndex = 0;\n for (let i = 0; i < this.items.length; i++) {\n if (!predicate(this.items[i], i)) break;\n startIndex = i + 1;\n }\n return this.slice(startIndex);\n }\n\n reverse(): List<T> {\n return new List([...this.items].reverse());\n }\n\n sort(compareFn?: (a: T, b: T) => number): List<T> {\n return new List([...this.items].sort(compareFn));\n }\n\n sortBy<U>(fn: (item: T) => U): List<T> {\n return this.sort((a, b) => {\n const va = fn(a);\n const vb = fn(b);\n if (va < vb) return -1;\n if (va > vb) return 1;\n return 0;\n });\n }\n\n shuffle(): List<T> {\n const arr = [...this.items];\n for (let i = arr.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [arr[i], arr[j]] = [arr[j], arr[i]];\n }\n return new List(arr);\n }\n\n unique(): List<T> {\n return new List([...new Set(this.items)]);\n }\n\n uniqueBy<U>(fn: (item: T) => U): List<T> {\n const seen = new Set<U>();\n const result: T[] = [];\n for (const item of this.items) {\n const key = fn(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n return new List(result);\n }\n\n groupBy<K>(fn: (item: T) => K): HoloMap<K, List<T>> {\n const groups = new Map<K, T[]>();\n for (const item of this.items) {\n const key = fn(item);\n const group = groups.get(key) || [];\n group.push(item);\n groups.set(key, group);\n }\n const result = new Map<K, List<T>>();\n for (const [key, items] of groups) {\n result.set(key, new List(items));\n }\n return new HoloMap(result);\n }\n\n partition(predicate: (item: T, index: number) => boolean): [List<T>, List<T>] {\n const pass: T[] = [];\n const fail: T[] = [];\n this.items.forEach((item, index) => {\n if (predicate(item, index)) {\n pass.push(item);\n } else {\n fail.push(item);\n }\n });\n return [new List(pass), new List(fail)];\n }\n\n zip<U>(other: List<U>): List<[T, U]> {\n const length = Math.min(this.length, other.length);\n const result: [T, U][] = [];\n for (let i = 0; i < length; i++) {\n result.push([this.items[i], other.get(i)!]);\n }\n return new List(result);\n }\n\n zipWith<U, V>(other: List<U>, fn: (a: T, b: U) => V): List<V> {\n return this.zip(other).map(([a, b]) => fn(a, b));\n }\n\n flatten<U>(this: List<List<U> | U[]>): List<U> {\n const result: U[] = [];\n for (const item of this.items) {\n if (item instanceof List) {\n result.push(...item.toArray());\n } else if (Array.isArray(item)) {\n result.push(...item);\n }\n }\n return new List(result);\n }\n\n sum(this: List<number>): number {\n return this.reduce((acc, n) => acc + n, 0);\n }\n\n min(this: List<number>): number | undefined {\n if (this.isEmpty) return undefined;\n return Math.min(...this.items);\n }\n\n max(this: List<number>): number | undefined {\n if (this.isEmpty) return undefined;\n return Math.max(...this.items);\n }\n\n average(this: List<number>): number | undefined {\n if (this.isEmpty) return undefined;\n return this.sum() / this.length;\n }\n\n join(separator = ','): string {\n return this.items.join(separator);\n }\n\n toArray(): T[] {\n return [...this.items];\n }\n\n toSet(): HoloSet<T> {\n return new HoloSet(this.items);\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.items[Symbol.iterator]();\n }\n\n toString(): string {\n return `List(${this.items.join(', ')})`;\n }\n}\n\n/**\n * Immutable Map with functional operations\n */\nexport class HoloMap<K, V> {\n private readonly _map: ReadonlyMap<K, V>;\n\n constructor(entries?: Iterable<[K, V]> | Map<K, V>) {\n this._map = entries instanceof Map ? entries : new Map(entries);\n }\n\n static of<K, V>(...entries: [K, V][]): HoloMap<K, V> {\n return new HoloMap(entries);\n }\n\n static from<K, V>(entries: Iterable<[K, V]>): HoloMap<K, V> {\n return new HoloMap(entries);\n }\n\n static fromObject<V>(obj: Record<string, V>): HoloMap<string, V> {\n return new HoloMap(Object.entries(obj));\n }\n\n get size(): number {\n return this._map.size;\n }\n\n get isEmpty(): boolean {\n return this._map.size === 0;\n }\n\n get(key: K): V | undefined {\n return this._map.get(key);\n }\n\n getOrDefault(key: K, defaultValue: V): V {\n return this._map.has(key) ? this._map.get(key)! : defaultValue;\n }\n\n has(key: K): boolean {\n return this._map.has(key);\n }\n\n set(key: K, value: V): HoloMap<K, V> {\n const newMap = new Map(this._map);\n newMap.set(key, value);\n return new HoloMap(newMap);\n }\n\n delete(key: K): HoloMap<K, V> {\n const newMap = new Map(this._map);\n newMap.delete(key);\n return new HoloMap(newMap);\n }\n\n update(key: K, fn: (value: V | undefined) => V): HoloMap<K, V> {\n return this.set(key, fn(this.get(key)));\n }\n\n merge(other: HoloMap<K, V>): HoloMap<K, V> {\n const newMap = new Map(this._map);\n for (const [key, value] of other) {\n newMap.set(key, value);\n }\n return new HoloMap(newMap);\n }\n\n keys(): List<K> {\n return new List(this._map.keys());\n }\n\n values(): List<V> {\n return new List(this._map.values());\n }\n\n entries(): List<[K, V]> {\n return new List(this._map.entries());\n }\n\n map<U>(fn: (value: V, key: K) => U): HoloMap<K, U> {\n const entries: [K, U][] = [];\n for (const [key, value] of this._map) {\n entries.push([key, fn(value, key)]);\n }\n return new HoloMap(entries);\n }\n\n mapKeys<K2>(fn: (key: K, value: V) => K2): HoloMap<K2, V> {\n const entries: [K2, V][] = [];\n for (const [key, value] of this._map) {\n entries.push([fn(key, value), value]);\n }\n return new HoloMap(entries);\n }\n\n filter(predicate: (value: V, key: K) => boolean): HoloMap<K, V> {\n const entries: [K, V][] = [];\n for (const [key, value] of this._map) {\n if (predicate(value, key)) {\n entries.push([key, value]);\n }\n }\n return new HoloMap(entries);\n }\n\n reduce<U>(fn: (acc: U, value: V, key: K) => U, initial: U): U {\n let acc = initial;\n for (const [key, value] of this._map) {\n acc = fn(acc, value, key);\n }\n return acc;\n }\n\n forEach(fn: (value: V, key: K) => void): void {\n this._map.forEach(fn);\n }\n\n find(predicate: (value: V, key: K) => boolean): [K, V] | undefined {\n for (const [key, value] of this._map) {\n if (predicate(value, key)) {\n return [key, value];\n }\n }\n return undefined;\n }\n\n some(predicate: (value: V, key: K) => boolean): boolean {\n for (const [key, value] of this._map) {\n if (predicate(value, key)) return true;\n }\n return false;\n }\n\n every(predicate: (value: V, key: K) => boolean): boolean {\n for (const [key, value] of this._map) {\n if (!predicate(value, key)) return false;\n }\n return true;\n }\n\n toObject(this: HoloMap<string, V>): Record<string, V> {\n const obj: Record<string, V> = {};\n for (const [key, value] of this._map) {\n obj[key] = value;\n }\n return obj;\n }\n\n toNativeMap(): Map<K, V> {\n return new Map(this._map);\n }\n\n [Symbol.iterator](): Iterator<[K, V]> {\n return this._map[Symbol.iterator]();\n }\n\n toString(): string {\n const entries = [...this._map].map(([k, v]) => `${k}: ${v}`).join(', ');\n return `HoloMap { ${entries} }`;\n }\n}\n\n/**\n * Immutable Set with functional operations\n */\nexport class HoloSet<T> {\n private readonly set: ReadonlySet<T>;\n\n constructor(items?: Iterable<T>) {\n this.set = new Set(items);\n }\n\n static of<T>(...items: T[]): HoloSet<T> {\n return new HoloSet(items);\n }\n\n static from<T>(iterable: Iterable<T>): HoloSet<T> {\n return new HoloSet(iterable);\n }\n\n get size(): number {\n return this.set.size;\n }\n\n get isEmpty(): boolean {\n return this.set.size === 0;\n }\n\n has(item: T): boolean {\n return this.set.has(item);\n }\n\n add(item: T): HoloSet<T> {\n const newSet = new Set(this.set);\n newSet.add(item);\n return new HoloSet(newSet);\n }\n\n delete(item: T): HoloSet<T> {\n const newSet = new Set(this.set);\n newSet.delete(item);\n return new HoloSet(newSet);\n }\n\n addAll(items: Iterable<T>): HoloSet<T> {\n const newSet = new Set(this.set);\n for (const item of items) {\n newSet.add(item);\n }\n return new HoloSet(newSet);\n }\n\n union(other: HoloSet<T>): HoloSet<T> {\n return this.addAll(other);\n }\n\n intersection(other: HoloSet<T>): HoloSet<T> {\n const result = new Set<T>();\n for (const item of this.set) {\n if (other.has(item)) {\n result.add(item);\n }\n }\n return new HoloSet(result);\n }\n\n difference(other: HoloSet<T>): HoloSet<T> {\n const result = new Set<T>();\n for (const item of this.set) {\n if (!other.has(item)) {\n result.add(item);\n }\n }\n return new HoloSet(result);\n }\n\n symmetricDifference(other: HoloSet<T>): HoloSet<T> {\n return this.difference(other).union(other.difference(this));\n }\n\n isSubsetOf(other: HoloSet<T>): boolean {\n for (const item of this.set) {\n if (!other.has(item)) return false;\n }\n return true;\n }\n\n isSupersetOf(other: HoloSet<T>): boolean {\n return other.isSubsetOf(this);\n }\n\n isDisjointFrom(other: HoloSet<T>): boolean {\n return this.intersection(other).isEmpty;\n }\n\n map<U>(fn: (item: T) => U): HoloSet<U> {\n const result = new Set<U>();\n for (const item of this.set) {\n result.add(fn(item));\n }\n return new HoloSet(result);\n }\n\n filter(predicate: (item: T) => boolean): HoloSet<T> {\n const result = new Set<T>();\n for (const item of this.set) {\n if (predicate(item)) {\n result.add(item);\n }\n }\n return new HoloSet(result);\n }\n\n reduce<U>(fn: (acc: U, item: T) => U, initial: U): U {\n let acc = initial;\n for (const item of this.set) {\n acc = fn(acc, item);\n }\n return acc;\n }\n\n forEach(fn: (item: T) => void): void {\n this.set.forEach(fn);\n }\n\n find(predicate: (item: T) => boolean): T | undefined {\n for (const item of this.set) {\n if (predicate(item)) return item;\n }\n return undefined;\n }\n\n some(predicate: (item: T) => boolean): boolean {\n for (const item of this.set) {\n if (predicate(item)) return true;\n }\n return false;\n }\n\n every(predicate: (item: T) => boolean): boolean {\n for (const item of this.set) {\n if (!predicate(item)) return false;\n }\n return true;\n }\n\n toArray(): T[] {\n return [...this.set];\n }\n\n toList(): List<T> {\n return new List(this.set);\n }\n\n toNativeSet(): Set<T> {\n return new Set(this.set);\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.set[Symbol.iterator]();\n }\n\n toString(): string {\n return `HoloSet { ${[...this.set].join(', ')} }`;\n }\n}\n\n/**\n * Spatial grid for efficient spatial queries (useful for game worlds)\n */\nexport class SpatialGrid<T> {\n private readonly cellSize: number;\n private readonly cells: Map<string, T[]> = new Map();\n\n constructor(cellSize: number) {\n this.cellSize = cellSize;\n }\n\n private getCellKey(x: number, y: number, z: number): string {\n const cx = Math.floor(x / this.cellSize);\n const cy = Math.floor(y / this.cellSize);\n const cz = Math.floor(z / this.cellSize);\n return `${cx},${cy},${cz}`;\n }\n\n insert(position: Vec3, item: T): void {\n const key = this.getCellKey(position.x, position.y, position.z);\n if (!this.cells.has(key)) {\n this.cells.set(key, []);\n }\n this.cells.get(key)!.push(item);\n }\n\n remove(position: Vec3, item: T): boolean {\n const key = this.getCellKey(position.x, position.y, position.z);\n const cell = this.cells.get(key);\n if (!cell) return false;\n const index = cell.indexOf(item);\n if (index === -1) return false;\n cell.splice(index, 1);\n if (cell.length === 0) {\n this.cells.delete(key);\n }\n return true;\n }\n\n query(center: Vec3, radius: number): T[] {\n const results: T[] = [];\n const cellRadius = Math.ceil(radius / this.cellSize);\n const cx = Math.floor(center.x / this.cellSize);\n const cy = Math.floor(center.y / this.cellSize);\n const cz = Math.floor(center.z / this.cellSize);\n\n for (let x = cx - cellRadius; x <= cx + cellRadius; x++) {\n for (let y = cy - cellRadius; y <= cy + cellRadius; y++) {\n for (let z = cz - cellRadius; z <= cz + cellRadius; z++) {\n const cell = this.cells.get(`${x},${y},${z}`);\n if (cell) {\n results.push(...cell);\n }\n }\n }\n }\n\n return results;\n }\n\n queryBox(min: Vec3, max: Vec3): T[] {\n const results: T[] = [];\n const minCx = Math.floor(min.x / this.cellSize);\n const minCy = Math.floor(min.y / this.cellSize);\n const minCz = Math.floor(min.z / this.cellSize);\n const maxCx = Math.floor(max.x / this.cellSize);\n const maxCy = Math.floor(max.y / this.cellSize);\n const maxCz = Math.floor(max.z / this.cellSize);\n\n for (let x = minCx; x <= maxCx; x++) {\n for (let y = minCy; y <= maxCy; y++) {\n for (let z = minCz; z <= maxCz; z++) {\n const cell = this.cells.get(`${x},${y},${z}`);\n if (cell) {\n results.push(...cell);\n }\n }\n }\n }\n\n return results;\n }\n\n clear(): void {\n this.cells.clear();\n }\n\n get cellCount(): number {\n return this.cells.size;\n }\n\n get itemCount(): number {\n let count = 0;\n for (const cell of this.cells.values()) {\n count += cell.length;\n }\n return count;\n }\n}\n\n/**\n * Priority queue (min-heap by default)\n */\nexport class PriorityQueue<T> {\n private heap: { item: T; priority: number }[] = [];\n\n constructor(private compareFn: (a: number, b: number) => number = (a, b) => a - b) {}\n\n static minHeap<T>(): PriorityQueue<T> {\n return new PriorityQueue((a, b) => a - b);\n }\n\n static maxHeap<T>(): PriorityQueue<T> {\n return new PriorityQueue((a, b) => b - a);\n }\n\n get size(): number {\n return this.heap.length;\n }\n\n get isEmpty(): boolean {\n return this.heap.length === 0;\n }\n\n enqueue(item: T, priority: number): void {\n this.heap.push({ item, priority });\n this.bubbleUp(this.heap.length - 1);\n }\n\n dequeue(): T | undefined {\n if (this.isEmpty) return undefined;\n const result = this.heap[0].item;\n const last = this.heap.pop()!;\n if (this.heap.length > 0) {\n this.heap[0] = last;\n this.bubbleDown(0);\n }\n return result;\n }\n\n peek(): T | undefined {\n return this.heap[0]?.item;\n }\n\n peekPriority(): number | undefined {\n return this.heap[0]?.priority;\n }\n\n clear(): void {\n this.heap = [];\n }\n\n private bubbleUp(index: number): void {\n while (index > 0) {\n const parentIndex = Math.floor((index - 1) / 2);\n if (this.compareFn(this.heap[index].priority, this.heap[parentIndex].priority) >= 0) break;\n [this.heap[index], this.heap[parentIndex]] = [this.heap[parentIndex], this.heap[index]];\n index = parentIndex;\n }\n }\n\n private bubbleDown(index: number): void {\n while (true) {\n const leftChild = 2 * index + 1;\n const rightChild = 2 * index + 2;\n let smallest = index;\n\n if (\n leftChild < this.heap.length &&\n this.compareFn(this.heap[leftChild].priority, this.heap[smallest].priority) < 0\n ) {\n smallest = leftChild;\n }\n if (\n rightChild < this.heap.length &&\n this.compareFn(this.heap[rightChild].priority, this.heap[smallest].priority) < 0\n ) {\n smallest = rightChild;\n }\n\n if (smallest === index) break;\n [this.heap[index], this.heap[smallest]] = [this.heap[smallest], this.heap[index]];\n index = smallest;\n }\n }\n}\n\n// Convenience aliases\nexport { HoloMap as Map };\nexport { HoloSet as Set };\n"],"mappings":"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","names":[]}
@@ -1,15 +1,40 @@
1
1
  // src/types.ts
2
2
  function vec2(x = 0, y = 0) {
3
3
  const v = [x, y];
4
- Object.defineProperty(v, "x", { value: x, writable: true, enumerable: false, configurable: true });
5
- Object.defineProperty(v, "y", { value: y, writable: true, enumerable: false, configurable: true });
4
+ Object.defineProperty(v, "x", {
5
+ value: x,
6
+ writable: true,
7
+ enumerable: false,
8
+ configurable: true
9
+ });
10
+ Object.defineProperty(v, "y", {
11
+ value: y,
12
+ writable: true,
13
+ enumerable: false,
14
+ configurable: true
15
+ });
6
16
  return v;
7
17
  }
8
18
  function vec3(x = 0, y = 0, z = 0) {
9
19
  const v = [x, y, z];
10
- Object.defineProperty(v, "x", { value: x, writable: true, enumerable: false, configurable: true });
11
- Object.defineProperty(v, "y", { value: y, writable: true, enumerable: false, configurable: true });
12
- Object.defineProperty(v, "z", { value: z, writable: true, enumerable: false, configurable: true });
20
+ Object.defineProperty(v, "x", {
21
+ value: x,
22
+ writable: true,
23
+ enumerable: false,
24
+ configurable: true
25
+ });
26
+ Object.defineProperty(v, "y", {
27
+ value: y,
28
+ writable: true,
29
+ enumerable: false,
30
+ configurable: true
31
+ });
32
+ Object.defineProperty(v, "z", {
33
+ value: z,
34
+ writable: true,
35
+ enumerable: false,
36
+ configurable: true
37
+ });
13
38
  return v;
14
39
  }
15
40
  function vec4(x = 0, y = 0, z = 0, w = 0) {
@@ -683,4 +708,4 @@ export {
683
708
  noise,
684
709
  random
685
710
  };
686
- //# sourceMappingURL=chunk-DZHAVOCH.js.map
711
+ //# sourceMappingURL=chunk-SOKH6FJ7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types.ts","../src/math.ts"],"sourcesContent":["/**\n * Core Types for HoloScript\n *\n * Fundamental spatial and graphical types used throughout the language.\n */\n\n// =============================================================================\n// VECTOR TYPES\n// =============================================================================\n\n/**\n * 2D Vector\n */\nexport interface Vec2 {\n x: number;\n y: number;\n}\n\n/**\n * 3D Vector - The fundamental spatial type\n */\nexport interface Vec3 {\n x: number;\n y: number;\n z: number;\n}\n\n/**\n * 4D Vector\n */\nexport interface Vec4 {\n x: number;\n y: number;\n z: number;\n w: number;\n}\n\n// Array representations\nexport type Vec2Array = [number, number];\nexport type Vec3Array = [number, number, number];\nexport type Vec4Array = [number, number, number, number];\n\n// =============================================================================\n// QUATERNION\n// =============================================================================\n\n/**\n * Quaternion for rotation representation\n */\nexport interface Quat {\n x: number;\n y: number;\n z: number;\n w: number;\n}\n\nexport type QuatArray = [number, number, number, number];\n\n// =============================================================================\n// TRANSFORM\n// =============================================================================\n\n/**\n * Complete 3D transform\n */\nexport interface Transform {\n position: Vec3;\n rotation: Quat;\n scale: Vec3;\n}\n\n/**\n * Euler angles (in degrees)\n */\nexport interface EulerAngles {\n x: number; // pitch\n y: number; // yaw\n z: number; // roll\n}\n\n// =============================================================================\n// COLOR\n// =============================================================================\n\n/**\n * RGB Color (0-1 range)\n */\nexport interface ColorRGB {\n r: number;\n g: number;\n b: number;\n}\n\n/**\n * RGBA Color (0-1 range)\n */\nexport interface ColorRGBA extends ColorRGB {\n a: number;\n}\n\n/**\n * HSL Color\n */\nexport interface ColorHSL {\n h: number; // 0-360\n s: number; // 0-1\n l: number; // 0-1\n}\n\n/**\n * Color can be represented multiple ways\n */\nexport type Color = string | ColorRGB | ColorRGBA | ColorHSL | number;\n\n// =============================================================================\n// BOUNDS\n// =============================================================================\n\n/**\n * Axis-Aligned Bounding Box\n */\nexport interface AABB {\n min: Vec3;\n max: Vec3;\n}\n\n/**\n * Bounding Sphere\n */\nexport interface BoundingSphere {\n center: Vec3;\n radius: number;\n}\n\n// =============================================================================\n// RAY\n// =============================================================================\n\n/**\n * Ray for raycasting\n */\nexport interface Ray {\n origin: Vec3;\n direction: Vec3;\n}\n\n/**\n * Raycast hit result\n */\nexport interface RaycastHit {\n point: Vec3;\n normal: Vec3;\n distance: number;\n objectId?: string;\n}\n\n// =============================================================================\n// UTILITY TYPES\n// =============================================================================\n\n/**\n * Nullable type helper\n */\nexport type Nullable<T> = T | null;\n\n/**\n * Optional type helper\n */\nexport type Optional<T> = T | undefined;\n\n/**\n * Deep partial type\n */\nexport type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n};\n\n// =============================================================================\n// FACTORY FUNCTIONS\n// =============================================================================\n\n/**\n * Create a Vec2\n */\nexport function vec2(x: number = 0, y: number = 0): Vec2 {\n const v = [x, y] as unknown as Vec2;\n Object.defineProperty(v, 'x', {\n value: x,\n writable: true,\n enumerable: false,\n configurable: true,\n });\n Object.defineProperty(v, 'y', {\n value: y,\n writable: true,\n enumerable: false,\n configurable: true,\n });\n return v;\n}\n\n/**\n * Create a Vec3\n */\nexport function vec3(x: number = 0, y: number = 0, z: number = 0): Vec3 {\n const v = [x, y, z] as unknown as Vec3;\n Object.defineProperty(v, 'x', {\n value: x,\n writable: true,\n enumerable: false,\n configurable: true,\n });\n Object.defineProperty(v, 'y', {\n value: y,\n writable: true,\n enumerable: false,\n configurable: true,\n });\n Object.defineProperty(v, 'z', {\n value: z,\n writable: true,\n enumerable: false,\n configurable: true,\n });\n return v;\n}\n\n/**\n * Create a Vec4\n */\nexport function vec4(x: number = 0, y: number = 0, z: number = 0, w: number = 0): Vec4 {\n return { x, y, z, w };\n}\n\n/**\n * Create a Quaternion (identity by default)\n */\nexport function quat(x: number = 0, y: number = 0, z: number = 0, w: number = 1): Quat {\n return { x, y, z, w };\n}\n\n/**\n * Create a Transform\n */\nexport function transform(\n position: Vec3 = vec3(),\n rotation: Quat = quat(),\n scale: Vec3 = vec3(1, 1, 1)\n): Transform {\n return { position, rotation, scale };\n}\n\n/**\n * Create an RGB color\n */\nexport function rgb(r: number, g: number, b: number): ColorRGB {\n return { r, g, b };\n}\n\n/**\n * Create an RGBA color\n */\nexport function rgba(r: number, g: number, b: number, a: number = 1): ColorRGBA {\n return { r, g, b, a };\n}\n\n/**\n * Create an HSL color\n */\nexport function hsl(h: number, s: number, l: number): ColorHSL {\n return { h, s, l };\n}\n\n/**\n * Create an AABB\n */\nexport function aabb(min: Vec3 = vec3(), max: Vec3 = vec3()): AABB {\n return { min, max };\n}\n\n/**\n * Create a Ray\n */\nexport function ray(origin: Vec3, direction: Vec3): Ray {\n return { origin, direction };\n}\n\n// =============================================================================\n// CONVERSION UTILITIES\n// =============================================================================\n\n/**\n * Convert Vec3 to array\n */\nexport function vec3ToArray(v: Vec3): Vec3Array {\n return [v.x, v.y, v.z];\n}\n\n/**\n * Convert array to Vec3\n */\nexport function arrayToVec3(arr: Vec3Array | number[]): Vec3 {\n return vec3(arr[0] || 0, arr[1] || 0, arr[2] || 0);\n}\n\n/**\n * Convert Quat to array\n */\nexport function quatToArray(q: Quat): QuatArray {\n return [q.x, q.y, q.z, q.w];\n}\n\n/**\n * Convert array to Quat\n */\nexport function arrayToQuat(arr: QuatArray | number[]): Quat {\n return { x: arr[0] || 0, y: arr[1] || 0, z: arr[2] || 0, w: arr[3] ?? 1 };\n}\n\n/**\n * Parse color from various formats\n */\nexport function parseColor(color: Color): ColorRGBA {\n if (typeof color === 'string') {\n // Hex color\n if (color.startsWith('#')) {\n const hex = color.slice(1);\n if (hex.length === 3) {\n return {\n r: parseInt(hex[0] + hex[0], 16) / 255,\n g: parseInt(hex[1] + hex[1], 16) / 255,\n b: parseInt(hex[2] + hex[2], 16) / 255,\n a: 1,\n };\n } else if (hex.length === 6) {\n return {\n r: parseInt(hex.slice(0, 2), 16) / 255,\n g: parseInt(hex.slice(2, 4), 16) / 255,\n b: parseInt(hex.slice(4, 6), 16) / 255,\n a: 1,\n };\n } else if (hex.length === 8) {\n return {\n r: parseInt(hex.slice(0, 2), 16) / 255,\n g: parseInt(hex.slice(2, 4), 16) / 255,\n b: parseInt(hex.slice(4, 6), 16) / 255,\n a: parseInt(hex.slice(6, 8), 16) / 255,\n };\n }\n }\n // Named colors (basic support)\n const namedColors: Record<string, ColorRGBA> = {\n white: { r: 1, g: 1, b: 1, a: 1 },\n black: { r: 0, g: 0, b: 0, a: 1 },\n red: { r: 1, g: 0, b: 0, a: 1 },\n green: { r: 0, g: 1, b: 0, a: 1 },\n blue: { r: 0, g: 0, b: 1, a: 1 },\n yellow: { r: 1, g: 1, b: 0, a: 1 },\n cyan: { r: 0, g: 1, b: 1, a: 1 },\n magenta: { r: 1, g: 0, b: 1, a: 1 },\n };\n return namedColors[color.toLowerCase()] || { r: 1, g: 1, b: 1, a: 1 };\n }\n\n if (typeof color === 'number') {\n // Integer color (0xRRGGBB)\n return {\n r: ((color >> 16) & 0xff) / 255,\n g: ((color >> 8) & 0xff) / 255,\n b: (color & 0xff) / 255,\n a: 1,\n };\n }\n\n if ('h' in color) {\n // HSL to RGB conversion\n const { h, s, l } = color;\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\n const m = l - c / 2;\n let r = 0,\n g = 0,\n b = 0;\n\n if (h < 60) {\n r = c;\n g = x;\n } else if (h < 120) {\n r = x;\n g = c;\n } else if (h < 180) {\n g = c;\n b = x;\n } else if (h < 240) {\n g = x;\n b = c;\n } else if (h < 300) {\n r = x;\n b = c;\n } else {\n r = c;\n b = x;\n }\n\n return { r: r + m, g: g + m, b: b + m, a: 1 };\n }\n\n if ('a' in color) {\n return color;\n }\n\n return { ...color, a: 1 };\n}\n\n/**\n * Color to hex string\n */\nexport function colorToHex(color: ColorRGB | ColorRGBA): string {\n const r = Math.round(color.r * 255)\n .toString(16)\n .padStart(2, '0');\n const g = Math.round(color.g * 255)\n .toString(16)\n .padStart(2, '0');\n const b = Math.round(color.b * 255)\n .toString(16)\n .padStart(2, '0');\n return `#${r}${g}${b}`;\n}\n\n// =============================================================================\n// TRAIT DEFINITIONS\n// =============================================================================\n\nexport interface TraitDefinition {\n name: string;\n description?: string;\n type?: string;\n params?: Record<string, any>;\n parameters?: Record<string, any>;\n validator?: (params: Record<string, any>) => boolean;\n validation?: any;\n}\n","/**\n * Math utilities for HoloScript\n *\n * Vector math, quaternion operations, interpolation, and noise functions.\n */\n\nimport type { Vec2, Vec3, Quat, EulerAngles, AABB } from './types.js';\nimport { vec3, quat } from './types.js';\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\nexport const PI = Math.PI;\nexport const TAU = Math.PI * 2;\nexport const HALF_PI = Math.PI / 2;\nexport const DEG_TO_RAD = Math.PI / 180;\nexport const RAD_TO_DEG = 180 / Math.PI;\nexport const EPSILON = 1e-6;\n\n// =============================================================================\n// BASIC MATH\n// =============================================================================\n\nexport function clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value));\n}\n\nexport function lerp(a: number, b: number, t: number): number {\n return a + (b - a) * t;\n}\n\nexport function inverseLerp(a: number, b: number, value: number): number {\n return (value - a) / (b - a);\n}\n\nexport function remap(\n value: number,\n inMin: number,\n inMax: number,\n outMin: number,\n outMax: number\n): number {\n return lerp(outMin, outMax, inverseLerp(inMin, inMax, value));\n}\n\nexport function smoothstep(edge0: number, edge1: number, x: number): number {\n const t = clamp((x - edge0) / (edge1 - edge0), 0, 1);\n return t * t * (3 - 2 * t);\n}\n\nexport function smootherstep(edge0: number, edge1: number, x: number): number {\n const t = clamp((x - edge0) / (edge1 - edge0), 0, 1);\n return t * t * t * (t * (t * 6 - 15) + 10);\n}\n\nexport function degToRad(degrees: number): number {\n return degrees * DEG_TO_RAD;\n}\n\nexport function radToDeg(radians: number): number {\n return radians * RAD_TO_DEG;\n}\n\nexport function mod(n: number, m: number): number {\n return ((n % m) + m) % m;\n}\n\nexport function fract(x: number): number {\n return x - Math.floor(x);\n}\n\nexport function sign(x: number): number {\n return x > 0 ? 1 : x < 0 ? -1 : 0;\n}\n\nexport function step(edge: number, x: number): number {\n return x < edge ? 0 : 1;\n}\n\n// =============================================================================\n// VEC2 OPERATIONS\n// =============================================================================\n\nexport const vec2Math = {\n add: (a: Vec2, b: Vec2): Vec2 => ({ x: a.x + b.x, y: a.y + b.y }),\n sub: (a: Vec2, b: Vec2): Vec2 => ({ x: a.x - b.x, y: a.y - b.y }),\n mul: (a: Vec2, s: number): Vec2 => ({ x: a.x * s, y: a.y * s }),\n div: (a: Vec2, s: number): Vec2 => ({ x: a.x / s, y: a.y / s }),\n dot: (a: Vec2, b: Vec2): number => a.x * b.x + a.y * b.y,\n length: (v: Vec2): number => Math.sqrt(v.x * v.x + v.y * v.y),\n lengthSq: (v: Vec2): number => v.x * v.x + v.y * v.y,\n normalize: (v: Vec2): Vec2 => {\n const len = vec2Math.length(v);\n return len > 0 ? vec2Math.div(v, len) : { x: 0, y: 0 };\n },\n distance: (a: Vec2, b: Vec2): number => vec2Math.length(vec2Math.sub(a, b)),\n lerp: (a: Vec2, b: Vec2, t: number): Vec2 => ({\n x: lerp(a.x, b.x, t),\n y: lerp(a.y, b.y, t),\n }),\n rotate: (v: Vec2, angle: number): Vec2 => {\n const c = Math.cos(angle);\n const s = Math.sin(angle);\n return { x: v.x * c - v.y * s, y: v.x * s + v.y * c };\n },\n angle: (v: Vec2): number => Math.atan2(v.y, v.x),\n angleBetween: (a: Vec2, b: Vec2): number => {\n return Math.acos(clamp(vec2Math.dot(vec2Math.normalize(a), vec2Math.normalize(b)), -1, 1));\n },\n};\n\n// =============================================================================\n// VEC3 OPERATIONS\n// =============================================================================\n\nexport const vec3Math = {\n zero: (): Vec3 => vec3(0, 0, 0),\n one: (): Vec3 => vec3(1, 1, 1),\n up: (): Vec3 => vec3(0, 1, 0),\n down: (): Vec3 => vec3(0, -1, 0),\n forward: (): Vec3 => vec3(0, 0, -1),\n back: (): Vec3 => vec3(0, 0, 1),\n left: (): Vec3 => vec3(-1, 0, 0),\n right: (): Vec3 => vec3(1, 0, 0),\n\n add: (a: Vec3, b: Vec3): Vec3 => vec3(a.x + b.x, a.y + b.y, a.z + b.z),\n sub: (a: Vec3, b: Vec3): Vec3 => ({ x: a.x - b.x, y: a.y - b.y, z: a.z - b.z }),\n mul: (a: Vec3, s: number): Vec3 => ({ x: a.x * s, y: a.y * s, z: a.z * s }),\n div: (a: Vec3, s: number): Vec3 => ({ x: a.x / s, y: a.y / s, z: a.z / s }),\n mulVec: (a: Vec3, b: Vec3): Vec3 => ({ x: a.x * b.x, y: a.y * b.y, z: a.z * b.z }),\n\n dot: (a: Vec3, b: Vec3): number => a.x * b.x + a.y * b.y + a.z * b.z,\n\n cross: (a: Vec3, b: Vec3): Vec3 => ({\n x: a.y * b.z - a.z * b.y,\n y: a.z * b.x - a.x * b.z,\n z: a.x * b.y - a.y * b.x,\n }),\n\n length: (v: Vec3): number => Math.sqrt(v.x * v.x + v.y * v.y + v.z * v.z),\n lengthSq: (v: Vec3): number => v.x * v.x + v.y * v.y + v.z * v.z,\n\n normalize: (v: Vec3): Vec3 => {\n const len = vec3Math.length(v);\n return len > EPSILON ? vec3Math.div(v, len) : vec3(0, 0, 0);\n },\n\n distance: (a: Vec3, b: Vec3): number => vec3Math.length(vec3Math.sub(a, b)),\n distanceSq: (a: Vec3, b: Vec3): number => vec3Math.lengthSq(vec3Math.sub(a, b)),\n\n lerp: (a: Vec3, b: Vec3, t: number): Vec3 => ({\n x: lerp(a.x, b.x, t),\n y: lerp(a.y, b.y, t),\n z: lerp(a.z, b.z, t),\n }),\n\n slerp: (a: Vec3, b: Vec3, t: number): Vec3 => {\n const dot = clamp(vec3Math.dot(a, b), -1, 1);\n const theta = Math.acos(dot) * t;\n const relative = vec3Math.normalize(vec3Math.sub(b, vec3Math.mul(a, dot)));\n return vec3Math.add(vec3Math.mul(a, Math.cos(theta)), vec3Math.mul(relative, Math.sin(theta)));\n },\n\n negate: (v: Vec3): Vec3 => ({ x: -v.x, y: -v.y, z: -v.z }),\n\n abs: (v: Vec3): Vec3 => ({ x: Math.abs(v.x), y: Math.abs(v.y), z: Math.abs(v.z) }),\n\n min: (a: Vec3, b: Vec3): Vec3 => ({\n x: Math.min(a.x, b.x),\n y: Math.min(a.y, b.y),\n z: Math.min(a.z, b.z),\n }),\n\n max: (a: Vec3, b: Vec3): Vec3 => ({\n x: Math.max(a.x, b.x),\n y: Math.max(a.y, b.y),\n z: Math.max(a.z, b.z),\n }),\n\n clamp: (v: Vec3, min: Vec3, max: Vec3): Vec3 => ({\n x: clamp(v.x, min.x, max.x),\n y: clamp(v.y, min.y, max.y),\n z: clamp(v.z, min.z, max.z),\n }),\n\n floor: (v: Vec3): Vec3 => ({\n x: Math.floor(v.x),\n y: Math.floor(v.y),\n z: Math.floor(v.z),\n }),\n\n ceil: (v: Vec3): Vec3 => ({\n x: Math.ceil(v.x),\n y: Math.ceil(v.y),\n z: Math.ceil(v.z),\n }),\n\n round: (v: Vec3): Vec3 => ({\n x: Math.round(v.x),\n y: Math.round(v.y),\n z: Math.round(v.z),\n }),\n\n reflect: (v: Vec3, normal: Vec3): Vec3 => {\n const dot = vec3Math.dot(v, normal);\n return vec3Math.sub(v, vec3Math.mul(normal, 2 * dot));\n },\n\n project: (v: Vec3, onto: Vec3): Vec3 => {\n const dot = vec3Math.dot(v, onto);\n const lenSq = vec3Math.lengthSq(onto);\n return vec3Math.mul(onto, dot / lenSq);\n },\n\n angle: (a: Vec3, b: Vec3): number => {\n const dot = vec3Math.dot(vec3Math.normalize(a), vec3Math.normalize(b));\n return Math.acos(clamp(dot, -1, 1));\n },\n\n equals: (a: Vec3, b: Vec3, epsilon: number = EPSILON): boolean => {\n return (\n Math.abs(a.x - b.x) < epsilon &&\n Math.abs(a.y - b.y) < epsilon &&\n Math.abs(a.z - b.z) < epsilon\n );\n },\n};\n\n// =============================================================================\n// QUATERNION OPERATIONS\n// =============================================================================\n\nexport const quatMath = {\n identity: (): Quat => quat(0, 0, 0, 1),\n\n fromAxisAngle: (axis: Vec3, angle: number): Quat => {\n const halfAngle = angle / 2;\n const s = Math.sin(halfAngle);\n const normalized = vec3Math.normalize(axis);\n return {\n x: normalized.x * s,\n y: normalized.y * s,\n z: normalized.z * s,\n w: Math.cos(halfAngle),\n };\n },\n\n fromEuler: (euler: EulerAngles): Quat => {\n const { x, y, z } = euler;\n const c1 = Math.cos(degToRad(x) / 2);\n const c2 = Math.cos(degToRad(y) / 2);\n const c3 = Math.cos(degToRad(z) / 2);\n const s1 = Math.sin(degToRad(x) / 2);\n const s2 = Math.sin(degToRad(y) / 2);\n const s3 = Math.sin(degToRad(z) / 2);\n\n return {\n x: s1 * c2 * c3 + c1 * s2 * s3,\n y: c1 * s2 * c3 - s1 * c2 * s3,\n z: c1 * c2 * s3 + s1 * s2 * c3,\n w: c1 * c2 * c3 - s1 * s2 * s3,\n };\n },\n\n toEuler: (q: Quat): EulerAngles => {\n const sinr_cosp = 2 * (q.w * q.x + q.y * q.z);\n const cosr_cosp = 1 - 2 * (q.x * q.x + q.y * q.y);\n const x = Math.atan2(sinr_cosp, cosr_cosp);\n\n const sinp = 2 * (q.w * q.y - q.z * q.x);\n let y: number;\n if (Math.abs(sinp) >= 1) {\n y = (Math.PI / 2) * Math.sign(sinp);\n } else {\n y = Math.asin(sinp);\n }\n\n const siny_cosp = 2 * (q.w * q.z + q.x * q.y);\n const cosy_cosp = 1 - 2 * (q.y * q.y + q.z * q.z);\n const z = Math.atan2(siny_cosp, cosy_cosp);\n\n return {\n x: radToDeg(x),\n y: radToDeg(y),\n z: radToDeg(z),\n };\n },\n\n multiply: (a: Quat, b: Quat): Quat => ({\n x: a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y,\n y: a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x,\n z: a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w,\n w: a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z,\n }),\n\n conjugate: (q: Quat): Quat => ({ x: -q.x, y: -q.y, z: -q.z, w: q.w }),\n\n inverse: (q: Quat): Quat => {\n const lenSq = q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w;\n return {\n x: -q.x / lenSq,\n y: -q.y / lenSq,\n z: -q.z / lenSq,\n w: q.w / lenSq,\n };\n },\n\n normalize: (q: Quat): Quat => {\n const len = Math.sqrt(q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w);\n return { x: q.x / len, y: q.y / len, z: q.z / len, w: q.w / len };\n },\n\n dot: (a: Quat, b: Quat): number => a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w,\n\n slerp: (a: Quat, b: Quat, t: number): Quat => {\n let dot = quatMath.dot(a, b);\n\n // If dot is negative, negate one quaternion to take shorter path\n let bAdjusted = b;\n if (dot < 0) {\n bAdjusted = { x: -b.x, y: -b.y, z: -b.z, w: -b.w };\n dot = -dot;\n }\n\n if (dot > 0.9995) {\n // Linear interpolation for very close quaternions\n return quatMath.normalize({\n x: lerp(a.x, bAdjusted.x, t),\n y: lerp(a.y, bAdjusted.y, t),\n z: lerp(a.z, bAdjusted.z, t),\n w: lerp(a.w, bAdjusted.w, t),\n });\n }\n\n const theta0 = Math.acos(dot);\n const theta = theta0 * t;\n const sinTheta = Math.sin(theta);\n const sinTheta0 = Math.sin(theta0);\n\n const s0 = Math.cos(theta) - (dot * sinTheta) / sinTheta0;\n const s1 = sinTheta / sinTheta0;\n\n return {\n x: a.x * s0 + bAdjusted.x * s1,\n y: a.y * s0 + bAdjusted.y * s1,\n z: a.z * s0 + bAdjusted.z * s1,\n w: a.w * s0 + bAdjusted.w * s1,\n };\n },\n\n rotateVec3: (q: Quat, v: Vec3): Vec3 => {\n const qv = { x: q.x, y: q.y, z: q.z };\n const uv = vec3Math.cross(qv, v);\n const uuv = vec3Math.cross(qv, uv);\n return vec3Math.add(v, vec3Math.add(vec3Math.mul(uv, 2 * q.w), vec3Math.mul(uuv, 2)));\n },\n\n lookAt: (forward: Vec3, up: Vec3 = vec3(0, 1, 0)): Quat => {\n const f = vec3Math.normalize(forward);\n const r = vec3Math.normalize(vec3Math.cross(up, f));\n const u = vec3Math.cross(f, r);\n\n const trace = r.x + u.y + f.z;\n let q: Quat;\n\n if (trace > 0) {\n const s = 0.5 / Math.sqrt(trace + 1);\n q = {\n w: 0.25 / s,\n x: (u.z - f.y) * s,\n y: (f.x - r.z) * s,\n z: (r.y - u.x) * s,\n };\n } else if (r.x > u.y && r.x > f.z) {\n const s = 2 * Math.sqrt(1 + r.x - u.y - f.z);\n q = {\n w: (u.z - f.y) / s,\n x: 0.25 * s,\n y: (u.x + r.y) / s,\n z: (f.x + r.z) / s,\n };\n } else if (u.y > f.z) {\n const s = 2 * Math.sqrt(1 + u.y - r.x - f.z);\n q = {\n w: (f.x - r.z) / s,\n x: (u.x + r.y) / s,\n y: 0.25 * s,\n z: (f.y + u.z) / s,\n };\n } else {\n const s = 2 * Math.sqrt(1 + f.z - r.x - u.y);\n q = {\n w: (r.y - u.x) / s,\n x: (f.x + r.z) / s,\n y: (f.y + u.z) / s,\n z: 0.25 * s,\n };\n }\n\n return quatMath.normalize(q);\n },\n};\n\n// =============================================================================\n// AABB OPERATIONS\n// =============================================================================\n\nexport const aabbMath = {\n contains: (aabb: AABB, point: Vec3): boolean => {\n return (\n point.x >= aabb.min.x &&\n point.x <= aabb.max.x &&\n point.y >= aabb.min.y &&\n point.y <= aabb.max.y &&\n point.z >= aabb.min.z &&\n point.z <= aabb.max.z\n );\n },\n\n intersects: (a: AABB, b: AABB): boolean => {\n return (\n a.min.x <= b.max.x &&\n a.max.x >= b.min.x &&\n a.min.y <= b.max.y &&\n a.max.y >= b.min.y &&\n a.min.z <= b.max.z &&\n a.max.z >= b.min.z\n );\n },\n\n center: (aabb: AABB): Vec3 => vec3Math.mul(vec3Math.add(aabb.min, aabb.max), 0.5),\n\n size: (aabb: AABB): Vec3 => vec3Math.sub(aabb.max, aabb.min),\n\n expand: (aabb: AABB, point: Vec3): AABB => ({\n min: vec3Math.min(aabb.min, point),\n max: vec3Math.max(aabb.max, point),\n }),\n\n merge: (a: AABB, b: AABB): AABB => ({\n min: vec3Math.min(a.min, b.min),\n max: vec3Math.max(a.max, b.max),\n }),\n};\n\n// =============================================================================\n// NOISE FUNCTIONS\n// =============================================================================\n\n// Simple permutation table for noise\nconst perm = new Uint8Array(512);\nfor (let i = 0; i < 256; i++) perm[i] = perm[i + 256] = i;\nfor (let i = 255; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [perm[i], perm[j]] = [perm[j], perm[i]];\n perm[i + 256] = perm[i];\n}\n\nfunction fade(t: number): number {\n return t * t * t * (t * (t * 6 - 15) + 10);\n}\n\nfunction grad(hash: number, x: number, y: number, z: number): number {\n const h = hash & 15;\n const u = h < 8 ? x : y;\n const v = h < 4 ? y : h === 12 || h === 14 ? x : z;\n return ((h & 1) === 0 ? u : -u) + ((h & 2) === 0 ? v : -v);\n}\n\nexport const noise = {\n /**\n * 3D Perlin noise (-1 to 1)\n */\n perlin3d: (x: number, y: number, z: number): number => {\n const X = Math.floor(x) & 255;\n const Y = Math.floor(y) & 255;\n const Z = Math.floor(z) & 255;\n\n x -= Math.floor(x);\n y -= Math.floor(y);\n z -= Math.floor(z);\n\n const u = fade(x);\n const v = fade(y);\n const w = fade(z);\n\n const A = perm[X] + Y;\n const AA = perm[A] + Z;\n const AB = perm[A + 1] + Z;\n const B = perm[X + 1] + Y;\n const BA = perm[B] + Z;\n const BB = perm[B + 1] + Z;\n\n return lerp(\n lerp(\n lerp(grad(perm[AA], x, y, z), grad(perm[BA], x - 1, y, z), u),\n lerp(grad(perm[AB], x, y - 1, z), grad(perm[BB], x - 1, y - 1, z), u),\n v\n ),\n lerp(\n lerp(grad(perm[AA + 1], x, y, z - 1), grad(perm[BA + 1], x - 1, y, z - 1), u),\n lerp(grad(perm[AB + 1], x, y - 1, z - 1), grad(perm[BB + 1], x - 1, y - 1, z - 1), u),\n v\n ),\n w\n );\n },\n\n /**\n * 2D Perlin noise (-1 to 1)\n */\n perlin2d: (x: number, y: number): number => {\n return noise.perlin3d(x, y, 0);\n },\n\n /**\n * Fractal Brownian Motion (fBm)\n */\n fbm: (\n x: number,\n y: number,\n z: number,\n octaves: number = 6,\n lacunarity: number = 2,\n gain: number = 0.5\n ): number => {\n let value = 0;\n let amplitude = 1;\n let frequency = 1;\n let maxValue = 0;\n\n for (let i = 0; i < octaves; i++) {\n value += amplitude * noise.perlin3d(x * frequency, y * frequency, z * frequency);\n maxValue += amplitude;\n amplitude *= gain;\n frequency *= lacunarity;\n }\n\n return value / maxValue;\n },\n\n /**\n * Simplex-like noise (approximation using perlin)\n */\n simplex: (x: number, y: number): number => {\n return noise.perlin2d(x * 1.2, y * 1.2);\n },\n\n /**\n * Worley/Cellular noise\n */\n worley: (x: number, y: number, z: number): number => {\n const xi = Math.floor(x);\n const yi = Math.floor(y);\n const zi = Math.floor(z);\n\n let minDist = Infinity;\n\n for (let i = -1; i <= 1; i++) {\n for (let j = -1; j <= 1; j++) {\n for (let k = -1; k <= 1; k++) {\n const cellX = xi + i;\n const cellY = yi + j;\n const cellZ = zi + k;\n\n // Pseudo-random point in cell\n const hash = perm[(perm[(perm[cellX & 255] + cellY) & 255] + cellZ) & 255];\n const px = cellX + hash / 255;\n const py = cellY + ((hash * 7) % 255) / 255;\n const pz = cellZ + ((hash * 13) % 255) / 255;\n\n const dist = (x - px) * (x - px) + (y - py) * (y - py) + (z - pz) * (z - pz);\n minDist = Math.min(minDist, dist);\n }\n }\n }\n\n return Math.sqrt(minDist);\n },\n};\n\n// =============================================================================\n// RANDOM\n// =============================================================================\n\nexport const random = {\n /**\n * Random float between 0 and 1\n */\n float: (): number => Math.random(),\n\n /**\n * Random float in range [min, max)\n */\n range: (min: number, max: number): number => min + Math.random() * (max - min),\n\n /**\n * Random integer in range [min, max]\n */\n int: (min: number, max: number): number => Math.floor(min + Math.random() * (max - min + 1)),\n\n /**\n * Random boolean with probability\n */\n bool: (probability: number = 0.5): boolean => Math.random() < probability,\n\n /**\n * Random element from array\n */\n pick: <T>(array: T[]): T => array[Math.floor(Math.random() * array.length)],\n\n /**\n * Shuffle array (Fisher-Yates)\n */\n shuffle: <T>(array: T[]): T[] => {\n const result = [...array];\n for (let i = result.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [result[i], result[j]] = [result[j], result[i]];\n }\n return result;\n },\n\n /**\n * Random Vec3 in unit sphere\n */\n insideUnitSphere: (): Vec3 => {\n const theta = Math.random() * TAU;\n const phi = Math.acos(2 * Math.random() - 1);\n const r = Math.cbrt(Math.random());\n return {\n x: r * Math.sin(phi) * Math.cos(theta),\n y: r * Math.sin(phi) * Math.sin(theta),\n z: r * Math.cos(phi),\n };\n },\n\n /**\n * Random Vec3 on unit sphere surface\n */\n onUnitSphere: (): Vec3 => {\n const theta = Math.random() * TAU;\n const phi = Math.acos(2 * Math.random() - 1);\n return {\n x: Math.sin(phi) * Math.cos(theta),\n y: Math.sin(phi) * Math.sin(theta),\n z: Math.cos(phi),\n };\n },\n\n /**\n * Random Vec2 in unit circle\n */\n insideUnitCircle: (): Vec2 => {\n const theta = Math.random() * TAU;\n const r = Math.sqrt(Math.random());\n return {\n x: r * Math.cos(theta),\n y: r * Math.sin(theta),\n };\n },\n\n /**\n * Seeded random number generator\n */\n seeded: (seed: number) => {\n let s = seed;\n return () => {\n s = (s * 1103515245 + 12345) & 0x7fffffff;\n return s / 0x7fffffff;\n };\n },\n};\n"],"mappings":"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","names":["aabb"]}
@@ -641,6 +641,7 @@ var PriorityQueue = class _PriorityQueue {
641
641
  constructor(compareFn = (a, b) => a - b) {
642
642
  this.compareFn = compareFn;
643
643
  }
644
+ compareFn;
644
645
  heap = [];
645
646
  static minHeap() {
646
647
  return new _PriorityQueue((a, b) => a - b);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/collections.ts"],"sourcesContent":["/**\n * @holoscript/std - Collections Module\n *\n * Provides List, Map, and Set implementations with functional operations\n * for use in HoloScript Plus programs.\n */\n\nimport type { Vec3 } from './types.js';\n\n/**\n * Immutable List with functional operations\n */\nexport class List<T> {\n private readonly items: readonly T[];\n\n constructor(items: Iterable<T> = []) {\n this.items = Array.from(items);\n }\n\n static of<T>(...items: T[]): List<T> {\n return new List(items);\n }\n\n static from<T>(iterable: Iterable<T>): List<T> {\n return new List(iterable);\n }\n\n static range(start: number, end: number, step = 1): List<number> {\n const items: number[] = [];\n for (let i = start; step > 0 ? i < end : i > end; i += step) {\n items.push(i);\n }\n return new List(items);\n }\n\n static repeat<T>(value: T, count: number): List<T> {\n return new List(Array(count).fill(value));\n }\n\n get length(): number {\n return this.items.length;\n }\n\n get isEmpty(): boolean {\n return this.items.length === 0;\n }\n\n get(index: number): T | undefined {\n return index < 0 ? this.items[this.items.length + index] : this.items[index];\n }\n\n first(): T | undefined {\n return this.items[0];\n }\n\n last(): T | undefined {\n return this.items[this.items.length - 1];\n }\n\n map<U>(fn: (item: T, index: number) => U): List<U> {\n return new List(this.items.map(fn));\n }\n\n flatMap<U>(fn: (item: T, index: number) => List<U> | U[]): List<U> {\n const result: U[] = [];\n this.items.forEach((item, index) => {\n const mapped = fn(item, index);\n if (mapped instanceof List) {\n result.push(...mapped.toArray());\n } else {\n result.push(...mapped);\n }\n });\n return new List(result);\n }\n\n filter(predicate: (item: T, index: number) => boolean): List<T> {\n return new List(this.items.filter(predicate));\n }\n\n reject(predicate: (item: T, index: number) => boolean): List<T> {\n return this.filter((item, index) => !predicate(item, index));\n }\n\n reduce<U>(fn: (acc: U, item: T, index: number) => U, initial: U): U {\n return this.items.reduce(fn, initial);\n }\n\n fold<U>(initial: U, fn: (acc: U, item: T) => U): U {\n return this.items.reduce(fn, initial);\n }\n\n find(predicate: (item: T, index: number) => boolean): T | undefined {\n return this.items.find(predicate);\n }\n\n findIndex(predicate: (item: T, index: number) => boolean): number {\n return this.items.findIndex(predicate);\n }\n\n indexOf(item: T): number {\n return this.items.indexOf(item);\n }\n\n includes(item: T): boolean {\n return this.items.includes(item);\n }\n\n some(predicate: (item: T, index: number) => boolean): boolean {\n return this.items.some(predicate);\n }\n\n every(predicate: (item: T, index: number) => boolean): boolean {\n return this.items.every(predicate);\n }\n\n none(predicate: (item: T, index: number) => boolean): boolean {\n return !this.some(predicate);\n }\n\n count(predicate: (item: T, index: number) => boolean): number {\n return this.filter(predicate).length;\n }\n\n forEach(fn: (item: T, index: number) => void): void {\n this.items.forEach(fn);\n }\n\n concat(...lists: (List<T> | T[])[]): List<T> {\n const arrays = lists.map((l) => (l instanceof List ? l.toArray() : l));\n return new List([...this.items, ...arrays.flat()]);\n }\n\n append(item: T): List<T> {\n return new List([...this.items, item]);\n }\n\n prepend(item: T): List<T> {\n return new List([item, ...this.items]);\n }\n\n insert(index: number, item: T): List<T> {\n const arr = [...this.items];\n arr.splice(index, 0, item);\n return new List(arr);\n }\n\n remove(index: number): List<T> {\n const arr = [...this.items];\n arr.splice(index, 1);\n return new List(arr);\n }\n\n update(index: number, item: T): List<T> {\n const arr = [...this.items];\n arr[index] = item;\n return new List(arr);\n }\n\n slice(start?: number, end?: number): List<T> {\n return new List(this.items.slice(start, end));\n }\n\n take(n: number): List<T> {\n return this.slice(0, n);\n }\n\n takeLast(n: number): List<T> {\n return this.slice(-n);\n }\n\n takeWhile(predicate: (item: T, index: number) => boolean): List<T> {\n const result: T[] = [];\n for (let i = 0; i < this.items.length; i++) {\n if (!predicate(this.items[i], i)) break;\n result.push(this.items[i]);\n }\n return new List(result);\n }\n\n drop(n: number): List<T> {\n return this.slice(n);\n }\n\n dropLast(n: number): List<T> {\n return this.slice(0, -n);\n }\n\n dropWhile(predicate: (item: T, index: number) => boolean): List<T> {\n let startIndex = 0;\n for (let i = 0; i < this.items.length; i++) {\n if (!predicate(this.items[i], i)) break;\n startIndex = i + 1;\n }\n return this.slice(startIndex);\n }\n\n reverse(): List<T> {\n return new List([...this.items].reverse());\n }\n\n sort(compareFn?: (a: T, b: T) => number): List<T> {\n return new List([...this.items].sort(compareFn));\n }\n\n sortBy<U>(fn: (item: T) => U): List<T> {\n return this.sort((a, b) => {\n const va = fn(a);\n const vb = fn(b);\n if (va < vb) return -1;\n if (va > vb) return 1;\n return 0;\n });\n }\n\n shuffle(): List<T> {\n const arr = [...this.items];\n for (let i = arr.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [arr[i], arr[j]] = [arr[j], arr[i]];\n }\n return new List(arr);\n }\n\n unique(): List<T> {\n return new List([...new Set(this.items)]);\n }\n\n uniqueBy<U>(fn: (item: T) => U): List<T> {\n const seen = new Set<U>();\n const result: T[] = [];\n for (const item of this.items) {\n const key = fn(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n return new List(result);\n }\n\n groupBy<K>(fn: (item: T) => K): HoloMap<K, List<T>> {\n const groups = new Map<K, T[]>();\n for (const item of this.items) {\n const key = fn(item);\n const group = groups.get(key) || [];\n group.push(item);\n groups.set(key, group);\n }\n const result = new Map<K, List<T>>();\n for (const [key, items] of groups) {\n result.set(key, new List(items));\n }\n return new HoloMap(result);\n }\n\n partition(predicate: (item: T, index: number) => boolean): [List<T>, List<T>] {\n const pass: T[] = [];\n const fail: T[] = [];\n this.items.forEach((item, index) => {\n if (predicate(item, index)) {\n pass.push(item);\n } else {\n fail.push(item);\n }\n });\n return [new List(pass), new List(fail)];\n }\n\n zip<U>(other: List<U>): List<[T, U]> {\n const length = Math.min(this.length, other.length);\n const result: [T, U][] = [];\n for (let i = 0; i < length; i++) {\n result.push([this.items[i], other.get(i)!]);\n }\n return new List(result);\n }\n\n zipWith<U, V>(other: List<U>, fn: (a: T, b: U) => V): List<V> {\n return this.zip(other).map(([a, b]) => fn(a, b));\n }\n\n flatten<U>(this: List<List<U> | U[]>): List<U> {\n const result: U[] = [];\n for (const item of this.items) {\n if (item instanceof List) {\n result.push(...item.toArray());\n } else if (Array.isArray(item)) {\n result.push(...item);\n }\n }\n return new List(result);\n }\n\n sum(this: List<number>): number {\n return this.reduce((acc, n) => acc + n, 0);\n }\n\n min(this: List<number>): number | undefined {\n if (this.isEmpty) return undefined;\n return Math.min(...this.items);\n }\n\n max(this: List<number>): number | undefined {\n if (this.isEmpty) return undefined;\n return Math.max(...this.items);\n }\n\n average(this: List<number>): number | undefined {\n if (this.isEmpty) return undefined;\n return this.sum() / this.length;\n }\n\n join(separator = ','): string {\n return this.items.join(separator);\n }\n\n toArray(): T[] {\n return [...this.items];\n }\n\n toSet(): HoloSet<T> {\n return new HoloSet(this.items);\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.items[Symbol.iterator]();\n }\n\n toString(): string {\n return `List(${this.items.join(', ')})`;\n }\n}\n\n/**\n * Immutable Map with functional operations\n */\nexport class HoloMap<K, V> {\n private readonly _map: ReadonlyMap<K, V>;\n\n constructor(entries?: Iterable<[K, V]> | Map<K, V>) {\n this._map = entries instanceof Map ? entries : new Map(entries);\n }\n\n static of<K, V>(...entries: [K, V][]): HoloMap<K, V> {\n return new HoloMap(entries);\n }\n\n static from<K, V>(entries: Iterable<[K, V]>): HoloMap<K, V> {\n return new HoloMap(entries);\n }\n\n static fromObject<V>(obj: Record<string, V>): HoloMap<string, V> {\n return new HoloMap(Object.entries(obj));\n }\n\n get size(): number {\n return this._map.size;\n }\n\n get isEmpty(): boolean {\n return this._map.size === 0;\n }\n\n get(key: K): V | undefined {\n return this._map.get(key);\n }\n\n getOrDefault(key: K, defaultValue: V): V {\n return this._map.has(key) ? this._map.get(key)! : defaultValue;\n }\n\n has(key: K): boolean {\n return this._map.has(key);\n }\n\n set(key: K, value: V): HoloMap<K, V> {\n const newMap = new Map(this._map);\n newMap.set(key, value);\n return new HoloMap(newMap);\n }\n\n delete(key: K): HoloMap<K, V> {\n const newMap = new Map(this._map);\n newMap.delete(key);\n return new HoloMap(newMap);\n }\n\n update(key: K, fn: (value: V | undefined) => V): HoloMap<K, V> {\n return this.set(key, fn(this.get(key)));\n }\n\n merge(other: HoloMap<K, V>): HoloMap<K, V> {\n const newMap = new Map(this._map);\n for (const [key, value] of other) {\n newMap.set(key, value);\n }\n return new HoloMap(newMap);\n }\n\n keys(): List<K> {\n return new List(this._map.keys());\n }\n\n values(): List<V> {\n return new List(this._map.values());\n }\n\n entries(): List<[K, V]> {\n return new List(this._map.entries());\n }\n\n map<U>(fn: (value: V, key: K) => U): HoloMap<K, U> {\n const entries: [K, U][] = [];\n for (const [key, value] of this._map) {\n entries.push([key, fn(value, key)]);\n }\n return new HoloMap(entries);\n }\n\n mapKeys<K2>(fn: (key: K, value: V) => K2): HoloMap<K2, V> {\n const entries: [K2, V][] = [];\n for (const [key, value] of this._map) {\n entries.push([fn(key, value), value]);\n }\n return new HoloMap(entries);\n }\n\n filter(predicate: (value: V, key: K) => boolean): HoloMap<K, V> {\n const entries: [K, V][] = [];\n for (const [key, value] of this._map) {\n if (predicate(value, key)) {\n entries.push([key, value]);\n }\n }\n return new HoloMap(entries);\n }\n\n reduce<U>(fn: (acc: U, value: V, key: K) => U, initial: U): U {\n let acc = initial;\n for (const [key, value] of this._map) {\n acc = fn(acc, value, key);\n }\n return acc;\n }\n\n forEach(fn: (value: V, key: K) => void): void {\n this._map.forEach(fn);\n }\n\n find(predicate: (value: V, key: K) => boolean): [K, V] | undefined {\n for (const [key, value] of this._map) {\n if (predicate(value, key)) {\n return [key, value];\n }\n }\n return undefined;\n }\n\n some(predicate: (value: V, key: K) => boolean): boolean {\n for (const [key, value] of this._map) {\n if (predicate(value, key)) return true;\n }\n return false;\n }\n\n every(predicate: (value: V, key: K) => boolean): boolean {\n for (const [key, value] of this._map) {\n if (!predicate(value, key)) return false;\n }\n return true;\n }\n\n toObject(this: HoloMap<string, V>): Record<string, V> {\n const obj: Record<string, V> = {};\n for (const [key, value] of this._map) {\n obj[key] = value;\n }\n return obj;\n }\n\n toNativeMap(): Map<K, V> {\n return new Map(this._map);\n }\n\n [Symbol.iterator](): Iterator<[K, V]> {\n return this._map[Symbol.iterator]();\n }\n\n toString(): string {\n const entries = [...this._map].map(([k, v]) => `${k}: ${v}`).join(', ');\n return `HoloMap { ${entries} }`;\n }\n}\n\n/**\n * Immutable Set with functional operations\n */\nexport class HoloSet<T> {\n private readonly set: ReadonlySet<T>;\n\n constructor(items?: Iterable<T>) {\n this.set = new Set(items);\n }\n\n static of<T>(...items: T[]): HoloSet<T> {\n return new HoloSet(items);\n }\n\n static from<T>(iterable: Iterable<T>): HoloSet<T> {\n return new HoloSet(iterable);\n }\n\n get size(): number {\n return this.set.size;\n }\n\n get isEmpty(): boolean {\n return this.set.size === 0;\n }\n\n has(item: T): boolean {\n return this.set.has(item);\n }\n\n add(item: T): HoloSet<T> {\n const newSet = new Set(this.set);\n newSet.add(item);\n return new HoloSet(newSet);\n }\n\n delete(item: T): HoloSet<T> {\n const newSet = new Set(this.set);\n newSet.delete(item);\n return new HoloSet(newSet);\n }\n\n addAll(items: Iterable<T>): HoloSet<T> {\n const newSet = new Set(this.set);\n for (const item of items) {\n newSet.add(item);\n }\n return new HoloSet(newSet);\n }\n\n union(other: HoloSet<T>): HoloSet<T> {\n return this.addAll(other);\n }\n\n intersection(other: HoloSet<T>): HoloSet<T> {\n const result = new Set<T>();\n for (const item of this.set) {\n if (other.has(item)) {\n result.add(item);\n }\n }\n return new HoloSet(result);\n }\n\n difference(other: HoloSet<T>): HoloSet<T> {\n const result = new Set<T>();\n for (const item of this.set) {\n if (!other.has(item)) {\n result.add(item);\n }\n }\n return new HoloSet(result);\n }\n\n symmetricDifference(other: HoloSet<T>): HoloSet<T> {\n return this.difference(other).union(other.difference(this));\n }\n\n isSubsetOf(other: HoloSet<T>): boolean {\n for (const item of this.set) {\n if (!other.has(item)) return false;\n }\n return true;\n }\n\n isSupersetOf(other: HoloSet<T>): boolean {\n return other.isSubsetOf(this);\n }\n\n isDisjointFrom(other: HoloSet<T>): boolean {\n return this.intersection(other).isEmpty;\n }\n\n map<U>(fn: (item: T) => U): HoloSet<U> {\n const result = new Set<U>();\n for (const item of this.set) {\n result.add(fn(item));\n }\n return new HoloSet(result);\n }\n\n filter(predicate: (item: T) => boolean): HoloSet<T> {\n const result = new Set<T>();\n for (const item of this.set) {\n if (predicate(item)) {\n result.add(item);\n }\n }\n return new HoloSet(result);\n }\n\n reduce<U>(fn: (acc: U, item: T) => U, initial: U): U {\n let acc = initial;\n for (const item of this.set) {\n acc = fn(acc, item);\n }\n return acc;\n }\n\n forEach(fn: (item: T) => void): void {\n this.set.forEach(fn);\n }\n\n find(predicate: (item: T) => boolean): T | undefined {\n for (const item of this.set) {\n if (predicate(item)) return item;\n }\n return undefined;\n }\n\n some(predicate: (item: T) => boolean): boolean {\n for (const item of this.set) {\n if (predicate(item)) return true;\n }\n return false;\n }\n\n every(predicate: (item: T) => boolean): boolean {\n for (const item of this.set) {\n if (!predicate(item)) return false;\n }\n return true;\n }\n\n toArray(): T[] {\n return [...this.set];\n }\n\n toList(): List<T> {\n return new List(this.set);\n }\n\n toNativeSet(): Set<T> {\n return new Set(this.set);\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.set[Symbol.iterator]();\n }\n\n toString(): string {\n return `HoloSet { ${[...this.set].join(', ')} }`;\n }\n}\n\n/**\n * Spatial grid for efficient spatial queries (useful for game worlds)\n */\nexport class SpatialGrid<T> {\n private readonly cellSize: number;\n private readonly cells: Map<string, T[]> = new Map();\n\n constructor(cellSize: number) {\n this.cellSize = cellSize;\n }\n\n private getCellKey(x: number, y: number, z: number): string {\n const cx = Math.floor(x / this.cellSize);\n const cy = Math.floor(y / this.cellSize);\n const cz = Math.floor(z / this.cellSize);\n return `${cx},${cy},${cz}`;\n }\n\n insert(position: Vec3, item: T): void {\n const key = this.getCellKey(position.x, position.y, position.z);\n if (!this.cells.has(key)) {\n this.cells.set(key, []);\n }\n this.cells.get(key)!.push(item);\n }\n\n remove(position: Vec3, item: T): boolean {\n const key = this.getCellKey(position.x, position.y, position.z);\n const cell = this.cells.get(key);\n if (!cell) return false;\n const index = cell.indexOf(item);\n if (index === -1) return false;\n cell.splice(index, 1);\n if (cell.length === 0) {\n this.cells.delete(key);\n }\n return true;\n }\n\n query(center: Vec3, radius: number): T[] {\n const results: T[] = [];\n const cellRadius = Math.ceil(radius / this.cellSize);\n const cx = Math.floor(center.x / this.cellSize);\n const cy = Math.floor(center.y / this.cellSize);\n const cz = Math.floor(center.z / this.cellSize);\n\n for (let x = cx - cellRadius; x <= cx + cellRadius; x++) {\n for (let y = cy - cellRadius; y <= cy + cellRadius; y++) {\n for (let z = cz - cellRadius; z <= cz + cellRadius; z++) {\n const cell = this.cells.get(`${x},${y},${z}`);\n if (cell) {\n results.push(...cell);\n }\n }\n }\n }\n\n return results;\n }\n\n queryBox(min: Vec3, max: Vec3): T[] {\n const results: T[] = [];\n const minCx = Math.floor(min.x / this.cellSize);\n const minCy = Math.floor(min.y / this.cellSize);\n const minCz = Math.floor(min.z / this.cellSize);\n const maxCx = Math.floor(max.x / this.cellSize);\n const maxCy = Math.floor(max.y / this.cellSize);\n const maxCz = Math.floor(max.z / this.cellSize);\n\n for (let x = minCx; x <= maxCx; x++) {\n for (let y = minCy; y <= maxCy; y++) {\n for (let z = minCz; z <= maxCz; z++) {\n const cell = this.cells.get(`${x},${y},${z}`);\n if (cell) {\n results.push(...cell);\n }\n }\n }\n }\n\n return results;\n }\n\n clear(): void {\n this.cells.clear();\n }\n\n get cellCount(): number {\n return this.cells.size;\n }\n\n get itemCount(): number {\n let count = 0;\n for (const cell of this.cells.values()) {\n count += cell.length;\n }\n return count;\n }\n}\n\n/**\n * Priority queue (min-heap by default)\n */\nexport class PriorityQueue<T> {\n private heap: { item: T; priority: number }[] = [];\n\n constructor(private compareFn: (a: number, b: number) => number = (a, b) => a - b) {}\n\n static minHeap<T>(): PriorityQueue<T> {\n return new PriorityQueue((a, b) => a - b);\n }\n\n static maxHeap<T>(): PriorityQueue<T> {\n return new PriorityQueue((a, b) => b - a);\n }\n\n get size(): number {\n return this.heap.length;\n }\n\n get isEmpty(): boolean {\n return this.heap.length === 0;\n }\n\n enqueue(item: T, priority: number): void {\n this.heap.push({ item, priority });\n this.bubbleUp(this.heap.length - 1);\n }\n\n dequeue(): T | undefined {\n if (this.isEmpty) return undefined;\n const result = this.heap[0].item;\n const last = this.heap.pop()!;\n if (this.heap.length > 0) {\n this.heap[0] = last;\n this.bubbleDown(0);\n }\n return result;\n }\n\n peek(): T | undefined {\n return this.heap[0]?.item;\n }\n\n peekPriority(): number | undefined {\n return this.heap[0]?.priority;\n }\n\n clear(): void {\n this.heap = [];\n }\n\n private bubbleUp(index: number): void {\n while (index > 0) {\n const parentIndex = Math.floor((index - 1) / 2);\n if (this.compareFn(this.heap[index].priority, this.heap[parentIndex].priority) >= 0) break;\n [this.heap[index], this.heap[parentIndex]] = [this.heap[parentIndex], this.heap[index]];\n index = parentIndex;\n }\n }\n\n private bubbleDown(index: number): void {\n while (true) {\n const leftChild = 2 * index + 1;\n const rightChild = 2 * index + 2;\n let smallest = index;\n\n if (\n leftChild < this.heap.length &&\n this.compareFn(this.heap[leftChild].priority, this.heap[smallest].priority) < 0\n ) {\n smallest = leftChild;\n }\n if (\n rightChild < this.heap.length &&\n this.compareFn(this.heap[rightChild].priority, this.heap[smallest].priority) < 0\n ) {\n smallest = rightChild;\n }\n\n if (smallest === index) break;\n [this.heap[index], this.heap[smallest]] = [this.heap[smallest], this.heap[index]];\n index = smallest;\n }\n }\n}\n\n// Convenience aliases\nexport { HoloMap as Map };\nexport { HoloSet as Set };\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/collections.ts"],"sourcesContent":["/**\n * @holoscript/std - Collections Module\n *\n * Provides List, Map, and Set implementations with functional operations\n * for use in HoloScript Plus programs.\n */\n\nimport type { Vec3 } from './types.js';\n\n/**\n * Immutable List with functional operations\n */\nexport class List<T> {\n private readonly items: readonly T[];\n\n constructor(items: Iterable<T> = []) {\n this.items = Array.from(items);\n }\n\n static of<T>(...items: T[]): List<T> {\n return new List(items);\n }\n\n static from<T>(iterable: Iterable<T>): List<T> {\n return new List(iterable);\n }\n\n static range(start: number, end: number, step = 1): List<number> {\n const items: number[] = [];\n for (let i = start; step > 0 ? i < end : i > end; i += step) {\n items.push(i);\n }\n return new List(items);\n }\n\n static repeat<T>(value: T, count: number): List<T> {\n return new List(Array(count).fill(value));\n }\n\n get length(): number {\n return this.items.length;\n }\n\n get isEmpty(): boolean {\n return this.items.length === 0;\n }\n\n get(index: number): T | undefined {\n return index < 0 ? this.items[this.items.length + index] : this.items[index];\n }\n\n first(): T | undefined {\n return this.items[0];\n }\n\n last(): T | undefined {\n return this.items[this.items.length - 1];\n }\n\n map<U>(fn: (item: T, index: number) => U): List<U> {\n return new List(this.items.map(fn));\n }\n\n flatMap<U>(fn: (item: T, index: number) => List<U> | U[]): List<U> {\n const result: U[] = [];\n this.items.forEach((item, index) => {\n const mapped = fn(item, index);\n if (mapped instanceof List) {\n result.push(...mapped.toArray());\n } else {\n result.push(...mapped);\n }\n });\n return new List(result);\n }\n\n filter(predicate: (item: T, index: number) => boolean): List<T> {\n return new List(this.items.filter(predicate));\n }\n\n reject(predicate: (item: T, index: number) => boolean): List<T> {\n return this.filter((item, index) => !predicate(item, index));\n }\n\n reduce<U>(fn: (acc: U, item: T, index: number) => U, initial: U): U {\n return this.items.reduce(fn, initial);\n }\n\n fold<U>(initial: U, fn: (acc: U, item: T) => U): U {\n return this.items.reduce(fn, initial);\n }\n\n find(predicate: (item: T, index: number) => boolean): T | undefined {\n return this.items.find(predicate);\n }\n\n findIndex(predicate: (item: T, index: number) => boolean): number {\n return this.items.findIndex(predicate);\n }\n\n indexOf(item: T): number {\n return this.items.indexOf(item);\n }\n\n includes(item: T): boolean {\n return this.items.includes(item);\n }\n\n some(predicate: (item: T, index: number) => boolean): boolean {\n return this.items.some(predicate);\n }\n\n every(predicate: (item: T, index: number) => boolean): boolean {\n return this.items.every(predicate);\n }\n\n none(predicate: (item: T, index: number) => boolean): boolean {\n return !this.some(predicate);\n }\n\n count(predicate: (item: T, index: number) => boolean): number {\n return this.filter(predicate).length;\n }\n\n forEach(fn: (item: T, index: number) => void): void {\n this.items.forEach(fn);\n }\n\n concat(...lists: (List<T> | T[])[]): List<T> {\n const arrays = lists.map((l) => (l instanceof List ? l.toArray() : l));\n return new List([...this.items, ...arrays.flat()]);\n }\n\n append(item: T): List<T> {\n return new List([...this.items, item]);\n }\n\n prepend(item: T): List<T> {\n return new List([item, ...this.items]);\n }\n\n insert(index: number, item: T): List<T> {\n const arr = [...this.items];\n arr.splice(index, 0, item);\n return new List(arr);\n }\n\n remove(index: number): List<T> {\n const arr = [...this.items];\n arr.splice(index, 1);\n return new List(arr);\n }\n\n update(index: number, item: T): List<T> {\n const arr = [...this.items];\n arr[index] = item;\n return new List(arr);\n }\n\n slice(start?: number, end?: number): List<T> {\n return new List(this.items.slice(start, end));\n }\n\n take(n: number): List<T> {\n return this.slice(0, n);\n }\n\n takeLast(n: number): List<T> {\n return this.slice(-n);\n }\n\n takeWhile(predicate: (item: T, index: number) => boolean): List<T> {\n const result: T[] = [];\n for (let i = 0; i < this.items.length; i++) {\n if (!predicate(this.items[i], i)) break;\n result.push(this.items[i]);\n }\n return new List(result);\n }\n\n drop(n: number): List<T> {\n return this.slice(n);\n }\n\n dropLast(n: number): List<T> {\n return this.slice(0, -n);\n }\n\n dropWhile(predicate: (item: T, index: number) => boolean): List<T> {\n let startIndex = 0;\n for (let i = 0; i < this.items.length; i++) {\n if (!predicate(this.items[i], i)) break;\n startIndex = i + 1;\n }\n return this.slice(startIndex);\n }\n\n reverse(): List<T> {\n return new List([...this.items].reverse());\n }\n\n sort(compareFn?: (a: T, b: T) => number): List<T> {\n return new List([...this.items].sort(compareFn));\n }\n\n sortBy<U>(fn: (item: T) => U): List<T> {\n return this.sort((a, b) => {\n const va = fn(a);\n const vb = fn(b);\n if (va < vb) return -1;\n if (va > vb) return 1;\n return 0;\n });\n }\n\n shuffle(): List<T> {\n const arr = [...this.items];\n for (let i = arr.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [arr[i], arr[j]] = [arr[j], arr[i]];\n }\n return new List(arr);\n }\n\n unique(): List<T> {\n return new List([...new Set(this.items)]);\n }\n\n uniqueBy<U>(fn: (item: T) => U): List<T> {\n const seen = new Set<U>();\n const result: T[] = [];\n for (const item of this.items) {\n const key = fn(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n return new List(result);\n }\n\n groupBy<K>(fn: (item: T) => K): HoloMap<K, List<T>> {\n const groups = new Map<K, T[]>();\n for (const item of this.items) {\n const key = fn(item);\n const group = groups.get(key) || [];\n group.push(item);\n groups.set(key, group);\n }\n const result = new Map<K, List<T>>();\n for (const [key, items] of groups) {\n result.set(key, new List(items));\n }\n return new HoloMap(result);\n }\n\n partition(predicate: (item: T, index: number) => boolean): [List<T>, List<T>] {\n const pass: T[] = [];\n const fail: T[] = [];\n this.items.forEach((item, index) => {\n if (predicate(item, index)) {\n pass.push(item);\n } else {\n fail.push(item);\n }\n });\n return [new List(pass), new List(fail)];\n }\n\n zip<U>(other: List<U>): List<[T, U]> {\n const length = Math.min(this.length, other.length);\n const result: [T, U][] = [];\n for (let i = 0; i < length; i++) {\n result.push([this.items[i], other.get(i)!]);\n }\n return new List(result);\n }\n\n zipWith<U, V>(other: List<U>, fn: (a: T, b: U) => V): List<V> {\n return this.zip(other).map(([a, b]) => fn(a, b));\n }\n\n flatten<U>(this: List<List<U> | U[]>): List<U> {\n const result: U[] = [];\n for (const item of this.items) {\n if (item instanceof List) {\n result.push(...item.toArray());\n } else if (Array.isArray(item)) {\n result.push(...item);\n }\n }\n return new List(result);\n }\n\n sum(this: List<number>): number {\n return this.reduce((acc, n) => acc + n, 0);\n }\n\n min(this: List<number>): number | undefined {\n if (this.isEmpty) return undefined;\n return Math.min(...this.items);\n }\n\n max(this: List<number>): number | undefined {\n if (this.isEmpty) return undefined;\n return Math.max(...this.items);\n }\n\n average(this: List<number>): number | undefined {\n if (this.isEmpty) return undefined;\n return this.sum() / this.length;\n }\n\n join(separator = ','): string {\n return this.items.join(separator);\n }\n\n toArray(): T[] {\n return [...this.items];\n }\n\n toSet(): HoloSet<T> {\n return new HoloSet(this.items);\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.items[Symbol.iterator]();\n }\n\n toString(): string {\n return `List(${this.items.join(', ')})`;\n }\n}\n\n/**\n * Immutable Map with functional operations\n */\nexport class HoloMap<K, V> {\n private readonly _map: ReadonlyMap<K, V>;\n\n constructor(entries?: Iterable<[K, V]> | Map<K, V>) {\n this._map = entries instanceof Map ? entries : new Map(entries);\n }\n\n static of<K, V>(...entries: [K, V][]): HoloMap<K, V> {\n return new HoloMap(entries);\n }\n\n static from<K, V>(entries: Iterable<[K, V]>): HoloMap<K, V> {\n return new HoloMap(entries);\n }\n\n static fromObject<V>(obj: Record<string, V>): HoloMap<string, V> {\n return new HoloMap(Object.entries(obj));\n }\n\n get size(): number {\n return this._map.size;\n }\n\n get isEmpty(): boolean {\n return this._map.size === 0;\n }\n\n get(key: K): V | undefined {\n return this._map.get(key);\n }\n\n getOrDefault(key: K, defaultValue: V): V {\n return this._map.has(key) ? this._map.get(key)! : defaultValue;\n }\n\n has(key: K): boolean {\n return this._map.has(key);\n }\n\n set(key: K, value: V): HoloMap<K, V> {\n const newMap = new Map(this._map);\n newMap.set(key, value);\n return new HoloMap(newMap);\n }\n\n delete(key: K): HoloMap<K, V> {\n const newMap = new Map(this._map);\n newMap.delete(key);\n return new HoloMap(newMap);\n }\n\n update(key: K, fn: (value: V | undefined) => V): HoloMap<K, V> {\n return this.set(key, fn(this.get(key)));\n }\n\n merge(other: HoloMap<K, V>): HoloMap<K, V> {\n const newMap = new Map(this._map);\n for (const [key, value] of other) {\n newMap.set(key, value);\n }\n return new HoloMap(newMap);\n }\n\n keys(): List<K> {\n return new List(this._map.keys());\n }\n\n values(): List<V> {\n return new List(this._map.values());\n }\n\n entries(): List<[K, V]> {\n return new List(this._map.entries());\n }\n\n map<U>(fn: (value: V, key: K) => U): HoloMap<K, U> {\n const entries: [K, U][] = [];\n for (const [key, value] of this._map) {\n entries.push([key, fn(value, key)]);\n }\n return new HoloMap(entries);\n }\n\n mapKeys<K2>(fn: (key: K, value: V) => K2): HoloMap<K2, V> {\n const entries: [K2, V][] = [];\n for (const [key, value] of this._map) {\n entries.push([fn(key, value), value]);\n }\n return new HoloMap(entries);\n }\n\n filter(predicate: (value: V, key: K) => boolean): HoloMap<K, V> {\n const entries: [K, V][] = [];\n for (const [key, value] of this._map) {\n if (predicate(value, key)) {\n entries.push([key, value]);\n }\n }\n return new HoloMap(entries);\n }\n\n reduce<U>(fn: (acc: U, value: V, key: K) => U, initial: U): U {\n let acc = initial;\n for (const [key, value] of this._map) {\n acc = fn(acc, value, key);\n }\n return acc;\n }\n\n forEach(fn: (value: V, key: K) => void): void {\n this._map.forEach(fn);\n }\n\n find(predicate: (value: V, key: K) => boolean): [K, V] | undefined {\n for (const [key, value] of this._map) {\n if (predicate(value, key)) {\n return [key, value];\n }\n }\n return undefined;\n }\n\n some(predicate: (value: V, key: K) => boolean): boolean {\n for (const [key, value] of this._map) {\n if (predicate(value, key)) return true;\n }\n return false;\n }\n\n every(predicate: (value: V, key: K) => boolean): boolean {\n for (const [key, value] of this._map) {\n if (!predicate(value, key)) return false;\n }\n return true;\n }\n\n toObject(this: HoloMap<string, V>): Record<string, V> {\n const obj: Record<string, V> = {};\n for (const [key, value] of this._map) {\n obj[key] = value;\n }\n return obj;\n }\n\n toNativeMap(): Map<K, V> {\n return new Map(this._map);\n }\n\n [Symbol.iterator](): Iterator<[K, V]> {\n return this._map[Symbol.iterator]();\n }\n\n toString(): string {\n const entries = [...this._map].map(([k, v]) => `${k}: ${v}`).join(', ');\n return `HoloMap { ${entries} }`;\n }\n}\n\n/**\n * Immutable Set with functional operations\n */\nexport class HoloSet<T> {\n private readonly set: ReadonlySet<T>;\n\n constructor(items?: Iterable<T>) {\n this.set = new Set(items);\n }\n\n static of<T>(...items: T[]): HoloSet<T> {\n return new HoloSet(items);\n }\n\n static from<T>(iterable: Iterable<T>): HoloSet<T> {\n return new HoloSet(iterable);\n }\n\n get size(): number {\n return this.set.size;\n }\n\n get isEmpty(): boolean {\n return this.set.size === 0;\n }\n\n has(item: T): boolean {\n return this.set.has(item);\n }\n\n add(item: T): HoloSet<T> {\n const newSet = new Set(this.set);\n newSet.add(item);\n return new HoloSet(newSet);\n }\n\n delete(item: T): HoloSet<T> {\n const newSet = new Set(this.set);\n newSet.delete(item);\n return new HoloSet(newSet);\n }\n\n addAll(items: Iterable<T>): HoloSet<T> {\n const newSet = new Set(this.set);\n for (const item of items) {\n newSet.add(item);\n }\n return new HoloSet(newSet);\n }\n\n union(other: HoloSet<T>): HoloSet<T> {\n return this.addAll(other);\n }\n\n intersection(other: HoloSet<T>): HoloSet<T> {\n const result = new Set<T>();\n for (const item of this.set) {\n if (other.has(item)) {\n result.add(item);\n }\n }\n return new HoloSet(result);\n }\n\n difference(other: HoloSet<T>): HoloSet<T> {\n const result = new Set<T>();\n for (const item of this.set) {\n if (!other.has(item)) {\n result.add(item);\n }\n }\n return new HoloSet(result);\n }\n\n symmetricDifference(other: HoloSet<T>): HoloSet<T> {\n return this.difference(other).union(other.difference(this));\n }\n\n isSubsetOf(other: HoloSet<T>): boolean {\n for (const item of this.set) {\n if (!other.has(item)) return false;\n }\n return true;\n }\n\n isSupersetOf(other: HoloSet<T>): boolean {\n return other.isSubsetOf(this);\n }\n\n isDisjointFrom(other: HoloSet<T>): boolean {\n return this.intersection(other).isEmpty;\n }\n\n map<U>(fn: (item: T) => U): HoloSet<U> {\n const result = new Set<U>();\n for (const item of this.set) {\n result.add(fn(item));\n }\n return new HoloSet(result);\n }\n\n filter(predicate: (item: T) => boolean): HoloSet<T> {\n const result = new Set<T>();\n for (const item of this.set) {\n if (predicate(item)) {\n result.add(item);\n }\n }\n return new HoloSet(result);\n }\n\n reduce<U>(fn: (acc: U, item: T) => U, initial: U): U {\n let acc = initial;\n for (const item of this.set) {\n acc = fn(acc, item);\n }\n return acc;\n }\n\n forEach(fn: (item: T) => void): void {\n this.set.forEach(fn);\n }\n\n find(predicate: (item: T) => boolean): T | undefined {\n for (const item of this.set) {\n if (predicate(item)) return item;\n }\n return undefined;\n }\n\n some(predicate: (item: T) => boolean): boolean {\n for (const item of this.set) {\n if (predicate(item)) return true;\n }\n return false;\n }\n\n every(predicate: (item: T) => boolean): boolean {\n for (const item of this.set) {\n if (!predicate(item)) return false;\n }\n return true;\n }\n\n toArray(): T[] {\n return [...this.set];\n }\n\n toList(): List<T> {\n return new List(this.set);\n }\n\n toNativeSet(): Set<T> {\n return new Set(this.set);\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.set[Symbol.iterator]();\n }\n\n toString(): string {\n return `HoloSet { ${[...this.set].join(', ')} }`;\n }\n}\n\n/**\n * Spatial grid for efficient spatial queries (useful for game worlds)\n */\nexport class SpatialGrid<T> {\n private readonly cellSize: number;\n private readonly cells: Map<string, T[]> = new Map();\n\n constructor(cellSize: number) {\n this.cellSize = cellSize;\n }\n\n private getCellKey(x: number, y: number, z: number): string {\n const cx = Math.floor(x / this.cellSize);\n const cy = Math.floor(y / this.cellSize);\n const cz = Math.floor(z / this.cellSize);\n return `${cx},${cy},${cz}`;\n }\n\n insert(position: Vec3, item: T): void {\n const key = this.getCellKey(position.x, position.y, position.z);\n if (!this.cells.has(key)) {\n this.cells.set(key, []);\n }\n this.cells.get(key)!.push(item);\n }\n\n remove(position: Vec3, item: T): boolean {\n const key = this.getCellKey(position.x, position.y, position.z);\n const cell = this.cells.get(key);\n if (!cell) return false;\n const index = cell.indexOf(item);\n if (index === -1) return false;\n cell.splice(index, 1);\n if (cell.length === 0) {\n this.cells.delete(key);\n }\n return true;\n }\n\n query(center: Vec3, radius: number): T[] {\n const results: T[] = [];\n const cellRadius = Math.ceil(radius / this.cellSize);\n const cx = Math.floor(center.x / this.cellSize);\n const cy = Math.floor(center.y / this.cellSize);\n const cz = Math.floor(center.z / this.cellSize);\n\n for (let x = cx - cellRadius; x <= cx + cellRadius; x++) {\n for (let y = cy - cellRadius; y <= cy + cellRadius; y++) {\n for (let z = cz - cellRadius; z <= cz + cellRadius; z++) {\n const cell = this.cells.get(`${x},${y},${z}`);\n if (cell) {\n results.push(...cell);\n }\n }\n }\n }\n\n return results;\n }\n\n queryBox(min: Vec3, max: Vec3): T[] {\n const results: T[] = [];\n const minCx = Math.floor(min.x / this.cellSize);\n const minCy = Math.floor(min.y / this.cellSize);\n const minCz = Math.floor(min.z / this.cellSize);\n const maxCx = Math.floor(max.x / this.cellSize);\n const maxCy = Math.floor(max.y / this.cellSize);\n const maxCz = Math.floor(max.z / this.cellSize);\n\n for (let x = minCx; x <= maxCx; x++) {\n for (let y = minCy; y <= maxCy; y++) {\n for (let z = minCz; z <= maxCz; z++) {\n const cell = this.cells.get(`${x},${y},${z}`);\n if (cell) {\n results.push(...cell);\n }\n }\n }\n }\n\n return results;\n }\n\n clear(): void {\n this.cells.clear();\n }\n\n get cellCount(): number {\n return this.cells.size;\n }\n\n get itemCount(): number {\n let count = 0;\n for (const cell of this.cells.values()) {\n count += cell.length;\n }\n return count;\n }\n}\n\n/**\n * Priority queue (min-heap by default)\n */\nexport class PriorityQueue<T> {\n private heap: { item: T; priority: number }[] = [];\n\n constructor(private compareFn: (a: number, b: number) => number = (a, b) => a - b) {}\n\n static minHeap<T>(): PriorityQueue<T> {\n return new PriorityQueue((a, b) => a - b);\n }\n\n static maxHeap<T>(): PriorityQueue<T> {\n return new PriorityQueue((a, b) => b - a);\n }\n\n get size(): number {\n return this.heap.length;\n }\n\n get isEmpty(): boolean {\n return this.heap.length === 0;\n }\n\n enqueue(item: T, priority: number): void {\n this.heap.push({ item, priority });\n this.bubbleUp(this.heap.length - 1);\n }\n\n dequeue(): T | undefined {\n if (this.isEmpty) return undefined;\n const result = this.heap[0].item;\n const last = this.heap.pop()!;\n if (this.heap.length > 0) {\n this.heap[0] = last;\n this.bubbleDown(0);\n }\n return result;\n }\n\n peek(): T | undefined {\n return this.heap[0]?.item;\n }\n\n peekPriority(): number | undefined {\n return this.heap[0]?.priority;\n }\n\n clear(): void {\n this.heap = [];\n }\n\n private bubbleUp(index: number): void {\n while (index > 0) {\n const parentIndex = Math.floor((index - 1) / 2);\n if (this.compareFn(this.heap[index].priority, this.heap[parentIndex].priority) >= 0) break;\n [this.heap[index], this.heap[parentIndex]] = [this.heap[parentIndex], this.heap[index]];\n index = parentIndex;\n }\n }\n\n private bubbleDown(index: number): void {\n while (true) {\n const leftChild = 2 * index + 1;\n const rightChild = 2 * index + 2;\n let smallest = index;\n\n if (\n leftChild < this.heap.length &&\n this.compareFn(this.heap[leftChild].priority, this.heap[smallest].priority) < 0\n ) {\n smallest = leftChild;\n }\n if (\n rightChild < this.heap.length &&\n this.compareFn(this.heap[rightChild].priority, this.heap[smallest].priority) < 0\n ) {\n smallest = rightChild;\n }\n\n if (smallest === index) break;\n [this.heap[index], this.heap[smallest]] = [this.heap[smallest], this.heap[index]];\n index = smallest;\n }\n }\n}\n\n// Convenience aliases\nexport { HoloMap as Map };\nexport { HoloSet as Set };\n"],"mappings":"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","names":[]}
@@ -4,8 +4,8 @@ import {
4
4
  List,
5
5
  PriorityQueue,
6
6
  SpatialGrid
7
- } from "./chunk-PFX2JM4X.js";
8
- import "./chunk-PR4QN5HX.js";
7
+ } from "./chunk-FAMOLKH3.js";
8
+ import "./chunk-DGUM43GV.js";
9
9
  export {
10
10
  HoloMap,
11
11
  HoloSet,