@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.
- package/README.md +8 -0
- package/dist/chunk-DGUM43GV.js +11 -0
- package/dist/{chunk-PFX2JM4X.js → chunk-FAMOLKH3.js} +2 -1
- package/dist/{chunk-PFX2JM4X.js.map → chunk-FAMOLKH3.js.map} +1 -1
- package/dist/{chunk-DZHAVOCH.js → chunk-SOKH6FJ7.js} +31 -6
- package/dist/chunk-SOKH6FJ7.js.map +1 -0
- package/dist/collections.cjs +1 -0
- package/dist/collections.cjs.map +1 -1
- package/dist/collections.js +2 -2
- package/dist/fs/fs.d.ts.map +1 -1
- package/dist/fs/index.cjs +221 -8510
- package/dist/fs/index.cjs.map +1 -1
- package/dist/fs/index.js +832 -118
- package/dist/fs/index.js.map +1 -1
- package/dist/fs/sandbox.d.ts +49 -0
- package/dist/fs/sandbox.d.ts.map +1 -0
- package/dist/index.cjs +3494 -12672
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -7
- package/dist/index.js.map +1 -1
- package/dist/math.cjs +18 -3
- package/dist/math.cjs.map +1 -1
- package/dist/math.js +2 -2
- package/dist/string.js +1 -1
- package/dist/time.js +1 -1
- package/dist/traits/EconomicPrimitives.js +1 -1
- package/dist/traits/EconomicTraits.js +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +19 -9
- package/dist/__tests__/EconomicPrimitives.test.d.ts +0 -2
- package/dist/__tests__/EconomicPrimitives.test.d.ts.map +0 -1
- package/dist/__tests__/EconomicTraits.test.d.ts +0 -2
- package/dist/__tests__/EconomicTraits.test.d.ts.map +0 -1
- package/dist/__tests__/SimulationLabPrimitives.test.d.ts +0 -2
- package/dist/__tests__/SimulationLabPrimitives.test.d.ts.map +0 -1
- package/dist/__tests__/collections.test.d.ts +0 -2
- package/dist/__tests__/collections.test.d.ts.map +0 -1
- package/dist/__tests__/events.test.d.ts +0 -2
- package/dist/__tests__/events.test.d.ts.map +0 -1
- package/dist/__tests__/index.test.d.ts +0 -2
- package/dist/__tests__/index.test.d.ts.map +0 -1
- package/dist/__tests__/materials.test.d.ts +0 -2
- package/dist/__tests__/materials.test.d.ts.map +0 -1
- package/dist/__tests__/math.test.d.ts +0 -2
- package/dist/__tests__/math.test.d.ts.map +0 -1
- package/dist/__tests__/physics.test.d.ts +0 -2
- package/dist/__tests__/physics.test.d.ts.map +0 -1
- package/dist/__tests__/spatial.test.d.ts +0 -2
- package/dist/__tests__/spatial.test.d.ts.map +0 -1
- package/dist/__tests__/standard-library-fundamentals.test.d.ts +0 -2
- package/dist/__tests__/standard-library-fundamentals.test.d.ts.map +0 -1
- package/dist/__tests__/string-and-time-utilities.test.d.ts +0 -2
- package/dist/__tests__/string-and-time-utilities.test.d.ts.map +0 -1
- package/dist/__tests__/string-decoupled.test.d.ts +0 -2
- package/dist/__tests__/string-decoupled.test.d.ts.map +0 -1
- package/dist/__tests__/string.test.d.ts +0 -2
- package/dist/__tests__/string.test.d.ts.map +0 -1
- package/dist/__tests__/time.test.d.ts +0 -2
- package/dist/__tests__/time.test.d.ts.map +0 -1
- package/dist/chunk-DZHAVOCH.js.map +0 -1
- package/dist/chunk-PR4QN5HX.js +0 -43
- package/dist/chunk-XBA4ARST.js +0 -9313
- package/dist/chunk-XBA4ARST.js.map +0 -1
- package/dist/fs/__tests__/file-watch-system.test.d.ts +0 -2
- package/dist/fs/__tests__/file-watch-system.test.d.ts.map +0 -1
- package/dist/fs/__tests__/path-utilities.test.d.ts +0 -2
- package/dist/fs/__tests__/path-utilities.test.d.ts.map +0 -1
- package/dist/fs/__tests__/path.test.d.ts +0 -2
- package/dist/fs/__tests__/path.test.d.ts.map +0 -1
- package/dist/string.basic.test.d.ts +0 -5
- package/dist/string.basic.test.d.ts.map +0 -1
- package/dist/string.test.d.ts +0 -5
- package/dist/string.test.d.ts.map +0 -1
- package/dist/traits/__tests__/ARTraits.test.d.ts +0 -2
- package/dist/traits/__tests__/ARTraits.test.d.ts.map +0 -1
- package/dist/traits/__tests__/EconomicPrimitives.test.d.ts +0 -2
- package/dist/traits/__tests__/EconomicPrimitives.test.d.ts.map +0 -1
- package/dist/traits/__tests__/EconomicTraits.test.d.ts +0 -2
- package/dist/traits/__tests__/EconomicTraits.test.d.ts.map +0 -1
- package/error-utf8.log +0 -6
- package/error.log +0 -0
- package/src/__tests__/EconomicPrimitives.test.ts +0 -690
- package/src/__tests__/EconomicTraits.test.ts +0 -425
- package/src/__tests__/SimulationLabPrimitives.test.ts +0 -415
- package/src/__tests__/collections.test.ts +0 -182
- package/src/__tests__/events.test.ts +0 -135
- package/src/__tests__/index.test.ts +0 -14
- package/src/__tests__/materials.test.ts +0 -84
- package/src/__tests__/math.test.ts +0 -246
- package/src/__tests__/physics.test.ts +0 -83
- package/src/__tests__/spatial.test.ts +0 -333
- package/src/__tests__/standard-library-fundamentals.test.ts +0 -1318
- package/src/__tests__/string-and-time-utilities.test.ts +0 -1070
- package/src/__tests__/string-decoupled.test.ts +0 -13
- package/src/__tests__/string.test.ts +0 -164
- package/src/__tests__/time.test.ts +0 -110
- package/src/collections.ts +0 -850
- package/src/events.ts +0 -88
- package/src/fs/__tests__/file-watch-system.test.ts +0 -675
- package/src/fs/__tests__/path-utilities.test.ts +0 -375
- package/src/fs/__tests__/path.test.ts +0 -287
- package/src/fs/fs.ts +0 -692
- package/src/fs/index.ts +0 -194
- package/src/fs/path.ts +0 -310
- package/src/fs/watch.ts +0 -413
- package/src/index.ts +0 -476
- package/src/materials.ts +0 -109
- package/src/math.ts +0 -674
- package/src/physics.ts +0 -141
- package/src/spatial.ts +0 -320
- package/src/string.basic.test.ts +0 -14
- package/src/string.test.ts +0 -335
- package/src/string.ts +0 -531
- package/src/time.ts +0 -621
- package/src/traits/ARTraits.ts +0 -103
- package/src/traits/EconomicPrimitives.ts +0 -755
- package/src/traits/EconomicTraits.ts +0 -552
- package/src/traits/IoTTraits.ts +0 -102
- package/src/traits/SimulationLabPrimitives.ts +0 -650
- package/src/traits/SimulationLabTraits.ts +0 -191
- package/src/traits/VRRTraits.ts +0 -326
- package/src/traits/__tests__/ARTraits.test.ts +0 -8
- package/src/traits/__tests__/EconomicPrimitives.test.ts +0 -14
- package/src/traits/__tests__/EconomicTraits.test.ts +0 -16
- package/src/types.ts +0 -418
- package/std_error.log +0 -5
- package/tsconfig.json +0 -18
- package/tsup.config.ts +0 -20
- package/vitest.config.ts +0 -10
- /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-
|
|
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", {
|
|
5
|
-
|
|
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", {
|
|
11
|
-
|
|
12
|
-
|
|
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-
|
|
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":";AAwLO,SAAS,KAAK,IAAY,GAAG,IAAY,GAAS;AACvD,QAAM,IAAI,CAAC,GAAG,CAAC;AACf,SAAO,eAAe,GAAG,KAAK;AAAA,IAC5B,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB,CAAC;AACD,SAAO,eAAe,GAAG,KAAK;AAAA,IAC5B,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB,CAAC;AACD,SAAO;AACT;AAKO,SAAS,KAAK,IAAY,GAAG,IAAY,GAAG,IAAY,GAAS;AACtE,QAAM,IAAI,CAAC,GAAG,GAAG,CAAC;AAClB,SAAO,eAAe,GAAG,KAAK;AAAA,IAC5B,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB,CAAC;AACD,SAAO,eAAe,GAAG,KAAK;AAAA,IAC5B,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB,CAAC;AACD,SAAO,eAAe,GAAG,KAAK;AAAA,IAC5B,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,cAAc;AAAA,EAChB,CAAC;AACD,SAAO;AACT;AAKO,SAAS,KAAK,IAAY,GAAG,IAAY,GAAG,IAAY,GAAG,IAAY,GAAS;AACrF,SAAO,EAAE,GAAG,GAAG,GAAG,EAAE;AACtB;AAKO,SAAS,KAAK,IAAY,GAAG,IAAY,GAAG,IAAY,GAAG,IAAY,GAAS;AACrF,SAAO,EAAE,GAAG,GAAG,GAAG,EAAE;AACtB;AAKO,SAAS,UACd,WAAiB,KAAK,GACtB,WAAiB,KAAK,GACtB,QAAc,KAAK,GAAG,GAAG,CAAC,GACf;AACX,SAAO,EAAE,UAAU,UAAU,MAAM;AACrC;AAKO,SAAS,IAAI,GAAW,GAAW,GAAqB;AAC7D,SAAO,EAAE,GAAG,GAAG,EAAE;AACnB;AAKO,SAAS,KAAK,GAAW,GAAW,GAAW,IAAY,GAAc;AAC9E,SAAO,EAAE,GAAG,GAAG,GAAG,EAAE;AACtB;AAKO,SAAS,IAAI,GAAW,GAAW,GAAqB;AAC7D,SAAO,EAAE,GAAG,GAAG,EAAE;AACnB;AAKO,SAAS,KAAK,MAAY,KAAK,GAAG,MAAY,KAAK,GAAS;AACjE,SAAO,EAAE,KAAK,IAAI;AACpB;AAKO,SAAS,IAAI,QAAc,WAAsB;AACtD,SAAO,EAAE,QAAQ,UAAU;AAC7B;AASO,SAAS,YAAY,GAAoB;AAC9C,SAAO,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACvB;AAKO,SAAS,YAAY,KAAiC;AAC3D,SAAO,KAAK,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACnD;AAKO,SAAS,YAAY,GAAoB;AAC9C,SAAO,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAC5B;AAKO,SAAS,YAAY,KAAiC;AAC3D,SAAO,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1E;AAKO,SAAS,WAAW,OAAyB;AAClD,MAAI,OAAO,UAAU,UAAU;AAE7B,QAAI,MAAM,WAAW,GAAG,GAAG;AACzB,YAAM,MAAM,MAAM,MAAM,CAAC;AACzB,UAAI,IAAI,WAAW,GAAG;AACpB,eAAO;AAAA,UACL,GAAG,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI;AAAA,UACnC,GAAG,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI;AAAA,UACnC,GAAG,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI;AAAA,UACnC,GAAG;AAAA,QACL;AAAA,MACF,WAAW,IAAI,WAAW,GAAG;AAC3B,eAAO;AAAA,UACL,GAAG,SAAS,IAAI,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI;AAAA,UACnC,GAAG,SAAS,IAAI,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI;AAAA,UACnC,GAAG,SAAS,IAAI,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI;AAAA,UACnC,GAAG;AAAA,QACL;AAAA,MACF,WAAW,IAAI,WAAW,GAAG;AAC3B,eAAO;AAAA,UACL,GAAG,SAAS,IAAI,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI;AAAA,UACnC,GAAG,SAAS,IAAI,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI;AAAA,UACnC,GAAG,SAAS,IAAI,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI;AAAA,UACnC,GAAG,SAAS,IAAI,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI;AAAA,QACrC;AAAA,MACF;AAAA,IACF;AAEA,UAAM,cAAyC;AAAA,MAC7C,OAAO,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,MAChC,OAAO,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,MAChC,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,MAC9B,OAAO,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,MAChC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,MAC/B,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,MACjC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,MAC/B,SAAS,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,IACpC;AACA,WAAO,YAAY,MAAM,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EACtE;AAEA,MAAI,OAAO,UAAU,UAAU;AAE7B,WAAO;AAAA,MACL,IAAK,SAAS,KAAM,OAAQ;AAAA,MAC5B,IAAK,SAAS,IAAK,OAAQ;AAAA,MAC3B,IAAI,QAAQ,OAAQ;AAAA,MACpB,GAAG;AAAA,IACL;AAAA,EACF;AAEA,MAAI,OAAO,OAAO;AAEhB,UAAM,EAAE,GAAG,GAAG,EAAE,IAAI;AACpB,UAAM,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK;AACtC,UAAM,IAAI,KAAK,IAAI,KAAK,IAAM,IAAI,KAAM,IAAK,CAAC;AAC9C,UAAM,IAAI,IAAI,IAAI;AAClB,QAAI,IAAI,GACN,IAAI,GACJ,IAAI;AAEN,QAAI,IAAI,IAAI;AACV,UAAI;AACJ,UAAI;AAAA,IACN,WAAW,IAAI,KAAK;AAClB,UAAI;AACJ,UAAI;AAAA,IACN,WAAW,IAAI,KAAK;AAClB,UAAI;AACJ,UAAI;AAAA,IACN,WAAW,IAAI,KAAK;AAClB,UAAI;AACJ,UAAI;AAAA,IACN,WAAW,IAAI,KAAK;AAClB,UAAI;AACJ,UAAI;AAAA,IACN,OAAO;AACL,UAAI;AACJ,UAAI;AAAA,IACN;AAEA,WAAO,EAAE,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,EAAE;AAAA,EAC9C;AAEA,MAAI,OAAO,OAAO;AAChB,WAAO;AAAA,EACT;AAEA,SAAO,EAAE,GAAG,OAAO,GAAG,EAAE;AAC1B;AAKO,SAAS,WAAW,OAAqC;AAC9D,QAAM,IAAI,KAAK,MAAM,MAAM,IAAI,GAAG,EAC/B,SAAS,EAAE,EACX,SAAS,GAAG,GAAG;AAClB,QAAM,IAAI,KAAK,MAAM,MAAM,IAAI,GAAG,EAC/B,SAAS,EAAE,EACX,SAAS,GAAG,GAAG;AAClB,QAAM,IAAI,KAAK,MAAM,MAAM,IAAI,GAAG,EAC/B,SAAS,EAAE,EACX,SAAS,GAAG,GAAG;AAClB,SAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACtB;;;AC/ZO,IAAM,KAAK,KAAK;AAChB,IAAM,MAAM,KAAK,KAAK;AACtB,IAAM,UAAU,KAAK,KAAK;AAC1B,IAAM,aAAa,KAAK,KAAK;AAC7B,IAAM,aAAa,MAAM,KAAK;AAC9B,IAAM,UAAU;AAMhB,SAAS,MAAM,OAAe,KAAa,KAAqB;AACrE,SAAO,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC;AAC3C;AAEO,SAAS,KAAK,GAAW,GAAW,GAAmB;AAC5D,SAAO,KAAK,IAAI,KAAK;AACvB;AAEO,SAAS,YAAY,GAAW,GAAW,OAAuB;AACvE,UAAQ,QAAQ,MAAM,IAAI;AAC5B;AAEO,SAAS,MACd,OACA,OACA,OACA,QACA,QACQ;AACR,SAAO,KAAK,QAAQ,QAAQ,YAAY,OAAO,OAAO,KAAK,CAAC;AAC9D;AAEO,SAAS,WAAW,OAAe,OAAe,GAAmB;AAC1E,QAAM,IAAI,OAAO,IAAI,UAAU,QAAQ,QAAQ,GAAG,CAAC;AACnD,SAAO,IAAI,KAAK,IAAI,IAAI;AAC1B;AAEO,SAAS,aAAa,OAAe,OAAe,GAAmB;AAC5E,QAAM,IAAI,OAAO,IAAI,UAAU,QAAQ,QAAQ,GAAG,CAAC;AACnD,SAAO,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM;AACzC;AAEO,SAAS,SAAS,SAAyB;AAChD,SAAO,UAAU;AACnB;AAEO,SAAS,SAAS,SAAyB;AAChD,SAAO,UAAU;AACnB;AAEO,SAAS,IAAI,GAAW,GAAmB;AAChD,UAAS,IAAI,IAAK,KAAK;AACzB;AAEO,SAAS,MAAM,GAAmB;AACvC,SAAO,IAAI,KAAK,MAAM,CAAC;AACzB;AAEO,SAAS,KAAK,GAAmB;AACtC,SAAO,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK;AAClC;AAEO,SAAS,KAAK,MAAc,GAAmB;AACpD,SAAO,IAAI,OAAO,IAAI;AACxB;AAMO,IAAM,WAAW;AAAA,EACtB,KAAK,CAAC,GAAS,OAAmB,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE;AAAA,EAC/D,KAAK,CAAC,GAAS,OAAmB,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE;AAAA,EAC/D,KAAK,CAAC,GAAS,OAAqB,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,IAAI,EAAE;AAAA,EAC7D,KAAK,CAAC,GAAS,OAAqB,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,IAAI,EAAE;AAAA,EAC7D,KAAK,CAAC,GAAS,MAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAAA,EACvD,QAAQ,CAAC,MAAoB,KAAK,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAAA,EAC5D,UAAU,CAAC,MAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAAA,EACnD,WAAW,CAAC,MAAkB;AAC5B,UAAM,MAAM,SAAS,OAAO,CAAC;AAC7B,WAAO,MAAM,IAAI,SAAS,IAAI,GAAG,GAAG,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE;AAAA,EACvD;AAAA,EACA,UAAU,CAAC,GAAS,MAAoB,SAAS,OAAO,SAAS,IAAI,GAAG,CAAC,CAAC;AAAA,EAC1E,MAAM,CAAC,GAAS,GAAS,OAAqB;AAAA,IAC5C,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;AAAA,IACnB,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;AAAA,EACrB;AAAA,EACA,QAAQ,CAAC,GAAS,UAAwB;AACxC,UAAM,IAAI,KAAK,IAAI,KAAK;AACxB,UAAM,IAAI,KAAK,IAAI,KAAK;AACxB,WAAO,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,EAAE,IAAI,EAAE;AAAA,EACtD;AAAA,EACA,OAAO,CAAC,MAAoB,KAAK,MAAM,EAAE,GAAG,EAAE,CAAC;AAAA,EAC/C,cAAc,CAAC,GAAS,MAAoB;AAC1C,WAAO,KAAK,KAAK,MAAM,SAAS,IAAI,SAAS,UAAU,CAAC,GAAG,SAAS,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA,EAC3F;AACF;AAMO,IAAM,WAAW;AAAA,EACtB,MAAM,MAAY,KAAK,GAAG,GAAG,CAAC;AAAA,EAC9B,KAAK,MAAY,KAAK,GAAG,GAAG,CAAC;AAAA,EAC7B,IAAI,MAAY,KAAK,GAAG,GAAG,CAAC;AAAA,EAC5B,MAAM,MAAY,KAAK,GAAG,IAAI,CAAC;AAAA,EAC/B,SAAS,MAAY,KAAK,GAAG,GAAG,EAAE;AAAA,EAClC,MAAM,MAAY,KAAK,GAAG,GAAG,CAAC;AAAA,EAC9B,MAAM,MAAY,KAAK,IAAI,GAAG,CAAC;AAAA,EAC/B,OAAO,MAAY,KAAK,GAAG,GAAG,CAAC;AAAA,EAE/B,KAAK,CAAC,GAAS,MAAkB,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AAAA,EACrE,KAAK,CAAC,GAAS,OAAmB,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE;AAAA,EAC7E,KAAK,CAAC,GAAS,OAAqB,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,IAAI,EAAE;AAAA,EACzE,KAAK,CAAC,GAAS,OAAqB,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,IAAI,EAAE;AAAA,EACzE,QAAQ,CAAC,GAAS,OAAmB,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE;AAAA,EAEhF,KAAK,CAAC,GAAS,MAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAAA,EAEnE,OAAO,CAAC,GAAS,OAAmB;AAAA,IAClC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAAA,IACvB,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAAA,IACvB,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAAA,EACzB;AAAA,EAEA,QAAQ,CAAC,MAAoB,KAAK,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAAA,EACxE,UAAU,CAAC,MAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAAA,EAE/D,WAAW,CAAC,MAAkB;AAC5B,UAAM,MAAM,SAAS,OAAO,CAAC;AAC7B,WAAO,MAAM,UAAU,SAAS,IAAI,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,CAAC;AAAA,EAC5D;AAAA,EAEA,UAAU,CAAC,GAAS,MAAoB,SAAS,OAAO,SAAS,IAAI,GAAG,CAAC,CAAC;AAAA,EAC1E,YAAY,CAAC,GAAS,MAAoB,SAAS,SAAS,SAAS,IAAI,GAAG,CAAC,CAAC;AAAA,EAE9E,MAAM,CAAC,GAAS,GAAS,OAAqB;AAAA,IAC5C,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;AAAA,IACnB,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;AAAA,IACnB,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;AAAA,EACrB;AAAA,EAEA,OAAO,CAAC,GAAS,GAAS,MAAoB;AAC5C,UAAM,MAAM,MAAM,SAAS,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;AAC3C,UAAM,QAAQ,KAAK,KAAK,GAAG,IAAI;AAC/B,UAAM,WAAW,SAAS,UAAU,SAAS,IAAI,GAAG,SAAS,IAAI,GAAG,GAAG,CAAC,CAAC;AACzE,WAAO,SAAS,IAAI,SAAS,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,GAAG,SAAS,IAAI,UAAU,KAAK,IAAI,KAAK,CAAC,CAAC;AAAA,EAC/F;AAAA,EAEA,QAAQ,CAAC,OAAmB,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE;AAAA,EAExD,KAAK,CAAC,OAAmB,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC,GAAG,GAAG,KAAK,IAAI,EAAE,CAAC,GAAG,GAAG,KAAK,IAAI,EAAE,CAAC,EAAE;AAAA,EAEhF,KAAK,CAAC,GAAS,OAAmB;AAAA,IAChC,GAAG,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;AAAA,IACpB,GAAG,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;AAAA,IACpB,GAAG,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;AAAA,EACtB;AAAA,EAEA,KAAK,CAAC,GAAS,OAAmB;AAAA,IAChC,GAAG,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;AAAA,IACpB,GAAG,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;AAAA,IACpB,GAAG,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;AAAA,EACtB;AAAA,EAEA,OAAO,CAAC,GAAS,KAAW,SAAqB;AAAA,IAC/C,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAAA,IAC1B,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAAA,IAC1B,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAAA,EAC5B;AAAA,EAEA,OAAO,CAAC,OAAmB;AAAA,IACzB,GAAG,KAAK,MAAM,EAAE,CAAC;AAAA,IACjB,GAAG,KAAK,MAAM,EAAE,CAAC;AAAA,IACjB,GAAG,KAAK,MAAM,EAAE,CAAC;AAAA,EACnB;AAAA,EAEA,MAAM,CAAC,OAAmB;AAAA,IACxB,GAAG,KAAK,KAAK,EAAE,CAAC;AAAA,IAChB,GAAG,KAAK,KAAK,EAAE,CAAC;AAAA,IAChB,GAAG,KAAK,KAAK,EAAE,CAAC;AAAA,EAClB;AAAA,EAEA,OAAO,CAAC,OAAmB;AAAA,IACzB,GAAG,KAAK,MAAM,EAAE,CAAC;AAAA,IACjB,GAAG,KAAK,MAAM,EAAE,CAAC;AAAA,IACjB,GAAG,KAAK,MAAM,EAAE,CAAC;AAAA,EACnB;AAAA,EAEA,SAAS,CAAC,GAAS,WAAuB;AACxC,UAAM,MAAM,SAAS,IAAI,GAAG,MAAM;AAClC,WAAO,SAAS,IAAI,GAAG,SAAS,IAAI,QAAQ,IAAI,GAAG,CAAC;AAAA,EACtD;AAAA,EAEA,SAAS,CAAC,GAAS,SAAqB;AACtC,UAAM,MAAM,SAAS,IAAI,GAAG,IAAI;AAChC,UAAM,QAAQ,SAAS,SAAS,IAAI;AACpC,WAAO,SAAS,IAAI,MAAM,MAAM,KAAK;AAAA,EACvC;AAAA,EAEA,OAAO,CAAC,GAAS,MAAoB;AACnC,UAAM,MAAM,SAAS,IAAI,SAAS,UAAU,CAAC,GAAG,SAAS,UAAU,CAAC,CAAC;AACrE,WAAO,KAAK,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC;AAAA,EACpC;AAAA,EAEA,QAAQ,CAAC,GAAS,GAAS,UAAkB,YAAqB;AAChE,WACE,KAAK,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,WACtB,KAAK,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,WACtB,KAAK,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI;AAAA,EAE1B;AACF;AAMO,IAAM,WAAW;AAAA,EACtB,UAAU,MAAY,KAAK,GAAG,GAAG,GAAG,CAAC;AAAA,EAErC,eAAe,CAAC,MAAY,UAAwB;AAClD,UAAM,YAAY,QAAQ;AAC1B,UAAM,IAAI,KAAK,IAAI,SAAS;AAC5B,UAAM,aAAa,SAAS,UAAU,IAAI;AAC1C,WAAO;AAAA,MACL,GAAG,WAAW,IAAI;AAAA,MAClB,GAAG,WAAW,IAAI;AAAA,MAClB,GAAG,WAAW,IAAI;AAAA,MAClB,GAAG,KAAK,IAAI,SAAS;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,WAAW,CAAC,UAA6B;AACvC,UAAM,EAAE,GAAG,GAAG,EAAE,IAAI;AACpB,UAAM,KAAK,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC;AACnC,UAAM,KAAK,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC;AACnC,UAAM,KAAK,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC;AACnC,UAAM,KAAK,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC;AACnC,UAAM,KAAK,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC;AACnC,UAAM,KAAK,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC;AAEnC,WAAO;AAAA,MACL,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK;AAAA,MAC5B,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK;AAAA,MAC5B,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK;AAAA,MAC5B,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK;AAAA,IAC9B;AAAA,EACF;AAAA,EAEA,SAAS,CAAC,MAAyB;AACjC,UAAM,YAAY,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAC3C,UAAM,YAAY,IAAI,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAC/C,UAAM,IAAI,KAAK,MAAM,WAAW,SAAS;AAEzC,UAAM,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AACtC,QAAI;AACJ,QAAI,KAAK,IAAI,IAAI,KAAK,GAAG;AACvB,UAAK,KAAK,KAAK,IAAK,KAAK,KAAK,IAAI;AAAA,IACpC,OAAO;AACL,UAAI,KAAK,KAAK,IAAI;AAAA,IACpB;AAEA,UAAM,YAAY,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAC3C,UAAM,YAAY,IAAI,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAC/C,UAAM,IAAI,KAAK,MAAM,WAAW,SAAS;AAEzC,WAAO;AAAA,MACL,GAAG,SAAS,CAAC;AAAA,MACb,GAAG,SAAS,CAAC;AAAA,MACb,GAAG,SAAS,CAAC;AAAA,IACf;AAAA,EACF;AAAA,EAEA,UAAU,CAAC,GAAS,OAAmB;AAAA,IACrC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAAA,IAC/C,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAAA,IAC/C,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAAA,IAC/C,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAAA,EACjD;AAAA,EAEA,WAAW,CAAC,OAAmB,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE;AAAA,EAEnE,SAAS,CAAC,MAAkB;AAC1B,UAAM,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAC1D,WAAO;AAAA,MACL,GAAG,CAAC,EAAE,IAAI;AAAA,MACV,GAAG,CAAC,EAAE,IAAI;AAAA,MACV,GAAG,CAAC,EAAE,IAAI;AAAA,MACV,GAAG,EAAE,IAAI;AAAA,IACX;AAAA,EACF;AAAA,EAEA,WAAW,CAAC,MAAkB;AAC5B,UAAM,MAAM,KAAK,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACnE,WAAO,EAAE,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE,IAAI,IAAI;AAAA,EAClE;AAAA,EAEA,KAAK,CAAC,GAAS,MAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAAA,EAE/E,OAAO,CAAC,GAAS,GAAS,MAAoB;AAC5C,QAAI,MAAM,SAAS,IAAI,GAAG,CAAC;AAG3B,QAAI,YAAY;AAChB,QAAI,MAAM,GAAG;AACX,kBAAY,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE;AACjD,YAAM,CAAC;AAAA,IACT;AAEA,QAAI,MAAM,QAAQ;AAEhB,aAAO,SAAS,UAAU;AAAA,QACxB,GAAG,KAAK,EAAE,GAAG,UAAU,GAAG,CAAC;AAAA,QAC3B,GAAG,KAAK,EAAE,GAAG,UAAU,GAAG,CAAC;AAAA,QAC3B,GAAG,KAAK,EAAE,GAAG,UAAU,GAAG,CAAC;AAAA,QAC3B,GAAG,KAAK,EAAE,GAAG,UAAU,GAAG,CAAC;AAAA,MAC7B,CAAC;AAAA,IACH;AAEA,UAAM,SAAS,KAAK,KAAK,GAAG;AAC5B,UAAM,QAAQ,SAAS;AACvB,UAAM,WAAW,KAAK,IAAI,KAAK;AAC/B,UAAM,YAAY,KAAK,IAAI,MAAM;AAEjC,UAAM,KAAK,KAAK,IAAI,KAAK,IAAK,MAAM,WAAY;AAChD,UAAM,KAAK,WAAW;AAEtB,WAAO;AAAA,MACL,GAAG,EAAE,IAAI,KAAK,UAAU,IAAI;AAAA,MAC5B,GAAG,EAAE,IAAI,KAAK,UAAU,IAAI;AAAA,MAC5B,GAAG,EAAE,IAAI,KAAK,UAAU,IAAI;AAAA,MAC5B,GAAG,EAAE,IAAI,KAAK,UAAU,IAAI;AAAA,IAC9B;AAAA,EACF;AAAA,EAEA,YAAY,CAAC,GAAS,MAAkB;AACtC,UAAM,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE;AACpC,UAAM,KAAK,SAAS,MAAM,IAAI,CAAC;AAC/B,UAAM,MAAM,SAAS,MAAM,IAAI,EAAE;AACjC,WAAO,SAAS,IAAI,GAAG,SAAS,IAAI,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,GAAG,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC;AAAA,EACtF;AAAA,EAEA,QAAQ,CAAC,SAAe,KAAW,KAAK,GAAG,GAAG,CAAC,MAAY;AACzD,UAAM,IAAI,SAAS,UAAU,OAAO;AACpC,UAAM,IAAI,SAAS,UAAU,SAAS,MAAM,IAAI,CAAC,CAAC;AAClD,UAAM,IAAI,SAAS,MAAM,GAAG,CAAC;AAE7B,UAAM,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE;AAC5B,QAAI;AAEJ,QAAI,QAAQ,GAAG;AACb,YAAM,IAAI,MAAM,KAAK,KAAK,QAAQ,CAAC;AACnC,UAAI;AAAA,QACF,GAAG,OAAO;AAAA,QACV,IAAI,EAAE,IAAI,EAAE,KAAK;AAAA,QACjB,IAAI,EAAE,IAAI,EAAE,KAAK;AAAA,QACjB,IAAI,EAAE,IAAI,EAAE,KAAK;AAAA,MACnB;AAAA,IACF,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG;AACjC,YAAM,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC3C,UAAI;AAAA,QACF,IAAI,EAAE,IAAI,EAAE,KAAK;AAAA,QACjB,GAAG,OAAO;AAAA,QACV,IAAI,EAAE,IAAI,EAAE,KAAK;AAAA,QACjB,IAAI,EAAE,IAAI,EAAE,KAAK;AAAA,MACnB;AAAA,IACF,WAAW,EAAE,IAAI,EAAE,GAAG;AACpB,YAAM,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC3C,UAAI;AAAA,QACF,IAAI,EAAE,IAAI,EAAE,KAAK;AAAA,QACjB,IAAI,EAAE,IAAI,EAAE,KAAK;AAAA,QACjB,GAAG,OAAO;AAAA,QACV,IAAI,EAAE,IAAI,EAAE,KAAK;AAAA,MACnB;AAAA,IACF,OAAO;AACL,YAAM,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC3C,UAAI;AAAA,QACF,IAAI,EAAE,IAAI,EAAE,KAAK;AAAA,QACjB,IAAI,EAAE,IAAI,EAAE,KAAK;AAAA,QACjB,IAAI,EAAE,IAAI,EAAE,KAAK;AAAA,QACjB,GAAG,OAAO;AAAA,MACZ;AAAA,IACF;AAEA,WAAO,SAAS,UAAU,CAAC;AAAA,EAC7B;AACF;AAMO,IAAM,WAAW;AAAA,EACtB,UAAU,CAACA,OAAY,UAAyB;AAC9C,WACE,MAAM,KAAKA,MAAK,IAAI,KACpB,MAAM,KAAKA,MAAK,IAAI,KACpB,MAAM,KAAKA,MAAK,IAAI,KACpB,MAAM,KAAKA,MAAK,IAAI,KACpB,MAAM,KAAKA,MAAK,IAAI,KACpB,MAAM,KAAKA,MAAK,IAAI;AAAA,EAExB;AAAA,EAEA,YAAY,CAAC,GAAS,MAAqB;AACzC,WACE,EAAE,IAAI,KAAK,EAAE,IAAI,KACjB,EAAE,IAAI,KAAK,EAAE,IAAI,KACjB,EAAE,IAAI,KAAK,EAAE,IAAI,KACjB,EAAE,IAAI,KAAK,EAAE,IAAI,KACjB,EAAE,IAAI,KAAK,EAAE,IAAI,KACjB,EAAE,IAAI,KAAK,EAAE,IAAI;AAAA,EAErB;AAAA,EAEA,QAAQ,CAACA,UAAqB,SAAS,IAAI,SAAS,IAAIA,MAAK,KAAKA,MAAK,GAAG,GAAG,GAAG;AAAA,EAEhF,MAAM,CAACA,UAAqB,SAAS,IAAIA,MAAK,KAAKA,MAAK,GAAG;AAAA,EAE3D,QAAQ,CAACA,OAAY,WAAuB;AAAA,IAC1C,KAAK,SAAS,IAAIA,MAAK,KAAK,KAAK;AAAA,IACjC,KAAK,SAAS,IAAIA,MAAK,KAAK,KAAK;AAAA,EACnC;AAAA,EAEA,OAAO,CAAC,GAAS,OAAmB;AAAA,IAClC,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,GAAG;AAAA,IAC9B,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,GAAG;AAAA,EAChC;AACF;AAOA,IAAM,OAAO,IAAI,WAAW,GAAG;AAC/B,SAAS,IAAI,GAAG,IAAI,KAAK,IAAK,MAAK,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI;AACxD,SAAS,IAAI,KAAK,IAAI,GAAG,KAAK;AAC5B,QAAM,IAAI,KAAK,MAAM,KAAK,OAAO,KAAK,IAAI,EAAE;AAC5C,GAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AACtC,OAAK,IAAI,GAAG,IAAI,KAAK,CAAC;AACxB;AAEA,SAAS,KAAK,GAAmB;AAC/B,SAAO,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM;AACzC;AAEA,SAAS,KAAK,MAAc,GAAW,GAAW,GAAmB;AACnE,QAAM,IAAI,OAAO;AACjB,QAAM,IAAI,IAAI,IAAI,IAAI;AACtB,QAAM,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,KAAK,IAAI;AACjD,WAAS,IAAI,OAAO,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,IAAI,CAAC;AAC1D;AAEO,IAAM,QAAQ;AAAA;AAAA;AAAA;AAAA,EAInB,UAAU,CAAC,GAAW,GAAW,MAAsB;AACrD,UAAM,IAAI,KAAK,MAAM,CAAC,IAAI;AAC1B,UAAM,IAAI,KAAK,MAAM,CAAC,IAAI;AAC1B,UAAM,IAAI,KAAK,MAAM,CAAC,IAAI;AAE1B,SAAK,KAAK,MAAM,CAAC;AACjB,SAAK,KAAK,MAAM,CAAC;AACjB,SAAK,KAAK,MAAM,CAAC;AAEjB,UAAM,IAAI,KAAK,CAAC;AAChB,UAAM,IAAI,KAAK,CAAC;AAChB,UAAM,IAAI,KAAK,CAAC;AAEhB,UAAM,IAAI,KAAK,CAAC,IAAI;AACpB,UAAM,KAAK,KAAK,CAAC,IAAI;AACrB,UAAM,KAAK,KAAK,IAAI,CAAC,IAAI;AACzB,UAAM,IAAI,KAAK,IAAI,CAAC,IAAI;AACxB,UAAM,KAAK,KAAK,CAAC,IAAI;AACrB,UAAM,KAAK,KAAK,IAAI,CAAC,IAAI;AAEzB,WAAO;AAAA,MACL;AAAA,QACE,KAAK,KAAK,KAAK,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,KAAK,EAAE,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;AAAA,QAC5D,KAAK,KAAK,KAAK,EAAE,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,KAAK,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;AAAA,QACpE;AAAA,MACF;AAAA,MACA;AAAA,QACE,KAAK,KAAK,KAAK,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,KAAK,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AAAA,QAC5E,KAAK,KAAK,KAAK,KAAK,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,KAAK,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;AAAA,QACpF;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,CAAC,GAAW,MAAsB;AAC1C,WAAO,MAAM,SAAS,GAAG,GAAG,CAAC;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,CACH,GACA,GACA,GACA,UAAkB,GAClB,aAAqB,GACrB,OAAe,QACJ;AACX,QAAI,QAAQ;AACZ,QAAI,YAAY;AAChB,QAAI,YAAY;AAChB,QAAI,WAAW;AAEf,aAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AAChC,eAAS,YAAY,MAAM,SAAS,IAAI,WAAW,IAAI,WAAW,IAAI,SAAS;AAC/E,kBAAY;AACZ,mBAAa;AACb,mBAAa;AAAA,IACf;AAEA,WAAO,QAAQ;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,CAAC,GAAW,MAAsB;AACzC,WAAO,MAAM,SAAS,IAAI,KAAK,IAAI,GAAG;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,CAAC,GAAW,GAAW,MAAsB;AACnD,UAAM,KAAK,KAAK,MAAM,CAAC;AACvB,UAAM,KAAK,KAAK,MAAM,CAAC;AACvB,UAAM,KAAK,KAAK,MAAM,CAAC;AAEvB,QAAI,UAAU;AAEd,aAAS,IAAI,IAAI,KAAK,GAAG,KAAK;AAC5B,eAAS,IAAI,IAAI,KAAK,GAAG,KAAK;AAC5B,iBAAS,IAAI,IAAI,KAAK,GAAG,KAAK;AAC5B,gBAAM,QAAQ,KAAK;AACnB,gBAAM,QAAQ,KAAK;AACnB,gBAAM,QAAQ,KAAK;AAGnB,gBAAM,OAAO,KAAM,KAAM,KAAK,QAAQ,GAAG,IAAI,QAAS,GAAG,IAAI,QAAS,GAAG;AACzE,gBAAM,KAAK,QAAQ,OAAO;AAC1B,gBAAM,KAAK,QAAU,OAAO,IAAK,MAAO;AACxC,gBAAM,KAAK,QAAU,OAAO,KAAM,MAAO;AAEzC,gBAAM,QAAQ,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI;AACzE,oBAAU,KAAK,IAAI,SAAS,IAAI;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AAEA,WAAO,KAAK,KAAK,OAAO;AAAA,EAC1B;AACF;AAMO,IAAM,SAAS;AAAA;AAAA;AAAA;AAAA,EAIpB,OAAO,MAAc,KAAK,OAAO;AAAA;AAAA;AAAA;AAAA,EAKjC,OAAO,CAAC,KAAa,QAAwB,MAAM,KAAK,OAAO,KAAK,MAAM;AAAA;AAAA;AAAA;AAAA,EAK1E,KAAK,CAAC,KAAa,QAAwB,KAAK,MAAM,MAAM,KAAK,OAAO,KAAK,MAAM,MAAM,EAAE;AAAA;AAAA;AAAA;AAAA,EAK3F,MAAM,CAAC,cAAsB,QAAiB,KAAK,OAAO,IAAI;AAAA;AAAA;AAAA;AAAA,EAK9D,MAAM,CAAI,UAAkB,MAAM,KAAK,MAAM,KAAK,OAAO,IAAI,MAAM,MAAM,CAAC;AAAA;AAAA;AAAA;AAAA,EAK1E,SAAS,CAAI,UAAoB;AAC/B,UAAM,SAAS,CAAC,GAAG,KAAK;AACxB,aAAS,IAAI,OAAO,SAAS,GAAG,IAAI,GAAG,KAAK;AAC1C,YAAM,IAAI,KAAK,MAAM,KAAK,OAAO,KAAK,IAAI,EAAE;AAC5C,OAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AAAA,IAChD;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,MAAY;AAC5B,UAAM,QAAQ,KAAK,OAAO,IAAI;AAC9B,UAAM,MAAM,KAAK,KAAK,IAAI,KAAK,OAAO,IAAI,CAAC;AAC3C,UAAM,IAAI,KAAK,KAAK,KAAK,OAAO,CAAC;AACjC,WAAO;AAAA,MACL,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,KAAK;AAAA,MACrC,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,KAAK;AAAA,MACrC,GAAG,IAAI,KAAK,IAAI,GAAG;AAAA,IACrB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,MAAY;AACxB,UAAM,QAAQ,KAAK,OAAO,IAAI;AAC9B,UAAM,MAAM,KAAK,KAAK,IAAI,KAAK,OAAO,IAAI,CAAC;AAC3C,WAAO;AAAA,MACL,GAAG,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,KAAK;AAAA,MACjC,GAAG,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,KAAK;AAAA,MACjC,GAAG,KAAK,IAAI,GAAG;AAAA,IACjB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,MAAY;AAC5B,UAAM,QAAQ,KAAK,OAAO,IAAI;AAC9B,UAAM,IAAI,KAAK,KAAK,KAAK,OAAO,CAAC;AACjC,WAAO;AAAA,MACL,GAAG,IAAI,KAAK,IAAI,KAAK;AAAA,MACrB,GAAG,IAAI,KAAK,IAAI,KAAK;AAAA,IACvB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,CAAC,SAAiB;AACxB,QAAI,IAAI;AACR,WAAO,MAAM;AACX,UAAK,IAAI,aAAa,QAAS;AAC/B,aAAO,IAAI;AAAA,IACb;AAAA,EACF;AACF;","names":["aabb"]}
|
package/dist/collections.cjs
CHANGED
package/dist/collections.cjs.map
CHANGED
|
@@ -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":[]}
|