@holoscript/std 7.0.0 → 7.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/README.md +8 -0
  2. package/dist/chunk-DGUM43GV.js +11 -0
  3. package/dist/{chunk-PFX2JM4X.js → chunk-FAMOLKH3.js} +2 -1
  4. package/dist/{chunk-PFX2JM4X.js.map → chunk-FAMOLKH3.js.map} +1 -1
  5. package/dist/{chunk-DZHAVOCH.js → chunk-SOKH6FJ7.js} +31 -6
  6. package/dist/chunk-SOKH6FJ7.js.map +1 -0
  7. package/dist/collections.cjs +1 -0
  8. package/dist/collections.cjs.map +1 -1
  9. package/dist/collections.js +2 -2
  10. package/dist/fs/fs.d.ts.map +1 -1
  11. package/dist/fs/index.cjs +221 -8510
  12. package/dist/fs/index.cjs.map +1 -1
  13. package/dist/fs/index.js +832 -118
  14. package/dist/fs/index.js.map +1 -1
  15. package/dist/fs/sandbox.d.ts +49 -0
  16. package/dist/fs/sandbox.d.ts.map +1 -0
  17. package/dist/index.cjs +3494 -12672
  18. package/dist/index.cjs.map +1 -1
  19. package/dist/index.d.ts +0 -1
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +17 -7
  22. package/dist/index.js.map +1 -1
  23. package/dist/math.cjs +18 -3
  24. package/dist/math.cjs.map +1 -1
  25. package/dist/math.js +2 -2
  26. package/dist/string.js +1 -1
  27. package/dist/time.js +1 -1
  28. package/dist/traits/EconomicPrimitives.js +1 -1
  29. package/dist/traits/EconomicTraits.js +1 -1
  30. package/dist/types.d.ts.map +1 -1
  31. package/package.json +19 -9
  32. package/dist/__tests__/EconomicPrimitives.test.d.ts +0 -2
  33. package/dist/__tests__/EconomicPrimitives.test.d.ts.map +0 -1
  34. package/dist/__tests__/EconomicTraits.test.d.ts +0 -2
  35. package/dist/__tests__/EconomicTraits.test.d.ts.map +0 -1
  36. package/dist/__tests__/SimulationLabPrimitives.test.d.ts +0 -2
  37. package/dist/__tests__/SimulationLabPrimitives.test.d.ts.map +0 -1
  38. package/dist/__tests__/collections.test.d.ts +0 -2
  39. package/dist/__tests__/collections.test.d.ts.map +0 -1
  40. package/dist/__tests__/events.test.d.ts +0 -2
  41. package/dist/__tests__/events.test.d.ts.map +0 -1
  42. package/dist/__tests__/index.test.d.ts +0 -2
  43. package/dist/__tests__/index.test.d.ts.map +0 -1
  44. package/dist/__tests__/materials.test.d.ts +0 -2
  45. package/dist/__tests__/materials.test.d.ts.map +0 -1
  46. package/dist/__tests__/math.test.d.ts +0 -2
  47. package/dist/__tests__/math.test.d.ts.map +0 -1
  48. package/dist/__tests__/physics.test.d.ts +0 -2
  49. package/dist/__tests__/physics.test.d.ts.map +0 -1
  50. package/dist/__tests__/spatial.test.d.ts +0 -2
  51. package/dist/__tests__/spatial.test.d.ts.map +0 -1
  52. package/dist/__tests__/standard-library-fundamentals.test.d.ts +0 -2
  53. package/dist/__tests__/standard-library-fundamentals.test.d.ts.map +0 -1
  54. package/dist/__tests__/string-and-time-utilities.test.d.ts +0 -2
  55. package/dist/__tests__/string-and-time-utilities.test.d.ts.map +0 -1
  56. package/dist/__tests__/string-decoupled.test.d.ts +0 -2
  57. package/dist/__tests__/string-decoupled.test.d.ts.map +0 -1
  58. package/dist/__tests__/string.test.d.ts +0 -2
  59. package/dist/__tests__/string.test.d.ts.map +0 -1
  60. package/dist/__tests__/time.test.d.ts +0 -2
  61. package/dist/__tests__/time.test.d.ts.map +0 -1
  62. package/dist/chunk-DZHAVOCH.js.map +0 -1
  63. package/dist/chunk-PR4QN5HX.js +0 -43
  64. package/dist/chunk-XBA4ARST.js +0 -9313
  65. package/dist/chunk-XBA4ARST.js.map +0 -1
  66. package/dist/fs/__tests__/file-watch-system.test.d.ts +0 -2
  67. package/dist/fs/__tests__/file-watch-system.test.d.ts.map +0 -1
  68. package/dist/fs/__tests__/path-utilities.test.d.ts +0 -2
  69. package/dist/fs/__tests__/path-utilities.test.d.ts.map +0 -1
  70. package/dist/fs/__tests__/path.test.d.ts +0 -2
  71. package/dist/fs/__tests__/path.test.d.ts.map +0 -1
  72. package/dist/string.basic.test.d.ts +0 -5
  73. package/dist/string.basic.test.d.ts.map +0 -1
  74. package/dist/string.test.d.ts +0 -5
  75. package/dist/string.test.d.ts.map +0 -1
  76. package/dist/traits/__tests__/ARTraits.test.d.ts +0 -2
  77. package/dist/traits/__tests__/ARTraits.test.d.ts.map +0 -1
  78. package/dist/traits/__tests__/EconomicPrimitives.test.d.ts +0 -2
  79. package/dist/traits/__tests__/EconomicPrimitives.test.d.ts.map +0 -1
  80. package/dist/traits/__tests__/EconomicTraits.test.d.ts +0 -2
  81. package/dist/traits/__tests__/EconomicTraits.test.d.ts.map +0 -1
  82. package/error-utf8.log +0 -6
  83. package/error.log +0 -0
  84. package/src/__tests__/EconomicPrimitives.test.ts +0 -690
  85. package/src/__tests__/EconomicTraits.test.ts +0 -425
  86. package/src/__tests__/SimulationLabPrimitives.test.ts +0 -415
  87. package/src/__tests__/collections.test.ts +0 -182
  88. package/src/__tests__/events.test.ts +0 -135
  89. package/src/__tests__/index.test.ts +0 -14
  90. package/src/__tests__/materials.test.ts +0 -84
  91. package/src/__tests__/math.test.ts +0 -246
  92. package/src/__tests__/physics.test.ts +0 -83
  93. package/src/__tests__/spatial.test.ts +0 -333
  94. package/src/__tests__/standard-library-fundamentals.test.ts +0 -1318
  95. package/src/__tests__/string-and-time-utilities.test.ts +0 -1070
  96. package/src/__tests__/string-decoupled.test.ts +0 -13
  97. package/src/__tests__/string.test.ts +0 -164
  98. package/src/__tests__/time.test.ts +0 -110
  99. package/src/collections.ts +0 -850
  100. package/src/events.ts +0 -88
  101. package/src/fs/__tests__/file-watch-system.test.ts +0 -675
  102. package/src/fs/__tests__/path-utilities.test.ts +0 -375
  103. package/src/fs/__tests__/path.test.ts +0 -287
  104. package/src/fs/fs.ts +0 -692
  105. package/src/fs/index.ts +0 -194
  106. package/src/fs/path.ts +0 -310
  107. package/src/fs/watch.ts +0 -413
  108. package/src/index.ts +0 -476
  109. package/src/materials.ts +0 -109
  110. package/src/math.ts +0 -674
  111. package/src/physics.ts +0 -141
  112. package/src/spatial.ts +0 -320
  113. package/src/string.basic.test.ts +0 -14
  114. package/src/string.test.ts +0 -335
  115. package/src/string.ts +0 -531
  116. package/src/time.ts +0 -621
  117. package/src/traits/ARTraits.ts +0 -103
  118. package/src/traits/EconomicPrimitives.ts +0 -755
  119. package/src/traits/EconomicTraits.ts +0 -552
  120. package/src/traits/IoTTraits.ts +0 -102
  121. package/src/traits/SimulationLabPrimitives.ts +0 -650
  122. package/src/traits/SimulationLabTraits.ts +0 -191
  123. package/src/traits/VRRTraits.ts +0 -326
  124. package/src/traits/__tests__/ARTraits.test.ts +0 -8
  125. package/src/traits/__tests__/EconomicPrimitives.test.ts +0 -14
  126. package/src/traits/__tests__/EconomicTraits.test.ts +0 -16
  127. package/src/types.ts +0 -418
  128. package/std_error.log +0 -5
  129. package/tsconfig.json +0 -18
  130. package/tsup.config.ts +0 -20
  131. package/vitest.config.ts +0 -10
  132. /package/dist/{chunk-PR4QN5HX.js.map → chunk-DGUM43GV.js.map} +0 -0
package/dist/index.d.ts CHANGED
@@ -98,5 +98,4 @@ export declare function noop(): void;
98
98
  * Create a constant function
99
99
  */
100
100
  export declare function constant<T>(value: T): () => T;
