@holoscript/std 6.0.3 → 7.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/README.md +8 -0
  2. package/dist/chunk-DGUM43GV.js +11 -0
  3. package/dist/chunk-DGUM43GV.js.map +1 -0
  4. package/dist/{chunk-PFX2JM4X.js → chunk-FAMOLKH3.js} +2 -1
  5. package/dist/{chunk-PFX2JM4X.js.map → chunk-FAMOLKH3.js.map} +1 -1
  6. package/dist/{chunk-7HVUYGPS.js → chunk-SOKH6FJ7.js} +37 -5
  7. package/dist/chunk-SOKH6FJ7.js.map +1 -0
  8. package/dist/{chunk-W2Q3LUCM.js → chunk-XJIFG7G3.js} +3 -3
  9. package/dist/chunk-XJIFG7G3.js.map +1 -0
  10. package/dist/collections.cjs +1 -0
  11. package/dist/collections.cjs.map +1 -1
  12. package/dist/collections.js +2 -1
  13. package/dist/fs/fs.d.ts +288 -0
  14. package/dist/fs/fs.d.ts.map +1 -0
  15. package/dist/fs/index.cjs +1049 -0
  16. package/dist/fs/index.cjs.map +1 -0
  17. package/dist/fs/index.d.ts +51 -0
  18. package/dist/fs/index.d.ts.map +1 -0
  19. package/dist/fs/index.js +918 -0
  20. package/dist/fs/index.js.map +1 -0
  21. package/dist/fs/path.d.ts +135 -0
  22. package/dist/fs/path.d.ts.map +1 -0
  23. package/dist/fs/sandbox.d.ts +49 -0
  24. package/dist/fs/sandbox.d.ts.map +1 -0
  25. package/dist/fs/watch.d.ts +133 -0
  26. package/dist/fs/watch.d.ts.map +1 -0
  27. package/dist/index.cjs +54 -7
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.js +19 -4
  30. package/dist/index.js.map +1 -1
  31. package/dist/math.cjs +21 -2
  32. package/dist/math.cjs.map +1 -1
  33. package/dist/math.js +2 -1
  34. package/dist/string.cjs +2 -2
  35. package/dist/string.cjs.map +1 -1
  36. package/dist/string.js +2 -1
  37. package/dist/time.js +1 -0
  38. package/dist/traits/EconomicPrimitives.js +1 -0
  39. package/dist/traits/EconomicTraits.js +1 -0
  40. package/dist/traits/VRRTraits.d.ts +2 -2
  41. package/dist/types.d.ts.map +1 -1
  42. package/package.json +24 -9
  43. package/CHANGELOG.md +0 -7
  44. package/dist/__tests__/EconomicPrimitives.test.d.ts +0 -2
  45. package/dist/__tests__/EconomicPrimitives.test.d.ts.map +0 -1
  46. package/dist/__tests__/EconomicTraits.test.d.ts +0 -2
  47. package/dist/__tests__/EconomicTraits.test.d.ts.map +0 -1
  48. package/dist/__tests__/SimulationLabPrimitives.test.d.ts +0 -2
  49. package/dist/__tests__/SimulationLabPrimitives.test.d.ts.map +0 -1
  50. package/dist/__tests__/collections.test.d.ts +0 -2
  51. package/dist/__tests__/collections.test.d.ts.map +0 -1
  52. package/dist/__tests__/events.test.d.ts +0 -2
  53. package/dist/__tests__/events.test.d.ts.map +0 -1
  54. package/dist/__tests__/index.test.d.ts +0 -2
  55. package/dist/__tests__/index.test.d.ts.map +0 -1
  56. package/dist/__tests__/materials.test.d.ts +0 -2
  57. package/dist/__tests__/materials.test.d.ts.map +0 -1
  58. package/dist/__tests__/math.test.d.ts +0 -2
  59. package/dist/__tests__/math.test.d.ts.map +0 -1
  60. package/dist/__tests__/physics.test.d.ts +0 -2
  61. package/dist/__tests__/physics.test.d.ts.map +0 -1
  62. package/dist/__tests__/spatial.test.d.ts +0 -2
  63. package/dist/__tests__/spatial.test.d.ts.map +0 -1
  64. package/dist/__tests__/standard-library-fundamentals.test.d.ts +0 -2
  65. package/dist/__tests__/standard-library-fundamentals.test.d.ts.map +0 -1
  66. package/dist/__tests__/string-and-time-utilities.test.d.ts +0 -2
  67. package/dist/__tests__/string-and-time-utilities.test.d.ts.map +0 -1
  68. package/dist/__tests__/string-decoupled.test.d.ts +0 -2
  69. package/dist/__tests__/string-decoupled.test.d.ts.map +0 -1
  70. package/dist/__tests__/string.test.d.ts +0 -2
  71. package/dist/__tests__/string.test.d.ts.map +0 -1
  72. package/dist/__tests__/time.test.d.ts +0 -2
  73. package/dist/__tests__/time.test.d.ts.map +0 -1
  74. package/dist/chunk-7HVUYGPS.js.map +0 -1
  75. package/dist/chunk-W2Q3LUCM.js.map +0 -1
  76. package/dist/string.basic.test.d.ts +0 -5
  77. package/dist/string.basic.test.d.ts.map +0 -1
  78. package/dist/string.test.d.ts +0 -5
  79. package/dist/string.test.d.ts.map +0 -1
  80. package/dist/traits/__tests__/ARTraits.test.d.ts +0 -2
  81. package/dist/traits/__tests__/ARTraits.test.d.ts.map +0 -1
  82. package/dist/traits/__tests__/EconomicPrimitives.test.d.ts +0 -2
  83. package/dist/traits/__tests__/EconomicPrimitives.test.d.ts.map +0 -1
  84. package/dist/traits/__tests__/EconomicTraits.test.d.ts +0 -2
  85. package/dist/traits/__tests__/EconomicTraits.test.d.ts.map +0 -1
  86. package/error-utf8.log +0 -6
  87. package/error.log +0 -0
  88. package/src/__tests__/EconomicPrimitives.test.ts +0 -690
  89. package/src/__tests__/EconomicTraits.test.ts +0 -425
  90. package/src/__tests__/SimulationLabPrimitives.test.ts +0 -415
  91. package/src/__tests__/collections.test.ts +0 -182
  92. package/src/__tests__/events.test.ts +0 -135
  93. package/src/__tests__/index.test.ts +0 -14
  94. package/src/__tests__/materials.test.ts +0 -84
  95. package/src/__tests__/math.test.ts +0 -246
  96. package/src/__tests__/physics.test.ts +0 -83
  97. package/src/__tests__/spatial.test.ts +0 -333
  98. package/src/__tests__/standard-library-fundamentals.test.ts +0 -1301
  99. package/src/__tests__/string-and-time-utilities.test.ts +0 -1070
  100. package/src/__tests__/string-decoupled.test.ts +0 -14
  101. package/src/__tests__/string.test.ts +0 -164
  102. package/src/__tests__/time.test.ts +0 -110
  103. package/src/collections.ts +0 -850
  104. package/src/events.ts +0 -88
  105. package/src/index.ts +0 -474
  106. package/src/materials.ts +0 -109
  107. package/src/math.ts +0 -674
  108. package/src/physics.ts +0 -141
  109. package/src/spatial.ts +0 -320
  110. package/src/string.basic.test.ts +0 -14
  111. package/src/string.test.ts +0 -335
  112. package/src/string.ts +0 -531
  113. package/src/time.ts +0 -621
  114. package/src/traits/ARTraits.ts +0 -103
  115. package/src/traits/EconomicPrimitives.ts +0 -755
  116. package/src/traits/EconomicTraits.ts +0 -552
  117. package/src/traits/IoTTraits.ts +0 -102
  118. package/src/traits/SimulationLabPrimitives.ts +0 -650
  119. package/src/traits/SimulationLabTraits.ts +0 -191
  120. package/src/traits/VRRTraits.ts +0 -326
  121. package/src/traits/__tests__/ARTraits.test.ts +0 -14
  122. package/src/traits/__tests__/EconomicPrimitives.test.ts +0 -14
  123. package/src/traits/__tests__/EconomicTraits.test.ts +0 -14
  124. package/src/types.ts +0 -411
  125. package/std_error.log +0 -5
  126. package/tsconfig.json +0 -18
  127. package/tsup.config.ts +0 -17
  128. package/vitest.config.ts +0 -10
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
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -611,6 +611,7 @@ var PriorityQueue = class _PriorityQueue {
611
611
  constructor(compareFn = (a, b) => a - b) {
612
612
  this.compareFn = compareFn;
613
613
  }
614
+ compareFn;
614
615
  heap = [];
615
616
  static minHeap() {
616
617
  return new _PriorityQueue((a, b) => a - b);
@@ -680,4 +681,4 @@ export {
680
681
  SpatialGrid,
681
682
  PriorityQueue
682
683
  };
683
- //# sourceMappingURL=chunk-PFX2JM4X.js.map
684
+ //# sourceMappingURL=chunk-FAMOLKH3.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/collections.ts"],"sourcesContent":["/**\n * @holoscript/std - Collections Module\n *\n * Provides List, Map, and Set implementations with functional operations\n * for use in HoloScript Plus programs.\n */\n\nimport type { Vec3 } from './types.js';\n\n/**\n * Immutable List with functional operations\n */\nexport class List<T> {\n private readonly items: readonly T[];\n\n constructor(items: Iterable<T> = []) {\n this.items = Array.from(items);\n }\n\n static of<T>(...items: T[]): List<T> {\n return new List(items);\n }\n\n static from<T>(iterable: Iterable<T>): List<T> {\n return new List(iterable);\n }\n\n static range(start: number, end: number, step = 1): List<number> {\n const items: number[] = [];\n for (let i = start; step > 0 ? i < end : i > end; i += step) {\n items.push(i);\n }\n return new List(items);\n }\n\n static repeat<T>(value: T, count: number): List<T> {\n return new List(Array(count).fill(value));\n }\n\n get length(): number {\n return this.items.length;\n }\n\n get isEmpty(): boolean {\n return this.items.length === 0;\n }\n\n get(index: number): T | undefined {\n return index < 0 ? this.items[this.items.length + index] : this.items[index];\n }\n\n first(): T | undefined {\n return this.items[0];\n }\n\n last(): T | undefined {\n return this.items[this.items.length - 1];\n }\n\n map<U>(fn: (item: T, index: number) => U): List<U> {\n return new List(this.items.map(fn));\n }\n\n flatMap<U>(fn: (item: T, index: number) => List<U> | U[]): List<U> {\n const result: U[] = [];\n this.items.forEach((item, index) => {\n const mapped = fn(item, index);\n if (mapped instanceof List) {\n result.push(...mapped.toArray());\n } else {\n result.push(...mapped);\n }\n });\n return new List(result);\n }\n\n filter(predicate: (item: T, index: number) => boolean): List<T> {\n return new List(this.items.filter(predicate));\n }\n\n reject(predicate: (item: T, index: number) => boolean): List<T> {\n return this.filter((item, index) => !predicate(item, index));\n }\n\n reduce<U>(fn: (acc: U, item: T, index: number) => U, initial: U): U {\n return this.items.reduce(fn, initial);\n }\n\n fold<U>(initial: U, fn: (acc: U, item: T) => U): U {\n return this.items.reduce(fn, initial);\n }\n\n find(predicate: (item: T, index: number) => boolean): T | undefined {\n return this.items.find(predicate);\n }\n\n findIndex(predicate: (item: T, index: number) => boolean): number {\n return this.items.findIndex(predicate);\n }\n\n indexOf(item: T): number {\n return this.items.indexOf(item);\n }\n\n includes(item: T): boolean {\n return this.items.includes(item);\n }\n\n some(predicate: (item: T, index: number) => boolean): boolean {\n return this.items.some(predicate);\n }\n\n every(predicate: (item: T, index: number) => boolean): boolean {\n return this.items.every(predicate);\n }\n\n none(predicate: (item: T, index: number) => boolean): boolean {\n return !this.some(predicate);\n }\n\n count(predicate: (item: T, index: number) => boolean): number {\n return this.filter(predicate).length;\n }\n\n forEach(fn: (item: T, index: number) => void): void {\n this.items.forEach(fn);\n }\n\n concat(...lists: (List<T> | T[])[]): List<T> {\n const arrays = lists.map((l) => (l instanceof List ? l.toArray() : l));\n return new List([...this.items, ...arrays.flat()]);\n }\n\n append(item: T): List<T> {\n return new List([...this.items, item]);\n }\n\n prepend(item: T): List<T> {\n return new List([item, ...this.items]);\n }\n\n insert(index: number, item: T): List<T> {\n const arr = [...this.items];\n arr.splice(index, 0, item);\n return new List(arr);\n }\n\n remove(index: number): List<T> {\n const arr = [...this.items];\n arr.splice(index, 1);\n return new List(arr);\n }\n\n update(index: number, item: T): List<T> {\n const arr = [...this.items];\n arr[index] = item;\n return new List(arr);\n }\n\n slice(start?: number, end?: number): List<T> {\n return new List(this.items.slice(start, end));\n }\n\n take(n: number): List<T> {\n return this.slice(0, n);\n }\n\n takeLast(n: number): List<T> {\n return this.slice(-n);\n }\n\n takeWhile(predicate: (item: T, index: number) => boolean): List<T> {\n const result: T[] = [];\n for (let i = 0; i < this.items.length; i++) {\n if (!predicate(this.items[i], i)) break;\n result.push(this.items[i]);\n }\n return new List(result);\n }\n\n drop(n: number): List<T> {\n return this.slice(n);\n }\n\n dropLast(n: number): List<T> {\n return this.slice(0, -n);\n }\n\n dropWhile(predicate: (item: T, index: number) => boolean): List<T> {\n let startIndex = 0;\n for (let i = 0; i < this.items.length; i++) {\n if (!predicate(this.items[i], i)) break;\n startIndex = i + 1;\n }\n return this.slice(startIndex);\n }\n\n reverse(): List<T> {\n return new List([...this.items].reverse());\n }\n\n sort(compareFn?: (a: T, b: T) => number): List<T> {\n return new List([...this.items].sort(compareFn));\n }\n\n sortBy<U>(fn: (item: T) => U): List<T> {\n return this.sort((a, b) => {\n const va = fn(a);\n const vb = fn(b);\n if (va < vb) return -1;\n if (va > vb) return 1;\n return 0;\n });\n }\n\n shuffle(): List<T> {\n const arr = [...this.items];\n for (let i = arr.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [arr[i], arr[j]] = [arr[j], arr[i]];\n }\n return new List(arr);\n }\n\n unique(): List<T> {\n return new List([...new Set(this.items)]);\n }\n\n uniqueBy<U>(fn: (item: T) => U): List<T> {\n const seen = new Set<U>();\n const result: T[] = [];\n for (const item of this.items) {\n const key = fn(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n return new List(result);\n }\n\n groupBy<K>(fn: (item: T) => K): HoloMap<K, List<T>> {\n const groups = new Map<K, T[]>();\n for (const item of this.items) {\n const key = fn(item);\n const group = groups.get(key) || [];\n group.push(item);\n groups.set(key, group);\n }\n const result = new Map<K, List<T>>();\n for (const [key, items] of groups) {\n result.set(key, new List(items));\n }\n return new HoloMap(result);\n }\n\n partition(predicate: (item: T, index: number) => boolean): [List<T>, List<T>] {\n const pass: T[] = [];\n const fail: T[] = [];\n this.items.forEach((item, index) => {\n if (predicate(item, index)) {\n pass.push(item);\n } else {\n fail.push(item);\n }\n });\n return [new List(pass), new List(fail)];\n }\n\n zip<U>(other: List<U>): List<[T, U]> {\n const length = Math.min(this.length, other.length);\n const result: [T, U][] = [];\n for (let i = 0; i < length; i++) {\n result.push([this.items[i], other.get(i)!]);\n }\n return new List(result);\n }\n\n zipWith<U, V>(other: List<U>, fn: (a: T, b: U) => V): List<V> {\n return this.zip(other).map(([a, b]) => fn(a, b));\n }\n\n flatten<U>(this: List<List<U> | U[]>): List<U> {\n const result: U[] = [];\n for (const item of this.items) {\n if (item instanceof List) {\n result.push(...item.toArray());\n } else if (Array.isArray(item)) {\n result.push(...item);\n }\n }\n return new List(result);\n }\n\n sum(this: List<number>): number {\n return this.reduce((acc, n) => acc + n, 0);\n }\n\n min(this: List<number>): number | undefined {\n if (this.isEmpty) return undefined;\n return Math.min(...this.items);\n }\n\n max(this: List<number>): number | undefined {\n if (this.isEmpty) return undefined;\n return Math.max(...this.items);\n }\n\n average(this: List<number>): number | undefined {\n if (this.isEmpty) return undefined;\n return this.sum() / this.length;\n }\n\n join(separator = ','): string {\n return this.items.join(separator);\n }\n\n toArray(): T[] {\n return [...this.items];\n }\n\n toSet(): HoloSet<T> {\n return new HoloSet(this.items);\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.items[Symbol.iterator]();\n }\n\n toString(): string {\n return `List(${this.items.join(', ')})`;\n }\n}\n\n/**\n * Immutable Map with functional operations\n */\nexport class HoloMap<K, V> {\n private readonly _map: ReadonlyMap<K, V>;\n\n constructor(entries?: Iterable<[K, V]> | Map<K, V>) {\n this._map = entries instanceof Map ? entries : new Map(entries);\n }\n\n static of<K, V>(...entries: [K, V][]): HoloMap<K, V> {\n return new HoloMap(entries);\n }\n\n static from<K, V>(entries: Iterable<[K, V]>): HoloMap<K, V> {\n return new HoloMap(entries);\n }\n\n static fromObject<V>(obj: Record<string, V>): HoloMap<string, V> {\n return new HoloMap(Object.entries(obj));\n }\n\n get size(): number {\n return this._map.size;\n }\n\n get isEmpty(): boolean {\n return this._map.size === 0;\n }\n\n get(key: K): V | undefined {\n return this._map.get(key);\n }\n\n getOrDefault(key: K, defaultValue: V): V {\n return this._map.has(key) ? this._map.get(key)! : defaultValue;\n }\n\n has(key: K): boolean {\n return this._map.has(key);\n }\n\n set(key: K, value: V): HoloMap<K, V> {\n const newMap = new Map(this._map);\n newMap.set(key, value);\n return new HoloMap(newMap);\n }\n\n delete(key: K): HoloMap<K, V> {\n const newMap = new Map(this._map);\n newMap.delete(key);\n return new HoloMap(newMap);\n }\n\n update(key: K, fn: (value: V | undefined) => V): HoloMap<K, V> {\n return this.set(key, fn(this.get(key)));\n }\n\n merge(other: HoloMap<K, V>): HoloMap<K, V> {\n const newMap = new Map(this._map);\n for (const [key, value] of other) {\n newMap.set(key, value);\n }\n return new HoloMap(newMap);\n }\n\n keys(): List<K> {\n return new List(this._map.keys());\n }\n\n values(): List<V> {\n return new List(this._map.values());\n }\n\n entries(): List<[K, V]> {\n return new List(this._map.entries());\n }\n\n map<U>(fn: (value: V, key: K) => U): HoloMap<K, U> {\n const entries: [K, U][] = [];\n for (const [key, value] of this._map) {\n entries.push([key, fn(value, key)]);\n }\n return new HoloMap(entries);\n }\n\n mapKeys<K2>(fn: (key: K, value: V) => K2): HoloMap<K2, V> {\n const entries: [K2, V][] = [];\n for (const [key, value] of this._map) {\n entries.push([fn(key, value), value]);\n }\n return new HoloMap(entries);\n }\n\n filter(predicate: (value: V, key: K) => boolean): HoloMap<K, V> {\n const entries: [K, V][] = [];\n for (const [key, value] of this._map) {\n if (predicate(value, key)) {\n entries.push([key, value]);\n }\n }\n return new HoloMap(entries);\n }\n\n reduce<U>(fn: (acc: U, value: V, key: K) => U, initial: U): U {\n let acc = initial;\n for (const [key, value] of this._map) {\n acc = fn(acc, value, key);\n }\n return acc;\n }\n\n forEach(fn: (value: V, key: K) => void): void {\n this._map.forEach(fn);\n }\n\n find(predicate: (value: V, key: K) => boolean): [K, V] | undefined {\n for (const [key, value] of this._map) {\n if (predicate(value, key)) {\n return [key, value];\n }\n }\n return undefined;\n }\n\n some(predicate: (value: V, key: K) => boolean): boolean {\n for (const [key, value] of this._map) {\n if (predicate(value, key)) return true;\n }\n return false;\n }\n\n every(predicate: (value: V, key: K) => boolean): boolean {\n for (const [key, value] of this._map) {\n if (!predicate(value, key)) return false;\n }\n return true;\n }\n\n toObject(this: HoloMap<string, V>): Record<string, V> {\n const obj: Record<string, V> = {};\n for (const [key, value] of this._map) {\n obj[key] = value;\n }\n return obj;\n }\n\n toNativeMap(): Map<K, V> {\n return new Map(this._map);\n }\n\n [Symbol.iterator](): Iterator<[K, V]> {\n return this._map[Symbol.iterator]();\n }\n\n toString(): string {\n const entries = [...this._map].map(([k, v]) => `${k}: ${v}`).join(', ');\n return `HoloMap { ${entries} }`;\n }\n}\n\n/**\n * Immutable Set with functional operations\n */\nexport class HoloSet<T> {\n private readonly set: ReadonlySet<T>;\n\n constructor(items?: Iterable<T>) {\n this.set = new Set(items);\n }\n\n static of<T>(...items: T[]): HoloSet<T> {\n return new HoloSet(items);\n }\n\n static from<T>(iterable: Iterable<T>): HoloSet<T> {\n return new HoloSet(iterable);\n }\n\n get size(): number {\n return this.set.size;\n }\n\n get isEmpty(): boolean {\n return this.set.size === 0;\n }\n\n has(item: T): boolean {\n return this.set.has(item);\n }\n\n add(item: T): HoloSet<T> {\n const newSet = new Set(this.set);\n newSet.add(item);\n return new HoloSet(newSet);\n }\n\n delete(item: T): HoloSet<T> {\n const newSet = new Set(this.set);\n newSet.delete(item);\n return new HoloSet(newSet);\n }\n\n addAll(items: Iterable<T>): HoloSet<T> {\n const newSet = new Set(this.set);\n for (const item of items) {\n newSet.add(item);\n }\n return new HoloSet(newSet);\n }\n\n union(other: HoloSet<T>): HoloSet<T> {\n return this.addAll(other);\n }\n\n intersection(other: HoloSet<T>): HoloSet<T> {\n const result = new Set<T>();\n for (const item of this.set) {\n if (other.has(item)) {\n result.add(item);\n }\n }\n return new HoloSet(result);\n }\n\n difference(other: HoloSet<T>): HoloSet<T> {\n const result = new Set<T>();\n for (const item of this.set) {\n if (!other.has(item)) {\n result.add(item);\n }\n }\n return new HoloSet(result);\n }\n\n symmetricDifference(other: HoloSet<T>): HoloSet<T> {\n return this.difference(other).union(other.difference(this));\n }\n\n isSubsetOf(other: HoloSet<T>): boolean {\n for (const item of this.set) {\n if (!other.has(item)) return false;\n }\n return true;\n }\n\n isSupersetOf(other: HoloSet<T>): boolean {\n return other.isSubsetOf(this);\n }\n\n isDisjointFrom(other: HoloSet<T>): boolean {\n return this.intersection(other).isEmpty;\n }\n\n map<U>(fn: (item: T) => U): HoloSet<U> {\n const result = new Set<U>();\n for (const item of this.set) {\n result.add(fn(item));\n }\n return new HoloSet(result);\n }\n\n filter(predicate: (item: T) => boolean): HoloSet<T> {\n const result = new Set<T>();\n for (const item of this.set) {\n if (predicate(item)) {\n result.add(item);\n }\n }\n return new HoloSet(result);\n }\n\n reduce<U>(fn: (acc: U, item: T) => U, initial: U): U {\n let acc = initial;\n for (const item of this.set) {\n acc = fn(acc, item);\n }\n return acc;\n }\n\n forEach(fn: (item: T) => void): void {\n this.set.forEach(fn);\n }\n\n find(predicate: (item: T) => boolean): T | undefined {\n for (const item of this.set) {\n if (predicate(item)) return item;\n }\n return undefined;\n }\n\n some(predicate: (item: T) => boolean): boolean {\n for (const item of this.set) {\n if (predicate(item)) return true;\n }\n return false;\n }\n\n every(predicate: (item: T) => boolean): boolean {\n for (const item of this.set) {\n if (!predicate(item)) return false;\n }\n return true;\n }\n\n toArray(): T[] {\n return [...this.set];\n }\n\n toList(): List<T> {\n return new List(this.set);\n }\n\n toNativeSet(): Set<T> {\n return new Set(this.set);\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.set[Symbol.iterator]();\n }\n\n toString(): string {\n return `HoloSet { ${[...this.set].join(', ')} }`;\n }\n}\n\n/**\n * Spatial grid for efficient spatial queries (useful for game worlds)\n */\nexport class SpatialGrid<T> {\n private readonly cellSize: number;\n private readonly cells: Map<string, T[]> = new Map();\n\n constructor(cellSize: number) {\n this.cellSize = cellSize;\n }\n\n private getCellKey(x: number, y: number, z: number): string {\n const cx = Math.floor(x / this.cellSize);\n const cy = Math.floor(y / this.cellSize);\n const cz = Math.floor(z / this.cellSize);\n return `${cx},${cy},${cz}`;\n }\n\n insert(position: Vec3, item: T): void {\n const key = this.getCellKey(position.x, position.y, position.z);\n if (!this.cells.has(key)) {\n this.cells.set(key, []);\n }\n this.cells.get(key)!.push(item);\n }\n\n remove(position: Vec3, item: T): boolean {\n const key = this.getCellKey(position.x, position.y, position.z);\n const cell = this.cells.get(key);\n if (!cell) return false;\n const index = cell.indexOf(item);\n if (index === -1) return false;\n cell.splice(index, 1);\n if (cell.length === 0) {\n this.cells.delete(key);\n }\n return true;\n }\n\n query(center: Vec3, radius: number): T[] {\n const results: T[] = [];\n const cellRadius = Math.ceil(radius / this.cellSize);\n const cx = Math.floor(center.x / this.cellSize);\n const cy = Math.floor(center.y / this.cellSize);\n const cz = Math.floor(center.z / this.cellSize);\n\n for (let x = cx - cellRadius; x <= cx + cellRadius; x++) {\n for (let y = cy - cellRadius; y <= cy + cellRadius; y++) {\n for (let z = cz - cellRadius; z <= cz + cellRadius; z++) {\n const cell = this.cells.get(`${x},${y},${z}`);\n if (cell) {\n results.push(...cell);\n }\n }\n }\n }\n\n return results;\n }\n\n queryBox(min: Vec3, max: Vec3): T[] {\n const results: T[] = [];\n const minCx = Math.floor(min.x / this.cellSize);\n const minCy = Math.floor(min.y / this.cellSize);\n const minCz = Math.floor(min.z / this.cellSize);\n const maxCx = Math.floor(max.x / this.cellSize);\n const maxCy = Math.floor(max.y / this.cellSize);\n const maxCz = Math.floor(max.z / this.cellSize);\n\n for (let x = minCx; x <= maxCx; x++) {\n for (let y = minCy; y <= maxCy; y++) {\n for (let z = minCz; z <= maxCz; z++) {\n const cell = this.cells.get(`${x},${y},${z}`);\n if (cell) {\n results.push(...cell);\n }\n }\n }\n }\n\n return results;\n }\n\n clear(): void {\n this.cells.clear();\n }\n\n get cellCount(): number {\n return this.cells.size;\n }\n\n get itemCount(): number {\n let count = 0;\n for (const cell of this.cells.values()) {\n count += cell.length;\n }\n return count;\n }\n}\n\n/**\n * Priority queue (min-heap by default)\n */\nexport class PriorityQueue<T> {\n private heap: { item: T; priority: number }[] = [];\n\n constructor(private compareFn: (a: number, b: number) => number = (a, b) => a - b) {}\n\n static minHeap<T>(): PriorityQueue<T> {\n return new PriorityQueue((a, b) => a - b);\n }\n\n static maxHeap<T>(): PriorityQueue<T> {\n return new PriorityQueue((a, b) => b - a);\n }\n\n get size(): number {\n return this.heap.length;\n }\n\n get isEmpty(): boolean {\n return this.heap.length === 0;\n }\n\n enqueue(item: T, priority: number): void {\n this.heap.push({ item, priority });\n this.bubbleUp(this.heap.length - 1);\n }\n\n dequeue(): T | undefined {\n if (this.isEmpty) return undefined;\n const result = this.heap[0].item;\n const last = this.heap.pop()!;\n if (this.heap.length > 0) {\n this.heap[0] = last;\n this.bubbleDown(0);\n }\n return result;\n }\n\n peek(): T | undefined {\n return this.heap[0]?.item;\n }\n\n peekPriority(): number | undefined {\n return this.heap[0]?.priority;\n }\n\n clear(): void {\n this.heap = [];\n }\n\n private bubbleUp(index: number): void {\n while (index > 0) {\n const parentIndex = Math.floor((index - 1) / 2);\n if (this.compareFn(this.heap[index].priority, this.heap[parentIndex].priority) >= 0) break;\n [this.heap[index], this.heap[parentIndex]] = [this.heap[parentIndex], this.heap[index]];\n index = parentIndex;\n }\n }\n\n private bubbleDown(index: number): void {\n while (true) {\n const leftChild = 2 * index + 1;\n const rightChild = 2 * index + 2;\n let smallest = index;\n\n if (\n leftChild < this.heap.length &&\n this.compareFn(this.heap[leftChild].priority, this.heap[smallest].priority) < 0\n ) {\n smallest = leftChild;\n }\n if (\n rightChild < this.heap.length &&\n this.compareFn(this.heap[rightChild].priority, this.heap[smallest].priority) < 0\n ) {\n smallest = rightChild;\n }\n\n if (smallest === index) break;\n [this.heap[index], this.heap[smallest]] = [this.heap[smallest], this.heap[index]];\n index = smallest;\n }\n }\n}\n\n// Convenience aliases\nexport { HoloMap as Map };\nexport { HoloSet as Set };\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/collections.ts"],"sourcesContent":["/**\n * @holoscript/std - Collections Module\n *\n * Provides List, Map, and Set implementations with functional operations\n * for use in HoloScript Plus programs.\n */\n\nimport type { Vec3 } from './types.js';\n\n/**\n * Immutable List with functional operations\n */\nexport class List<T> {\n private readonly items: readonly T[];\n\n constructor(items: Iterable<T> = []) {\n this.items = Array.from(items);\n }\n\n static of<T>(...items: T[]): List<T> {\n return new List(items);\n }\n\n static from<T>(iterable: Iterable<T>): List<T> {\n return new List(iterable);\n }\n\n static range(start: number, end: number, step = 1): List<number> {\n const items: number[] = [];\n for (let i = start; step > 0 ? i < end : i > end; i += step) {\n items.push(i);\n }\n return new List(items);\n }\n\n static repeat<T>(value: T, count: number): List<T> {\n return new List(Array(count).fill(value));\n }\n\n get length(): number {\n return this.items.length;\n }\n\n get isEmpty(): boolean {\n return this.items.length === 0;\n }\n\n get(index: number): T | undefined {\n return index < 0 ? this.items[this.items.length + index] : this.items[index];\n }\n\n first(): T | undefined {\n return this.items[0];\n }\n\n last(): T | undefined {\n return this.items[this.items.length - 1];\n }\n\n map<U>(fn: (item: T, index: number) => U): List<U> {\n return new List(this.items.map(fn));\n }\n\n flatMap<U>(fn: (item: T, index: number) => List<U> | U[]): List<U> {\n const result: U[] = [];\n this.items.forEach((item, index) => {\n const mapped = fn(item, index);\n if (mapped instanceof List) {\n result.push(...mapped.toArray());\n } else {\n result.push(...mapped);\n }\n });\n return new List(result);\n }\n\n filter(predicate: (item: T, index: number) => boolean): List<T> {\n return new List(this.items.filter(predicate));\n }\n\n reject(predicate: (item: T, index: number) => boolean): List<T> {\n return this.filter((item, index) => !predicate(item, index));\n }\n\n reduce<U>(fn: (acc: U, item: T, index: number) => U, initial: U): U {\n return this.items.reduce(fn, initial);\n }\n\n fold<U>(initial: U, fn: (acc: U, item: T) => U): U {\n return this.items.reduce(fn, initial);\n }\n\n find(predicate: (item: T, index: number) => boolean): T | undefined {\n return this.items.find(predicate);\n }\n\n findIndex(predicate: (item: T, index: number) => boolean): number {\n return this.items.findIndex(predicate);\n }\n\n indexOf(item: T): number {\n return this.items.indexOf(item);\n }\n\n includes(item: T): boolean {\n return this.items.includes(item);\n }\n\n some(predicate: (item: T, index: number) => boolean): boolean {\n return this.items.some(predicate);\n }\n\n every(predicate: (item: T, index: number) => boolean): boolean {\n return this.items.every(predicate);\n }\n\n none(predicate: (item: T, index: number) => boolean): boolean {\n return !this.some(predicate);\n }\n\n count(predicate: (item: T, index: number) => boolean): number {\n return this.filter(predicate).length;\n }\n\n forEach(fn: (item: T, index: number) => void): void {\n this.items.forEach(fn);\n }\n\n concat(...lists: (List<T> | T[])[]): List<T> {\n const arrays = lists.map((l) => (l instanceof List ? l.toArray() : l));\n return new List([...this.items, ...arrays.flat()]);\n }\n\n append(item: T): List<T> {\n return new List([...this.items, item]);\n }\n\n prepend(item: T): List<T> {\n return new List([item, ...this.items]);\n }\n\n insert(index: number, item: T): List<T> {\n const arr = [...this.items];\n arr.splice(index, 0, item);\n return new List(arr);\n }\n\n remove(index: number): List<T> {\n const arr = [...this.items];\n arr.splice(index, 1);\n return new List(arr);\n }\n\n update(index: number, item: T): List<T> {\n const arr = [...this.items];\n arr[index] = item;\n return new List(arr);\n }\n\n slice(start?: number, end?: number): List<T> {\n return new List(this.items.slice(start, end));\n }\n\n take(n: number): List<T> {\n return this.slice(0, n);\n }\n\n takeLast(n: number): List<T> {\n return this.slice(-n);\n }\n\n takeWhile(predicate: (item: T, index: number) => boolean): List<T> {\n const result: T[] = [];\n for (let i = 0; i < this.items.length; i++) {\n if (!predicate(this.items[i], i)) break;\n result.push(this.items[i]);\n }\n return new List(result);\n }\n\n drop(n: number): List<T> {\n return this.slice(n);\n }\n\n dropLast(n: number): List<T> {\n return this.slice(0, -n);\n }\n\n dropWhile(predicate: (item: T, index: number) => boolean): List<T> {\n let startIndex = 0;\n for (let i = 0; i < this.items.length; i++) {\n if (!predicate(this.items[i], i)) break;\n startIndex = i + 1;\n }\n return this.slice(startIndex);\n }\n\n reverse(): List<T> {\n return new List([...this.items].reverse());\n }\n\n sort(compareFn?: (a: T, b: T) => number): List<T> {\n return new List([...this.items].sort(compareFn));\n }\n\n sortBy<U>(fn: (item: T) => U): List<T> {\n return this.sort((a, b) => {\n const va = fn(a);\n const vb = fn(b);\n if (va < vb) return -1;\n if (va > vb) return 1;\n return 0;\n });\n }\n\n shuffle(): List<T> {\n const arr = [...this.items];\n for (let i = arr.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [arr[i], arr[j]] = [arr[j], arr[i]];\n }\n return new List(arr);\n }\n\n unique(): List<T> {\n return new List([...new Set(this.items)]);\n }\n\n uniqueBy<U>(fn: (item: T) => U): List<T> {\n const seen = new Set<U>();\n const result: T[] = [];\n for (const item of this.items) {\n const key = fn(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n return new List(result);\n }\n\n groupBy<K>(fn: (item: T) => K): HoloMap<K, List<T>> {\n const groups = new Map<K, T[]>();\n for (const item of this.items) {\n const key = fn(item);\n const group = groups.get(key) || [];\n group.push(item);\n groups.set(key, group);\n }\n const result = new Map<K, List<T>>();\n for (const [key, items] of groups) {\n result.set(key, new List(items));\n }\n return new HoloMap(result);\n }\n\n partition(predicate: (item: T, index: number) => boolean): [List<T>, List<T>] {\n const pass: T[] = [];\n const fail: T[] = [];\n this.items.forEach((item, index) => {\n if (predicate(item, index)) {\n pass.push(item);\n } else {\n fail.push(item);\n }\n });\n return [new List(pass), new List(fail)];\n }\n\n zip<U>(other: List<U>): List<[T, U]> {\n const length = Math.min(this.length, other.length);\n const result: [T, U][] = [];\n for (let i = 0; i < length; i++) {\n result.push([this.items[i], other.get(i)!]);\n }\n return new List(result);\n }\n\n zipWith<U, V>(other: List<U>, fn: (a: T, b: U) => V): List<V> {\n return this.zip(other).map(([a, b]) => fn(a, b));\n }\n\n flatten<U>(this: List<List<U> | U[]>): List<U> {\n const result: U[] = [];\n for (const item of this.items) {\n if (item instanceof List) {\n result.push(...item.toArray());\n } else if (Array.isArray(item)) {\n result.push(...item);\n }\n }\n return new List(result);\n }\n\n sum(this: List<number>): number {\n return this.reduce((acc, n) => acc + n, 0);\n }\n\n min(this: List<number>): number | undefined {\n if (this.isEmpty) return undefined;\n return Math.min(...this.items);\n }\n\n max(this: List<number>): number | undefined {\n if (this.isEmpty) return undefined;\n return Math.max(...this.items);\n }\n\n average(this: List<number>): number | undefined {\n if (this.isEmpty) return undefined;\n return this.sum() / this.length;\n }\n\n join(separator = ','): string {\n return this.items.join(separator);\n }\n\n toArray(): T[] {\n return [...this.items];\n }\n\n toSet(): HoloSet<T> {\n return new HoloSet(this.items);\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.items[Symbol.iterator]();\n }\n\n toString(): string {\n return `List(${this.items.join(', ')})`;\n }\n}\n\n/**\n * Immutable Map with functional operations\n */\nexport class HoloMap<K, V> {\n private readonly _map: ReadonlyMap<K, V>;\n\n constructor(entries?: Iterable<[K, V]> | Map<K, V>) {\n this._map = entries instanceof Map ? entries : new Map(entries);\n }\n\n static of<K, V>(...entries: [K, V][]): HoloMap<K, V> {\n return new HoloMap(entries);\n }\n\n static from<K, V>(entries: Iterable<[K, V]>): HoloMap<K, V> {\n return new HoloMap(entries);\n }\n\n static fromObject<V>(obj: Record<string, V>): HoloMap<string, V> {\n return new HoloMap(Object.entries(obj));\n }\n\n get size(): number {\n return this._map.size;\n }\n\n get isEmpty(): boolean {\n return this._map.size === 0;\n }\n\n get(key: K): V | undefined {\n return this._map.get(key);\n }\n\n getOrDefault(key: K, defaultValue: V): V {\n return this._map.has(key) ? this._map.get(key)! : defaultValue;\n }\n\n has(key: K): boolean {\n return this._map.has(key);\n }\n\n set(key: K, value: V): HoloMap<K, V> {\n const newMap = new Map(this._map);\n newMap.set(key, value);\n return new HoloMap(newMap);\n }\n\n delete(key: K): HoloMap<K, V> {\n const newMap = new Map(this._map);\n newMap.delete(key);\n return new HoloMap(newMap);\n }\n\n update(key: K, fn: (value: V | undefined) => V): HoloMap<K, V> {\n return this.set(key, fn(this.get(key)));\n }\n\n merge(other: HoloMap<K, V>): HoloMap<K, V> {\n const newMap = new Map(this._map);\n for (const [key, value] of other) {\n newMap.set(key, value);\n }\n return new HoloMap(newMap);\n }\n\n keys(): List<K> {\n return new List(this._map.keys());\n }\n\n values(): List<V> {\n return new List(this._map.values());\n }\n\n entries(): List<[K, V]> {\n return new List(this._map.entries());\n }\n\n map<U>(fn: (value: V, key: K) => U): HoloMap<K, U> {\n const entries: [K, U][] = [];\n for (const [key, value] of this._map) {\n entries.push([key, fn(value, key)]);\n }\n return new HoloMap(entries);\n }\n\n mapKeys<K2>(fn: (key: K, value: V) => K2): HoloMap<K2, V> {\n const entries: [K2, V][] = [];\n for (const [key, value] of this._map) {\n entries.push([fn(key, value), value]);\n }\n return new HoloMap(entries);\n }\n\n filter(predicate: (value: V, key: K) => boolean): HoloMap<K, V> {\n const entries: [K, V][] = [];\n for (const [key, value] of this._map) {\n if (predicate(value, key)) {\n entries.push([key, value]);\n }\n }\n return new HoloMap(entries);\n }\n\n reduce<U>(fn: (acc: U, value: V, key: K) => U, initial: U): U {\n let acc = initial;\n for (const [key, value] of this._map) {\n acc = fn(acc, value, key);\n }\n return acc;\n }\n\n forEach(fn: (value: V, key: K) => void): void {\n this._map.forEach(fn);\n }\n\n find(predicate: (value: V, key: K) => boolean): [K, V] | undefined {\n for (const [key, value] of this._map) {\n if (predicate(value, key)) {\n return [key, value];\n }\n }\n return undefined;\n }\n\n some(predicate: (value: V, key: K) => boolean): boolean {\n for (const [key, value] of this._map) {\n if (predicate(value, key)) return true;\n }\n return false;\n }\n\n every(predicate: (value: V, key: K) => boolean): boolean {\n for (const [key, value] of this._map) {\n if (!predicate(value, key)) return false;\n }\n return true;\n }\n\n toObject(this: HoloMap<string, V>): Record<string, V> {\n const obj: Record<string, V> = {};\n for (const [key, value] of this._map) {\n obj[key] = value;\n }\n return obj;\n }\n\n toNativeMap(): Map<K, V> {\n return new Map(this._map);\n }\n\n [Symbol.iterator](): Iterator<[K, V]> {\n return this._map[Symbol.iterator]();\n }\n\n toString(): string {\n const entries = [...this._map].map(([k, v]) => `${k}: ${v}`).join(', ');\n return `HoloMap { ${entries} }`;\n }\n}\n\n/**\n * Immutable Set with functional operations\n */\nexport class HoloSet<T> {\n private readonly set: ReadonlySet<T>;\n\n constructor(items?: Iterable<T>) {\n this.set = new Set(items);\n }\n\n static of<T>(...items: T[]): HoloSet<T> {\n return new HoloSet(items);\n }\n\n static from<T>(iterable: Iterable<T>): HoloSet<T> {\n return new HoloSet(iterable);\n }\n\n get size(): number {\n return this.set.size;\n }\n\n get isEmpty(): boolean {\n return this.set.size === 0;\n }\n\n has(item: T): boolean {\n return this.set.has(item);\n }\n\n add(item: T): HoloSet<T> {\n const newSet = new Set(this.set);\n newSet.add(item);\n return new HoloSet(newSet);\n }\n\n delete(item: T): HoloSet<T> {\n const newSet = new Set(this.set);\n newSet.delete(item);\n return new HoloSet(newSet);\n }\n\n addAll(items: Iterable<T>): HoloSet<T> {\n const newSet = new Set(this.set);\n for (const item of items) {\n newSet.add(item);\n }\n return new HoloSet(newSet);\n }\n\n union(other: HoloSet<T>): HoloSet<T> {\n return this.addAll(other);\n }\n\n intersection(other: HoloSet<T>): HoloSet<T> {\n const result = new Set<T>();\n for (const item of this.set) {\n if (other.has(item)) {\n result.add(item);\n }\n }\n return new HoloSet(result);\n }\n\n difference(other: HoloSet<T>): HoloSet<T> {\n const result = new Set<T>();\n for (const item of this.set) {\n if (!other.has(item)) {\n result.add(item);\n }\n }\n return new HoloSet(result);\n }\n\n symmetricDifference(other: HoloSet<T>): HoloSet<T> {\n return this.difference(other).union(other.difference(this));\n }\n\n isSubsetOf(other: HoloSet<T>): boolean {\n for (const item of this.set) {\n if (!other.has(item)) return false;\n }\n return true;\n }\n\n isSupersetOf(other: HoloSet<T>): boolean {\n return other.isSubsetOf(this);\n }\n\n isDisjointFrom(other: HoloSet<T>): boolean {\n return this.intersection(other).isEmpty;\n }\n\n map<U>(fn: (item: T) => U): HoloSet<U> {\n const result = new Set<U>();\n for (const item of this.set) {\n result.add(fn(item));\n }\n return new HoloSet(result);\n }\n\n filter(predicate: (item: T) => boolean): HoloSet<T> {\n const result = new Set<T>();\n for (const item of this.set) {\n if (predicate(item)) {\n result.add(item);\n }\n }\n return new HoloSet(result);\n }\n\n reduce<U>(fn: (acc: U, item: T) => U, initial: U): U {\n let acc = initial;\n for (const item of this.set) {\n acc = fn(acc, item);\n }\n return acc;\n }\n\n forEach(fn: (item: T) => void): void {\n this.set.forEach(fn);\n }\n\n find(predicate: (item: T) => boolean): T | undefined {\n for (const item of this.set) {\n if (predicate(item)) return item;\n }\n return undefined;\n }\n\n some(predicate: (item: T) => boolean): boolean {\n for (const item of this.set) {\n if (predicate(item)) return true;\n }\n return false;\n }\n\n every(predicate: (item: T) => boolean): boolean {\n for (const item of this.set) {\n if (!predicate(item)) return false;\n }\n return true;\n }\n\n toArray(): T[] {\n return [...this.set];\n }\n\n toList(): List<T> {\n return new List(this.set);\n }\n\n toNativeSet(): Set<T> {\n return new Set(this.set);\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.set[Symbol.iterator]();\n }\n\n toString(): string {\n return `HoloSet { ${[...this.set].join(', ')} }`;\n }\n}\n\n/**\n * Spatial grid for efficient spatial queries (useful for game worlds)\n */\nexport class SpatialGrid<T> {\n private readonly cellSize: number;\n private readonly cells: Map<string, T[]> = new Map();\n\n constructor(cellSize: number) {\n this.cellSize = cellSize;\n }\n\n private getCellKey(x: number, y: number, z: number): string {\n const cx = Math.floor(x / this.cellSize);\n const cy = Math.floor(y / this.cellSize);\n const cz = Math.floor(z / this.cellSize);\n return `${cx},${cy},${cz}`;\n }\n\n insert(position: Vec3, item: T): void {\n const key = this.getCellKey(position.x, position.y, position.z);\n if (!this.cells.has(key)) {\n this.cells.set(key, []);\n }\n this.cells.get(key)!.push(item);\n }\n\n remove(position: Vec3, item: T): boolean {\n const key = this.getCellKey(position.x, position.y, position.z);\n const cell = this.cells.get(key);\n if (!cell) return false;\n const index = cell.indexOf(item);\n if (index === -1) return false;\n cell.splice(index, 1);\n if (cell.length === 0) {\n this.cells.delete(key);\n }\n return true;\n }\n\n query(center: Vec3, radius: number): T[] {\n const results: T[] = [];\n const cellRadius = Math.ceil(radius / this.cellSize);\n const cx = Math.floor(center.x / this.cellSize);\n const cy = Math.floor(center.y / this.cellSize);\n const cz = Math.floor(center.z / this.cellSize);\n\n for (let x = cx - cellRadius; x <= cx + cellRadius; x++) {\n for (let y = cy - cellRadius; y <= cy + cellRadius; y++) {\n for (let z = cz - cellRadius; z <= cz + cellRadius; z++) {\n const cell = this.cells.get(`${x},${y},${z}`);\n if (cell) {\n results.push(...cell);\n }\n }\n }\n }\n\n return results;\n }\n\n queryBox(min: Vec3, max: Vec3): T[] {\n const results: T[] = [];\n const minCx = Math.floor(min.x / this.cellSize);\n const minCy = Math.floor(min.y / this.cellSize);\n const minCz = Math.floor(min.z / this.cellSize);\n const maxCx = Math.floor(max.x / this.cellSize);\n const maxCy = Math.floor(max.y / this.cellSize);\n const maxCz = Math.floor(max.z / this.cellSize);\n\n for (let x = minCx; x <= maxCx; x++) {\n for (let y = minCy; y <= maxCy; y++) {\n for (let z = minCz; z <= maxCz; z++) {\n const cell = this.cells.get(`${x},${y},${z}`);\n if (cell) {\n results.push(...cell);\n }\n }\n }\n }\n\n return results;\n }\n\n clear(): void {\n this.cells.clear();\n }\n\n get cellCount(): number {\n return this.cells.size;\n }\n\n get itemCount(): number {\n let count = 0;\n for (const cell of this.cells.values()) {\n count += cell.length;\n }\n return count;\n }\n}\n\n/**\n * Priority queue (min-heap by default)\n */\nexport class PriorityQueue<T> {\n private heap: { item: T; priority: number }[] = [];\n\n constructor(private compareFn: (a: number, b: number) => number = (a, b) => a - b) {}\n\n static minHeap<T>(): PriorityQueue<T> {\n return new PriorityQueue((a, b) => a - b);\n }\n\n static maxHeap<T>(): PriorityQueue<T> {\n return new PriorityQueue((a, b) => b - a);\n }\n\n get size(): number {\n return this.heap.length;\n }\n\n get isEmpty(): boolean {\n return this.heap.length === 0;\n }\n\n enqueue(item: T, priority: number): void {\n this.heap.push({ item, priority });\n this.bubbleUp(this.heap.length - 1);\n }\n\n dequeue(): T | undefined {\n if (this.isEmpty) return undefined;\n const result = this.heap[0].item;\n const last = this.heap.pop()!;\n if (this.heap.length > 0) {\n this.heap[0] = last;\n this.bubbleDown(0);\n }\n return result;\n }\n\n peek(): T | undefined {\n return this.heap[0]?.item;\n }\n\n peekPriority(): number | undefined {\n return this.heap[0]?.priority;\n }\n\n clear(): void {\n this.heap = [];\n }\n\n private bubbleUp(index: number): void {\n while (index > 0) {\n const parentIndex = Math.floor((index - 1) / 2);\n if (this.compareFn(this.heap[index].priority, this.heap[parentIndex].priority) >= 0) break;\n [this.heap[index], this.heap[parentIndex]] = [this.heap[parentIndex], this.heap[index]];\n index = parentIndex;\n }\n }\n\n private bubbleDown(index: number): void {\n while (true) {\n const leftChild = 2 * index + 1;\n const rightChild = 2 * index + 2;\n let smallest = index;\n\n if (\n leftChild < this.heap.length &&\n this.compareFn(this.heap[leftChild].priority, this.heap[smallest].priority) < 0\n ) {\n smallest = leftChild;\n }\n if (\n rightChild < this.heap.length &&\n this.compareFn(this.heap[rightChild].priority, this.heap[smallest].priority) < 0\n ) {\n smallest = rightChild;\n }\n\n if (smallest === index) break;\n [this.heap[index], this.heap[smallest]] = [this.heap[smallest], this.heap[index]];\n index = smallest;\n }\n }\n}\n\n// Convenience aliases\nexport { HoloMap as Map };\nexport { HoloSet as Set };\n"],"mappings":"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","names":[]}
@@ -1,9 +1,41 @@
1
1
  // src/types.ts
2
2
  function vec2(x = 0, y = 0) {
3
- return { x, y };
3
+ const v = [x, y];
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
+ });
16
+ return v;
4
17
  }
