@holoscript/std 2.1.0 → 6.0.3

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 (159) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +21 -0
  3. package/README.md +197 -0
  4. package/dist/__tests__/EconomicPrimitives.test.d.ts +2 -0
  5. package/dist/__tests__/EconomicPrimitives.test.d.ts.map +1 -0
  6. package/dist/__tests__/EconomicTraits.test.d.ts +2 -0
  7. package/dist/__tests__/EconomicTraits.test.d.ts.map +1 -0
  8. package/dist/__tests__/SimulationLabPrimitives.test.d.ts +2 -0
  9. package/dist/__tests__/SimulationLabPrimitives.test.d.ts.map +1 -0
  10. package/dist/__tests__/collections.test.d.ts +2 -0
  11. package/dist/__tests__/collections.test.d.ts.map +1 -0
  12. package/dist/__tests__/events.test.d.ts +2 -0
  13. package/dist/__tests__/events.test.d.ts.map +1 -0
  14. package/dist/__tests__/index.test.d.ts +2 -0
  15. package/dist/__tests__/index.test.d.ts.map +1 -0
  16. package/dist/__tests__/materials.test.d.ts +2 -0
  17. package/dist/__tests__/materials.test.d.ts.map +1 -0
  18. package/dist/__tests__/math.test.d.ts +2 -0
  19. package/dist/__tests__/math.test.d.ts.map +1 -0
  20. package/dist/__tests__/physics.test.d.ts +2 -0
  21. package/dist/__tests__/physics.test.d.ts.map +1 -0
  22. package/dist/__tests__/spatial.test.d.ts +2 -0
  23. package/dist/__tests__/spatial.test.d.ts.map +1 -0
  24. package/dist/__tests__/standard-library-fundamentals.test.d.ts +2 -0
  25. package/dist/__tests__/standard-library-fundamentals.test.d.ts.map +1 -0
  26. package/dist/__tests__/string-and-time-utilities.test.d.ts +2 -0
  27. package/dist/__tests__/string-and-time-utilities.test.d.ts.map +1 -0
  28. package/dist/__tests__/string-decoupled.test.d.ts +2 -0
  29. package/dist/__tests__/string-decoupled.test.d.ts.map +1 -0
  30. package/dist/__tests__/string.test.d.ts +2 -0
  31. package/dist/__tests__/string.test.d.ts.map +1 -0
  32. package/dist/__tests__/time.test.d.ts +2 -0
  33. package/dist/__tests__/time.test.d.ts.map +1 -0
  34. package/dist/chunk-7HVUYGPS.js +679 -0
  35. package/dist/chunk-7HVUYGPS.js.map +1 -0
  36. package/dist/chunk-P4O3WNG2.js +287 -0
  37. package/dist/chunk-P4O3WNG2.js.map +1 -0
  38. package/dist/chunk-PFX2JM4X.js +683 -0
  39. package/dist/chunk-PFX2JM4X.js.map +1 -0
  40. package/dist/chunk-W2Q3LUCM.js +348 -0
  41. package/dist/chunk-W2Q3LUCM.js.map +1 -0
  42. package/dist/chunk-WS6W35YC.js +443 -0
  43. package/dist/chunk-WS6W35YC.js.map +1 -0
  44. package/dist/chunk-ZXVZAQCZ.js +470 -0
  45. package/dist/chunk-ZXVZAQCZ.js.map +1 -0
  46. package/dist/collections.cjs +715 -0
  47. package/dist/collections.cjs.map +1 -0
  48. package/dist/collections.d.ts.map +1 -1
  49. package/dist/collections.js +16 -719
  50. package/dist/collections.js.map +1 -1
  51. package/dist/events.d.ts +32 -0
  52. package/dist/events.d.ts.map +1 -0
  53. package/dist/index.cjs +4101 -0
  54. package/dist/index.cjs.map +1 -0
  55. package/dist/index.d.ts +21 -9
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +1270 -157
  58. package/dist/index.js.map +1 -1
  59. package/dist/materials.d.ts +50 -0
  60. package/dist/materials.d.ts.map +1 -0
  61. package/dist/math.cjs +591 -0
  62. package/dist/math.cjs.map +1 -0
  63. package/dist/math.d.ts.map +1 -1
  64. package/dist/math.js +51 -537
  65. package/dist/math.js.map +1 -1
  66. package/dist/physics.d.ts +59 -0
  67. package/dist/physics.d.ts.map +1 -0
  68. package/dist/spatial.d.ts +82 -0
  69. package/dist/spatial.d.ts.map +1 -0
  70. package/dist/string.basic.test.d.ts +5 -0
  71. package/dist/string.basic.test.d.ts.map +1 -0
  72. package/dist/string.cjs +422 -0
  73. package/dist/string.cjs.map +1 -0
  74. package/dist/string.d.ts +5 -1
  75. package/dist/string.d.ts.map +1 -1
  76. package/dist/string.js +106 -442
  77. package/dist/string.js.map +1 -1
  78. package/dist/string.test.d.ts +5 -0
  79. package/dist/string.test.d.ts.map +1 -0
  80. package/dist/time.cjs +512 -0
  81. package/dist/time.cjs.map +1 -0
  82. package/dist/time.d.ts.map +1 -1
  83. package/dist/time.js +41 -528
  84. package/dist/time.js.map +1 -1
  85. package/dist/traits/ARTraits.d.ts +14 -0
  86. package/dist/traits/ARTraits.d.ts.map +1 -0
  87. package/dist/traits/EconomicPrimitives.cjs +335 -0
  88. package/dist/traits/EconomicPrimitives.cjs.map +1 -0
  89. package/dist/traits/EconomicPrimitives.d.ts +345 -0
  90. package/dist/traits/EconomicPrimitives.d.ts.map +1 -0
  91. package/dist/traits/EconomicPrimitives.js +55 -0
  92. package/dist/traits/EconomicPrimitives.js.map +1 -0
  93. package/dist/traits/EconomicTraits.cjs +471 -0
  94. package/dist/traits/EconomicTraits.cjs.map +1 -0
  95. package/dist/traits/EconomicTraits.d.ts +71 -0
  96. package/dist/traits/EconomicTraits.d.ts.map +1 -0
  97. package/dist/traits/EconomicTraits.js +17 -0
  98. package/dist/traits/EconomicTraits.js.map +1 -0
  99. package/dist/traits/IoTTraits.d.ts +14 -0
  100. package/dist/traits/IoTTraits.d.ts.map +1 -0
  101. package/dist/traits/SimulationLabPrimitives.d.ts +187 -0
  102. package/dist/traits/SimulationLabPrimitives.d.ts.map +1 -0
  103. package/dist/traits/SimulationLabTraits.d.ts +42 -0
  104. package/dist/traits/SimulationLabTraits.d.ts.map +1 -0
  105. package/dist/traits/VRRTraits.d.ts +150 -0
  106. package/dist/traits/VRRTraits.d.ts.map +1 -0
  107. package/dist/traits/__tests__/ARTraits.test.d.ts +2 -0
  108. package/dist/traits/__tests__/ARTraits.test.d.ts.map +1 -0
  109. package/dist/traits/__tests__/EconomicPrimitives.test.d.ts +2 -0
  110. package/dist/traits/__tests__/EconomicPrimitives.test.d.ts.map +1 -0
  111. package/dist/traits/__tests__/EconomicTraits.test.d.ts +2 -0
  112. package/dist/traits/__tests__/EconomicTraits.test.d.ts.map +1 -0
  113. package/dist/types.d.ts +9 -0
  114. package/dist/types.d.ts.map +1 -1
  115. package/error-utf8.log +6 -0
  116. package/error.log +0 -0
  117. package/package.json +42 -19
  118. package/src/__tests__/EconomicPrimitives.test.ts +690 -0
  119. package/src/__tests__/EconomicTraits.test.ts +425 -0
  120. package/src/__tests__/SimulationLabPrimitives.test.ts +415 -0
  121. package/src/__tests__/collections.test.ts +182 -0
  122. package/src/__tests__/events.test.ts +135 -0
  123. package/src/__tests__/index.test.ts +14 -0
  124. package/src/__tests__/materials.test.ts +84 -0
  125. package/src/__tests__/math.test.ts +246 -0
  126. package/src/__tests__/physics.test.ts +83 -0
  127. package/src/__tests__/spatial.test.ts +333 -0
  128. package/src/__tests__/standard-library-fundamentals.test.ts +1301 -0
  129. package/src/__tests__/string-and-time-utilities.test.ts +1070 -0
  130. package/src/__tests__/string-decoupled.test.ts +14 -0
  131. package/src/__tests__/string.test.ts +164 -0
  132. package/src/__tests__/time.test.ts +110 -0
  133. package/src/collections.ts +8 -2
  134. package/src/events.ts +88 -0
  135. package/src/index.ts +161 -11
  136. package/src/materials.ts +109 -0
  137. package/src/math.ts +30 -14
  138. package/src/physics.ts +141 -0
  139. package/src/spatial.ts +320 -0
  140. package/src/string.basic.test.ts +14 -0
  141. package/src/string.test.ts +335 -0
  142. package/src/string.ts +45 -13
  143. package/src/time.ts +10 -11
  144. package/src/traits/ARTraits.ts +103 -0
  145. package/src/traits/EconomicPrimitives.ts +755 -0
  146. package/src/traits/EconomicTraits.ts +552 -0
  147. package/src/traits/IoTTraits.ts +102 -0
  148. package/src/traits/SimulationLabPrimitives.ts +650 -0
  149. package/src/traits/SimulationLabTraits.ts +191 -0
  150. package/src/traits/VRRTraits.ts +326 -0
  151. package/src/traits/__tests__/ARTraits.test.ts +14 -0
  152. package/src/traits/__tests__/EconomicPrimitives.test.ts +14 -0
  153. package/src/traits/__tests__/EconomicTraits.test.ts +14 -0
  154. package/src/types.ts +47 -12
  155. package/std_error.log +5 -0
  156. package/tsup.config.ts +17 -0
  157. package/vitest.config.ts +10 -0
  158. package/dist/types.js +0 -198
  159. package/dist/types.js.map +0 -1