101
- export * as fs from "./fs/index.js";
102
101
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@ import {
4
4
  List,
5
5
  PriorityQueue,
6
6
  SpatialGrid
7
- } from "./chunk-PFX2JM4X.js";
7
+ } from "./chunk-FAMOLKH3.js";
8
8
  import {
9
9
  DEG_TO_RAD,
10
10
  EPSILON,
@@ -46,7 +46,7 @@ import {
46
46
  vec3Math,
47
47
  vec3ToArray,
48
48
  vec4
49
- } from "./chunk-DZHAVOCH.js";
49
+ } from "./chunk-SOKH6FJ7.js";
50
50
  import {
51
51
  camelCase,
52
52
  capitalize,
@@ -121,9 +121,6 @@ import {
121
121
  waitUntil,
122
122
  withTimeout
123
123
  } from "./chunk-ZXVZAQCZ.js";
124
- import {
125
- fs_exports
126
- } from "./chunk-XBA4ARST.js";
127
124
  import {
128
125
  DEFAULT_BONDING_CURVE,
129
126
  DEFAULT_DEPRECIATION,
@@ -158,7 +155,7 @@ import {
158
155
  getRequiredPermissions,
159
156
  validateTraitComposition
160
157
  } from "./chunk-WS6W35YC.js";
161
- import "./chunk-PR4QN5HX.js";
158
+ import "./chunk-DGUM43GV.js";
162
159
 
163
160
  // src/spatial.ts
164
161
  var Vec3 = class _Vec3 {
@@ -167,6 +164,9 @@ var Vec3 = class _Vec3 {
167
164
  this.y = y;
168
165
  this.z = z;
169
166
  }
167
+ x;
168
+ y;
169
+ z;
170
170
  static zero() {
171
171
  return new _Vec3(0, 0, 0);
172
172
  }
@@ -243,6 +243,10 @@ var Quaternion = class _Quaternion {
243
243
  this.z = z;
244
244
  this.w = w;
245
245
  }
246
+ x;
247
+ y;
248
+ z;
249
+ w;
246
250
  static identity() {
247
251
  return new _Quaternion(0, 0, 0, 1);
248
252
  }
@@ -324,6 +328,9 @@ var Transform = class _Transform {
324
328
  this.rotation = rotation;
325
329
  this.scale = scale;
326
330
  }
331
+ position;
332
+ rotation;
333
+ scale;
327
334
  static identity() {
328
335
  return new _Transform();
329
336
  }
@@ -340,6 +347,8 @@ var Ray = class {
340
347
  this.origin = origin;
341
348
  this.direction = direction;
342
349
  }
350
+ origin;
351
+ direction;
343
352
  pointAt(t) {
344
353
  return this.origin.add(this.direction.mul(t));
345
354
  }
@@ -349,6 +358,8 @@ var AABB = class {
349
358
  this.min = min;
350
359
  this.max = max;
351
360
  }
361
+ min;
362
+ max;
352
363
  contains(point) {
353
364
  return point.x >= this.min.x && point.x <= this.max.x && point.y >= this.min.y && point.y <= this.max.y && point.z >= this.min.z && point.z <= this.max.z;
354
365
  }
@@ -1179,7 +1190,6 @@ export {
1179
1190
  formatDuration,
1180
1191
  formatNumber,
1181
1192
  fract,
1182
- fs_exports as fs,
1183
1193
  generateSweepCombinations,
1184
1194
  generateTxHash,
1185
1195
  getEconomicTrait,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/spatial.ts","../src/physics.ts","../src/materials.ts","../src/events.ts","../src/traits/SimulationLabPrimitives.ts","../src/traits/SimulationLabTraits.ts","../src/index.ts"],"sourcesContent":["/**\n * @holoscript/std — Spatial Module\n *\n * Provides spatial math utilities: Vec3, Quaternion, Transform, Ray, AABB, distance.\n * Used by the HoloScript runtime for spatial computing operations.\n *\n * @version 0.2.0\n * @module @holoscript/std/spatial\n */\n\n// =============================================================================\n// Vec3\n// =============================================================================\n\nexport class Vec3 {\n constructor(\n public x: number = 0,\n public y: number = 0,\n public z: number = 0\n ) {}\n\n static zero(): Vec3 {\n return new Vec3(0, 0, 0);\n }\n static one(): Vec3 {\n return new Vec3(1, 1, 1);\n }\n static up(): Vec3 {\n return new Vec3(0, 1, 0);\n }\n static down(): Vec3 {\n return new Vec3(0, -1, 0);\n }\n static forward(): Vec3 {\n return new Vec3(0, 0, -1);\n }\n static right(): Vec3 {\n return new Vec3(1, 0, 0);\n }\n\n add(other: Vec3): Vec3 {\n return new Vec3(this.x + other.x, this.y + other.y, this.z + other.z);\n }\n sub(other: Vec3): Vec3 {\n return new Vec3(this.x - other.x, this.y - other.y, this.z - other.z);\n }\n mul(s: number): Vec3 {\n return new Vec3(this.x * s, this.y * s, this.z * s);\n }\n div(s: number): Vec3 {\n return new Vec3(this.x / s, this.y / s, this.z / s);\n }\n\n dot(other: Vec3): number {\n return this.x * other.x + this.y * other.y + this.z * other.z;\n }\n cross(other: Vec3): Vec3 {\n return new Vec3(\n this.y * other.z - this.z * other.y,\n this.z * other.x - this.x * other.z,\n this.x * other.y - this.y * other.x\n );\n }\n\n length(): number {\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n }\n lengthSquared(): number {\n return this.x * this.x + this.y * this.y + this.z * this.z;\n }\n normalize(): Vec3 {\n const l = this.length();\n return l > 0 ? this.div(l) : Vec3.zero();\n }\n\n distanceTo(other: Vec3): number {\n return this.sub(other).length();\n }\n lerp(other: Vec3, t: number): Vec3 {\n return this.add(other.sub(this).mul(t));\n }\n\n toArray(): [number, number, number] {\n return [this.x, this.y, this.z];\n }\n static fromArray(arr: number[]): Vec3 {\n return new Vec3(arr[0] || 0, arr[1] || 0, arr[2] || 0);\n }\n\n equals(other: Vec3, epsilon = 1e-6): boolean {\n return (\n Math.abs(this.x - other.x) < epsilon &&\n Math.abs(this.y - other.y) < epsilon &&\n Math.abs(this.z - other.z) < epsilon\n );\n }\n\n toString(): string {\n return `Vec3(${this.x}, ${this.y}, ${this.z})`;\n }\n}\n\n// =============================================================================\n// Quaternion\n// =============================================================================\n\nexport class Quaternion {\n constructor(\n public x = 0,\n public y = 0,\n public z = 0,\n public w = 1\n ) {}\n\n static identity(): Quaternion {\n return new Quaternion(0, 0, 0, 1);\n }\n\n static fromEuler(x: number, y: number, z: number): Quaternion {\n const cx = Math.cos(x * 0.5),\n sx = Math.sin(x * 0.5);\n const cy = Math.cos(y * 0.5),\n sy = Math.sin(y * 0.5);\n const cz = Math.cos(z * 0.5),\n sz = Math.sin(z * 0.5);\n return new Quaternion(\n sx * cy * cz - cx * sy * sz,\n cx * sy * cz + sx * cy * sz,\n cx * cy * sz - sx * sy * cz,\n cx * cy * cz + sx * sy * sz\n );\n }\n\n static fromAxisAngle(axis: Vec3, angle: number): Quaternion {\n const half = angle * 0.5;\n const s = Math.sin(half);\n const n = axis.normalize();\n return new Quaternion(n.x * s, n.y * s, n.z * s, Math.cos(half));\n }\n\n multiply(other: Quaternion): Quaternion {\n return new Quaternion(\n this.w * other.x + this.x * other.w + this.y * other.z - this.z * other.y,\n this.w * other.y - this.x * other.z + this.y * other.w + this.z * other.x,\n this.w * other.z + this.x * other.y - this.y * other.x + this.z * other.w,\n this.w * other.w - this.x * other.x - this.y * other.y - this.z * other.z\n );\n }\n\n rotateVec3(v: Vec3): Vec3 {\n const u = new Vec3(this.x, this.y, this.z);\n const s = this.w;\n return u\n .mul(2 * u.dot(v))\n .add(v.mul(s * s - u.dot(u)))\n .add(u.cross(v).mul(2 * s));\n }\n\n slerp(other: Quaternion, t: number): Quaternion {\n let dot = this.x * other.x + this.y * other.y + this.z * other.z + this.w * other.w;\n const neg = dot < 0;\n if (neg) dot = -dot;\n if (dot > 0.9995) {\n // Linear interpolation for very close quaternions\n const r = new Quaternion(\n this.x + t * ((neg ? -other.x : other.x) - this.x),\n this.y + t * ((neg ? -other.y : other.y) - this.y),\n this.z + t * ((neg ? -other.z : other.z) - this.z),\n this.w + t * ((neg ? -other.w : other.w) - this.w)\n );\n const len = Math.sqrt(r.x * r.x + r.y * r.y + r.z * r.z + r.w * r.w);\n return new Quaternion(r.x / len, r.y / len, r.z / len, r.w / len);\n }\n const theta = Math.acos(dot);\n const sinTheta = Math.sin(theta);\n const a = Math.sin((1 - t) * theta) / sinTheta;\n const b = (Math.sin(t * theta) / sinTheta) * (neg ? -1 : 1);\n return new Quaternion(\n a * this.x + b * other.x,\n a * this.y + b * other.y,\n a * this.z + b * other.z,\n a * this.w + b * other.w\n );\n }\n\n normalize(): Quaternion {\n const len = Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w);\n return new Quaternion(this.x / len, this.y / len, this.z / len, this.w / len);\n }\n\n toEuler(): Vec3 {\n const sinr = 2 * (this.w * this.x + this.y * this.z);\n const cosr = 1 - 2 * (this.x * this.x + this.y * this.y);\n const sinp = 2 * (this.w * this.y - this.z * this.x);\n const siny = 2 * (this.w * this.z + this.x * this.y);\n const cosy = 1 - 2 * (this.y * this.y + this.z * this.z);\n return new Vec3(\n Math.atan2(sinr, cosr),\n Math.abs(sinp) >= 1 ? (Math.sign(sinp) * Math.PI) / 2 : Math.asin(sinp),\n Math.atan2(siny, cosy)\n );\n }\n}\n\n// =============================================================================\n// Transform\n// =============================================================================\n\nexport class Transform {\n constructor(\n public position: Vec3 = Vec3.zero(),\n public rotation: Quaternion = Quaternion.identity(),\n public scale: Vec3 = Vec3.one()\n ) {}\n\n static identity(): Transform {\n return new Transform();\n }\n\n transformPoint(point: Vec3): Vec3 {\n const scaled = new Vec3(point.x * this.scale.x, point.y * this.scale.y, point.z * this.scale.z);\n return this.rotation.rotateVec3(scaled).add(this.position);\n }\n\n transformDirection(dir: Vec3): Vec3 {\n return this.rotation.rotateVec3(dir);\n }\n}\n\n// =============================================================================\n// Ray & AABB\n// =============================================================================\n\nexport class Ray {\n constructor(\n public origin: Vec3,\n public direction: Vec3\n ) {}\n\n pointAt(t: number): Vec3 {\n return this.origin.add(this.direction.mul(t));\n }\n}\n\nexport class AABB {\n constructor(\n public min: Vec3,\n public max: Vec3\n ) {}\n\n contains(point: Vec3): boolean {\n return (\n point.x >= this.min.x &&\n point.x <= this.max.x &&\n point.y >= this.min.y &&\n point.y <= this.max.y &&\n point.z >= this.min.z &&\n point.z <= this.max.z\n );\n }\n\n intersects(other: AABB): boolean {\n return (\n this.min.x <= other.max.x &&\n this.max.x >= other.min.x &&\n this.min.y <= other.max.y &&\n this.max.y >= other.min.y &&\n this.min.z <= other.max.z &&\n this.max.z >= other.min.z\n );\n }\n\n center(): Vec3 {\n return this.min.add(this.max).div(2);\n }\n size(): Vec3 {\n return this.max.sub(this.min);\n }\n\n intersectsRay(ray: Ray): number | null {\n let tmin = (this.min.x - ray.origin.x) / ray.direction.x;\n let tmax = (this.max.x - ray.origin.x) / ray.direction.x;\n if (tmin > tmax) [tmin, tmax] = [tmax, tmin];\n\n let tymin = (this.min.y - ray.origin.y) / ray.direction.y;\n let tymax = (this.max.y - ray.origin.y) / ray.direction.y;\n if (tymin > tymax) [tymin, tymax] = [tymax, tymin];\n\n if (tmin > tymax || tymin > tmax) return null;\n tmin = Math.max(tmin, tymin);\n tmax = Math.min(tmax, tymax);\n\n let tzmin = (this.min.z - ray.origin.z) / ray.direction.z;\n let tzmax = (this.max.z - ray.origin.z) / ray.direction.z;\n if (tzmin > tzmax) [tzmin, tzmax] = [tzmax, tzmin];\n\n if (tmin > tzmax || tzmin > tmax) return null;\n return Math.max(tmin, tzmin);\n }\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\nexport function distance(a: Vec3, b: Vec3): number {\n return a.distanceTo(b);\n}\nexport function lerp(a: number, b: number, t: number): number {\n return a + (b - a) * t;\n}\nexport function clamp(v: number, min: number, max: number): number {\n return Math.min(Math.max(v, min), max);\n}\nexport function degToRad(deg: number): number {\n return deg * (Math.PI / 180);\n}\nexport function radToDeg(rad: number): number {\n return rad * (180 / Math.PI);\n}\n","/**\n * @holoscript/std — Physics Module\n *\n * Provides physics primitives: ColliderShape, RigidbodyConfig, ForceField, Joint.\n * Runtime representations for HoloScript physics blocks.\n *\n * @version 0.2.0\n * @module @holoscript/std/physics\n */\n\nimport type { Vec3 } from './spatial.js';\n\n// =============================================================================\n// Collider Shapes\n// =============================================================================\n\nexport type ColliderShapeType =\n | 'box'\n | 'sphere'\n | 'capsule'\n | 'mesh'\n | 'convex'\n | 'cylinder'\n | 'heightfield';\n\nexport interface ColliderConfig {\n shape: ColliderShapeType;\n isTrigger: boolean;\n friction: number;\n restitution: number;\n // Shape-specific\n radius?: number;\n halfExtents?: Vec3;\n height?: number;\n meshAsset?: string;\n}\n\nexport function createBoxCollider(\n halfExtents: Vec3,\n options?: Partial<ColliderConfig>\n): ColliderConfig {\n return {\n shape: 'box',\n isTrigger: false,\n friction: 0.5,\n restitution: 0.0,\n halfExtents,\n ...options,\n };\n}\n\nexport function createSphereCollider(\n radius: number,\n options?: Partial<ColliderConfig>\n): ColliderConfig {\n return { shape: 'sphere', isTrigger: false, friction: 0.5, restitution: 0.0, radius, ...options };\n}\n\nexport function createCapsuleCollider(\n radius: number,\n height: number,\n options?: Partial<ColliderConfig>\n): ColliderConfig {\n return {\n shape: 'capsule',\n isTrigger: false,\n friction: 0.5,\n restitution: 0.0,\n radius,\n height,\n ...options,\n };\n}\n\n// =============================================================================\n// Rigidbody\n// =============================================================================\n\nexport interface RigidbodyConfig {\n mass: number;\n useGravity: boolean;\n linearDamping: number;\n angularDamping: number;\n freezePosition: [boolean, boolean, boolean];\n freezeRotation: [boolean, boolean, boolean];\n isKinematic: boolean;\n}\n\nexport function createRigidbody(mass: number, options?: Partial<RigidbodyConfig>): RigidbodyConfig {\n return {\n mass,\n useGravity: true,\n linearDamping: 0.0,\n angularDamping: 0.05,\n freezePosition: [false, false, false],\n freezeRotation: [false, false, false],\n isKinematic: false,\n ...options,\n };\n}\n\n// =============================================================================\n// Force Fields\n// =============================================================================\n\nexport type ForceFieldType = 'directional' | 'radial' | 'vortex' | 'buoyancy';\n\nexport interface ForceFieldConfig {\n type: ForceFieldType;\n strength: number;\n direction?: Vec3;\n falloff: 'none' | 'linear' | 'quadratic';\n turbulence: number;\n}\n\n// =============================================================================\n// Joints\n// =============================================================================\n\nexport type JointType = 'hinge' | 'slider' | 'ball_socket' | 'fixed' | 'd6' | 'spring';\n\nexport interface JointConfig {\n type: JointType;\n connectedBody?: string;\n axis?: Vec3;\n limits?: [number, number];\n damping: number;\n springForce?: number;\n breakForce?: number;\n}\n\n// =============================================================================\n// Raycast Utility\n// =============================================================================\n\nexport interface RaycastHit {\n point: Vec3;\n normal: Vec3;\n distance: number;\n objectName: string;\n}\n","/**\n * @holoscript/std — Materials Module\n *\n * Provides PBR material types, texture map definitions, and material presets.\n * Maps directly to HoloScript material_block grammar constructs.\n *\n * @version 0.2.0\n * @module @holoscript/std/materials\n */\n\n// =============================================================================\n// PBR Material\n// =============================================================================\n\nexport interface PBRMaterial {\n name: string;\n baseColor: string; // hex color\n roughness: number; // 0.0 - 1.0\n metallic: number; // 0.0 - 1.0\n emissiveColor?: string;\n emissiveIntensity?: number;\n opacity?: number; // 0.0 - 1.0\n ior?: number; // Index of refraction (glass ~1.5, water ~1.33)\n subsurface?: number;\n clearcoat?: number;\n clearcoatRoughness?: number;\n // Texture maps\n albedoMap?: string;\n normalMap?: string;\n roughnessMap?: string;\n metallicMap?: string;\n emissionMap?: string;\n aoMap?: string;\n heightMap?: string;\n opacityMap?: string;\n displacementMap?: string;\n}\n\nexport interface UnlitMaterial {\n name: string;\n color: string;\n emissiveColor?: string;\n emissiveIntensity?: number;\n opacity?: number;\n texture?: string;\n}\n\n// =============================================================================\n// Material Presets\n// =============================================================================\n\nexport const MATERIAL_PRESETS: Record<string, Partial<PBRMaterial>> = {\n metal: { roughness: 0.2, metallic: 1.0 },\n wood: { roughness: 0.85, metallic: 0.0, baseColor: '#8B6914' },\n glass: { roughness: 0.05, metallic: 0.0, opacity: 0.3, ior: 1.5 },\n plastic: { roughness: 0.4, metallic: 0.0 },\n concrete: { roughness: 0.95, metallic: 0.0, baseColor: '#808080' },\n fabric: { roughness: 0.9, metallic: 0.0, subsurface: 0.2 },\n water: { roughness: 0.05, metallic: 0.0, opacity: 0.7, ior: 1.33 },\n rubber: { roughness: 0.95, metallic: 0.0, baseColor: '#222222' },\n marble: { roughness: 0.3, metallic: 0.0, baseColor: '#f0f0f0' },\n skin: { roughness: 0.6, metallic: 0.0, subsurface: 0.5 },\n foliage: { roughness: 0.8, metallic: 0.0, baseColor: '#2d5a27', subsurface: 0.3 },\n chrome: { roughness: 0.05, metallic: 1.0, baseColor: '#cccccc' },\n gold: { roughness: 0.2, metallic: 1.0, baseColor: '#ffd700' },\n copper: { roughness: 0.3, metallic: 1.0, baseColor: '#b87333' },\n ice: { roughness: 0.1, metallic: 0.0, opacity: 0.8, ior: 1.31 },\n};\n\nexport function createPBRMaterial(\n name: string,\n preset?: keyof typeof MATERIAL_PRESETS,\n overrides?: Partial<PBRMaterial>\n): PBRMaterial {\n const base = preset ? MATERIAL_PRESETS[preset] : {};\n return {\n name,\n baseColor: '#ffffff',\n roughness: 0.5,\n metallic: 0.0,\n ...base,\n ...overrides,\n };\n}\n\n// =============================================================================\n// Texture Map Types\n// =============================================================================\n\nexport type TextureMapType =\n | 'albedo_map'\n | 'normal_map'\n | 'roughness_map'\n | 'metallic_map'\n | 'emission_map'\n | 'ao_map'\n | 'height_map'\n | 'opacity_map'\n | 'displacement_map'\n | 'specular_map'\n | 'clearcoat_map';\n\nexport interface TextureConfig {\n source: string;\n tiling?: [number, number];\n offset?: [number, number];\n filter?: 'linear' | 'nearest';\n wrap?: 'repeat' | 'clamp' | 'mirror';\n}\n","/**\n * @holoscript/std — Events Module\n *\n * Provides a typed event bus for HoloScript compositions.\n * Supports emit, on, once, off, and wildcard listeners.\n *\n * @version 0.2.0\n * @module @holoscript/std/events\n */\n\nexport type EventHandler<T = any> = (data: T) => void;\n\ninterface Listener {\n handler: EventHandler;\n once: boolean;\n}\n\nexport class EventBus {\n private listeners: Map<string, Listener[]> = new Map();\n private wildcardListeners: Listener[] = [];\n\n /** Register an event listener. */\n on<T = any>(event: string, handler: EventHandler<T>): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, []);\n const listener: Listener = { handler, once: false };\n this.listeners.get(event)!.push(listener);\n return () => this.off(event, handler);\n }\n\n /** Register a one-time event listener. */\n once<T = any>(event: string, handler: EventHandler<T>): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, []);\n const listener: Listener = { handler, once: true };\n this.listeners.get(event)!.push(listener);\n return () => this.off(event, handler);\n }\n\n /** Remove an event listener. */\n off(event: string, handler: EventHandler): void {\n const list = this.listeners.get(event);\n if (!list) return;\n this.listeners.set(\n event,\n list.filter((l) => l.handler !== handler)\n );\n }\n\n /** Emit an event to all registered listeners. */\n emit<T = any>(event: string, data?: T): void {\n // Fire specific listeners\n const list = this.listeners.get(event);\n if (list) {\n const remaining: Listener[] = [];\n for (const l of list) {\n l.handler(data);\n if (!l.once) remaining.push(l);\n }\n this.listeners.set(event, remaining);\n }\n // Fire wildcard listeners\n for (const l of this.wildcardListeners) {\n l.handler({ event, data });\n }\n }\n\n /** Listen to all events. */\n onAny(handler: EventHandler<{ event: string; data: any }>): () => void {\n const listener: Listener = { handler, once: false };\n this.wildcardListeners.push(listener);\n return () => {\n this.wildcardListeners = this.wildcardListeners.filter((l) => l !== listener);\n };\n }\n\n /** Remove all listeners. */\n clear(): void {\n this.listeners.clear();\n this.wildcardListeners = [];\n }\n\n /** Get count of listeners for an event (or all events). */\n listenerCount(event?: string): number {\n if (event) return (this.listeners.get(event) || []).length;\n let total = this.wildcardListeners.length;\n for (const [, list] of this.listeners) total += list.length;\n return total;\n }\n}\n","/**\n * @fileoverview SimulationLab Primitives - Runtime math and types for hypothesis testing\n * @module @holoscript/std/simulation\n *\n * Provides the mathematical building blocks for scientific hypothesis testing\n * in HoloScript simulations. Run N epochs with parameter sweeps, collect metrics,\n * and perform statistical analysis to prove or disprove hypotheses.\n *\n * The universe gets one sample. HoloScript gives you infinite.\n *\n * @version 1.0.0\n * @category simulation\n */\n\n// =============================================================================\n// CORE TYPES\n// =============================================================================\n\n/**\n * Direction of expected effect in a hypothesis.\n */\nexport type HypothesisDirection = 'greater' | 'less' | 'different' | 'equal';\n\n/**\n * Status of a simulation run.\n */\nexport type SimulationStatus = 'pending' | 'running' | 'completed' | 'failed';\n\n/**\n * A scientific hypothesis to test.\n */\nexport interface Hypothesis {\n /** Human-readable description */\n description: string;\n /** The null hypothesis (what we're trying to reject) */\n null_hypothesis: string;\n /** The alternative hypothesis (what we're testing for) */\n alternative_hypothesis: string;\n /** Expected direction of effect */\n direction: HypothesisDirection;\n /** Significance threshold (default: 0.05) */\n alpha: number;\n}\n\n/**\n * A range of parameter values to sweep.\n */\nexport interface ParameterRange {\n /** Parameter name */\n name: string;\n /** Start value */\n min: number;\n /** End value */\n max: number;\n /** Step size */\n step: number;\n}\n\n/**\n * A set of discrete parameter values to sweep.\n */\nexport interface ParameterSet {\n /** Parameter name */\n name: string;\n /** Discrete values to test */\n values: number[];\n}\n\n/**\n * Either a range or discrete set of parameter values.\n */\nexport type ParameterSweep = ParameterRange | ParameterSet;\n\n/**\n * Metrics collected from a single simulation run.\n */\nexport interface SimulationMetrics {\n /** Named metric values */\n values: Record<string, number>;\n /** Seed used for this run */\n seed: number;\n /** Parameter values used */\n params: Record<string, number>;\n /** Wall-clock time in ms */\n durationMs: number;\n}\n\n/**\n * Result of a statistical test.\n */\nexport interface StatisticalResult {\n /** Test statistic value */\n statistic: number;\n /** p-value (probability of observing result under null hypothesis) */\n pValue: number;\n /** Whether the null hypothesis is rejected at the given alpha */\n significant: boolean;\n /** Confidence interval [lower, upper] */\n confidenceInterval: [number, number];\n /** Effect size (Cohen's d for t-test) */\n effectSize: number;\n /** Name of the test used */\n testName: string;\n /** Number of samples */\n sampleSize: number;\n}\n\n/**\n * Complete simulation experiment result.\n */\nexport interface ExperimentResult {\n /** The hypothesis tested */\n hypothesis: Hypothesis;\n /** Statistical results per metric */\n results: Record<string, StatisticalResult>;\n /** All collected metrics */\n metrics: SimulationMetrics[];\n /** Total epochs run */\n totalEpochs: number;\n /** Total wall-clock time */\n totalDurationMs: number;\n /** Status */\n status: SimulationStatus;\n /** Composition hash for reproducibility */\n compositionHash: string;\n}\n\n// =============================================================================\n// PARAMETER SWEEP GENERATION\n// =============================================================================\n\n/**\n * Check if a parameter sweep is a range (vs discrete set).\n */\nexport function isParameterRange(sweep: ParameterSweep): sweep is ParameterRange {\n return 'min' in sweep && 'max' in sweep && 'step' in sweep;\n}\n\n/**\n * Generate all values from a parameter sweep.\n */\nexport function expandSweep(sweep: ParameterSweep): number[] {\n if (!isParameterRange(sweep)) {\n return (sweep as ParameterSet).values.slice();\n }\n\n const range = sweep as ParameterRange;\n if (range.step <= 0) return [range.min];\n if (range.min > range.max) return [];\n\n const values: number[] = [];\n for (let v = range.min; v <= range.max + range.step * 0.001; v += range.step) {\n values.push(Math.round(v * 1e10) / 1e10); // Avoid floating point drift\n }\n return values;\n}\n\n/**\n * Generate all parameter combinations from multiple sweeps.\n * Returns an array of parameter maps.\n */\nexport function generateSweepCombinations(sweeps: ParameterSweep[]): Record<string, number>[] {\n if (sweeps.length === 0) return [{}];\n\n const expanded = sweeps.map((s) => ({\n name: s.name,\n values: expandSweep(s),\n }));\n\n // Cartesian product\n let combinations: Record<string, number>[] = [{}];\n\n for (const { name, values } of expanded) {\n const newCombinations: Record<string, number>[] = [];\n for (const combo of combinations) {\n for (const val of values) {\n newCombinations.push({ ...combo, [name]: val });\n }\n }\n combinations = newCombinations;\n }\n\n return combinations;\n}\n\n// =============================================================================\n// STATISTICAL FUNCTIONS\n// =============================================================================\n\n/**\n * Calculate the arithmetic mean of an array of numbers.\n */\nexport function mean(data: number[]): number {\n if (data.length === 0) return 0;\n return data.reduce((sum, v) => sum + v, 0) / data.length;\n}\n\n/**\n * Calculate the sample variance (Bessel's correction).\n */\nexport function variance(data: number[]): number {\n if (data.length < 2) return 0;\n const m = mean(data);\n const squaredDiffs = data.reduce((sum, v) => sum + (v - m) ** 2, 0);\n return squaredDiffs / (data.length - 1);\n}\n\n/**\n * Calculate the sample standard deviation.\n */\nexport function standardDeviation(data: number[]): number {\n return Math.sqrt(variance(data));\n}\n\n/**\n * Calculate the standard error of the mean.\n */\nexport function standardError(data: number[]): number {\n if (data.length === 0) return 0;\n return standardDeviation(data) / Math.sqrt(data.length);\n}\n\n/**\n * Calculate Cohen's d effect size between two groups.\n * d = (mean1 - mean2) / pooled_std\n */\nexport function cohensD(group1: number[], group2: number[]): number {\n if (group1.length < 2 || group2.length < 2) return 0;\n\n const m1 = mean(group1);\n const m2 = mean(group2);\n const v1 = variance(group1);\n const v2 = variance(group2);\n\n // Pooled standard deviation\n const n1 = group1.length;\n const n2 = group2.length;\n const pooledVar = ((n1 - 1) * v1 + (n2 - 1) * v2) / (n1 + n2 - 2);\n const pooledStd = Math.sqrt(pooledVar);\n\n if (pooledStd === 0) return 0;\n return (m1 - m2) / pooledStd;\n}\n\n/**\n * Two-sample independent t-test.\n *\n * Tests whether two groups have significantly different means.\n * Uses Welch's t-test (does not assume equal variances).\n */\nexport function tTest(\n group1: number[],\n group2: number[],\n alpha: number = 0.05,\n direction: HypothesisDirection = 'different'\n): StatisticalResult {\n const n1 = group1.length;\n const n2 = group2.length;\n\n if (n1 < 2 || n2 < 2) {\n return {\n statistic: 0,\n pValue: 1,\n significant: false,\n confidenceInterval: [0, 0],\n effectSize: 0,\n testName: 'welch_t_test',\n sampleSize: n1 + n2,\n };\n }\n\n const m1 = mean(group1);\n const m2 = mean(group2);\n const v1 = variance(group1);\n const v2 = variance(group2);\n const se = Math.sqrt(v1 / n1 + v2 / n2);\n\n if (se === 0) {\n return {\n statistic: 0,\n pValue: m1 === m2 ? 1 : 0,\n significant: m1 !== m2,\n confidenceInterval: [m1 - m2, m1 - m2],\n effectSize: 0,\n testName: 'welch_t_test',\n sampleSize: n1 + n2,\n };\n }\n\n const t = (m1 - m2) / se;\n\n // Welch–Satterthwaite degrees of freedom\n const num = (v1 / n1 + v2 / n2) ** 2;\n const den = (v1 / n1) ** 2 / (n1 - 1) + (v2 / n2) ** 2 / (n2 - 1);\n const df = num / den;\n\n // Approximate p-value using the t-distribution CDF approximation\n const pTwoTailed = tDistPValue(Math.abs(t), df);\n let pValue: number;\n\n switch (direction) {\n case 'greater':\n pValue = t > 0 ? pTwoTailed / 2 : 1 - pTwoTailed / 2;\n break;\n case 'less':\n pValue = t < 0 ? pTwoTailed / 2 : 1 - pTwoTailed / 2;\n break;\n case 'equal':\n pValue = 1 - pTwoTailed;\n break;\n default: // 'different'\n pValue = pTwoTailed;\n }\n\n // Confidence interval for the difference in means\n const tCrit = tDistCritical(alpha, df);\n const diff = m1 - m2;\n const ci: [number, number] = [diff - tCrit * se, diff + tCrit * se];\n\n return {\n statistic: t,\n pValue,\n significant: pValue < alpha,\n confidenceInterval: ci,\n effectSize: cohensD(group1, group2),\n testName: 'welch_t_test',\n sampleSize: n1 + n2,\n };\n}\n\n/**\n * One-sample t-test against a known value.\n */\nexport function oneSampleTTest(\n data: number[],\n populationMean: number,\n alpha: number = 0.05,\n direction: HypothesisDirection = 'different'\n): StatisticalResult {\n const n = data.length;\n\n if (n < 2) {\n return {\n statistic: 0,\n pValue: 1,\n significant: false,\n confidenceInterval: [0, 0],\n effectSize: 0,\n testName: 'one_sample_t_test',\n sampleSize: n,\n };\n }\n\n const m = mean(data);\n const se = standardError(data);\n\n if (se === 0) {\n return {\n statistic: 0,\n pValue: m === populationMean ? 1 : 0,\n significant: m !== populationMean,\n confidenceInterval: [m, m],\n effectSize: 0,\n testName: 'one_sample_t_test',\n sampleSize: n,\n };\n }\n\n const t = (m - populationMean) / se;\n const df = n - 1;\n\n const pTwoTailed = tDistPValue(Math.abs(t), df);\n let pValue: number;\n\n switch (direction) {\n case 'greater':\n pValue = t > 0 ? pTwoTailed / 2 : 1 - pTwoTailed / 2;\n break;\n case 'less':\n pValue = t < 0 ? pTwoTailed / 2 : 1 - pTwoTailed / 2;\n break;\n default:\n pValue = pTwoTailed;\n }\n\n const tCrit = tDistCritical(alpha, df);\n const ci: [number, number] = [m - tCrit * se, m + tCrit * se];\n\n const sd = standardDeviation(data);\n const effectSize = sd > 0 ? (m - populationMean) / sd : 0;\n\n return {\n statistic: t,\n pValue,\n significant: pValue < alpha,\n confidenceInterval: ci,\n effectSize,\n testName: 'one_sample_t_test',\n sampleSize: n,\n };\n}\n\n/**\n * Mann-Whitney U test (non-parametric alternative to t-test).\n * Tests whether one group tends to have larger values than the other.\n */\nexport function mannWhitneyU(\n group1: number[],\n group2: number[],\n alpha: number = 0.05\n): StatisticalResult {\n const n1 = group1.length;\n const n2 = group2.length;\n\n if (n1 === 0 || n2 === 0) {\n return {\n statistic: 0,\n pValue: 1,\n significant: false,\n confidenceInterval: [0, 0],\n effectSize: 0,\n testName: 'mann_whitney_u',\n sampleSize: n1 + n2,\n };\n }\n\n // Count how many times group1 values exceed group2 values\n let u1 = 0;\n for (const a of group1) {\n for (const b of group2) {\n if (a > b) u1++;\n else if (a === b) u1 += 0.5;\n }\n }\n\n const u2 = n1 * n2 - u1;\n const u = Math.min(u1, u2);\n\n // Normal approximation for larger samples\n const meanU = (n1 * n2) / 2;\n const sigmaU = Math.sqrt((n1 * n2 * (n1 + n2 + 1)) / 12);\n\n if (sigmaU === 0) {\n return {\n statistic: u,\n pValue: 1,\n significant: false,\n confidenceInterval: [0, 0],\n effectSize: 0,\n testName: 'mann_whitney_u',\n sampleSize: n1 + n2,\n };\n }\n\n const z = (u - meanU) / sigmaU;\n const pValue = 2 * normalCDF(-Math.abs(z)); // Two-tailed\n\n // Effect size: rank-biserial correlation r = 1 - 2U/(n1*n2)\n const effectSize = 1 - (2 * u) / (n1 * n2);\n\n return {\n statistic: u,\n pValue,\n significant: pValue < alpha,\n confidenceInterval: [0, 0], // CI not standard for U-test\n effectSize,\n testName: 'mann_whitney_u',\n sampleSize: n1 + n2,\n };\n}\n\n/**\n * Chi-squared goodness-of-fit test.\n * Tests whether observed frequencies match expected frequencies.\n */\nexport function chiSquaredTest(\n observed: number[],\n expected: number[],\n alpha: number = 0.05\n): StatisticalResult {\n if (observed.length !== expected.length || observed.length === 0) {\n return {\n statistic: 0,\n pValue: 1,\n significant: false,\n confidenceInterval: [0, 0],\n effectSize: 0,\n testName: 'chi_squared',\n sampleSize: 0,\n };\n }\n\n let chiSq = 0;\n let totalObserved = 0;\n\n for (let i = 0; i < observed.length; i++) {\n if (expected[i] <= 0) continue;\n chiSq += (observed[i] - expected[i]) ** 2 / expected[i];\n totalObserved += observed[i];\n }\n\n const df = observed.length - 1;\n if (df <= 0) {\n return {\n statistic: chiSq,\n pValue: 1,\n significant: false,\n confidenceInterval: [0, 0],\n effectSize: 0,\n testName: 'chi_squared',\n sampleSize: totalObserved,\n };\n }\n\n // Approximate p-value using Wilson-Hilferty approximation\n const pValue = chiSquaredPValue(chiSq, df);\n\n // Cramér's V effect size\n const k = observed.length;\n const effectSize = totalObserved > 0 ? Math.sqrt(chiSq / (totalObserved * (k - 1))) : 0;\n\n return {\n statistic: chiSq,\n pValue,\n significant: pValue < alpha,\n confidenceInterval: [0, 0],\n effectSize,\n testName: 'chi_squared',\n sampleSize: totalObserved,\n };\n}\n\n// =============================================================================\n// METRIC AGGREGATION\n// =============================================================================\n\n/**\n * Extract a named metric from an array of simulation results.\n */\nexport function extractMetric(results: SimulationMetrics[], metricName: string): number[] {\n return results.filter((r) => metricName in r.values).map((r) => r.values[metricName]);\n}\n\n/**\n * Group simulation results by a parameter value.\n */\nexport function groupByParameter(\n results: SimulationMetrics[],\n paramName: string\n): Map<number, SimulationMetrics[]> {\n const groups = new Map<number, SimulationMetrics[]>();\n for (const r of results) {\n const val = r.params[paramName];\n if (val === undefined) continue;\n if (!groups.has(val)) groups.set(val, []);\n groups.get(val)!.push(r);\n }\n return groups;\n}\n\n/**\n * Generate a summary of metrics across all runs.\n */\nexport function summarizeMetrics(\n results: SimulationMetrics[],\n metricName: string\n): { mean: number; std: number; min: number; max: number; n: number } {\n const values = extractMetric(results, metricName);\n if (values.length === 0) {\n return { mean: 0, std: 0, min: 0, max: 0, n: 0 };\n }\n return {\n mean: mean(values),\n std: standardDeviation(values),\n min: Math.min(...values),\n max: Math.max(...values),\n n: values.length,\n };\n}\n\n// =============================================================================\n// INTERNAL MATH HELPERS\n// =============================================================================\n\n/**\n * Standard normal CDF approximation (Abramowitz and Stegun 26.2.17).\n * Accurate to ~1.5e-7.\n */\nfunction normalCDF(x: number): number {\n if (x < -8) return 0;\n if (x > 8) return 1;\n\n const a1 = 0.254829592;\n const a2 = -0.284496736;\n const a3 = 1.421413741;\n const a4 = -1.453152027;\n const a5 = 1.061405429;\n const p = 0.3275911;\n\n const sign = x < 0 ? -1 : 1;\n const absX = Math.abs(x);\n const t = 1.0 / (1.0 + p * absX);\n const y = 1.0 - ((((a5 * t + a4) * t + a3) * t + a2) * t + a1) * t * Math.exp((-absX * absX) / 2);\n\n return 0.5 * (1.0 + sign * y);\n}\n\n/**\n * Approximate two-tailed p-value from t-distribution.\n * Uses the Inamdar-Griessammer approximation for large df.\n */\nfunction tDistPValue(absT: number, df: number): number {\n if (df <= 0) return 1;\n // Convert t to approximately normal z for large df\n const z = (absT * (1 - 1 / (4 * df))) / Math.sqrt(1 + (absT * absT) / (2 * df));\n return 2 * (1 - normalCDF(z));\n}\n\n/**\n * Approximate critical t-value for a given alpha and df.\n */\nfunction tDistCritical(alpha: number, df: number): number {\n // Approximate using normal quantile adjusted for df\n const p = 1 - alpha / 2;\n // Rational approximation of the normal quantile (Beasley-Springer-Moro)\n const a = p - 0.5;\n const r = a * a;\n let z =\n (a * (2.50662823884 + r * (-18.61500062529 + r * (41.39119773534 + r * -25.44106049637)))) /\n (1 + r * (-8.4735109309 + r * (23.08336743743 + r * (-21.06224101826 + r * 3.13082909833))));\n\n // Cornish-Fisher expansion for t-distribution\n const g1 = (z ** 3 + z) / (4 * df);\n const g2 = (5 * z ** 5 + 16 * z ** 3 + 3 * z) / (96 * df * df);\n z = z + g1 + g2;\n\n return Math.abs(z);\n}\n\n/**\n * Approximate chi-squared p-value using Wilson-Hilferty.\n */\nfunction chiSquaredPValue(chiSq: number, df: number): number {\n if (df <= 0) return 1;\n if (chiSq <= 0) return 1;\n // Wilson-Hilferty transformation to normal\n const z = Math.pow(chiSq / df, 1 / 3) - (1 - 2 / (9 * df));\n const denom = Math.sqrt(2 / (9 * df));\n return 1 - normalCDF(z / denom);\n}\n","/**\n * @fileoverview SimulationLab Trait Definition for HoloScript\n * @module @holoscript/std/traits\n *\n * Defines the @simulation_lab trait that enables hypothesis testing\n * on any HoloScript composition. Attach this trait to run parameter sweeps,\n * collect metrics across N epochs, and produce statistical results.\n *\n * Composes with all economic traits for economy stress testing.\n *\n * @version 1.0.0\n * @category simulation\n */\n\nimport type { TraitDefinition } from '../types.js';\n\n/**\n * Extended trait definition with simulation-specific metadata.\n */\nexport interface SimulationTraitDefinition extends TraitDefinition {\n /** Compiler hints for batch execution */\n compiler_hints?: {\n requires_runtime?: string[];\n thread_safety?: 'main_thread' | 'worker_thread' | 'any';\n performance_budget_ms?: number;\n batch_mode?: boolean;\n };\n /** Which economic/VR traits this composes with */\n composesWith: string[];\n}\n\n// =============================================================================\n// TRAIT DEFINITION\n// =============================================================================\n\n/**\n * The SimulationLab trait.\n */\nexport const SimulationLabTraits: Record<string, SimulationTraitDefinition> = {\n simulation_lab: {\n name: '@simulation_lab',\n description:\n 'Attaches scientific hypothesis testing to any HoloScript composition. ' +\n 'Enables parameter sweeps, multi-epoch execution, statistical analysis, ' +\n 'and exportable results. The universe gets one sample — HoloScript gives ' +\n 'you infinite. Results are marketplace-sellable as verified simulation data.',\n params: {\n hypothesis: {\n type: 'string',\n required: true,\n description: 'Human-readable hypothesis description.',\n },\n null_hypothesis: {\n type: 'string',\n required: false,\n default: '',\n description: 'Formal null hypothesis (H0). Auto-generated if empty.',\n },\n alternative_hypothesis: {\n type: 'string',\n required: false,\n default: '',\n description: 'Formal alternative hypothesis (H1). Auto-generated if empty.',\n },\n direction: {\n type: 'string',\n required: false,\n default: 'different',\n description: 'Expected direction of effect: greater | less | different | equal.',\n },\n epochs: {\n type: 'number',\n required: false,\n default: 1000,\n description: 'Number of simulation runs per parameter combination. More = higher power.',\n },\n seed_start: {\n type: 'number',\n required: false,\n default: 0,\n description: 'Starting seed for reproducibility. Seeds increment per epoch.',\n },\n confidence_level: {\n type: 'number',\n required: false,\n default: 0.95,\n description: 'Confidence level for statistical tests (0.0 - 1.0). Default 0.95 = α=0.05.',\n },\n metrics: {\n type: 'string[]',\n required: true,\n description:\n 'List of metric names to collect each epoch. Must match emitted metric events.',\n },\n statistical_test: {\n type: 'string',\n required: false,\n default: 'auto',\n description:\n 'Statistical test to use: t_test | mann_whitney_u | chi_squared | auto. ' +\n 'Auto selects based on data distribution.',\n },\n export_training_data: {\n type: 'boolean',\n required: false,\n default: false,\n description: 'Whether to export results as training data for DataForge pipeline.',\n },\n marketplace_publishable: {\n type: 'boolean',\n required: false,\n default: false,\n description:\n 'Whether to package results for marketplace listing as verified simulation data.',\n },\n max_duration_ms: {\n type: 'number',\n required: false,\n default: 300000,\n description:\n 'Maximum wall-clock time for the entire experiment (5 min default). ' +\n 'Prevents runaway simulations.',\n },\n worker_count: {\n type: 'number',\n required: false,\n default: 4,\n description: 'Number of parallel workers for epoch execution.',\n },\n },\n validator: (params) => {\n if (!params.hypothesis || typeof params.hypothesis !== 'string') return false;\n if (!params.metrics || !Array.isArray(params.metrics) || params.metrics.length === 0)\n return false;\n if (params.epochs !== undefined && (params.epochs < 1 || params.epochs > 1000000))\n return false;\n if (\n params.confidence_level !== undefined &&\n (params.confidence_level <= 0 || params.confidence_level >= 1)\n )\n return false;\n if (params.direction !== undefined) {\n if (!['greater', 'less', 'different', 'equal'].includes(params.direction)) return false;\n }\n if (params.statistical_test !== undefined) {\n if (!['t_test', 'mann_whitney_u', 'chi_squared', 'auto'].includes(params.statistical_test))\n return false;\n }\n return true;\n },\n composesWith: [\n '@tradeable',\n '@depreciating',\n '@bonding_curved',\n '@taxable_wealth',\n '@pid_controlled',\n ],\n compiler_hints: {\n requires_runtime: [\n 'SimulationRuntime.runExperiment',\n 'SimulationRuntime.collectMetrics',\n 'SimulationRuntime.runStatisticalTest',\n 'SimulationRuntime.exportResults',\n ],\n thread_safety: 'worker_thread',\n performance_budget_ms: 300000, // Experiment budget, not per-frame\n batch_mode: true,\n },\n },\n};\n\n// =============================================================================\n// TRAIT UTILITIES\n// =============================================================================\n\n/**\n * Get all simulation trait names.\n */\nexport function getSimulationTraitNames(): string[] {\n return Object.keys(SimulationLabTraits).map((k) => SimulationLabTraits[k].name);\n}\n\n/**\n * Look up a simulation trait definition by name.\n */\nexport function getSimulationTrait(name: string): SimulationTraitDefinition | undefined {\n const key = name.startsWith('@') ? name.slice(1) : name;\n return SimulationLabTraits[key];\n}\n\nexport default SimulationLabTraits;\n","/**\n * @holoscript/std - Standard Library for HoloScript Plus\n *\n * Provides core types, math utilities, collections, string operations,\n * time management, spatial math, physics primitives, materials, and events\n * for HoloScript Plus programs.\n *\n * @example\n * ```hsplus\n * import { Vec3, createPBRMaterial, EventBus } from \"@holoscript/std\";\n *\n * let position = Vec3(0, 1, 0);\n * let steel = createPBRMaterial(\"Steel\", \"metal\");\n * let bus = new EventBus();\n * ```\n */\n\n// Re-export everything from types.js\nexport * from './types.js';\n\n// Spatial math (v4.2)\nexport {\n Vec3,\n Quaternion,\n Transform,\n Ray,\n AABB,\n distance,\n lerp as spatialLerp,\n clamp as spatialClamp,\n degToRad as spatialDegToRad,\n radToDeg as spatialRadToDeg,\n} from './spatial.js';\n\n// Physics primitives (v4.2)\nexport {\n createBoxCollider,\n createSphereCollider,\n createCapsuleCollider,\n createRigidbody,\n} from './physics.js';\nexport type {\n ColliderConfig,\n ColliderShapeType,\n RigidbodyConfig,\n ForceFieldConfig,\n ForceFieldType,\n JointConfig,\n JointType,\n RaycastHit,\n} from './physics.js';\n\n// Materials (v4.2)\nexport { MATERIAL_PRESETS, createPBRMaterial } from './materials.js';\nexport type { PBRMaterial, UnlitMaterial, TextureMapType, TextureConfig } from './materials.js';\n\n// Events (v4.2)\nexport { EventBus } from './events.js';\nexport type { EventHandler } from './events.js';\n\n// Math utilities - export objects from math.ts\nexport {\n // Constants\n PI,\n TAU,\n HALF_PI,\n EPSILON,\n DEG_TO_RAD,\n RAD_TO_DEG,\n\n // Basic math functions\n clamp,\n lerp,\n inverseLerp,\n remap,\n smoothstep,\n smootherstep,\n sign,\n fract,\n mod,\n step,\n degToRad,\n radToDeg,\n\n // Math utility objects (access methods like vec2Math.add(), vec3Math.cross(), etc.)\n vec2Math,\n vec3Math,\n quatMath,\n aabbMath,\n noise,\n random,\n} from './math.js';\n\n// Re-export with alternate names for convenience\nexport { degToRad as toRadians, radToDeg as toDegrees } from './math.js';\n\n// Collections\nexport {\n List,\n HoloMap,\n HoloSet,\n HoloMap as Map,\n HoloSet as Set,\n SpatialGrid,\n PriorityQueue,\n} from './collections.js';\n\n// String utilities\nexport {\n isBlank,\n isNotBlank,\n capitalize,\n titleCase,\n camelCase,\n pascalCase,\n snakeCase,\n kebabCase,\n constantCase,\n padLeft,\n padRight,\n center,\n truncate,\n truncateMiddle,\n repeat,\n reverse,\n count,\n containsIgnoreCase,\n startsWithIgnoreCase,\n endsWithIgnoreCase,\n removeWhitespace,\n collapseWhitespace,\n removePrefix,\n removeSuffix,\n wrap as wrapString,\n unwrap,\n lines,\n words,\n chars,\n join,\n format,\n formatNumber,\n numberWithCommas,\n formatBytes,\n formatDuration,\n escapeHtml,\n unescapeHtml,\n escapeRegex,\n slugify,\n isValidIdentifier,\n isNumeric,\n isAlphanumeric,\n isAlpha,\n randomString,\n uuid,\n indent,\n dedent,\n wordWrap,\n levenshtein,\n similarity,\n extractTraits,\n} from './string.js';\n\n// Economic primitives (v4.3)\nexport {\n // Tradeable\n generateTxHash,\n executeTrade,\n // Depreciation\n calculateDepreciation,\n depreciatedValue,\n isDestroyed,\n calculateRepairCost,\n DEFAULT_DEPRECIATION,\n // Bonding curves\n bondingCurvePrice,\n bondingCurveBuyCost,\n bondingCurveSellRefund,\n spatialPrice,\n DEFAULT_BONDING_CURVE,\n // Wealth taxation\n calculateTaxRate,\n calculateTaxAmount,\n calculateRedistribution,\n DEFAULT_WEALTH_TAX,\n // PID control\n createPIDState,\n updatePID,\n createDualLoopPIDState,\n updateDualLoopPID,\n DEFAULT_PID,\n // Faucet-sink tracking\n createFaucetSinkMetrics,\n recordFaucet,\n recordSink,\n resetMetricsPeriod,\n} from './traits/EconomicPrimitives.js';\nexport type {\n Currency,\n AgentID,\n EconomicResult,\n EconomicError,\n EconomicPermission,\n OwnershipRecord,\n TransferRecord,\n DepreciationConfig,\n BondingCurveType,\n BondingCurveConfig,\n WealthTaxConfig,\n PIDConfig,\n PIDState,\n DualLoopPIDConfig,\n DualLoopPIDState,\n FaucetSinkMetrics,\n} from './traits/EconomicPrimitives.js';\n\n// Economic traits (v4.3)\nexport {\n EconomicTraits,\n getEconomicTraitNames,\n getEconomicTrait,\n validateTraitComposition,\n getRequiredPermissions,\n} from './traits/EconomicTraits.js';\nexport type { EconomicTraitDefinition } from './traits/EconomicTraits.js';\n\n// SimulationLab primitives (v4.3)\nexport {\n // Statistics\n mean,\n variance,\n standardDeviation,\n standardError,\n cohensD,\n // Statistical tests\n tTest,\n oneSampleTTest,\n mannWhitneyU,\n chiSquaredTest,\n // Parameter sweeps\n expandSweep,\n generateSweepCombinations,\n isParameterRange,\n // Metric aggregation\n extractMetric,\n groupByParameter,\n summarizeMetrics,\n} from './traits/SimulationLabPrimitives.js';\nexport type {\n Hypothesis,\n HypothesisDirection,\n SimulationStatus,\n ParameterRange,\n ParameterSet,\n ParameterSweep,\n SimulationMetrics,\n StatisticalResult,\n ExperimentResult,\n} from './traits/SimulationLabPrimitives.js';\n\n// SimulationLab traits (v4.3)\nexport {\n SimulationLabTraits,\n getSimulationTraitNames,\n getSimulationTrait,\n} from './traits/SimulationLabTraits.js';\nexport type { SimulationTraitDefinition } from './traits/SimulationLabTraits.js';\n\n// Time utilities\nexport {\n now,\n hrTime,\n sleep,\n waitUntil,\n withTimeout,\n retry,\n debounce,\n throttle,\n measure,\n timed,\n Stopwatch,\n IntervalTimer,\n CountdownTimer,\n FrameTimer,\n schedule,\n scheduleInterval,\n scheduleFrame,\n createTicker,\n DateTime,\n} from './time.js';\n\n/**\n * Print to console (HoloScript standard output)\n */\nexport function print(...args: unknown[]): void {\n console.log(...args);\n}\n\n/**\n * Print error to console\n */\nexport function printError(...args: unknown[]): void {\n console.error(...args);\n}\n\n/**\n * Print warning to console\n */\nexport function printWarn(...args: unknown[]): void {\n console.warn(...args);\n}\n\n/**\n * Assert a condition is true\n */\nexport function assert(condition: boolean, message?: string): asserts condition {\n if (!condition) {\n throw new Error(message ?? 'Assertion failed');\n }\n}\n\n/**\n * Assert a value is not null or undefined\n */\nexport function assertDefined<T>(\n value: T | null | undefined,\n message?: string\n): asserts value is T {\n if (value === null || value === undefined) {\n throw new Error(message ?? 'Value is null or undefined');\n }\n}\n\n/**\n * Unreachable code marker (for exhaustiveness checking)\n */\nexport function unreachable(message?: string): never {\n throw new Error(message ?? 'Unreachable code reached');\n}\n\n/**\n * Todo marker (throws at runtime)\n */\nexport function todo(message?: string): never {\n throw new Error(`Not implemented: ${message ?? 'No details'}`);\n}\n\n/**\n * Deep clone an object\n */\nexport function clone<T>(value: T): T {\n if (value === null || typeof value !== 'object') {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map(clone) as T;\n }\n\n if (value instanceof Date) {\n return new Date(value.getTime()) as T;\n }\n\n if (value instanceof Map) {\n return new Map([...value].map(([k, v]) => [clone(k), clone(v)])) as T;\n }\n\n if (value instanceof Set) {\n return new Set([...value].map(clone)) as T;\n }\n\n const result: Record<string, unknown> = {};\n for (const key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key)) {\n result[key] = clone((value as Record<string, unknown>)[key]);\n }\n }\n return result as T;\n}\n\n/**\n * Deep equality check\n */\nexport function equals(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (a === null || b === null) return false;\n if (typeof a !== typeof b) return false;\n\n if (typeof a !== 'object') return false;\n\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((item, i) => equals(item, b[i]));\n }\n\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n\n if (a instanceof Map && b instanceof Map) {\n if (a.size !== b.size) return false;\n for (const [key, value] of a) {\n if (!b.has(key) || !equals(value, b.get(key))) return false;\n }\n return true;\n }\n\n if (a instanceof Set && b instanceof Set) {\n if (a.size !== b.size) return false;\n for (const value of a) {\n if (!b.has(value)) return false;\n }\n return true;\n }\n\n const keysA = Object.keys(a);\n const keysB = Object.keys(b as object);\n if (keysA.length !== keysB.length) return false;\n\n return keysA.every((key) =>\n equals((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key])\n );\n}\n\n/**\n * Pipe a value through a series of functions\n */\nexport function pipe<A>(value: A): A;\nexport function pipe<A, B>(value: A, fn1: (a: A) => B): B;\nexport function pipe<A, B, C>(value: A, fn1: (a: A) => B, fn2: (b: B) => C): C;\nexport function pipe<A, B, C, D>(value: A, fn1: (a: A) => B, fn2: (b: B) => C, fn3: (c: C) => D): D;\nexport function pipe<A, B, C, D, E>(\n value: A,\n fn1: (a: A) => B,\n fn2: (b: B) => C,\n fn3: (c: C) => D,\n fn4: (d: D) => E\n): E;\nexport function pipe(value: unknown, ...fns: ((x: unknown) => unknown)[]): unknown {\n return fns.reduce((acc, fn) => fn(acc), value);\n}\n\n/**\n * Compose functions right to left\n */\nexport function compose<A>(): (a: A) => A;\nexport function compose<A, B>(fn1: (a: A) => B): (a: A) => B;\nexport function compose<A, B, C>(fn2: (b: B) => C, fn1: (a: A) => B): (a: A) => C;\nexport function compose<A, B, C, D>(\n fn3: (c: C) => D,\n fn2: (b: B) => C,\n fn1: (a: A) => B\n): (a: A) => D;\nexport function compose(...fns: ((x: unknown) => unknown)[]): (x: unknown) => unknown {\n return (value: unknown) => fns.reduceRight((acc, fn) => fn(acc), value);\n}\n\n/**\n * Identity function\n */\nexport function identity<T>(value: T): T {\n return value;\n}\n\n/**\n * No-operation function\n */\nexport function noop(): void {}\n\n/**\n * Create a constant function\n */\nexport function constant<T>(value: T): () => T {\n return () => value;\n}\n\n\n// =============================================================================\n// File system (merged from @holoscript/fs, 2026-04-29)\n//\n// Filesystem utilities for hsplus programs — file I/O, path manipulation, and\n// watching. Originally lived as a sibling package; merged into std because\n// the package had no actual code consumers and the audit recommendation\n// (\"filesystem utilities belong in standard library\") was correct. The\n// `@holoscript/fs` brand was preserved only in user-facing template strings\n// and the package permission manifest, both updated in the same commit that\n// archived the old package.\n// =============================================================================\nexport * as fs from \"./fs/index.js\";\n"],"mappings":"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","names":["ray","lerp","clamp","degToRad","radToDeg","sign"]}
1
+ {"version":3,"sources":["../src/spatial.ts","../src/physics.ts","../src/materials.ts","../src/events.ts","../src/traits/SimulationLabPrimitives.ts","../src/traits/SimulationLabTraits.ts","../src/index.ts"],"sourcesContent":["/**\n * @holoscript/std — Spatial Module\n *\n * Provides spatial math utilities: Vec3, Quaternion, Transform, Ray, AABB, distance.\n * Used by the HoloScript runtime for spatial computing operations.\n *\n * @version 0.2.0\n * @module @holoscript/std/spatial\n */\n\n// =============================================================================\n// Vec3\n// =============================================================================\n\nexport class Vec3 {\n constructor(\n public x: number = 0,\n public y: number = 0,\n public z: number = 0\n ) {}\n\n static zero(): Vec3 {\n return new Vec3(0, 0, 0);\n }\n static one(): Vec3 {\n return new Vec3(1, 1, 1);\n }\n static up(): Vec3 {\n return new Vec3(0, 1, 0);\n }\n static down(): Vec3 {\n return new Vec3(0, -1, 0);\n }\n static forward(): Vec3 {\n return new Vec3(0, 0, -1);\n }\n static right(): Vec3 {\n return new Vec3(1, 0, 0);\n }\n\n add(other: Vec3): Vec3 {\n return new Vec3(this.x + other.x, this.y + other.y, this.z + other.z);\n }\n sub(other: Vec3): Vec3 {\n return new Vec3(this.x - other.x, this.y - other.y, this.z - other.z);\n }\n mul(s: number): Vec3 {\n return new Vec3(this.x * s, this.y * s, this.z * s);\n }\n div(s: number): Vec3 {\n return new Vec3(this.x / s, this.y / s, this.z / s);\n }\n\n dot(other: Vec3): number {\n return this.x * other.x + this.y * other.y + this.z * other.z;\n }\n cross(other: Vec3): Vec3 {\n return new Vec3(\n this.y * other.z - this.z * other.y,\n this.z * other.x - this.x * other.z,\n this.x * other.y - this.y * other.x\n );\n }\n\n length(): number {\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n }\n lengthSquared(): number {\n return this.x * this.x + this.y * this.y + this.z * this.z;\n }\n normalize(): Vec3 {\n const l = this.length();\n return l > 0 ? this.div(l) : Vec3.zero();\n }\n\n distanceTo(other: Vec3): number {\n return this.sub(other).length();\n }\n lerp(other: Vec3, t: number): Vec3 {\n return this.add(other.sub(this).mul(t));\n }\n\n toArray(): [number, number, number] {\n return [this.x, this.y, this.z];\n }\n static fromArray(arr: number[]): Vec3 {\n return new Vec3(arr[0] || 0, arr[1] || 0, arr[2] || 0);\n }\n\n equals(other: Vec3, epsilon = 1e-6): boolean {\n return (\n Math.abs(this.x - other.x) < epsilon &&\n Math.abs(this.y - other.y) < epsilon &&\n Math.abs(this.z - other.z) < epsilon\n );\n }\n\n toString(): string {\n return `Vec3(${this.x}, ${this.y}, ${this.z})`;\n }\n}\n\n// =============================================================================\n// Quaternion\n// =============================================================================\n\nexport class Quaternion {\n constructor(\n public x = 0,\n public y = 0,\n public z = 0,\n public w = 1\n ) {}\n\n static identity(): Quaternion {\n return new Quaternion(0, 0, 0, 1);\n }\n\n static fromEuler(x: number, y: number, z: number): Quaternion {\n const cx = Math.cos(x * 0.5),\n sx = Math.sin(x * 0.5);\n const cy = Math.cos(y * 0.5),\n sy = Math.sin(y * 0.5);\n const cz = Math.cos(z * 0.5),\n sz = Math.sin(z * 0.5);\n return new Quaternion(\n sx * cy * cz - cx * sy * sz,\n cx * sy * cz + sx * cy * sz,\n cx * cy * sz - sx * sy * cz,\n cx * cy * cz + sx * sy * sz\n );\n }\n\n static fromAxisAngle(axis: Vec3, angle: number): Quaternion {\n const half = angle * 0.5;\n const s = Math.sin(half);\n const n = axis.normalize();\n return new Quaternion(n.x * s, n.y * s, n.z * s, Math.cos(half));\n }\n\n multiply(other: Quaternion): Quaternion {\n return new Quaternion(\n this.w * other.x + this.x * other.w + this.y * other.z - this.z * other.y,\n this.w * other.y - this.x * other.z + this.y * other.w + this.z * other.x,\n this.w * other.z + this.x * other.y - this.y * other.x + this.z * other.w,\n this.w * other.w - this.x * other.x - this.y * other.y - this.z * other.z\n );\n }\n\n rotateVec3(v: Vec3): Vec3 {\n const u = new Vec3(this.x, this.y, this.z);\n const s = this.w;\n return u\n .mul(2 * u.dot(v))\n .add(v.mul(s * s - u.dot(u)))\n .add(u.cross(v).mul(2 * s));\n }\n\n slerp(other: Quaternion, t: number): Quaternion {\n let dot = this.x * other.x + this.y * other.y + this.z * other.z + this.w * other.w;\n const neg = dot < 0;\n if (neg) dot = -dot;\n if (dot > 0.9995) {\n // Linear interpolation for very close quaternions\n const r = new Quaternion(\n this.x + t * ((neg ? -other.x : other.x) - this.x),\n this.y + t * ((neg ? -other.y : other.y) - this.y),\n this.z + t * ((neg ? -other.z : other.z) - this.z),\n this.w + t * ((neg ? -other.w : other.w) - this.w)\n );\n const len = Math.sqrt(r.x * r.x + r.y * r.y + r.z * r.z + r.w * r.w);\n return new Quaternion(r.x / len, r.y / len, r.z / len, r.w / len);\n }\n const theta = Math.acos(dot);\n const sinTheta = Math.sin(theta);\n const a = Math.sin((1 - t) * theta) / sinTheta;\n const b = (Math.sin(t * theta) / sinTheta) * (neg ? -1 : 1);\n return new Quaternion(\n a * this.x + b * other.x,\n a * this.y + b * other.y,\n a * this.z + b * other.z,\n a * this.w + b * other.w\n );\n }\n\n normalize(): Quaternion {\n const len = Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w);\n return new Quaternion(this.x / len, this.y / len, this.z / len, this.w / len);\n }\n\n toEuler(): Vec3 {\n const sinr = 2 * (this.w * this.x + this.y * this.z);\n const cosr = 1 - 2 * (this.x * this.x + this.y * this.y);\n const sinp = 2 * (this.w * this.y - this.z * this.x);\n const siny = 2 * (this.w * this.z + this.x * this.y);\n const cosy = 1 - 2 * (this.y * this.y + this.z * this.z);\n return new Vec3(\n Math.atan2(sinr, cosr),\n Math.abs(sinp) >= 1 ? (Math.sign(sinp) * Math.PI) / 2 : Math.asin(sinp),\n Math.atan2(siny, cosy)\n );\n }\n}\n\n// =============================================================================\n// Transform\n// =============================================================================\n\nexport class Transform {\n constructor(\n public position: Vec3 = Vec3.zero(),\n public rotation: Quaternion = Quaternion.identity(),\n public scale: Vec3 = Vec3.one()\n ) {}\n\n static identity(): Transform {\n return new Transform();\n }\n\n transformPoint(point: Vec3): Vec3 {\n const scaled = new Vec3(point.x * this.scale.x, point.y * this.scale.y, point.z * this.scale.z);\n return this.rotation.rotateVec3(scaled).add(this.position);\n }\n\n transformDirection(dir: Vec3): Vec3 {\n return this.rotation.rotateVec3(dir);\n }\n}\n\n// =============================================================================\n// Ray & AABB\n// =============================================================================\n\nexport class Ray {\n constructor(\n public origin: Vec3,\n public direction: Vec3\n ) {}\n\n pointAt(t: number): Vec3 {\n return this.origin.add(this.direction.mul(t));\n }\n}\n\nexport class AABB {\n constructor(\n public min: Vec3,\n public max: Vec3\n ) {}\n\n contains(point: Vec3): boolean {\n return (\n point.x >= this.min.x &&\n point.x <= this.max.x &&\n point.y >= this.min.y &&\n point.y <= this.max.y &&\n point.z >= this.min.z &&\n point.z <= this.max.z\n );\n }\n\n intersects(other: AABB): boolean {\n return (\n this.min.x <= other.max.x &&\n this.max.x >= other.min.x &&\n this.min.y <= other.max.y &&\n this.max.y >= other.min.y &&\n this.min.z <= other.max.z &&\n this.max.z >= other.min.z\n );\n }\n\n center(): Vec3 {\n return this.min.add(this.max).div(2);\n }\n size(): Vec3 {\n return this.max.sub(this.min);\n }\n\n intersectsRay(ray: Ray): number | null {\n let tmin = (this.min.x - ray.origin.x) / ray.direction.x;\n let tmax = (this.max.x - ray.origin.x) / ray.direction.x;\n if (tmin > tmax) [tmin, tmax] = [tmax, tmin];\n\n let tymin = (this.min.y - ray.origin.y) / ray.direction.y;\n let tymax = (this.max.y - ray.origin.y) / ray.direction.y;\n if (tymin > tymax) [tymin, tymax] = [tymax, tymin];\n\n if (tmin > tymax || tymin > tmax) return null;\n tmin = Math.max(tmin, tymin);\n tmax = Math.min(tmax, tymax);\n\n let tzmin = (this.min.z - ray.origin.z) / ray.direction.z;\n let tzmax = (this.max.z - ray.origin.z) / ray.direction.z;\n if (tzmin > tzmax) [tzmin, tzmax] = [tzmax, tzmin];\n\n if (tmin > tzmax || tzmin > tmax) return null;\n return Math.max(tmin, tzmin);\n }\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\nexport function distance(a: Vec3, b: Vec3): number {\n return a.distanceTo(b);\n}\nexport function lerp(a: number, b: number, t: number): number {\n return a + (b - a) * t;\n}\nexport function clamp(v: number, min: number, max: number): number {\n return Math.min(Math.max(v, min), max);\n}\nexport function degToRad(deg: number): number {\n return deg * (Math.PI / 180);\n}\nexport function radToDeg(rad: number): number {\n return rad * (180 / Math.PI);\n}\n","/**\n * @holoscript/std — Physics Module\n *\n * Provides physics primitives: ColliderShape, RigidbodyConfig, ForceField, Joint.\n * Runtime representations for HoloScript physics blocks.\n *\n * @version 0.2.0\n * @module @holoscript/std/physics\n */\n\nimport type { Vec3 } from './spatial.js';\n\n// =============================================================================\n// Collider Shapes\n// =============================================================================\n\nexport type ColliderShapeType =\n | 'box'\n | 'sphere'\n | 'capsule'\n | 'mesh'\n | 'convex'\n | 'cylinder'\n | 'heightfield';\n\nexport interface ColliderConfig {\n shape: ColliderShapeType;\n isTrigger: boolean;\n friction: number;\n restitution: number;\n // Shape-specific\n radius?: number;\n halfExtents?: Vec3;\n height?: number;\n meshAsset?: string;\n}\n\nexport function createBoxCollider(\n halfExtents: Vec3,\n options?: Partial<ColliderConfig>\n): ColliderConfig {\n return {\n shape: 'box',\n isTrigger: false,\n friction: 0.5,\n restitution: 0.0,\n halfExtents,\n ...options,\n };\n}\n\nexport function createSphereCollider(\n radius: number,\n options?: Partial<ColliderConfig>\n): ColliderConfig {\n return { shape: 'sphere', isTrigger: false, friction: 0.5, restitution: 0.0, radius, ...options };\n}\n\nexport function createCapsuleCollider(\n radius: number,\n height: number,\n options?: Partial<ColliderConfig>\n): ColliderConfig {\n return {\n shape: 'capsule',\n isTrigger: false,\n friction: 0.5,\n restitution: 0.0,\n radius,\n height,\n ...options,\n };\n}\n\n// =============================================================================\n// Rigidbody\n// =============================================================================\n\nexport interface RigidbodyConfig {\n mass: number;\n useGravity: boolean;\n linearDamping: number;\n angularDamping: number;\n freezePosition: [boolean, boolean, boolean];\n freezeRotation: [boolean, boolean, boolean];\n isKinematic: boolean;\n}\n\nexport function createRigidbody(mass: number, options?: Partial<RigidbodyConfig>): RigidbodyConfig {\n return {\n mass,\n useGravity: true,\n linearDamping: 0.0,\n angularDamping: 0.05,\n freezePosition: [false, false, false],\n freezeRotation: [false, false, false],\n isKinematic: false,\n ...options,\n };\n}\n\n// =============================================================================\n// Force Fields\n// =============================================================================\n\nexport type ForceFieldType = 'directional' | 'radial' | 'vortex' | 'buoyancy';\n\nexport interface ForceFieldConfig {\n type: ForceFieldType;\n strength: number;\n direction?: Vec3;\n falloff: 'none' | 'linear' | 'quadratic';\n turbulence: number;\n}\n\n// =============================================================================\n// Joints\n// =============================================================================\n\nexport type JointType = 'hinge' | 'slider' | 'ball_socket' | 'fixed' | 'd6' | 'spring';\n\nexport interface JointConfig {\n type: JointType;\n connectedBody?: string;\n axis?: Vec3;\n limits?: [number, number];\n damping: number;\n springForce?: number;\n breakForce?: number;\n}\n\n// =============================================================================\n// Raycast Utility\n// =============================================================================\n\nexport interface RaycastHit {\n point: Vec3;\n normal: Vec3;\n distance: number;\n objectName: string;\n}\n","/**\n * @holoscript/std — Materials Module\n *\n * Provides PBR material types, texture map definitions, and material presets.\n * Maps directly to HoloScript material_block grammar constructs.\n *\n * @version 0.2.0\n * @module @holoscript/std/materials\n */\n\n// =============================================================================\n// PBR Material\n// =============================================================================\n\nexport interface PBRMaterial {\n name: string;\n baseColor: string; // hex color\n roughness: number; // 0.0 - 1.0\n metallic: number; // 0.0 - 1.0\n emissiveColor?: string;\n emissiveIntensity?: number;\n opacity?: number; // 0.0 - 1.0\n ior?: number; // Index of refraction (glass ~1.5, water ~1.33)\n subsurface?: number;\n clearcoat?: number;\n clearcoatRoughness?: number;\n // Texture maps\n albedoMap?: string;\n normalMap?: string;\n roughnessMap?: string;\n metallicMap?: string;\n emissionMap?: string;\n aoMap?: string;\n heightMap?: string;\n opacityMap?: string;\n displacementMap?: string;\n}\n\nexport interface UnlitMaterial {\n name: string;\n color: string;\n emissiveColor?: string;\n emissiveIntensity?: number;\n opacity?: number;\n texture?: string;\n}\n\n// =============================================================================\n// Material Presets\n// =============================================================================\n\nexport const MATERIAL_PRESETS: Record<string, Partial<PBRMaterial>> = {\n metal: { roughness: 0.2, metallic: 1.0 },\n wood: { roughness: 0.85, metallic: 0.0, baseColor: '#8B6914' },\n glass: { roughness: 0.05, metallic: 0.0, opacity: 0.3, ior: 1.5 },\n plastic: { roughness: 0.4, metallic: 0.0 },\n concrete: { roughness: 0.95, metallic: 0.0, baseColor: '#808080' },\n fabric: { roughness: 0.9, metallic: 0.0, subsurface: 0.2 },\n water: { roughness: 0.05, metallic: 0.0, opacity: 0.7, ior: 1.33 },\n rubber: { roughness: 0.95, metallic: 0.0, baseColor: '#222222' },\n marble: { roughness: 0.3, metallic: 0.0, baseColor: '#f0f0f0' },\n skin: { roughness: 0.6, metallic: 0.0, subsurface: 0.5 },\n foliage: { roughness: 0.8, metallic: 0.0, baseColor: '#2d5a27', subsurface: 0.3 },\n chrome: { roughness: 0.05, metallic: 1.0, baseColor: '#cccccc' },\n gold: { roughness: 0.2, metallic: 1.0, baseColor: '#ffd700' },\n copper: { roughness: 0.3, metallic: 1.0, baseColor: '#b87333' },\n ice: { roughness: 0.1, metallic: 0.0, opacity: 0.8, ior: 1.31 },\n};\n\nexport function createPBRMaterial(\n name: string,\n preset?: keyof typeof MATERIAL_PRESETS,\n overrides?: Partial<PBRMaterial>\n): PBRMaterial {\n const base = preset ? MATERIAL_PRESETS[preset] : {};\n return {\n name,\n baseColor: '#ffffff',\n roughness: 0.5,\n metallic: 0.0,\n ...base,\n ...overrides,\n };\n}\n\n// =============================================================================\n// Texture Map Types\n// =============================================================================\n\nexport type TextureMapType =\n | 'albedo_map'\n | 'normal_map'\n | 'roughness_map'\n | 'metallic_map'\n | 'emission_map'\n | 'ao_map'\n | 'height_map'\n | 'opacity_map'\n | 'displacement_map'\n | 'specular_map'\n | 'clearcoat_map';\n\nexport interface TextureConfig {\n source: string;\n tiling?: [number, number];\n offset?: [number, number];\n filter?: 'linear' | 'nearest';\n wrap?: 'repeat' | 'clamp' | 'mirror';\n}\n","/**\n * @holoscript/std — Events Module\n *\n * Provides a typed event bus for HoloScript compositions.\n * Supports emit, on, once, off, and wildcard listeners.\n *\n * @version 0.2.0\n * @module @holoscript/std/events\n */\n\nexport type EventHandler<T = any> = (data: T) => void;\n\ninterface Listener {\n handler: EventHandler;\n once: boolean;\n}\n\nexport class EventBus {\n private listeners: Map<string, Listener[]> = new Map();\n private wildcardListeners: Listener[] = [];\n\n /** Register an event listener. */\n on<T = any>(event: string, handler: EventHandler<T>): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, []);\n const listener: Listener = { handler, once: false };\n this.listeners.get(event)!.push(listener);\n return () => this.off(event, handler);\n }\n\n /** Register a one-time event listener. */\n once<T = any>(event: string, handler: EventHandler<T>): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, []);\n const listener: Listener = { handler, once: true };\n this.listeners.get(event)!.push(listener);\n return () => this.off(event, handler);\n }\n\n /** Remove an event listener. */\n off(event: string, handler: EventHandler): void {\n const list = this.listeners.get(event);\n if (!list) return;\n this.listeners.set(\n event,\n list.filter((l) => l.handler !== handler)\n );\n }\n\n /** Emit an event to all registered listeners. */\n emit<T = any>(event: string, data?: T): void {\n // Fire specific listeners\n const list = this.listeners.get(event);\n if (list) {\n const remaining: Listener[] = [];\n for (const l of list) {\n l.handler(data);\n if (!l.once) remaining.push(l);\n }\n this.listeners.set(event, remaining);\n }\n // Fire wildcard listeners\n for (const l of this.wildcardListeners) {\n l.handler({ event, data });\n }\n }\n\n /** Listen to all events. */\n onAny(handler: EventHandler<{ event: string; data: any }>): () => void {\n const listener: Listener = { handler, once: false };\n this.wildcardListeners.push(listener);\n return () => {\n this.wildcardListeners = this.wildcardListeners.filter((l) => l !== listener);\n };\n }\n\n /** Remove all listeners. */\n clear(): void {\n this.listeners.clear();\n this.wildcardListeners = [];\n }\n\n /** Get count of listeners for an event (or all events). */\n listenerCount(event?: string): number {\n if (event) return (this.listeners.get(event) || []).length;\n let total = this.wildcardListeners.length;\n for (const [, list] of this.listeners) total += list.length;\n return total;\n }\n}\n","/**\n * @fileoverview SimulationLab Primitives - Runtime math and types for hypothesis testing\n * @module @holoscript/std/simulation\n *\n * Provides the mathematical building blocks for scientific hypothesis testing\n * in HoloScript simulations. Run N epochs with parameter sweeps, collect metrics,\n * and perform statistical analysis to prove or disprove hypotheses.\n *\n * The universe gets one sample. HoloScript gives you infinite.\n *\n * @version 1.0.0\n * @category simulation\n */\n\n// =============================================================================\n// CORE TYPES\n// =============================================================================\n\n/**\n * Direction of expected effect in a hypothesis.\n */\nexport type HypothesisDirection = 'greater' | 'less' | 'different' | 'equal';\n\n/**\n * Status of a simulation run.\n */\nexport type SimulationStatus = 'pending' | 'running' | 'completed' | 'failed';\n\n/**\n * A scientific hypothesis to test.\n */\nexport interface Hypothesis {\n /** Human-readable description */\n description: string;\n /** The null hypothesis (what we're trying to reject) */\n null_hypothesis: string;\n /** The alternative hypothesis (what we're testing for) */\n alternative_hypothesis: string;\n /** Expected direction of effect */\n direction: HypothesisDirection;\n /** Significance threshold (default: 0.05) */\n alpha: number;\n}\n\n/**\n * A range of parameter values to sweep.\n */\nexport interface ParameterRange {\n /** Parameter name */\n name: string;\n /** Start value */\n min: number;\n /** End value */\n max: number;\n /** Step size */\n step: number;\n}\n\n/**\n * A set of discrete parameter values to sweep.\n */\nexport interface ParameterSet {\n /** Parameter name */\n name: string;\n /** Discrete values to test */\n values: number[];\n}\n\n/**\n * Either a range or discrete set of parameter values.\n */\nexport type ParameterSweep = ParameterRange | ParameterSet;\n\n/**\n * Metrics collected from a single simulation run.\n */\nexport interface SimulationMetrics {\n /** Named metric values */\n values: Record<string, number>;\n /** Seed used for this run */\n seed: number;\n /** Parameter values used */\n params: Record<string, number>;\n /** Wall-clock time in ms */\n durationMs: number;\n}\n\n/**\n * Result of a statistical test.\n */\nexport interface StatisticalResult {\n /** Test statistic value */\n statistic: number;\n /** p-value (probability of observing result under null hypothesis) */\n pValue: number;\n /** Whether the null hypothesis is rejected at the given alpha */\n significant: boolean;\n /** Confidence interval [lower, upper] */\n confidenceInterval: [number, number];\n /** Effect size (Cohen's d for t-test) */\n effectSize: number;\n /** Name of the test used */\n testName: string;\n /** Number of samples */\n sampleSize: number;\n}\n\n/**\n * Complete simulation experiment result.\n */\nexport interface ExperimentResult {\n /** The hypothesis tested */\n hypothesis: Hypothesis;\n /** Statistical results per metric */\n results: Record<string, StatisticalResult>;\n /** All collected metrics */\n metrics: SimulationMetrics[];\n /** Total epochs run */\n totalEpochs: number;\n /** Total wall-clock time */\n totalDurationMs: number;\n /** Status */\n status: SimulationStatus;\n /** Composition hash for reproducibility */\n compositionHash: string;\n}\n\n// =============================================================================\n// PARAMETER SWEEP GENERATION\n// =============================================================================\n\n/**\n * Check if a parameter sweep is a range (vs discrete set).\n */\nexport function isParameterRange(sweep: ParameterSweep): sweep is ParameterRange {\n return 'min' in sweep && 'max' in sweep && 'step' in sweep;\n}\n\n/**\n * Generate all values from a parameter sweep.\n */\nexport function expandSweep(sweep: ParameterSweep): number[] {\n if (!isParameterRange(sweep)) {\n return (sweep as ParameterSet).values.slice();\n }\n\n const range = sweep as ParameterRange;\n if (range.step <= 0) return [range.min];\n if (range.min > range.max) return [];\n\n const values: number[] = [];\n for (let v = range.min; v <= range.max + range.step * 0.001; v += range.step) {\n values.push(Math.round(v * 1e10) / 1e10); // Avoid floating point drift\n }\n return values;\n}\n\n/**\n * Generate all parameter combinations from multiple sweeps.\n * Returns an array of parameter maps.\n */\nexport function generateSweepCombinations(sweeps: ParameterSweep[]): Record<string, number>[] {\n if (sweeps.length === 0) return [{}];\n\n const expanded = sweeps.map((s) => ({\n name: s.name,\n values: expandSweep(s),\n }));\n\n // Cartesian product\n let combinations: Record<string, number>[] = [{}];\n\n for (const { name, values } of expanded) {\n const newCombinations: Record<string, number>[] = [];\n for (const combo of combinations) {\n for (const val of values) {\n newCombinations.push({ ...combo, [name]: val });\n }\n }\n combinations = newCombinations;\n }\n\n return combinations;\n}\n\n// =============================================================================\n// STATISTICAL FUNCTIONS\n// =============================================================================\n\n/**\n * Calculate the arithmetic mean of an array of numbers.\n */\nexport function mean(data: number[]): number {\n if (data.length === 0) return 0;\n return data.reduce((sum, v) => sum + v, 0) / data.length;\n}\n\n/**\n * Calculate the sample variance (Bessel's correction).\n */\nexport function variance(data: number[]): number {\n if (data.length < 2) return 0;\n const m = mean(data);\n const squaredDiffs = data.reduce((sum, v) => sum + (v - m) ** 2, 0);\n return squaredDiffs / (data.length - 1);\n}\n\n/**\n * Calculate the sample standard deviation.\n */\nexport function standardDeviation(data: number[]): number {\n return Math.sqrt(variance(data));\n}\n\n/**\n * Calculate the standard error of the mean.\n */\nexport function standardError(data: number[]): number {\n if (data.length === 0) return 0;\n return standardDeviation(data) / Math.sqrt(data.length);\n}\n\n/**\n * Calculate Cohen's d effect size between two groups.\n * d = (mean1 - mean2) / pooled_std\n */\nexport function cohensD(group1: number[], group2: number[]): number {\n if (group1.length < 2 || group2.length < 2) return 0;\n\n const m1 = mean(group1);\n const m2 = mean(group2);\n const v1 = variance(group1);\n const v2 = variance(group2);\n\n // Pooled standard deviation\n const n1 = group1.length;\n const n2 = group2.length;\n const pooledVar = ((n1 - 1) * v1 + (n2 - 1) * v2) / (n1 + n2 - 2);\n const pooledStd = Math.sqrt(pooledVar);\n\n if (pooledStd === 0) return 0;\n return (m1 - m2) / pooledStd;\n}\n\n/**\n * Two-sample independent t-test.\n *\n * Tests whether two groups have significantly different means.\n * Uses Welch's t-test (does not assume equal variances).\n */\nexport function tTest(\n group1: number[],\n group2: number[],\n alpha: number = 0.05,\n direction: HypothesisDirection = 'different'\n): StatisticalResult {\n const n1 = group1.length;\n const n2 = group2.length;\n\n if (n1 < 2 || n2 < 2) {\n return {\n statistic: 0,\n pValue: 1,\n significant: false,\n confidenceInterval: [0, 0],\n effectSize: 0,\n testName: 'welch_t_test',\n sampleSize: n1 + n2,\n };\n }\n\n const m1 = mean(group1);\n const m2 = mean(group2);\n const v1 = variance(group1);\n const v2 = variance(group2);\n const se = Math.sqrt(v1 / n1 + v2 / n2);\n\n if (se === 0) {\n return {\n statistic: 0,\n pValue: m1 === m2 ? 1 : 0,\n significant: m1 !== m2,\n confidenceInterval: [m1 - m2, m1 - m2],\n effectSize: 0,\n testName: 'welch_t_test',\n sampleSize: n1 + n2,\n };\n }\n\n const t = (m1 - m2) / se;\n\n // Welch–Satterthwaite degrees of freedom\n const num = (v1 / n1 + v2 / n2) ** 2;\n const den = (v1 / n1) ** 2 / (n1 - 1) + (v2 / n2) ** 2 / (n2 - 1);\n const df = num / den;\n\n // Approximate p-value using the t-distribution CDF approximation\n const pTwoTailed = tDistPValue(Math.abs(t), df);\n let pValue: number;\n\n switch (direction) {\n case 'greater':\n pValue = t > 0 ? pTwoTailed / 2 : 1 - pTwoTailed / 2;\n break;\n case 'less':\n pValue = t < 0 ? pTwoTailed / 2 : 1 - pTwoTailed / 2;\n break;\n case 'equal':\n pValue = 1 - pTwoTailed;\n break;\n default: // 'different'\n pValue = pTwoTailed;\n }\n\n // Confidence interval for the difference in means\n const tCrit = tDistCritical(alpha, df);\n const diff = m1 - m2;\n const ci: [number, number] = [diff - tCrit * se, diff + tCrit * se];\n\n return {\n statistic: t,\n pValue,\n significant: pValue < alpha,\n confidenceInterval: ci,\n effectSize: cohensD(group1, group2),\n testName: 'welch_t_test',\n sampleSize: n1 + n2,\n };\n}\n\n/**\n * One-sample t-test against a known value.\n */\nexport function oneSampleTTest(\n data: number[],\n populationMean: number,\n alpha: number = 0.05,\n direction: HypothesisDirection = 'different'\n): StatisticalResult {\n const n = data.length;\n\n if (n < 2) {\n return {\n statistic: 0,\n pValue: 1,\n significant: false,\n confidenceInterval: [0, 0],\n effectSize: 0,\n testName: 'one_sample_t_test',\n sampleSize: n,\n };\n }\n\n const m = mean(data);\n const se = standardError(data);\n\n if (se === 0) {\n return {\n statistic: 0,\n pValue: m === populationMean ? 1 : 0,\n significant: m !== populationMean,\n confidenceInterval: [m, m],\n effectSize: 0,\n testName: 'one_sample_t_test',\n sampleSize: n,\n };\n }\n\n const t = (m - populationMean) / se;\n const df = n - 1;\n\n const pTwoTailed = tDistPValue(Math.abs(t), df);\n let pValue: number;\n\n switch (direction) {\n case 'greater':\n pValue = t > 0 ? pTwoTailed / 2 : 1 - pTwoTailed / 2;\n break;\n case 'less':\n pValue = t < 0 ? pTwoTailed / 2 : 1 - pTwoTailed / 2;\n break;\n default:\n pValue = pTwoTailed;\n }\n\n const tCrit = tDistCritical(alpha, df);\n const ci: [number, number] = [m - tCrit * se, m + tCrit * se];\n\n const sd = standardDeviation(data);\n const effectSize = sd > 0 ? (m - populationMean) / sd : 0;\n\n return {\n statistic: t,\n pValue,\n significant: pValue < alpha,\n confidenceInterval: ci,\n effectSize,\n testName: 'one_sample_t_test',\n sampleSize: n,\n };\n}\n\n/**\n * Mann-Whitney U test (non-parametric alternative to t-test).\n * Tests whether one group tends to have larger values than the other.\n */\nexport function mannWhitneyU(\n group1: number[],\n group2: number[],\n alpha: number = 0.05\n): StatisticalResult {\n const n1 = group1.length;\n const n2 = group2.length;\n\n if (n1 === 0 || n2 === 0) {\n return {\n statistic: 0,\n pValue: 1,\n significant: false,\n confidenceInterval: [0, 0],\n effectSize: 0,\n testName: 'mann_whitney_u',\n sampleSize: n1 + n2,\n };\n }\n\n // Count how many times group1 values exceed group2 values\n let u1 = 0;\n for (const a of group1) {\n for (const b of group2) {\n if (a > b) u1++;\n else if (a === b) u1 += 0.5;\n }\n }\n\n const u2 = n1 * n2 - u1;\n const u = Math.min(u1, u2);\n\n // Normal approximation for larger samples\n const meanU = (n1 * n2) / 2;\n const sigmaU = Math.sqrt((n1 * n2 * (n1 + n2 + 1)) / 12);\n\n if (sigmaU === 0) {\n return {\n statistic: u,\n pValue: 1,\n significant: false,\n confidenceInterval: [0, 0],\n effectSize: 0,\n testName: 'mann_whitney_u',\n sampleSize: n1 + n2,\n };\n }\n\n const z = (u - meanU) / sigmaU;\n const pValue = 2 * normalCDF(-Math.abs(z)); // Two-tailed\n\n // Effect size: rank-biserial correlation r = 1 - 2U/(n1*n2)\n const effectSize = 1 - (2 * u) / (n1 * n2);\n\n return {\n statistic: u,\n pValue,\n significant: pValue < alpha,\n confidenceInterval: [0, 0], // CI not standard for U-test\n effectSize,\n testName: 'mann_whitney_u',\n sampleSize: n1 + n2,\n };\n}\n\n/**\n * Chi-squared goodness-of-fit test.\n * Tests whether observed frequencies match expected frequencies.\n */\nexport function chiSquaredTest(\n observed: number[],\n expected: number[],\n alpha: number = 0.05\n): StatisticalResult {\n if (observed.length !== expected.length || observed.length === 0) {\n return {\n statistic: 0,\n pValue: 1,\n significant: false,\n confidenceInterval: [0, 0],\n effectSize: 0,\n testName: 'chi_squared',\n sampleSize: 0,\n };\n }\n\n let chiSq = 0;\n let totalObserved = 0;\n\n for (let i = 0; i < observed.length; i++) {\n if (expected[i] <= 0) continue;\n chiSq += (observed[i] - expected[i]) ** 2 / expected[i];\n totalObserved += observed[i];\n }\n\n const df = observed.length - 1;\n if (df <= 0) {\n return {\n statistic: chiSq,\n pValue: 1,\n significant: false,\n confidenceInterval: [0, 0],\n effectSize: 0,\n testName: 'chi_squared',\n sampleSize: totalObserved,\n };\n }\n\n // Approximate p-value using Wilson-Hilferty approximation\n const pValue = chiSquaredPValue(chiSq, df);\n\n // Cramér's V effect size\n const k = observed.length;\n const effectSize = totalObserved > 0 ? Math.sqrt(chiSq / (totalObserved * (k - 1))) : 0;\n\n return {\n statistic: chiSq,\n pValue,\n significant: pValue < alpha,\n confidenceInterval: [0, 0],\n effectSize,\n testName: 'chi_squared',\n sampleSize: totalObserved,\n };\n}\n\n// =============================================================================\n// METRIC AGGREGATION\n// =============================================================================\n\n/**\n * Extract a named metric from an array of simulation results.\n */\nexport function extractMetric(results: SimulationMetrics[], metricName: string): number[] {\n return results.filter((r) => metricName in r.values).map((r) => r.values[metricName]);\n}\n\n/**\n * Group simulation results by a parameter value.\n */\nexport function groupByParameter(\n results: SimulationMetrics[],\n paramName: string\n): Map<number, SimulationMetrics[]> {\n const groups = new Map<number, SimulationMetrics[]>();\n for (const r of results) {\n const val = r.params[paramName];\n if (val === undefined) continue;\n if (!groups.has(val)) groups.set(val, []);\n groups.get(val)!.push(r);\n }\n return groups;\n}\n\n/**\n * Generate a summary of metrics across all runs.\n */\nexport function summarizeMetrics(\n results: SimulationMetrics[],\n metricName: string\n): { mean: number; std: number; min: number; max: number; n: number } {\n const values = extractMetric(results, metricName);\n if (values.length === 0) {\n return { mean: 0, std: 0, min: 0, max: 0, n: 0 };\n }\n return {\n mean: mean(values),\n std: standardDeviation(values),\n min: Math.min(...values),\n max: Math.max(...values),\n n: values.length,\n };\n}\n\n// =============================================================================\n// INTERNAL MATH HELPERS\n// =============================================================================\n\n/**\n * Standard normal CDF approximation (Abramowitz and Stegun 26.2.17).\n * Accurate to ~1.5e-7.\n */\nfunction normalCDF(x: number): number {\n if (x < -8) return 0;\n if (x > 8) return 1;\n\n const a1 = 0.254829592;\n const a2 = -0.284496736;\n const a3 = 1.421413741;\n const a4 = -1.453152027;\n const a5 = 1.061405429;\n const p = 0.3275911;\n\n const sign = x < 0 ? -1 : 1;\n const absX = Math.abs(x);\n const t = 1.0 / (1.0 + p * absX);\n const y = 1.0 - ((((a5 * t + a4) * t + a3) * t + a2) * t + a1) * t * Math.exp((-absX * absX) / 2);\n\n return 0.5 * (1.0 + sign * y);\n}\n\n/**\n * Approximate two-tailed p-value from t-distribution.\n * Uses the Inamdar-Griessammer approximation for large df.\n */\nfunction tDistPValue(absT: number, df: number): number {\n if (df <= 0) return 1;\n // Convert t to approximately normal z for large df\n const z = (absT * (1 - 1 / (4 * df))) / Math.sqrt(1 + (absT * absT) / (2 * df));\n return 2 * (1 - normalCDF(z));\n}\n\n/**\n * Approximate critical t-value for a given alpha and df.\n */\nfunction tDistCritical(alpha: number, df: number): number {\n // Approximate using normal quantile adjusted for df\n const p = 1 - alpha / 2;\n // Rational approximation of the normal quantile (Beasley-Springer-Moro)\n const a = p - 0.5;\n const r = a * a;\n let z =\n (a * (2.50662823884 + r * (-18.61500062529 + r * (41.39119773534 + r * -25.44106049637)))) /\n (1 + r * (-8.4735109309 + r * (23.08336743743 + r * (-21.06224101826 + r * 3.13082909833))));\n\n // Cornish-Fisher expansion for t-distribution\n const g1 = (z ** 3 + z) / (4 * df);\n const g2 = (5 * z ** 5 + 16 * z ** 3 + 3 * z) / (96 * df * df);\n z = z + g1 + g2;\n\n return Math.abs(z);\n}\n\n/**\n * Approximate chi-squared p-value using Wilson-Hilferty.\n */\nfunction chiSquaredPValue(chiSq: number, df: number): number {\n if (df <= 0) return 1;\n if (chiSq <= 0) return 1;\n // Wilson-Hilferty transformation to normal\n const z = Math.pow(chiSq / df, 1 / 3) - (1 - 2 / (9 * df));\n const denom = Math.sqrt(2 / (9 * df));\n return 1 - normalCDF(z / denom);\n}\n","/**\n * @fileoverview SimulationLab Trait Definition for HoloScript\n * @module @holoscript/std/traits\n *\n * Defines the @simulation_lab trait that enables hypothesis testing\n * on any HoloScript composition. Attach this trait to run parameter sweeps,\n * collect metrics across N epochs, and produce statistical results.\n *\n * Composes with all economic traits for economy stress testing.\n *\n * @version 1.0.0\n * @category simulation\n */\n\nimport type { TraitDefinition } from '../types.js';\n\n/**\n * Extended trait definition with simulation-specific metadata.\n */\nexport interface SimulationTraitDefinition extends TraitDefinition {\n /** Compiler hints for batch execution */\n compiler_hints?: {\n requires_runtime?: string[];\n thread_safety?: 'main_thread' | 'worker_thread' | 'any';\n performance_budget_ms?: number;\n batch_mode?: boolean;\n };\n /** Which economic/VR traits this composes with */\n composesWith: string[];\n}\n\n// =============================================================================\n// TRAIT DEFINITION\n// =============================================================================\n\n/**\n * The SimulationLab trait.\n */\nexport const SimulationLabTraits: Record<string, SimulationTraitDefinition> = {\n simulation_lab: {\n name: '@simulation_lab',\n description:\n 'Attaches scientific hypothesis testing to any HoloScript composition. ' +\n 'Enables parameter sweeps, multi-epoch execution, statistical analysis, ' +\n 'and exportable results. The universe gets one sample — HoloScript gives ' +\n 'you infinite. Results are marketplace-sellable as verified simulation data.',\n params: {\n hypothesis: {\n type: 'string',\n required: true,\n description: 'Human-readable hypothesis description.',\n },\n null_hypothesis: {\n type: 'string',\n required: false,\n default: '',\n description: 'Formal null hypothesis (H0). Auto-generated if empty.',\n },\n alternative_hypothesis: {\n type: 'string',\n required: false,\n default: '',\n description: 'Formal alternative hypothesis (H1). Auto-generated if empty.',\n },\n direction: {\n type: 'string',\n required: false,\n default: 'different',\n description: 'Expected direction of effect: greater | less | different | equal.',\n },\n epochs: {\n type: 'number',\n required: false,\n default: 1000,\n description: 'Number of simulation runs per parameter combination. More = higher power.',\n },\n seed_start: {\n type: 'number',\n required: false,\n default: 0,\n description: 'Starting seed for reproducibility. Seeds increment per epoch.',\n },\n confidence_level: {\n type: 'number',\n required: false,\n default: 0.95,\n description: 'Confidence level for statistical tests (0.0 - 1.0). Default 0.95 = α=0.05.',\n },\n metrics: {\n type: 'string[]',\n required: true,\n description:\n 'List of metric names to collect each epoch. Must match emitted metric events.',\n },\n statistical_test: {\n type: 'string',\n required: false,\n default: 'auto',\n description:\n 'Statistical test to use: t_test | mann_whitney_u | chi_squared | auto. ' +\n 'Auto selects based on data distribution.',\n },\n export_training_data: {\n type: 'boolean',\n required: false,\n default: false,\n description: 'Whether to export results as training data for DataForge pipeline.',\n },\n marketplace_publishable: {\n type: 'boolean',\n required: false,\n default: false,\n description:\n 'Whether to package results for marketplace listing as verified simulation data.',\n },\n max_duration_ms: {\n type: 'number',\n required: false,\n default: 300000,\n description:\n 'Maximum wall-clock time for the entire experiment (5 min default). ' +\n 'Prevents runaway simulations.',\n },\n worker_count: {\n type: 'number',\n required: false,\n default: 4,\n description: 'Number of parallel workers for epoch execution.',\n },\n },\n validator: (params) => {\n if (!params.hypothesis || typeof params.hypothesis !== 'string') return false;\n if (!params.metrics || !Array.isArray(params.metrics) || params.metrics.length === 0)\n return false;\n if (params.epochs !== undefined && (params.epochs < 1 || params.epochs > 1000000))\n return false;\n if (\n params.confidence_level !== undefined &&\n (params.confidence_level <= 0 || params.confidence_level >= 1)\n )\n return false;\n if (params.direction !== undefined) {\n if (!['greater', 'less', 'different', 'equal'].includes(params.direction)) return false;\n }\n if (params.statistical_test !== undefined) {\n if (!['t_test', 'mann_whitney_u', 'chi_squared', 'auto'].includes(params.statistical_test))\n return false;\n }\n return true;\n },\n composesWith: [\n '@tradeable',\n '@depreciating',\n '@bonding_curved',\n '@taxable_wealth',\n '@pid_controlled',\n ],\n compiler_hints: {\n requires_runtime: [\n 'SimulationRuntime.runExperiment',\n 'SimulationRuntime.collectMetrics',\n 'SimulationRuntime.runStatisticalTest',\n 'SimulationRuntime.exportResults',\n ],\n thread_safety: 'worker_thread',\n performance_budget_ms: 300000, // Experiment budget, not per-frame\n batch_mode: true,\n },\n },\n};\n\n// =============================================================================\n// TRAIT UTILITIES\n// =============================================================================\n\n/**\n * Get all simulation trait names.\n */\nexport function getSimulationTraitNames(): string[] {\n return Object.keys(SimulationLabTraits).map((k) => SimulationLabTraits[k].name);\n}\n\n/**\n * Look up a simulation trait definition by name.\n */\nexport function getSimulationTrait(name: string): SimulationTraitDefinition | undefined {\n const key = name.startsWith('@') ? name.slice(1) : name;\n return SimulationLabTraits[key];\n}\n\nexport default SimulationLabTraits;\n","/**\n * @holoscript/std - Standard Library for HoloScript Plus\n *\n * Provides core types, math utilities, collections, string operations,\n * time management, spatial math, physics primitives, materials, and events\n * for HoloScript Plus programs.\n *\n * @example\n * ```hsplus\n * import { Vec3, createPBRMaterial, EventBus } from \"@holoscript/std\";\n *\n * let position = Vec3(0, 1, 0);\n * let steel = createPBRMaterial(\"Steel\", \"metal\");\n * let bus = new EventBus();\n * ```\n */\n\n// Re-export everything from types.js\nexport * from './types.js';\n\n// Spatial math (v4.2)\nexport {\n Vec3,\n Quaternion,\n Transform,\n Ray,\n AABB,\n distance,\n lerp as spatialLerp,\n clamp as spatialClamp,\n degToRad as spatialDegToRad,\n radToDeg as spatialRadToDeg,\n} from './spatial.js';\n\n// Physics primitives (v4.2)\nexport {\n createBoxCollider,\n createSphereCollider,\n createCapsuleCollider,\n createRigidbody,\n} from './physics.js';\nexport type {\n ColliderConfig,\n ColliderShapeType,\n RigidbodyConfig,\n ForceFieldConfig,\n ForceFieldType,\n JointConfig,\n JointType,\n RaycastHit,\n} from './physics.js';\n\n// Materials (v4.2)\nexport { MATERIAL_PRESETS, createPBRMaterial } from './materials.js';\nexport type { PBRMaterial, UnlitMaterial, TextureMapType, TextureConfig } from './materials.js';\n\n// Events (v4.2)\nexport { EventBus } from './events.js';\nexport type { EventHandler } from './events.js';\n\n// Math utilities - export objects from math.ts\nexport {\n // Constants\n PI,\n TAU,\n HALF_PI,\n EPSILON,\n DEG_TO_RAD,\n RAD_TO_DEG,\n\n // Basic math functions\n clamp,\n lerp,\n inverseLerp,\n remap,\n smoothstep,\n smootherstep,\n sign,\n fract,\n mod,\n step,\n degToRad,\n radToDeg,\n\n // Math utility objects (access methods like vec2Math.add(), vec3Math.cross(), etc.)\n vec2Math,\n vec3Math,\n quatMath,\n aabbMath,\n noise,\n random,\n} from './math.js';\n\n// Re-export with alternate names for convenience\nexport { degToRad as toRadians, radToDeg as toDegrees } from './math.js';\n\n// Collections\nexport {\n List,\n HoloMap,\n HoloSet,\n HoloMap as Map,\n HoloSet as Set,\n SpatialGrid,\n PriorityQueue,\n} from './collections.js';\n\n// String utilities\nexport {\n isBlank,\n isNotBlank,\n capitalize,\n titleCase,\n camelCase,\n pascalCase,\n snakeCase,\n kebabCase,\n constantCase,\n padLeft,\n padRight,\n center,\n truncate,\n truncateMiddle,\n repeat,\n reverse,\n count,\n containsIgnoreCase,\n startsWithIgnoreCase,\n endsWithIgnoreCase,\n removeWhitespace,\n collapseWhitespace,\n removePrefix,\n removeSuffix,\n wrap as wrapString,\n unwrap,\n lines,\n words,\n chars,\n join,\n format,\n formatNumber,\n numberWithCommas,\n formatBytes,\n formatDuration,\n escapeHtml,\n unescapeHtml,\n escapeRegex,\n slugify,\n isValidIdentifier,\n isNumeric,\n isAlphanumeric,\n isAlpha,\n randomString,\n uuid,\n indent,\n dedent,\n wordWrap,\n levenshtein,\n similarity,\n extractTraits,\n} from './string.js';\n\n// Economic primitives (v4.3)\nexport {\n // Tradeable\n generateTxHash,\n executeTrade,\n // Depreciation\n calculateDepreciation,\n depreciatedValue,\n isDestroyed,\n calculateRepairCost,\n DEFAULT_DEPRECIATION,\n // Bonding curves\n bondingCurvePrice,\n bondingCurveBuyCost,\n bondingCurveSellRefund,\n spatialPrice,\n DEFAULT_BONDING_CURVE,\n // Wealth taxation\n calculateTaxRate,\n calculateTaxAmount,\n calculateRedistribution,\n DEFAULT_WEALTH_TAX,\n // PID control\n createPIDState,\n updatePID,\n createDualLoopPIDState,\n updateDualLoopPID,\n DEFAULT_PID,\n // Faucet-sink tracking\n createFaucetSinkMetrics,\n recordFaucet,\n recordSink,\n resetMetricsPeriod,\n} from './traits/EconomicPrimitives.js';\nexport type {\n Currency,\n AgentID,\n EconomicResult,\n EconomicError,\n EconomicPermission,\n OwnershipRecord,\n TransferRecord,\n DepreciationConfig,\n BondingCurveType,\n BondingCurveConfig,\n WealthTaxConfig,\n PIDConfig,\n PIDState,\n DualLoopPIDConfig,\n DualLoopPIDState,\n FaucetSinkMetrics,\n} from './traits/EconomicPrimitives.js';\n\n// Economic traits (v4.3)\nexport {\n EconomicTraits,\n getEconomicTraitNames,\n getEconomicTrait,\n validateTraitComposition,\n getRequiredPermissions,\n} from './traits/EconomicTraits.js';\nexport type { EconomicTraitDefinition } from './traits/EconomicTraits.js';\n\n// SimulationLab primitives (v4.3)\nexport {\n // Statistics\n mean,\n variance,\n standardDeviation,\n standardError,\n cohensD,\n // Statistical tests\n tTest,\n oneSampleTTest,\n mannWhitneyU,\n chiSquaredTest,\n // Parameter sweeps\n expandSweep,\n generateSweepCombinations,\n isParameterRange,\n // Metric aggregation\n extractMetric,\n groupByParameter,\n summarizeMetrics,\n} from './traits/SimulationLabPrimitives.js';\nexport type {\n Hypothesis,\n HypothesisDirection,\n SimulationStatus,\n ParameterRange,\n ParameterSet,\n ParameterSweep,\n SimulationMetrics,\n StatisticalResult,\n ExperimentResult,\n} from './traits/SimulationLabPrimitives.js';\n\n// SimulationLab traits (v4.3)\nexport {\n SimulationLabTraits,\n getSimulationTraitNames,\n getSimulationTrait,\n} from './traits/SimulationLabTraits.js';\nexport type { SimulationTraitDefinition } from './traits/SimulationLabTraits.js';\n\n// Time utilities\nexport {\n now,\n hrTime,\n sleep,\n waitUntil,\n withTimeout,\n retry,\n debounce,\n throttle,\n measure,\n timed,\n Stopwatch,\n IntervalTimer,\n CountdownTimer,\n FrameTimer,\n schedule,\n scheduleInterval,\n scheduleFrame,\n createTicker,\n DateTime,\n} from './time.js';\n\n/**\n * Print to console (HoloScript standard output)\n */\nexport function print(...args: unknown[]): void {\n console.log(...args);\n}\n\n/**\n * Print error to console\n */\nexport function printError(...args: unknown[]): void {\n console.error(...args);\n}\n\n/**\n * Print warning to console\n */\nexport function printWarn(...args: unknown[]): void {\n console.warn(...args);\n}\n\n/**\n * Assert a condition is true\n */\nexport function assert(condition: boolean, message?: string): asserts condition {\n if (!condition) {\n throw new Error(message ?? 'Assertion failed');\n }\n}\n\n/**\n * Assert a value is not null or undefined\n */\nexport function assertDefined<T>(\n value: T | null | undefined,\n message?: string\n): asserts value is T {\n if (value === null || value === undefined) {\n throw new Error(message ?? 'Value is null or undefined');\n }\n}\n\n/**\n * Unreachable code marker (for exhaustiveness checking)\n */\nexport function unreachable(message?: string): never {\n throw new Error(message ?? 'Unreachable code reached');\n}\n\n/**\n * Todo marker (throws at runtime)\n */\nexport function todo(message?: string): never {\n throw new Error(`Not implemented: ${message ?? 'No details'}`);\n}\n\n/**\n * Deep clone an object\n */\nexport function clone<T>(value: T): T {\n if (value === null || typeof value !== 'object') {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map(clone) as T;\n }\n\n if (value instanceof Date) {\n return new Date(value.getTime()) as T;\n }\n\n if (value instanceof Map) {\n return new Map([...value].map(([k, v]) => [clone(k), clone(v)])) as T;\n }\n\n if (value instanceof Set) {\n return new Set([...value].map(clone)) as T;\n }\n\n const result: Record<string, unknown> = {};\n for (const key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key)) {\n result[key] = clone((value as Record<string, unknown>)[key]);\n }\n }\n return result as T;\n}\n\n/**\n * Deep equality check\n */\nexport function equals(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (a === null || b === null) return false;\n if (typeof a !== typeof b) return false;\n\n if (typeof a !== 'object') return false;\n\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((item, i) => equals(item, b[i]));\n }\n\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n\n if (a instanceof Map && b instanceof Map) {\n if (a.size !== b.size) return false;\n for (const [key, value] of a) {\n if (!b.has(key) || !equals(value, b.get(key))) return false;\n }\n return true;\n }\n\n if (a instanceof Set && b instanceof Set) {\n if (a.size !== b.size) return false;\n for (const value of a) {\n if (!b.has(value)) return false;\n }\n return true;\n }\n\n const keysA = Object.keys(a);\n const keysB = Object.keys(b as object);\n if (keysA.length !== keysB.length) return false;\n\n return keysA.every((key) =>\n equals((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key])\n );\n}\n\n/**\n * Pipe a value through a series of functions\n */\nexport function pipe<A>(value: A): A;\nexport function pipe<A, B>(value: A, fn1: (a: A) => B): B;\nexport function pipe<A, B, C>(value: A, fn1: (a: A) => B, fn2: (b: B) => C): C;\nexport function pipe<A, B, C, D>(value: A, fn1: (a: A) => B, fn2: (b: B) => C, fn3: (c: C) => D): D;\nexport function pipe<A, B, C, D, E>(\n value: A,\n fn1: (a: A) => B,\n fn2: (b: B) => C,\n fn3: (c: C) => D,\n fn4: (d: D) => E\n): E;\nexport function pipe(value: unknown, ...fns: ((x: unknown) => unknown)[]): unknown {\n return fns.reduce((acc, fn) => fn(acc), value);\n}\n\n/**\n * Compose functions right to left\n */\nexport function compose<A>(): (a: A) => A;\nexport function compose<A, B>(fn1: (a: A) => B): (a: A) => B;\nexport function compose<A, B, C>(fn2: (b: B) => C, fn1: (a: A) => B): (a: A) => C;\nexport function compose<A, B, C, D>(\n fn3: (c: C) => D,\n fn2: (b: B) => C,\n fn1: (a: A) => B\n): (a: A) => D;\nexport function compose(...fns: ((x: unknown) => unknown)[]): (x: unknown) => unknown {\n return (value: unknown) => fns.reduceRight((acc, fn) => fn(acc), value);\n}\n\n/**\n * Identity function\n */\nexport function identity<T>(value: T): T {\n return value;\n}\n\n/**\n * No-operation function\n */\nexport function noop(): void {}\n\n/**\n * Create a constant function\n */\nexport function constant<T>(value: T): () => T {\n return () => value;\n}\n"],"mappings":"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","names":["ray","lerp","clamp","degToRad","radToDeg","sign"]}
package/dist/math.cjs CHANGED
@@ -50,9 +50,24 @@ module.exports = __toCommonJS(math_exports);
50
50
  // src/types.ts
51
51
  function vec3(x = 0, y = 0, z = 0) {
52
52
  const v = [x, y, z];
53
- Object.defineProperty(v, "x", { value: x, writable: true, enumerable: false, configurable: true });
54
- Object.defineProperty(v, "y", { value: y, writable: true, enumerable: false, configurable: true });
55
- Object.defineProperty(v, "z", { value: z, writable: true, enumerable: false, configurable: true });
53
+ Object.defineProperty(v, "x", {
54
+ value: x,
55
+ writable: true,
56
+ enumerable: false,
57
+ configurable: true
58
+ });
59
+ Object.defineProperty(v, "y", {
60
+ value: y,
61
+ writable: true,
62
+ enumerable: false,
63
+ configurable: true
64
+ });
65
+ Object.defineProperty(v, "z", {
66
+ value: z,
67
+ writable: true,
68
+ enumerable: false,
69
+ configurable: true
70
+ });
56
71
  return v;
57
72
  }
58
73
  function quat(x = 0, y = 0, z = 0, w = 1) {