5
18
  function vec3(x = 0, y = 0, z = 0) {
6
- return { x, y, z };
19
+ const v = [x, y, z];
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
+ });
38
+ return v;
7
39
  }
8
40
  function vec4(x = 0, y = 0, z = 0, w = 0) {
9
41
  return { x, y, z, w };
@@ -33,7 +65,7 @@ function vec3ToArray(v) {
33
65
  return [v.x, v.y, v.z];
34
66
  }
35
67
  function arrayToVec3(arr) {
36
- return { x: arr[0] || 0, y: arr[1] || 0, z: arr[2] || 0 };
68
+ return vec3(arr[0] || 0, arr[1] || 0, arr[2] || 0);
37
69
  }
38
70
  function quatToArray(q) {
39
71
  return [q.x, q.y, q.z, q.w];
@@ -208,7 +240,7 @@ var vec3Math = {
208
240
  back: () => vec3(0, 0, 1),
209
241
  left: () => vec3(-1, 0, 0),
210
242
  right: () => vec3(1, 0, 0),
211
- add: (a, b) => ({ x: a.x + b.x, y: a.y + b.y, z: a.z + b.z }),
243
+ add: (a, b) => vec3(a.x + b.x, a.y + b.y, a.z + b.z),
212
244
  sub: (a, b) => ({ x: a.x - b.x, y: a.y - b.y, z: a.z - b.z }),
213
245
  mul: (a, s) => ({ x: a.x * s, y: a.y * s, z: a.z * s }),
214
246
  div: (a, s) => ({ x: a.x / s, y: a.y / s, z: a.z / s }),
@@ -676,4 +708,4 @@ export {
676
708
  noise,
677
709
  random
678
710
  };
679
- //# sourceMappingURL=chunk-7HVUYGPS.js.map
711
+ //# sourceMappingURL=chunk-SOKH6FJ7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types.ts","../src/math.ts"],"sourcesContent":["/**\n * Core Types for HoloScript\n *\n * Fundamental spatial and graphical types used throughout the language.\n */\n\n// =============================================================================\n// VECTOR TYPES\n// =============================================================================\n\n/**\n * 2D Vector\n */\nexport interface Vec2 {\n x: number;\n y: number;\n}\n\n/**\n * 3D Vector - The fundamental spatial type\n */\nexport interface Vec3 {\n x: number;\n y: number;\n z: number;\n}\n\n/**\n * 4D Vector\n */\nexport interface Vec4 {\n x: number;\n y: number;\n z: number;\n w: number;\n}\n\n// Array representations\nexport type Vec2Array = [number, number];\nexport type Vec3Array = [number, number, number];\nexport type Vec4Array = [number, number, number, number];\n\n// =============================================================================\n// QUATERNION\n// =============================================================================\n\n/**\n * Quaternion for rotation representation\n */\nexport interface Quat {\n x: number;\n y: number;\n z: number;\n w: number;\n}\n\nexport type QuatArray = [number, number, number, number];\n\n// =============================================================================\n// TRANSFORM\n// =============================================================================\n\n/**\n * Complete 3D transform\n */\nexport interface Transform {\n position: Vec3;\n rotation: Quat;\n scale: Vec3;\n}\n\n/**\n * Euler angles (in degrees)\n */\nexport interface EulerAngles {\n x: number; // pitch\n y: number; // yaw\n z: number; // roll\n}\n\n// =============================================================================\n// COLOR\n// =============================================================================\n\n/**\n * RGB Color (0-1 range)\n */\nexport interface ColorRGB {\n r: number;\n g: number;\n b: number;\n}\n\n/**\n * RGBA Color (0-1 range)\n */\nexport interface ColorRGBA extends ColorRGB {\n a: number;\n}\n\n/**\n * HSL Color\n */\nexport interface ColorHSL {\n h: number; // 0-360\n s: number; // 0-1\n l: number; // 0-1\n}\n\n/**\n * Color can be represented multiple ways\n */\nexport type Color = string | ColorRGB | ColorRGBA | ColorHSL | number;\n\n// =============================================================================\n// BOUNDS\n// =============================================================================\n\n/**\n * Axis-Aligned Bounding Box\n */\nexport interface AABB {\n min: Vec3;\n max: Vec3;\n}\n\n/**\n * Bounding Sphere\n */\nexport interface BoundingSphere {\n center: Vec3;\n radius: number;\n}\n\n// =============================================================================\n// RAY\n// =============================================================================\n\n/**\n * Ray for raycasting\n */\nexport interface Ray {\n origin: Vec3;\n direction: Vec3;\n}\n\n/**\n * Raycast hit result\n */\nexport interface RaycastHit {\n point: Vec3;\n normal: Vec3;\n distance: number;\n objectId?: string;\n}\n\n// =============================================================================\n// UTILITY TYPES\n// =============================================================================\n\n/**\n * Nullable type helper\n */\nexport type Nullable<T> = T | null;\n\n/**\n * Optional type helper\n */\nexport type Optional<T> = T | undefined;\n\n/**\n * Deep partial type\n */\nexport type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n};\n\n// =============================================================================\n// FACTORY FUNCTIONS\n// =============================================================================\n\n/**\n * Create a Vec2\n */\nexport function vec2(x: number = 0, y: number = 0): Vec2 {\n const v = [x, y] as unknown as Vec2;\n Object.defineProperty(v, 'x', {\n value: x,\n writable: true,\n enumerable: false,\n configurable: true,\n });\n Object.defineProperty(v, 'y', {\n value: y,\n writable: true,\n enumerable: false,\n configurable: true,\n });\n return v;\n}\n\n/**\n * Create a Vec3\n */\nexport function vec3(x: number = 0, y: number = 0, z: number = 0): Vec3 {\n const v = [x, y, z] as unknown as Vec3;\n Object.defineProperty(v, 'x', {\n value: x,\n writable: true,\n enumerable: false,\n configurable: true,\n });\n Object.defineProperty(v, 'y', {\n value: y,\n writable: true,\n enumerable: false,\n configurable: true,\n });\n Object.defineProperty(v, 'z', {\n value: z,\n writable: true,\n enumerable: false,\n configurable: true,\n });\n return v;\n}\n\n/**\n * Create a Vec4\n */\nexport function vec4(x: number = 0, y: number = 0, z: number = 0, w: number = 0): Vec4 {\n return { x, y, z, w };\n}\n\n/**\n * Create a Quaternion (identity by default)\n */\nexport function quat(x: number = 0, y: number = 0, z: number = 0, w: number = 1): Quat {\n return { x, y, z, w };\n}\n\n/**\n * Create a Transform\n */\nexport function transform(\n position: Vec3 = vec3(),\n rotation: Quat = quat(),\n scale: Vec3 = vec3(1, 1, 1)\n): Transform {\n return { position, rotation, scale };\n}\n\n/**\n * Create an RGB color\n */\nexport function rgb(r: number, g: number, b: number): ColorRGB {\n return { r, g, b };\n}\n\n/**\n * Create an RGBA color\n */\nexport function rgba(r: number, g: number, b: number, a: number = 1): ColorRGBA {\n return { r, g, b, a };\n}\n\n/**\n * Create an HSL color\n */\nexport function hsl(h: number, s: number, l: number): ColorHSL {\n return { h, s, l };\n}\n\n/**\n * Create an AABB\n */\nexport function aabb(min: Vec3 = vec3(), max: Vec3 = vec3()): AABB {\n return { min, max };\n}\n\n/**\n * Create a Ray\n */\nexport function ray(origin: Vec3, direction: Vec3): Ray {\n return { origin, direction };\n}\n\n// =============================================================================\n// CONVERSION UTILITIES\n// =============================================================================\n\n/**\n * Convert Vec3 to array\n */\nexport function vec3ToArray(v: Vec3): Vec3Array {\n return [v.x, v.y, v.z];\n}\n\n/**\n * Convert array to Vec3\n */\nexport function arrayToVec3(arr: Vec3Array | number[]): Vec3 {\n return vec3(arr[0] || 0, arr[1] || 0, arr[2] || 0);\n}\n\n/**\n * Convert Quat to array\n */\nexport function quatToArray(q: Quat): QuatArray {\n return [q.x, q.y, q.z, q.w];\n}\n\n/**\n * Convert array to Quat\n */\nexport function arrayToQuat(arr: QuatArray | number[]): Quat {\n return { x: arr[0] || 0, y: arr[1] || 0, z: arr[2] || 0, w: arr[3] ?? 1 };\n}\n\n/**\n * Parse color from various formats\n */\nexport function parseColor(color: Color): ColorRGBA {\n if (typeof color === 'string') {\n // Hex color\n if (color.startsWith('#')) {\n const hex = color.slice(1);\n if (hex.length === 3) {\n return {\n r: parseInt(hex[0] + hex[0], 16) / 255,\n g: parseInt(hex[1] + hex[1], 16) / 255,\n b: parseInt(hex[2] + hex[2], 16) / 255,\n a: 1,\n };\n } else if (hex.length === 6) {\n return {\n r: parseInt(hex.slice(0, 2), 16) / 255,\n g: parseInt(hex.slice(2, 4), 16) / 255,\n b: parseInt(hex.slice(4, 6), 16) / 255,\n a: 1,\n };\n } else if (hex.length === 8) {\n return {\n r: parseInt(hex.slice(0, 2), 16) / 255,\n g: parseInt(hex.slice(2, 4), 16) / 255,\n b: parseInt(hex.slice(4, 6), 16) / 255,\n a: parseInt(hex.slice(6, 8), 16) / 255,\n };\n }\n }\n // Named colors (basic support)\n const namedColors: Record<string, ColorRGBA> = {\n white: { r: 1, g: 1, b: 1, a: 1 },\n black: { r: 0, g: 0, b: 0, a: 1 },\n red: { r: 1, g: 0, b: 0, a: 1 },\n green: { r: 0, g: 1, b: 0, a: 1 },\n blue: { r: 0, g: 0, b: 1, a: 1 },\n yellow: { r: 1, g: 1, b: 0, a: 1 },\n cyan: { r: 0, g: 1, b: 1, a: 1 },\n magenta: { r: 1, g: 0, b: 1, a: 1 },\n };\n return namedColors[color.toLowerCase()] || { r: 1, g: 1, b: 1, a: 1 };\n }\n\n if (typeof color === 'number') {\n // Integer color (0xRRGGBB)\n return {\n r: ((color >> 16) & 0xff) / 255,\n g: ((color >> 8) & 0xff) / 255,\n b: (color & 0xff) / 255,\n a: 1,\n };\n }\n\n if ('h' in color) {\n // HSL to RGB conversion\n const { h, s, l } = color;\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\n const m = l - c / 2;\n let r = 0,\n g = 0,\n b = 0;\n\n if (h < 60) {\n r = c;\n g = x;\n } else if (h < 120) {\n r = x;\n g = c;\n } else if (h < 180) {\n g = c;\n b = x;\n } else if (h < 240) {\n g = x;\n b = c;\n } else if (h < 300) {\n r = x;\n b = c;\n } else {\n r = c;\n b = x;\n }\n\n return { r: r + m, g: g + m, b: b + m, a: 1 };\n }\n\n if ('a' in color) {\n return color;\n }\n\n return { ...color, a: 1 };\n}\n\n/**\n * Color to hex string\n */\nexport function colorToHex(color: ColorRGB | ColorRGBA): string {\n const r = Math.round(color.r * 255)\n .toString(16)\n .padStart(2, '0');\n const g = Math.round(color.g * 255)\n .toString(16)\n .padStart(2, '0');\n const b = Math.round(color.b * 255)\n .toString(16)\n .padStart(2, '0');\n return `#${r}${g}${b}`;\n}\n\n// =============================================================================\n// TRAIT DEFINITIONS\n// =============================================================================\n\nexport interface TraitDefinition {\n name: string;\n description?: string;\n type?: string;\n params?: Record<string, any>;\n parameters?: Record<string, any>;\n validator?: (params: Record<string, any>) => boolean;\n validation?: any;\n}\n","/**\n * Math utilities for HoloScript\n *\n * Vector math, quaternion operations, interpolation, and noise functions.\n */\n\nimport type { Vec2, Vec3, Quat, EulerAngles, AABB } from './types.js';\nimport { vec3, quat } from './types.js';\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\nexport const PI = Math.PI;\nexport const TAU = Math.PI * 2;\nexport const HALF_PI = Math.PI / 2;\nexport const DEG_TO_RAD = Math.PI / 180;\nexport const RAD_TO_DEG = 180 / Math.PI;\nexport const EPSILON = 1e-6;\n\n// =============================================================================\n// BASIC MATH\n// =============================================================================\n\nexport function clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value));\n}\n\nexport function lerp(a: number, b: number, t: number): number {\n return a + (b - a) * t;\n}\n\nexport function inverseLerp(a: number, b: number, value: number): number {\n return (value - a) / (b - a);\n}\n\nexport function remap(\n value: number,\n inMin: number,\n inMax: number,\n outMin: number,\n outMax: number\n): number {\n return lerp(outMin, outMax, inverseLerp(inMin, inMax, value));\n}\n\nexport function smoothstep(edge0: number, edge1: number, x: number): number {\n const t = clamp((x - edge0) / (edge1 - edge0), 0, 1);\n return t * t * (3 - 2 * t);\n}\n\nexport function smootherstep(edge0: number, edge1: number, x: number): number {\n const t = clamp((x - edge0) / (edge1 - edge0), 0, 1);\n return t * t * t * (t * (t * 6 - 15) + 10);\n}\n\nexport function degToRad(degrees: number): number {\n return degrees * DEG_TO_RAD;\n}\n\nexport function radToDeg(radians: number): number {\n return radians * RAD_TO_DEG;\n}\n\nexport function mod(n: number, m: number): number {\n return ((n % m) + m) % m;\n}\n\nexport function fract(x: number): number {\n return x - Math.floor(x);\n}\n\nexport function sign(x: number): number {\n return x > 0 ? 1 : x < 0 ? -1 : 0;\n}\n\nexport function step(edge: number, x: number): number {\n return x < edge ? 0 : 1;\n}\n\n// =============================================================================\n// VEC2 OPERATIONS\n// =============================================================================\n\nexport const vec2Math = {\n add: (a: Vec2, b: Vec2): Vec2 => ({ x: a.x + b.x, y: a.y + b.y }),\n sub: (a: Vec2, b: Vec2): Vec2 => ({ x: a.x - b.x, y: a.y - b.y }),\n mul: (a: Vec2, s: number): Vec2 => ({ x: a.x * s, y: a.y * s }),\n div: (a: Vec2, s: number): Vec2 => ({ x: a.x / s, y: a.y / s }),\n dot: (a: Vec2, b: Vec2): number => a.x * b.x + a.y * b.y,\n length: (v: Vec2): number => Math.sqrt(v.x * v.x + v.y * v.y),\n lengthSq: (v: Vec2): number => v.x * v.x + v.y * v.y,\n normalize: (v: Vec2): Vec2 => {\n const len = vec2Math.length(v);\n return len > 0 ? vec2Math.div(v, len) : { x: 0, y: 0 };\n },\n distance: (a: Vec2, b: Vec2): number => vec2Math.length(vec2Math.sub(a, b)),\n lerp: (a: Vec2, b: Vec2, t: number): Vec2 => ({\n x: lerp(a.x, b.x, t),\n y: lerp(a.y, b.y, t),\n }),\n rotate: (v: Vec2, angle: number): Vec2 => {\n const c = Math.cos(angle);\n const s = Math.sin(angle);\n return { x: v.x * c - v.y * s, y: v.x * s + v.y * c };\n },\n angle: (v: Vec2): number => Math.atan2(v.y, v.x),\n angleBetween: (a: Vec2, b: Vec2): number => {\n return Math.acos(clamp(vec2Math.dot(vec2Math.normalize(a), vec2Math.normalize(b)), -1, 1));\n },\n};\n\n// =============================================================================\n// VEC3 OPERATIONS\n// =============================================================================\n\nexport const vec3Math = {\n zero: (): Vec3 => vec3(0, 0, 0),\n one: (): Vec3 => vec3(1, 1, 1),\n up: (): Vec3 => vec3(0, 1, 0),\n down: (): Vec3 => vec3(0, -1, 0),\n forward: (): Vec3 => vec3(0, 0, -1),\n back: (): Vec3 => vec3(0, 0, 1),\n left: (): Vec3 => vec3(-1, 0, 0),\n right: (): Vec3 => vec3(1, 0, 0),\n\n add: (a: Vec3, b: Vec3): Vec3 => vec3(a.x + b.x, a.y + b.y, a.z + b.z),\n sub: (a: Vec3, b: Vec3): Vec3 => ({ x: a.x - b.x, y: a.y - b.y, z: a.z - b.z }),\n mul: (a: Vec3, s: number): Vec3 => ({ x: a.x * s, y: a.y * s, z: a.z * s }),\n div: (a: Vec3, s: number): Vec3 => ({ x: a.x / s, y: a.y / s, z: a.z / s }),\n mulVec: (a: Vec3, b: Vec3): Vec3 => ({ x: a.x * b.x, y: a.y * b.y, z: a.z * b.z }),\n\n dot: (a: Vec3, b: Vec3): number => a.x * b.x + a.y * b.y + a.z * b.z,\n\n cross: (a: Vec3, b: Vec3): Vec3 => ({\n x: a.y * b.z - a.z * b.y,\n y: a.z * b.x - a.x * b.z,\n z: a.x * b.y - a.y * b.x,\n }),\n\n length: (v: Vec3): number => Math.sqrt(v.x * v.x + v.y * v.y + v.z * v.z),\n lengthSq: (v: Vec3): number => v.x * v.x + v.y * v.y + v.z * v.z,\n\n normalize: (v: Vec3): Vec3 => {\n const len = vec3Math.length(v);\n return len > EPSILON ? vec3Math.div(v, len) : vec3(0, 0, 0);\n },\n\n distance: (a: Vec3, b: Vec3): number => vec3Math.length(vec3Math.sub(a, b)),\n distanceSq: (a: Vec3, b: Vec3): number => vec3Math.lengthSq(vec3Math.sub(a, b)),\n\n lerp: (a: Vec3, b: Vec3, t: number): Vec3 => ({\n x: lerp(a.x, b.x, t),\n y: lerp(a.y, b.y, t),\n z: lerp(a.z, b.z, t),\n }),\n\n slerp: (a: Vec3, b: Vec3, t: number): Vec3 => {\n const dot = clamp(vec3Math.dot(a, b), -1, 1);\n const theta = Math.acos(dot) * t;\n const relative = vec3Math.normalize(vec3Math.sub(b, vec3Math.mul(a, dot)));\n return vec3Math.add(vec3Math.mul(a, Math.cos(theta)), vec3Math.mul(relative, Math.sin(theta)));\n },\n\n negate: (v: Vec3): Vec3 => ({ x: -v.x, y: -v.y, z: -v.z }),\n\n abs: (v: Vec3): Vec3 => ({ x: Math.abs(v.x), y: Math.abs(v.y), z: Math.abs(v.z) }),\n\n min: (a: Vec3, b: Vec3): Vec3 => ({\n x: Math.min(a.x, b.x),\n y: Math.min(a.y, b.y),\n z: Math.min(a.z, b.z),\n }),\n\n max: (a: Vec3, b: Vec3): Vec3 => ({\n x: Math.max(a.x, b.x),\n y: Math.max(a.y, b.y),\n z: Math.max(a.z, b.z),\n }),\n\n clamp: (v: Vec3, min: Vec3, max: Vec3): Vec3 => ({\n x: clamp(v.x, min.x, max.x),\n y: clamp(v.y, min.y, max.y),\n z: clamp(v.z, min.z, max.z),\n }),\n\n floor: (v: Vec3): Vec3 => ({\n x: Math.floor(v.x),\n y: Math.floor(v.y),\n z: Math.floor(v.z),\n }),\n\n ceil: (v: Vec3): Vec3 => ({\n x: Math.ceil(v.x),\n y: Math.ceil(v.y),\n z: Math.ceil(v.z),\n }),\n\n round: (v: Vec3): Vec3 => ({\n x: Math.round(v.x),\n y: Math.round(v.y),\n z: Math.round(v.z),\n }),\n\n reflect: (v: Vec3, normal: Vec3): Vec3 => {\n const dot = vec3Math.dot(v, normal);\n return vec3Math.sub(v, vec3Math.mul(normal, 2 * dot));\n },\n\n project: (v: Vec3, onto: Vec3): Vec3 => {\n const dot = vec3Math.dot(v, onto);\n const lenSq = vec3Math.lengthSq(onto);\n return vec3Math.mul(onto, dot / lenSq);\n },\n\n angle: (a: Vec3, b: Vec3): number => {\n const dot = vec3Math.dot(vec3Math.normalize(a), vec3Math.normalize(b));\n return Math.acos(clamp(dot, -1, 1));\n },\n\n equals: (a: Vec3, b: Vec3, epsilon: number = EPSILON): boolean => {\n return (\n Math.abs(a.x - b.x) < epsilon &&\n Math.abs(a.y - b.y) < epsilon &&\n Math.abs(a.z - b.z) < epsilon\n );\n },\n};\n\n// =============================================================================\n// QUATERNION OPERATIONS\n// =============================================================================\n\nexport const quatMath = {\n identity: (): Quat => quat(0, 0, 0, 1),\n\n fromAxisAngle: (axis: Vec3, angle: number): Quat => {\n const halfAngle = angle / 2;\n const s = Math.sin(halfAngle);\n const normalized = vec3Math.normalize(axis);\n return {\n x: normalized.x * s,\n y: normalized.y * s,\n z: normalized.z * s,\n w: Math.cos(halfAngle),\n };\n },\n\n fromEuler: (euler: EulerAngles): Quat => {\n const { x, y, z } = euler;\n const c1 = Math.cos(degToRad(x) / 2);\n const c2 = Math.cos(degToRad(y) / 2);\n const c3 = Math.cos(degToRad(z) / 2);\n const s1 = Math.sin(degToRad(x) / 2);\n const s2 = Math.sin(degToRad(y) / 2);\n const s3 = Math.sin(degToRad(z) / 2);\n\n return {\n x: s1 * c2 * c3 + c1 * s2 * s3,\n y: c1 * s2 * c3 - s1 * c2 * s3,\n z: c1 * c2 * s3 + s1 * s2 * c3,\n w: c1 * c2 * c3 - s1 * s2 * s3,\n };\n },\n\n toEuler: (q: Quat): EulerAngles => {\n const sinr_cosp = 2 * (q.w * q.x + q.y * q.z);\n const cosr_cosp = 1 - 2 * (q.x * q.x + q.y * q.y);\n const x = Math.atan2(sinr_cosp, cosr_cosp);\n\n const sinp = 2 * (q.w * q.y - q.z * q.x);\n let y: number;\n if (Math.abs(sinp) >= 1) {\n y = (Math.PI / 2) * Math.sign(sinp);\n } else {\n y = Math.asin(sinp);\n }\n\n const siny_cosp = 2 * (q.w * q.z + q.x * q.y);\n const cosy_cosp = 1 - 2 * (q.y * q.y + q.z * q.z);\n const z = Math.atan2(siny_cosp, cosy_cosp);\n\n return {\n x: radToDeg(x),\n y: radToDeg(y),\n z: radToDeg(z),\n };\n },\n\n multiply: (a: Quat, b: Quat): Quat => ({\n x: a.w * b.x + a.x * b.w + a.y * b.z - a.z * b.y,\n y: a.w * b.y - a.x * b.z + a.y * b.w + a.z * b.x,\n z: a.w * b.z + a.x * b.y - a.y * b.x + a.z * b.w,\n w: a.w * b.w - a.x * b.x - a.y * b.y - a.z * b.z,\n }),\n\n conjugate: (q: Quat): Quat => ({ x: -q.x, y: -q.y, z: -q.z, w: q.w }),\n\n inverse: (q: Quat): Quat => {\n const lenSq = q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w;\n return {\n x: -q.x / lenSq,\n y: -q.y / lenSq,\n z: -q.z / lenSq,\n w: q.w / lenSq,\n };\n },\n\n normalize: (q: Quat): Quat => {\n const len = Math.sqrt(q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w);\n return { x: q.x / len, y: q.y / len, z: q.z / len, w: q.w / len };\n },\n\n dot: (a: Quat, b: Quat): number => a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w,\n\n slerp: (a: Quat, b: Quat, t: number): Quat => {\n let dot = quatMath.dot(a, b);\n\n // If dot is negative, negate one quaternion to take shorter path\n let bAdjusted = b;\n if (dot < 0) {\n bAdjusted = { x: -b.x, y: -b.y, z: -b.z, w: -b.w };\n dot = -dot;\n }\n\n if (dot > 0.9995) {\n // Linear interpolation for very close quaternions\n return quatMath.normalize({\n x: lerp(a.x, bAdjusted.x, t),\n y: lerp(a.y, bAdjusted.y, t),\n z: lerp(a.z, bAdjusted.z, t),\n w: lerp(a.w, bAdjusted.w, t),\n });\n }\n\n const theta0 = Math.acos(dot);\n const theta = theta0 * t;\n const sinTheta = Math.sin(theta);\n const sinTheta0 = Math.sin(theta0);\n\n const s0 = Math.cos(theta) - (dot * sinTheta) / sinTheta0;\n const s1 = sinTheta / sinTheta0;\n\n return {\n x: a.x * s0 + bAdjusted.x * s1,\n y: a.y * s0 + bAdjusted.y * s1,\n z: a.z * s0 + bAdjusted.z * s1,\n w: a.w * s0 + bAdjusted.w * s1,\n };\n },\n\n rotateVec3: (q: Quat, v: Vec3): Vec3 => {\n const qv = { x: q.x, y: q.y, z: q.z };\n const uv = vec3Math.cross(qv, v);\n const uuv = vec3Math.cross(qv, uv);\n return vec3Math.add(v, vec3Math.add(vec3Math.mul(uv, 2 * q.w), vec3Math.mul(uuv, 2)));\n },\n\n lookAt: (forward: Vec3, up: Vec3 = vec3(0, 1, 0)): Quat => {\n const f = vec3Math.normalize(forward);\n const r = vec3Math.normalize(vec3Math.cross(up, f));\n const u = vec3Math.cross(f, r);\n\n const trace = r.x + u.y + f.z;\n let q: Quat;\n\n if (trace > 0) {\n const s = 0.5 / Math.sqrt(trace + 1);\n q = {\n w: 0.25 / s,\n x: (u.z - f.y) * s,\n y: (f.x - r.z) * s,\n z: (r.y - u.x) * s,\n };\n } else if (r.x > u.y && r.x > f.z) {\n const s = 2 * Math.sqrt(1 + r.x - u.y - f.z);\n q = {\n w: (u.z - f.y) / s,\n x: 0.25 * s,\n y: (u.x + r.y) / s,\n z: (f.x + r.z) / s,\n };\n } else if (u.y > f.z) {\n const s = 2 * Math.sqrt(1 + u.y - r.x - f.z);\n q = {\n w: (f.x - r.z) / s,\n x: (u.x + r.y) / s,\n y: 0.25 * s,\n z: (f.y + u.z) / s,\n };\n } else {\n const s = 2 * Math.sqrt(1 + f.z - r.x - u.y);\n q = {\n w: (r.y - u.x) / s,\n x: (f.x + r.z) / s,\n y: (f.y + u.z) / s,\n z: 0.25 * s,\n };\n }\n\n return quatMath.normalize(q);\n },\n};\n\n// =============================================================================\n// AABB OPERATIONS\n// =============================================================================\n\nexport const aabbMath = {\n contains: (aabb: AABB, point: Vec3): boolean => {\n return (\n point.x >= aabb.min.x &&\n point.x <= aabb.max.x &&\n point.y >= aabb.min.y &&\n point.y <= aabb.max.y &&\n point.z >= aabb.min.z &&\n point.z <= aabb.max.z\n );\n },\n\n intersects: (a: AABB, b: AABB): boolean => {\n return (\n a.min.x <= b.max.x &&\n a.max.x >= b.min.x &&\n a.min.y <= b.max.y &&\n a.max.y >= b.min.y &&\n a.min.z <= b.max.z &&\n a.max.z >= b.min.z\n );\n },\n\n center: (aabb: AABB): Vec3 => vec3Math.mul(vec3Math.add(aabb.min, aabb.max), 0.5),\n\n size: (aabb: AABB): Vec3 => vec3Math.sub(aabb.max, aabb.min),\n\n expand: (aabb: AABB, point: Vec3): AABB => ({\n min: vec3Math.min(aabb.min, point),\n max: vec3Math.max(aabb.max, point),\n }),\n\n merge: (a: AABB, b: AABB): AABB => ({\n min: vec3Math.min(a.min, b.min),\n max: vec3Math.max(a.max, b.max),\n }),\n};\n\n// =============================================================================\n// NOISE FUNCTIONS\n// =============================================================================\n\n// Simple permutation table for noise\nconst perm = new Uint8Array(512);\nfor (let i = 0; i < 256; i++) perm[i] = perm[i + 256] = i;\nfor (let i = 255; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [perm[i], perm[j]] = [perm[j], perm[i]];\n perm[i + 256] = perm[i];\n}\n\nfunction fade(t: number): number {\n return t * t * t * (t * (t * 6 - 15) + 10);\n}\n\nfunction grad(hash: number, x: number, y: number, z: number): number {\n const h = hash & 15;\n const u = h < 8 ? x : y;\n const v = h < 4 ? y : h === 12 || h === 14 ? x : z;\n return ((h & 1) === 0 ? u : -u) + ((h & 2) === 0 ? v : -v);\n}\n\nexport const noise = {\n /**\n * 3D Perlin noise (-1 to 1)\n */\n perlin3d: (x: number, y: number, z: number): number => {\n const X = Math.floor(x) & 255;\n const Y = Math.floor(y) & 255;\n const Z = Math.floor(z) & 255;\n\n x -= Math.floor(x);\n y -= Math.floor(y);\n z -= Math.floor(z);\n\n const u = fade(x);\n const v = fade(y);\n const w = fade(z);\n\n const A = perm[X] + Y;\n const AA = perm[A] + Z;\n const AB = perm[A + 1] + Z;\n const B = perm[X + 1] + Y;\n const BA = perm[B] + Z;\n const BB = perm[B + 1] + Z;\n\n return lerp(\n lerp(\n lerp(grad(perm[AA], x, y, z), grad(perm[BA], x - 1, y, z), u),\n lerp(grad(perm[AB], x, y - 1, z), grad(perm[BB], x - 1, y - 1, z), u),\n v\n ),\n lerp(\n lerp(grad(perm[AA + 1], x, y, z - 1), grad(perm[BA + 1], x - 1, y, z - 1), u),\n lerp(grad(perm[AB + 1], x, y - 1, z - 1), grad(perm[BB + 1], x - 1, y - 1, z - 1), u),\n v\n ),\n w\n );\n },\n\n /**\n * 2D Perlin noise (-1 to 1)\n */\n perlin2d: (x: number, y: number): number => {\n return noise.perlin3d(x, y, 0);\n },\n\n /**\n * Fractal Brownian Motion (fBm)\n */\n fbm: (\n x: number,\n y: number,\n z: number,\n octaves: number = 6,\n lacunarity: number = 2,\n gain: number = 0.5\n ): number => {\n let value = 0;\n let amplitude = 1;\n let frequency = 1;\n let maxValue = 0;\n\n for (let i = 0; i < octaves; i++) {\n value += amplitude * noise.perlin3d(x * frequency, y * frequency, z * frequency);\n maxValue += amplitude;\n amplitude *= gain;\n frequency *= lacunarity;\n }\n\n return value / maxValue;\n },\n\n /**\n * Simplex-like noise (approximation using perlin)\n */\n simplex: (x: number, y: number): number => {\n return noise.perlin2d(x * 1.2, y * 1.2);\n },\n\n /**\n * Worley/Cellular noise\n */\n worley: (x: number, y: number, z: number): number => {\n const xi = Math.floor(x);\n const yi = Math.floor(y);\n const zi = Math.floor(z);\n\n let minDist = Infinity;\n\n for (let i = -1; i <= 1; i++) {\n for (let j = -1; j <= 1; j++) {\n for (let k = -1; k <= 1; k++) {\n const cellX = xi + i;\n const cellY = yi + j;\n const cellZ = zi + k;\n\n // Pseudo-random point in cell\n const hash = perm[(perm[(perm[cellX & 255] + cellY) & 255] + cellZ) & 255];\n const px = cellX + hash / 255;\n const py = cellY + ((hash * 7) % 255) / 255;\n const pz = cellZ + ((hash * 13) % 255) / 255;\n\n const dist = (x - px) * (x - px) + (y - py) * (y - py) + (z - pz) * (z - pz);\n minDist = Math.min(minDist, dist);\n }\n }\n }\n\n return Math.sqrt(minDist);\n },\n};\n\n// =============================================================================\n// RANDOM\n// =============================================================================\n\nexport const random = {\n /**\n * Random float between 0 and 1\n */\n float: (): number => Math.random(),\n\n /**\n * Random float in range [min, max)\n */\n range: (min: number, max: number): number => min + Math.random() * (max - min),\n\n /**\n * Random integer in range [min, max]\n */\n int: (min: number, max: number): number => Math.floor(min + Math.random() * (max - min + 1)),\n\n /**\n * Random boolean with probability\n */\n bool: (probability: number = 0.5): boolean => Math.random() < probability,\n\n /**\n * Random element from array\n */\n pick: <T>(array: T[]): T => array[Math.floor(Math.random() * array.length)],\n\n /**\n * Shuffle array (Fisher-Yates)\n */\n shuffle: <T>(array: T[]): T[] => {\n const result = [...array];\n for (let i = result.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [result[i], result[j]] = [result[j], result[i]];\n }\n return result;\n },\n\n /**\n * Random Vec3 in unit sphere\n */\n insideUnitSphere: (): Vec3 => {\n const theta = Math.random() * TAU;\n const phi = Math.acos(2 * Math.random() - 1);\n const r = Math.cbrt(Math.random());\n return {\n x: r * Math.sin(phi) * Math.cos(theta),\n y: r * Math.sin(phi) * Math.sin(theta),\n z: r * Math.cos(phi),\n };\n },\n\n /**\n * Random Vec3 on unit sphere surface\n */\n onUnitSphere: (): Vec3 => {\n const theta = Math.random() * TAU;\n const phi = Math.acos(2 * Math.random() - 1);\n return {\n x: Math.sin(phi) * Math.cos(theta),\n y: Math.sin(phi) * Math.sin(theta),\n z: Math.cos(phi),\n };\n },\n\n /**\n * Random Vec2 in unit circle\n */\n insideUnitCircle: (): Vec2 => {\n const theta = Math.random() * TAU;\n const r = Math.sqrt(Math.random());\n return {\n x: r * Math.cos(theta),\n y: r * Math.sin(theta),\n };\n },\n\n /**\n * Seeded random number generator\n */\n seeded: (seed: number) => {\n let s = seed;\n return () => {\n s = (s * 1103515245 + 12345) & 0x7fffffff;\n return s / 0x7fffffff;\n };\n },\n};\n"],"mappings":"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","names":["aabb"]}
@@ -140,8 +140,8 @@ function formatDuration(ms) {
140
140
  if (ms < 36e5) {
141
141
  return `${(ms / 6e4).toFixed(1)}m`;
142
142
  }
143
- const hours = Math.floor(ms / 36e5);
144
- const mins = Math.floor(ms % 36e5 / 6e4);
143
+ const _hours = Math.floor(ms / 36e5);
144
+ const _mins = Math.floor(ms % 36e5 / 6e4);
145
145
  return `${(ms / 36e5).toFixed(1)}h`;
146
146
  }
147
147
  function escapeHtml(s) {
@@ -345,4 +345,4 @@ export {
345
345
  similarity,
346
346
  extractTraits
347
347
  };
348
- //# sourceMappingURL=chunk-W2Q3LUCM.js.map
348
+ //# sourceMappingURL=chunk-XJIFG7G3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/string.ts"],"sourcesContent":["/**\n * @holoscript/std - String Module\n *\n * String manipulation utilities for HoloScript Plus programs.\n */\n\n/**\n * Check if a string is empty or only whitespace\n */\nexport function isBlank(s: string): boolean {\n return s.trim().length === 0;\n}\n\n/**\n * Check if a string is not empty and not only whitespace\n */\nexport function isNotBlank(s: string): boolean {\n return s.trim().length > 0;\n}\n\n/**\n * Capitalize the first letter of a string\n */\nexport function capitalize(s: string): string {\n if (s.length === 0) return s;\n return s[0].toUpperCase() + s.slice(1);\n}\n\n/**\n * Capitalize the first letter of each word\n */\nexport function titleCase(s: string): string {\n return s.split(/\\s+/).map(capitalize).join(' ');\n}\n\n/**\n * Convert to camelCase\n */\nexport function camelCase(s: string): string {\n return s\n .replace(/[-_\\s]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''))\n .replace(/^[A-Z]/, (c) => c.toLowerCase());\n}\n\n/**\n * Convert to PascalCase\n */\nexport function pascalCase(s: string): string {\n const camel = camelCase(s);\n return camel.length > 0 ? camel[0].toUpperCase() + camel.slice(1) : camel;\n}\n\n/**\n * Convert to snake_case\n */\nexport function snakeCase(s: string): string {\n return s\n .replace(/([a-z])([A-Z])/g, '$1_$2')\n .replace(/[-\\s]+/g, '_')\n .toLowerCase();\n}\n\n/**\n * Convert to kebab-case\n */\nexport function kebabCase(s: string): string {\n return s\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/[_\\s]+/g, '-')\n .toLowerCase();\n}\n\n/**\n * Convert to SCREAMING_SNAKE_CASE\n */\nexport function constantCase(s: string): string {\n return snakeCase(s).toUpperCase();\n}\n\n/**\n * Pad a string on the left to reach target length\n */\nexport function padLeft(s: string, length: number, char = ' '): string {\n return s.padStart(length, char);\n}\n\n/**\n * Pad a string on the right to reach target length\n */\nexport function padRight(s: string, length: number, char = ' '): string {\n return s.padEnd(length, char);\n}\n\n/**\n * Pad a string on both sides to center it\n */\nexport function center(s: string, length: number, char = ' '): string {\n if (s.length >= length) return s;\n const totalPadding = length - s.length;\n const leftPadding = Math.floor(totalPadding / 2);\n const rightPadding = totalPadding - leftPadding;\n return char.repeat(leftPadding) + s + char.repeat(rightPadding);\n}\n\n/**\n * Truncate a string to max length, adding ellipsis if needed\n */\nexport function truncate(s: string, maxLength: number, ellipsis = '...'): string {\n if (s.length <= maxLength) return s;\n return s.slice(0, maxLength - ellipsis.length) + ellipsis;\n}\n\n/**\n * Truncate a string in the middle\n */\nexport function truncateMiddle(s: string, maxLength: number, ellipsis = '...'): string {\n if (s.length <= maxLength) return s;\n const availableLength = maxLength - ellipsis.length;\n const leftLength = Math.floor(availableLength / 2);\n const rightLength = Math.ceil(availableLength / 2);\n return s.slice(0, leftLength) + ellipsis + s.slice(-rightLength);\n}\n\n/**\n * Repeat a string n times\n */\nexport function repeat(s: string, count: number): string {\n return s.repeat(count);\n}\n\n/**\n * Reverse a string\n */\nexport function reverse(s: string): string {\n return [...s].reverse().join('');\n}\n\n/**\n * Count occurrences of a substring\n */\nexport function count(s: string, substring: string): number {\n if (substring.length === 0) return 0;\n let count = 0;\n let pos = 0;\n while ((pos = s.indexOf(substring, pos)) !== -1) {\n count++;\n pos += 1;\n }\n return count;\n}\n\n/**\n * Check if string contains a substring (case-insensitive)\n */\nexport function containsIgnoreCase(s: string, substring: string): boolean {\n return s.toLowerCase().includes(substring.toLowerCase());\n}\n\n/**\n * Check if string starts with prefix (case-insensitive)\n */\nexport function startsWithIgnoreCase(s: string, prefix: string): boolean {\n return s.toLowerCase().startsWith(prefix.toLowerCase());\n}\n\n/**\n * Check if string ends with suffix (case-insensitive)\n */\nexport function endsWithIgnoreCase(s: string, suffix: string): boolean {\n return s.toLowerCase().endsWith(suffix.toLowerCase());\n}\n\n/**\n * Remove all whitespace from a string\n */\nexport function removeWhitespace(s: string): string {\n return s.replace(/\\s+/g, '');\n}\n\n/**\n * Collapse multiple spaces into single space\n */\nexport function collapseWhitespace(s: string): string {\n return s.replace(/\\s+/g, ' ').trim();\n}\n\n/**\n * Remove a prefix if present\n */\nexport function removePrefix(s: string, prefix: string): string {\n return s.startsWith(prefix) ? s.slice(prefix.length) : s;\n}\n\n/**\n * Remove a suffix if present\n */\nexport function removeSuffix(s: string, suffix: string): string {\n return s.endsWith(suffix) ? s.slice(0, -suffix.length) : s;\n}\n\n/**\n * Wrap a string with prefix and suffix\n */\nexport function wrap(s: string, wrapper: string): string;\nexport function wrap(s: string, prefix: string, suffix: string): string;\nexport function wrap(s: string, prefixOrWrapper: string, suffix?: string): string {\n if (suffix === undefined) {\n return prefixOrWrapper + s + prefixOrWrapper;\n }\n return prefixOrWrapper + s + suffix;\n}\n\n/**\n * Unwrap a string by removing matching prefix and suffix\n */\nexport function unwrap(s: string, wrapper: string): string;\nexport function unwrap(s: string, prefix: string, suffix: string): string;\nexport function unwrap(s: string, prefixOrWrapper: string, suffix?: string): string {\n const prefix = prefixOrWrapper;\n const actualSuffix = suffix ?? prefixOrWrapper;\n if (s.startsWith(prefix) && s.endsWith(actualSuffix)) {\n return s.slice(prefix.length, -actualSuffix.length || undefined);\n }\n return s;\n}\n\n/**\n * Split a string into lines\n */\nexport function lines(s: string): string[] {\n return s.split(/\\r?\\n/);\n}\n\n/**\n * Split a string into words\n */\nexport function words(s: string): string[] {\n return s.split(/\\s+/).filter((w) => w.length > 0);\n}\n\n/**\n * Split a string into characters\n */\nexport function chars(s: string): string[] {\n return [...s];\n}\n\n/**\n * Join strings with a separator\n */\nexport function join(strings: string[], separator = ''): string {\n return strings.join(separator);\n}\n\n/**\n * Format a template string with values\n */\nexport function format(template: string, values: Record<string, unknown>): string {\n return template.replace(/\\{(\\w+)\\}/g, (match, key) => {\n return key in values ? String(values[key]) : match;\n });\n}\n\n/**\n * Format a number as a string with grouping\n */\nexport function formatNumber(n: number, options: Intl.NumberFormatOptions = {}): string {\n return n.toLocaleString('en-US', options);\n}\n\n/**\n * Format a number with commas\n */\nexport function numberWithCommas(n: number): string {\n return n.toLocaleString('en-US');\n}\n\n/**\n * Format bytes as human-readable string\n */\nexport function formatBytes(bytes: number, decimals = 2): string {\n if (bytes === 0) return '0 B';\n const k = 1024;\n if (bytes < 0) return `${bytes} B`;\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(decimals)) + ' ' + sizes[i];\n}\n\n/**\n * Format duration in milliseconds as human-readable string\n */\nexport function formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n if (ms < 3600000) {\n return `${(ms / 60000).toFixed(1)}m`;\n }\n const _hours = Math.floor(ms / 3600000);\n const _mins = Math.floor((ms % 3600000) / 60000);\n return `${(ms / 3600000).toFixed(1)}h`;\n}\n\n/**\n * Escape HTML special characters\n */\nexport function escapeHtml(s: string): string {\n const htmlEntities: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n };\n return s.replace(/[&<>\"']/g, (c) => htmlEntities[c]);\n}\n\n/**\n * Unescape HTML entities\n */\nexport function unescapeHtml(s: string): string {\n const htmlEntities: Record<string, string> = {\n '&amp;': '&',\n '&lt;': '<',\n '&gt;': '>',\n '&quot;': '\"',\n '&#39;': \"'\",\n '&#x27;': \"'\",\n '&#x2F;': '/',\n };\n return s.replace(\n /&(?:amp|lt|gt|quot|#39|#x27|#x2F);/g,\n (entity) => htmlEntities[entity] || entity\n );\n}\n\n/**\n * Escape regex special characters\n */\nexport function escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * Generate a slug from a string\n */\nexport function slugify(s: string): string {\n return s\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '') // Remove diacritics\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n\n/**\n * Check if string is a valid identifier\n */\nexport function isValidIdentifier(s: string): boolean {\n return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(s);\n}\n\n/**\n * Check if string is numeric\n */\nexport function isNumeric(s: string): boolean {\n return !isNaN(parseFloat(s)) && isFinite(Number(s));\n}\n\n/**\n * Check if string is alphanumeric\n */\nexport function isAlphanumeric(s: string): boolean {\n return /^[a-zA-Z0-9]+$/.test(s);\n}\n\n/**\n * Check if string is alphabetic\n */\nexport function isAlpha(s: string): boolean {\n return /^[a-zA-Z]+$/.test(s);\n}\n\n/**\n * Generate a random string\n */\nexport function randomString(\n length: number,\n charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\n): string {\n let result = '';\n for (let i = 0; i < length; i++) {\n result += charset[Math.floor(Math.random() * charset.length)];\n }\n return result;\n}\n\n/**\n * Generate a UUID v4\n */\nexport function uuid(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n/**\n * Indent each line of a string\n */\nexport function indent(s: string, spaces: number, char = ' '): string {\n const prefix = char.repeat(spaces);\n return s\n .split('\\n')\n .map((line) => prefix + line)\n .join('\\n');\n}\n\n/**\n * Dedent a string (remove common leading whitespace)\n */\nexport function dedent(s: string): string {\n const linesList = lines(s);\n const nonEmptyLines = linesList.filter((l) => l.trim().length > 0);\n if (nonEmptyLines.length === 0) return s;\n\n const minIndent = Math.min(\n ...nonEmptyLines.map((line) => {\n const match = line.match(/^(\\s*)/);\n return match ? match[1].length : 0;\n })\n );\n\n return linesList.map((line) => line.slice(minIndent)).join('\\n');\n}\n\n/**\n * Word wrap text to a maximum width\n */\nexport function wordWrap(s: string, maxWidth: number): string {\n const wordsList = words(s);\n const linesList: string[] = [];\n let currentLine = '';\n\n for (const word of wordsList) {\n if (currentLine.length === 0) {\n currentLine = word;\n } else if (currentLine.length + 1 + word.length <= maxWidth) {\n currentLine += ' ' + word;\n } else {\n linesList.push(currentLine);\n currentLine = word;\n }\n }\n\n if (currentLine.length > 0) {\n linesList.push(currentLine);\n }\n\n return linesList.join('\\n');\n}\n\n/**\n * Levenshtein distance between two strings\n */\nexport function levenshtein(a: string, b: string): number {\n if (a.length === 0) return b.length;\n if (b.length === 0) return a.length;\n\n const matrix: number[][] = [];\n\n for (let i = 0; i <= b.length; i++) {\n matrix[i] = [i];\n }\n for (let j = 0; j <= a.length; j++) {\n matrix[0][j] = j;\n }\n\n for (let i = 1; i <= b.length; i++) {\n for (let j = 1; j <= a.length; j++) {\n if (b[i - 1] === a[j - 1]) {\n matrix[i][j] = matrix[i - 1][j - 1];\n } else {\n matrix[i][j] = Math.min(\n matrix[i - 1][j - 1] + 1, // substitution\n matrix[i][j - 1] + 1, // insertion\n matrix[i - 1][j] + 1 // deletion\n );\n }\n }\n }\n\n return matrix[b.length][a.length];\n}\n\nfunction lcsLength(a: string, b: string): number {\n const n = b.length;\n const dp: number[] = new Array(n + 1).fill(0);\n for (let i = 0; i < a.length; i++) {\n let prev = 0;\n for (let j = 0; j < n; j++) {\n const tmp = dp[j + 1];\n dp[j + 1] = a[i] === b[j] ? prev + 1 : Math.max(dp[j + 1], dp[j]);\n prev = tmp;\n }\n }\n return dp[n];\n}\n\n/**\n * Check similarity between two strings (0-1) using Sorensen-Dice over LCS\n */\nexport function similarity(a: string, b: string): number {\n const total = a.length + b.length;\n if (total === 0) return 1;\n return (2 * lcsLength(a, b)) / total;\n}\n\n/**\n * Extract HoloScript trait annotations (@name) and JSX component names from code\n */\nexport function extractTraits(code: string): string[] {\n const traits = new Set<string>();\n let m: RegExpExecArray | null;\n const atRe = /@([a-zA-Z_]\\w*)/g;\n while ((m = atRe.exec(code)) !== null) traits.add(`@${m[1]}`);\n const tagRe = /<([A-Z][a-zA-Z0-9]*)\\b/g;\n while ((m = tagRe.exec(code)) !== null) traits.add(m[1]);\n return [...traits];\n}\n"],"mappings":"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","names":["count"]}
@@ -641,6 +641,7 @@ var PriorityQueue = class _PriorityQueue {
641
641
  constructor(compareFn = (a, b) => a - b) {
642
642
  this.compareFn = compareFn;
643
643
  }
644
+ compareFn;
644
645
  heap = [];
645
646
  static minHeap() {
646
647
  return new _PriorityQueue((a, b) => a - b);