@@ -0,0 +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":[]}
@@ -0,0 +1,348 @@
1
+ // src/string.ts
2
+ function isBlank(s) {
3
+ return s.trim().length === 0;
4
+ }
5
+ function isNotBlank(s) {
6
+ return s.trim().length > 0;
7
+ }
8
+ function capitalize(s) {
9
+ if (s.length === 0) return s;
10
+ return s[0].toUpperCase() + s.slice(1);
11
+ }
12
+ function titleCase(s) {
13
+ return s.split(/\s+/).map(capitalize).join(" ");
14
+ }
15
+ function camelCase(s) {
16
+ return s.replace(/[-_\s]+(.)?/g, (_, c) => c ? c.toUpperCase() : "").replace(/^[A-Z]/, (c) => c.toLowerCase());
17
+ }
18
+ function pascalCase(s) {
19
+ const camel = camelCase(s);
20
+ return camel.length > 0 ? camel[0].toUpperCase() + camel.slice(1) : camel;
21
+ }
22
+ function snakeCase(s) {
23
+ return s.replace(/([a-z])([A-Z])/g, "$1_$2").replace(/[-\s]+/g, "_").toLowerCase();
24
+ }
25
+ function kebabCase(s) {
26
+ return s.replace(/([a-z])([A-Z])/g, "$1-$2").replace(/[_\s]+/g, "-").toLowerCase();
27
+ }
28
+ function constantCase(s) {
29
+ return snakeCase(s).toUpperCase();
30
+ }
31
+ function padLeft(s, length, char = " ") {
32
+ return s.padStart(length, char);
33
+ }
34
+ function padRight(s, length, char = " ") {
35
+ return s.padEnd(length, char);
36
+ }
37
+ function center(s, length, char = " ") {
38
+ if (s.length >= length) return s;
39
+ const totalPadding = length - s.length;
40
+ const leftPadding = Math.floor(totalPadding / 2);
41
+ const rightPadding = totalPadding - leftPadding;
42
+ return char.repeat(leftPadding) + s + char.repeat(rightPadding);
43
+ }
44
+ function truncate(s, maxLength, ellipsis = "...") {
45
+ if (s.length <= maxLength) return s;
46
+ return s.slice(0, maxLength - ellipsis.length) + ellipsis;
47
+ }
48
+ function truncateMiddle(s, maxLength, ellipsis = "...") {
49
+ if (s.length <= maxLength) return s;
50
+ const availableLength = maxLength - ellipsis.length;
51
+ const leftLength = Math.floor(availableLength / 2);
52
+ const rightLength = Math.ceil(availableLength / 2);
53
+ return s.slice(0, leftLength) + ellipsis + s.slice(-rightLength);
54
+ }
55
+ function repeat(s, count2) {
56
+ return s.repeat(count2);
57
+ }
58
+ function reverse(s) {
59
+ return [...s].reverse().join("");
60
+ }
61
+ function count(s, substring) {
62
+ if (substring.length === 0) return 0;
63
+ let count2 = 0;
64
+ let pos = 0;
65
+ while ((pos = s.indexOf(substring, pos)) !== -1) {
66
+ count2++;
67
+ pos += 1;
68
+ }
69
+ return count2;
70
+ }
71
+ function containsIgnoreCase(s, substring) {
72
+ return s.toLowerCase().includes(substring.toLowerCase());
73
+ }
74
+ function startsWithIgnoreCase(s, prefix) {
75
+ return s.toLowerCase().startsWith(prefix.toLowerCase());
76
+ }
77
+ function endsWithIgnoreCase(s, suffix) {
78
+ return s.toLowerCase().endsWith(suffix.toLowerCase());
79
+ }
80
+ function removeWhitespace(s) {
81
+ return s.replace(/\s+/g, "");
82
+ }
83
+ function collapseWhitespace(s) {
84
+ return s.replace(/\s+/g, " ").trim();
85
+ }
86
+ function removePrefix(s, prefix) {
87
+ return s.startsWith(prefix) ? s.slice(prefix.length) : s;
88
+ }
89
+ function removeSuffix(s, suffix) {
90
+ return s.endsWith(suffix) ? s.slice(0, -suffix.length) : s;
91
+ }
92
+ function wrap(s, prefixOrWrapper, suffix) {
93
+ if (suffix === void 0) {
94
+ return prefixOrWrapper + s + prefixOrWrapper;
95
+ }
96
+ return prefixOrWrapper + s + suffix;
97
+ }
98
+ function unwrap(s, prefixOrWrapper, suffix) {
99
+ const prefix = prefixOrWrapper;
100
+ const actualSuffix = suffix ?? prefixOrWrapper;
101
+ if (s.startsWith(prefix) && s.endsWith(actualSuffix)) {
102
+ return s.slice(prefix.length, -actualSuffix.length || void 0);
103
+ }
104
+ return s;
105
+ }
106
+ function lines(s) {
107
+ return s.split(/\r?\n/);
108
+ }
109
+ function words(s) {
110
+ return s.split(/\s+/).filter((w) => w.length > 0);
111
+ }
112
+ function chars(s) {
113
+ return [...s];
114
+ }
115
+ function join(strings, separator = "") {
116
+ return strings.join(separator);
117
+ }
118
+ function format(template, values) {
119
+ return template.replace(/\{(\w+)\}/g, (match, key) => {
120
+ return key in values ? String(values[key]) : match;
121
+ });
122
+ }
123
+ function formatNumber(n, options = {}) {
124
+ return n.toLocaleString("en-US", options);
125
+ }
126
+ function numberWithCommas(n) {
127
+ return n.toLocaleString("en-US");
128
+ }
129
+ function formatBytes(bytes, decimals = 2) {
130
+ if (bytes === 0) return "0 B";
131
+ const k = 1024;
132
+ if (bytes < 0) return `${bytes} B`;
133
+ const sizes = ["B", "KB", "MB", "GB", "TB", "PB"];
134
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
135
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(decimals)) + " " + sizes[i];
136
+ }
137
+ function formatDuration(ms) {
138
+ if (ms < 1e3) return `${ms}ms`;
139
+ if (ms < 6e4) return `${(ms / 1e3).toFixed(1)}s`;
140
+ if (ms < 36e5) {
141
+ return `${(ms / 6e4).toFixed(1)}m`;
142
+ }
143
+ const hours = Math.floor(ms / 36e5);
144
+ const mins = Math.floor(ms % 36e5 / 6e4);
145
+ return `${(ms / 36e5).toFixed(1)}h`;
146
+ }
147
+ function escapeHtml(s) {
148
+ const htmlEntities = {
149
+ "&": "&amp;",
150
+ "<": "&lt;",
151
+ ">": "&gt;",
152
+ '"': "&quot;",
153
+ "'": "&#39;"
154
+ };
155
+ return s.replace(/[&<>"']/g, (c) => htmlEntities[c]);
156
+ }
157
+ function unescapeHtml(s) {
158
+ const htmlEntities = {
159
+ "&amp;": "&",
160
+ "&lt;": "<",
161
+ "&gt;": ">",
162
+ "&quot;": '"',
163
+ "&#39;": "'",
164
+ "&#x27;": "'",
165
+ "&#x2F;": "/"
166
+ };
167
+ return s.replace(
168
+ /&(?:amp|lt|gt|quot|#39|#x27|#x2F);/g,
169
+ (entity) => htmlEntities[entity] || entity
170
+ );
171
+ }
172
+ function escapeRegex(s) {
173
+ return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
174
+ }
175
+ function slugify(s) {
176
+ return s.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
177
+ }
178
+ function isValidIdentifier(s) {
179
+ return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(s);
180
+ }
181
+ function isNumeric(s) {
182
+ return !isNaN(parseFloat(s)) && isFinite(Number(s));
183
+ }
184
+ function isAlphanumeric(s) {
185
+ return /^[a-zA-Z0-9]+$/.test(s);
186
+ }
187
+ function isAlpha(s) {
188
+ return /^[a-zA-Z]+$/.test(s);
189
+ }
190
+ function randomString(length, charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") {
191
+ let result = "";
192
+ for (let i = 0; i < length; i++) {
193
+ result += charset[Math.floor(Math.random() * charset.length)];
194
+ }
195
+ return result;
196
+ }
197
+ function uuid() {
198
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
199
+ const r = Math.random() * 16 | 0;
200
+ const v = c === "x" ? r : r & 3 | 8;
201
+ return v.toString(16);
202
+ });
203
+ }
204
+ function indent(s, spaces, char = " ") {
205
+ const prefix = char.repeat(spaces);
206
+ return s.split("\n").map((line) => prefix + line).join("\n");
207
+ }
208
+ function dedent(s) {
209
+ const linesList = lines(s);
210
+ const nonEmptyLines = linesList.filter((l) => l.trim().length > 0);
211
+ if (nonEmptyLines.length === 0) return s;
212
+ const minIndent = Math.min(
213
+ ...nonEmptyLines.map((line) => {
214
+ const match = line.match(/^(\s*)/);
215
+ return match ? match[1].length : 0;
216
+ })
217
+ );
218
+ return linesList.map((line) => line.slice(minIndent)).join("\n");
219
+ }
220
+ function wordWrap(s, maxWidth) {
221
+ const wordsList = words(s);
222
+ const linesList = [];
223
+ let currentLine = "";
224
+ for (const word of wordsList) {
225
+ if (currentLine.length === 0) {
226
+ currentLine = word;
227
+ } else if (currentLine.length + 1 + word.length <= maxWidth) {
228
+ currentLine += " " + word;
229
+ } else {
230
+ linesList.push(currentLine);
231
+ currentLine = word;
232
+ }
233
+ }
234
+ if (currentLine.length > 0) {
235
+ linesList.push(currentLine);
236
+ }
237
+ return linesList.join("\n");
238
+ }
239
+ function levenshtein(a, b) {
240
+ if (a.length === 0) return b.length;
241
+ if (b.length === 0) return a.length;
242
+ const matrix = [];
243
+ for (let i = 0; i <= b.length; i++) {
244
+ matrix[i] = [i];
245
+ }
246
+ for (let j = 0; j <= a.length; j++) {
247
+ matrix[0][j] = j;
248
+ }
249
+ for (let i = 1; i <= b.length; i++) {
250
+ for (let j = 1; j <= a.length; j++) {
251
+ if (b[i - 1] === a[j - 1]) {
252
+ matrix[i][j] = matrix[i - 1][j - 1];
253
+ } else {
254
+ matrix[i][j] = Math.min(
255
+ matrix[i - 1][j - 1] + 1,
256
+ // substitution
257
+ matrix[i][j - 1] + 1,
258
+ // insertion
259
+ matrix[i - 1][j] + 1
260
+ // deletion
261
+ );
262
+ }
263
+ }
264
+ }
265
+ return matrix[b.length][a.length];
266
+ }
267
+ function lcsLength(a, b) {
268
+ const n = b.length;
269
+ const dp = new Array(n + 1).fill(0);
270
+ for (let i = 0; i < a.length; i++) {
271
+ let prev = 0;
272
+ for (let j = 0; j < n; j++) {
273
+ const tmp = dp[j + 1];
274
+ dp[j + 1] = a[i] === b[j] ? prev + 1 : Math.max(dp[j + 1], dp[j]);
275
+ prev = tmp;
276
+ }
277
+ }
278
+ return dp[n];
279
+ }
280
+ function similarity(a, b) {
281
+ const total = a.length + b.length;
282
+ if (total === 0) return 1;
283
+ return 2 * lcsLength(a, b) / total;
284
+ }
285
+ function extractTraits(code) {
286
+ const traits = /* @__PURE__ */ new Set();
287
+ let m;
288
+ const atRe = /@([a-zA-Z_]\w*)/g;
289
+ while ((m = atRe.exec(code)) !== null) traits.add(`@${m[1]}`);
290
+ const tagRe = /<([A-Z][a-zA-Z0-9]*)\b/g;
291
+ while ((m = tagRe.exec(code)) !== null) traits.add(m[1]);
292
+ return [...traits];
293
+ }
294
+
295
+ export {
296
+ isBlank,
297
+ isNotBlank,
298
+ capitalize,
299
+ titleCase,
300
+ camelCase,
301
+ pascalCase,
302
+ snakeCase,
303
+ kebabCase,
304
+ constantCase,
305
+ padLeft,
306
+ padRight,
307
+ center,
308
+ truncate,
309
+ truncateMiddle,
310
+ repeat,
311
+ reverse,
312
+ count,
313
+ containsIgnoreCase,
314
+ startsWithIgnoreCase,
315
+ endsWithIgnoreCase,
316
+ removeWhitespace,
317
+ collapseWhitespace,
318
+ removePrefix,
319
+ removeSuffix,
320
+ wrap,
321
+ unwrap,
322
+ lines,
323
+ words,
324
+ chars,
325
+ join,
326
+ format,
327
+ formatNumber,
328
+ numberWithCommas,
329
+ formatBytes,
330
+ formatDuration,
331
+ escapeHtml,
332
+ unescapeHtml,
333
+ escapeRegex,
334
+ slugify,
335
+ isValidIdentifier,
336
+ isNumeric,
337
+ isAlphanumeric,
338
+ isAlpha,
339
+ randomString,
340
+ uuid,
341
+ indent,
342
+ dedent,
343
+ wordWrap,
344
+ levenshtein,
345
+ similarity,
346
+ extractTraits
347
+ };
348
+ //# sourceMappingURL=chunk-W2Q3LUCM.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"]}