@photivra/engine 1.4.0 → 2.0.0

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 (1074) hide show
  1. package/CHANGELOG.md +401 -6
  2. package/CITATION.cff +1 -1
  3. package/NODE_SUPPORT.md +64 -12
  4. package/README.md +301 -182
  5. package/SECURITY.md +37 -28
  6. package/THIRD_PARTY.md +148 -4
  7. package/dist/camera/equivalent-focal-length.d.ts +13 -14
  8. package/dist/camera/equivalent-focal-length.js +15 -13
  9. package/dist/camera/equivalent-focal-length.js.map +1 -1
  10. package/dist/camera/field-of-view.d.ts +30 -19
  11. package/dist/camera/field-of-view.js +67 -18
  12. package/dist/camera/field-of-view.js.map +1 -1
  13. package/dist/camera/lens-projection.d.ts +170 -0
  14. package/dist/camera/lens-projection.js +444 -0
  15. package/dist/camera/lens-projection.js.map +1 -0
  16. package/dist/camera/projected-object-size.d.ts +10 -11
  17. package/dist/camera/projected-object-size.js +12 -10
  18. package/dist/camera/projected-object-size.js.map +1 -1
  19. package/dist/capture/capture-export-metadata.d.ts +9 -10
  20. package/dist/capture/capture-export-metadata.js +8 -5
  21. package/dist/capture/capture-export-metadata.js.map +1 -1
  22. package/dist/capture/dng-import.d.ts +91 -0
  23. package/dist/capture/dng-import.js +343 -0
  24. package/dist/capture/dng-import.js.map +1 -0
  25. package/dist/capture/environment-raw-producer.d.ts +37 -17
  26. package/dist/capture/environment-raw-producer.js +43 -19
  27. package/dist/capture/environment-raw-producer.js.map +1 -1
  28. package/dist/capture/export-jpeg.d.ts +35 -4
  29. package/dist/capture/export-jpeg.js +133 -47
  30. package/dist/capture/export-jpeg.js.map +1 -1
  31. package/dist/capture/export-tiff.d.ts +48 -24
  32. package/dist/capture/export-tiff.js +91 -31
  33. package/dist/capture/export-tiff.js.map +1 -1
  34. package/dist/capture/focus-control.d.ts +42 -65
  35. package/dist/capture/focus-control.js +56 -75
  36. package/dist/capture/focus-control.js.map +1 -1
  37. package/dist/capture/host-yield-cadence.d.ts +25 -0
  38. package/dist/capture/host-yield-cadence.js +25 -0
  39. package/dist/capture/host-yield-cadence.js.map +1 -0
  40. package/dist/capture/linear-encoding.d.ts +14 -12
  41. package/dist/capture/linear-encoding.js +14 -13
  42. package/dist/capture/linear-encoding.js.map +1 -1
  43. package/dist/capture/lossless-jpeg.d.ts +27 -0
  44. package/dist/capture/lossless-jpeg.js +237 -0
  45. package/dist/capture/lossless-jpeg.js.map +1 -0
  46. package/dist/capture/native-environment-lean.d.ts +227 -0
  47. package/dist/capture/native-environment-lean.js +974 -0
  48. package/dist/capture/native-environment-lean.js.map +1 -0
  49. package/dist/capture/native-environment-optical-stage.d.ts +97 -0
  50. package/dist/capture/native-environment-optical-stage.js +340 -0
  51. package/dist/capture/native-environment-optical-stage.js.map +1 -0
  52. package/dist/capture/native-environment-raw.d.ts +140 -6
  53. package/dist/capture/native-environment-raw.js +435 -34
  54. package/dist/capture/native-environment-raw.js.map +1 -1
  55. package/dist/capture/native-raw-development.d.ts +118 -5
  56. package/dist/capture/native-raw-development.js +224 -59
  57. package/dist/capture/native-raw-development.js.map +1 -1
  58. package/dist/capture/native-raw-dng.d.ts +60 -0
  59. package/dist/capture/native-raw-dng.js +167 -0
  60. package/dist/capture/native-raw-dng.js.map +1 -0
  61. package/dist/capture/native-raw.d.ts +67 -10
  62. package/dist/capture/native-raw.js +90 -24
  63. package/dist/capture/native-raw.js.map +1 -1
  64. package/dist/capture/packed-sensor-raw.d.ts +160 -0
  65. package/dist/capture/packed-sensor-raw.js +221 -0
  66. package/dist/capture/packed-sensor-raw.js.map +1 -0
  67. package/dist/capture/photographic-export.d.ts +58 -35
  68. package/dist/capture/photographic-export.js +177 -70
  69. package/dist/capture/photographic-export.js.map +1 -1
  70. package/dist/capture/raw-development-kernel.d.ts +52 -0
  71. package/dist/capture/raw-development-kernel.js +88 -0
  72. package/dist/capture/raw-development-kernel.js.map +1 -0
  73. package/dist/capture/raw-frame-limits.d.ts +7 -7
  74. package/dist/capture/raw-frame-limits.js +7 -6
  75. package/dist/capture/raw-frame-limits.js.map +1 -1
  76. package/dist/capture/raw-frame-reconstruction.d.ts +8 -9
  77. package/dist/capture/raw-frame-reconstruction.js +9 -8
  78. package/dist/capture/raw-frame-reconstruction.js.map +1 -1
  79. package/dist/capture/raw-white-level.d.ts +55 -0
  80. package/dist/capture/raw-white-level.js +165 -0
  81. package/dist/capture/raw-white-level.js.map +1 -0
  82. package/dist/capture/release-sequence.d.ts +5 -7
  83. package/dist/capture/release-sequence.js +15 -13
  84. package/dist/capture/release-sequence.js.map +1 -1
  85. package/dist/capture/sensor-raw-frame.d.ts +5 -6
  86. package/dist/capture/sensor-raw-frame.js +26 -9
  87. package/dist/capture/sensor-raw-frame.js.map +1 -1
  88. package/dist/capture/sensor-raw-producer.d.ts +21 -13
  89. package/dist/capture/sensor-raw-producer.js +86 -25
  90. package/dist/capture/sensor-raw-producer.js.map +1 -1
  91. package/dist/capture/simulated-capture.d.ts +15 -16
  92. package/dist/capture/simulated-capture.js +22 -12
  93. package/dist/capture/simulated-capture.js.map +1 -1
  94. package/dist/color/camera-color-matrix.d.ts +69 -0
  95. package/dist/color/camera-color-matrix.js +132 -0
  96. package/dist/color/camera-color-matrix.js.map +1 -0
  97. package/dist/color/capture-color.d.ts +17 -10
  98. package/dist/color/capture-color.js +50 -17
  99. package/dist/color/capture-color.js.map +1 -1
  100. package/dist/color/chromatic-adaptation.d.ts +63 -0
  101. package/dist/color/chromatic-adaptation.js +91 -0
  102. package/dist/color/chromatic-adaptation.js.map +1 -0
  103. package/dist/color/color-difference.d.ts +104 -0
  104. package/dist/color/color-difference.js +205 -0
  105. package/dist/color/color-difference.js.map +1 -0
  106. package/dist/color/color-matching-functions.d.ts +168 -0
  107. package/dist/color/color-matching-functions.js +309 -0
  108. package/dist/color/color-matching-functions.js.map +1 -0
  109. package/dist/color/colorimetry-math.d.ts +52 -0
  110. package/dist/color/colorimetry-math.js +144 -0
  111. package/dist/color/colorimetry-math.js.map +1 -0
  112. package/dist/color/gamut-mapping.d.ts +54 -0
  113. package/dist/color/gamut-mapping.js +107 -0
  114. package/dist/color/gamut-mapping.js.map +1 -0
  115. package/dist/color/illuminants.d.ts +182 -0
  116. package/dist/color/illuminants.js +434 -0
  117. package/dist/color/illuminants.js.map +1 -0
  118. package/dist/color/rgb-color-spaces.d.ts +79 -0
  119. package/dist/color/rgb-color-spaces.js +115 -0
  120. package/dist/color/rgb-color-spaces.js.map +1 -0
  121. package/dist/color/sensor-color-development.d.ts +33 -11
  122. package/dist/color/sensor-color-development.js +104 -30
  123. package/dist/color/sensor-color-development.js.map +1 -1
  124. package/dist/color/srgb-icc.d.ts +9 -2
  125. package/dist/color/srgb-icc.js +16 -5
  126. package/dist/color/srgb-icc.js.map +1 -1
  127. package/dist/color/srgb-transfer.d.ts +1 -2
  128. package/dist/color/srgb-transfer.js +1 -1
  129. package/dist/color/srgb-transfer.js.map +1 -1
  130. package/dist/color/white-balance.d.ts +68 -19
  131. package/dist/color/white-balance.js +168 -35
  132. package/dist/color/white-balance.js.map +1 -1
  133. package/dist/composition/image-formation-plan.d.ts +152 -128
  134. package/dist/composition/image-formation-plan.js +292 -138
  135. package/dist/composition/image-formation-plan.js.map +1 -1
  136. package/dist/composition/plan-consumer.d.ts +6 -7
  137. package/dist/composition/plan-consumer.js +14 -11
  138. package/dist/composition/plan-consumer.js.map +1 -1
  139. package/dist/core/calculation-result.d.ts +21 -14
  140. package/dist/core/calculation-result.js +209 -11
  141. package/dist/core/calculation-result.js.map +1 -1
  142. package/dist/core/canonical-json.d.ts +13 -8
  143. package/dist/core/canonical-json.js +34 -15
  144. package/dist/core/canonical-json.js.map +1 -1
  145. package/dist/core/configuration-error.d.ts +5 -4
  146. package/dist/core/configuration-error.js +5 -3
  147. package/dist/core/configuration-error.js.map +1 -1
  148. package/dist/core/evidence-provenance.d.ts +12 -12
  149. package/dist/core/evidence-provenance.js +10 -9
  150. package/dist/core/evidence-provenance.js.map +1 -1
  151. package/dist/core/image-formation.d.ts +11 -10
  152. package/dist/core/image-formation.js +11 -9
  153. package/dist/core/image-formation.js.map +1 -1
  154. package/dist/core/owned-data.d.ts +9 -17
  155. package/dist/core/owned-data.js +9 -16
  156. package/dist/core/owned-data.js.map +1 -1
  157. package/dist/core/portable-math.d.ts +15 -0
  158. package/dist/core/portable-math.js +56 -0
  159. package/dist/core/portable-math.js.map +1 -0
  160. package/dist/core/record-validation.d.ts +48 -9
  161. package/dist/core/record-validation.js +93 -19
  162. package/dist/core/record-validation.js.map +1 -1
  163. package/dist/core/scientific-assurance.d.ts +16 -14
  164. package/dist/core/scientific-assurance.js +22 -18
  165. package/dist/core/scientific-assurance.js.map +1 -1
  166. package/dist/core/spectral-composition.d.ts +13 -14
  167. package/dist/core/spectral-composition.js +30 -27
  168. package/dist/core/spectral-composition.js.map +1 -1
  169. package/dist/core/spectral.d.ts +5 -6
  170. package/dist/core/spectral.js +9 -7
  171. package/dist/core/spectral.js.map +1 -1
  172. package/dist/core/validation.d.ts +3 -6
  173. package/dist/core/validation.js +3 -5
  174. package/dist/core/validation.js.map +1 -1
  175. package/dist/core/version.d.ts +6 -6
  176. package/dist/core/version.js +6 -5
  177. package/dist/core/version.js.map +1 -1
  178. package/dist/equipment/exposure-capabilities.d.ts +10 -10
  179. package/dist/equipment/exposure-capabilities.js +40 -30
  180. package/dist/equipment/exposure-capabilities.js.map +1 -1
  181. package/dist/equipment/generic-tier-assets.d.ts +13 -6
  182. package/dist/equipment/generic-tier-assets.js +34 -15
  183. package/dist/equipment/generic-tier-assets.js.map +1 -1
  184. package/dist/equipment/generic-tier-presets.d.ts +5 -6
  185. package/dist/equipment/generic-tier-presets.js +15 -13
  186. package/dist/equipment/generic-tier-presets.js.map +1 -1
  187. package/dist/equipment/iso-capabilities.d.ts +21 -22
  188. package/dist/equipment/iso-capabilities.js +49 -44
  189. package/dist/equipment/iso-capabilities.js.map +1 -1
  190. package/dist/equipment/metering-capabilities.d.ts +5 -6
  191. package/dist/equipment/metering-capabilities.js +22 -19
  192. package/dist/equipment/metering-capabilities.js.map +1 -1
  193. package/dist/equipment/release-capabilities.d.ts +3 -4
  194. package/dist/equipment/release-capabilities.js +18 -14
  195. package/dist/equipment/release-capabilities.js.map +1 -1
  196. package/dist/exposure/exposure-duration-control.d.ts +19 -17
  197. package/dist/exposure/exposure-duration-control.js +27 -23
  198. package/dist/exposure/exposure-duration-control.js.map +1 -1
  199. package/dist/exposure/exposure-mode-resolver.d.ts +42 -39
  200. package/dist/exposure/exposure-mode-resolver.js +127 -82
  201. package/dist/exposure/exposure-mode-resolver.js.map +1 -1
  202. package/dist/exposure/exposure.d.ts +17 -16
  203. package/dist/exposure/exposure.js +22 -15
  204. package/dist/exposure/exposure.js.map +1 -1
  205. package/dist/exposure/flash-ttl.d.ts +135 -0
  206. package/dist/exposure/flash-ttl.js +193 -0
  207. package/dist/exposure/flash-ttl.js.map +1 -0
  208. package/dist/exposure/flash.d.ts +144 -36
  209. package/dist/exposure/flash.js +259 -59
  210. package/dist/exposure/flash.js.map +1 -1
  211. package/dist/exposure/metering-scene-radiance.d.ts +10 -10
  212. package/dist/exposure/metering-scene-radiance.js +42 -23
  213. package/dist/exposure/metering-scene-radiance.js.map +1 -1
  214. package/dist/exposure/metering-target.d.ts +8 -8
  215. package/dist/exposure/metering-target.js +30 -20
  216. package/dist/exposure/metering-target.js.map +1 -1
  217. package/dist/exposure/metering-temporal.d.ts +16 -15
  218. package/dist/exposure/metering-temporal.js +41 -19
  219. package/dist/exposure/metering-temporal.js.map +1 -1
  220. package/dist/exposure/metering.d.ts +64 -17
  221. package/dist/exposure/metering.js +159 -30
  222. package/dist/exposure/metering.js.map +1 -1
  223. package/dist/exposure/program-line.d.ts +5 -5
  224. package/dist/exposure/program-line.js +20 -13
  225. package/dist/exposure/program-line.js.map +1 -1
  226. package/dist/facade/camera-preset.d.ts +8 -0
  227. package/dist/facade/camera-preset.js +102 -0
  228. package/dist/facade/camera-preset.js.map +1 -0
  229. package/dist/facade/chart-radiance-batch.d.ts +57 -0
  230. package/dist/facade/chart-radiance-batch.js +121 -0
  231. package/dist/facade/chart-radiance-batch.js.map +1 -0
  232. package/dist/facade/chart-scenes.d.ts +177 -0
  233. package/dist/facade/chart-scenes.js +232 -0
  234. package/dist/facade/chart-scenes.js.map +1 -0
  235. package/dist/facade/host-yield.d.ts +7 -0
  236. package/dist/facade/host-yield.js +23 -0
  237. package/dist/facade/host-yield.js.map +1 -0
  238. package/dist/facade/scene-radiance.d.ts +117 -0
  239. package/dist/facade/scene-radiance.js +205 -0
  240. package/dist/facade/scene-radiance.js.map +1 -0
  241. package/dist/facade/simulate-capture.d.ts +284 -0
  242. package/dist/facade/simulate-capture.js +1026 -0
  243. package/dist/facade/simulate-capture.js.map +1 -0
  244. package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
  245. package/dist/gpu/chart-radiance-gpu.js +176 -0
  246. package/dist/gpu/chart-radiance-gpu.js.map +1 -0
  247. package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
  248. package/dist/gpu/image-kernel-accelerator.js +720 -0
  249. package/dist/gpu/image-kernel-accelerator.js.map +1 -0
  250. package/dist/gpu/image-kernel-execution.d.ts +92 -0
  251. package/dist/gpu/image-kernel-execution.js +84 -0
  252. package/dist/gpu/image-kernel-execution.js.map +1 -0
  253. package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
  254. package/dist/gpu/sensor-stage-gpu.js +317 -0
  255. package/dist/gpu/sensor-stage-gpu.js.map +1 -0
  256. package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
  257. package/dist/gpu/temporal-sum-gpu.js +150 -0
  258. package/dist/gpu/temporal-sum-gpu.js.map +1 -0
  259. package/dist/gpu/webgpu-runtime.d.ts +63 -0
  260. package/dist/gpu/webgpu-runtime.js +215 -0
  261. package/dist/gpu/webgpu-runtime.js.map +1 -0
  262. package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
  263. package/dist/gpu/wgsl-chart-kernel.js +165 -0
  264. package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
  265. package/dist/gpu/wgsl-kernels.d.ts +53 -0
  266. package/dist/gpu/wgsl-kernels.js +365 -0
  267. package/dist/gpu/wgsl-kernels.js.map +1 -0
  268. package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
  269. package/dist/gpu/wgsl-sensor-kernel.js +409 -0
  270. package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
  271. package/dist/index.d.ts +89 -25
  272. package/dist/index.js +59 -15
  273. package/dist/index.js.map +1 -1
  274. package/dist/motion/camera-rotation.d.ts +92 -40
  275. package/dist/motion/camera-rotation.js +84 -47
  276. package/dist/motion/camera-rotation.js.map +1 -1
  277. package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
  278. package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
  279. package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
  280. package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
  281. package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
  282. package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
  283. package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
  284. package/dist/motion/capture-rotation-trajectory.js +36 -26
  285. package/dist/motion/capture-rotation-trajectory.js.map +1 -1
  286. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
  287. package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
  288. package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
  289. package/dist/motion/extended-object-projection.d.ts +19 -16
  290. package/dist/motion/extended-object-projection.js +38 -18
  291. package/dist/motion/extended-object-projection.js.map +1 -1
  292. package/dist/motion/projected-motion.d.ts +18 -17
  293. package/dist/motion/projected-motion.js +25 -17
  294. package/dist/motion/projected-motion.js.map +1 -1
  295. package/dist/motion/temporal-exposure-sum.d.ts +55 -0
  296. package/dist/motion/temporal-exposure-sum.js +141 -0
  297. package/dist/motion/temporal-exposure-sum.js.map +1 -0
  298. package/dist/motion/video-sequence.d.ts +111 -0
  299. package/dist/motion/video-sequence.js +179 -0
  300. package/dist/motion/video-sequence.js.map +1 -0
  301. package/dist/optics/aperture.d.ts +14 -15
  302. package/dist/optics/aperture.js +13 -11
  303. package/dist/optics/aperture.js.map +1 -1
  304. package/dist/optics/atmospheric-haze.d.ts +83 -0
  305. package/dist/optics/atmospheric-haze.js +113 -0
  306. package/dist/optics/atmospheric-haze.js.map +1 -0
  307. package/dist/optics/brown-conrady-distortion.d.ts +116 -0
  308. package/dist/optics/brown-conrady-distortion.js +291 -0
  309. package/dist/optics/brown-conrady-distortion.js.map +1 -0
  310. package/dist/optics/circle-of-confusion.d.ts +10 -10
  311. package/dist/optics/circle-of-confusion.js +15 -11
  312. package/dist/optics/circle-of-confusion.js.map +1 -1
  313. package/dist/optics/complex-pupil-psf.d.ts +64 -33
  314. package/dist/optics/complex-pupil-psf.js +190 -98
  315. package/dist/optics/complex-pupil-psf.js.map +1 -1
  316. package/dist/optics/depth-of-field.d.ts +25 -15
  317. package/dist/optics/depth-of-field.js +67 -27
  318. package/dist/optics/depth-of-field.js.map +1 -1
  319. package/dist/optics/diffraction.d.ts +14 -13
  320. package/dist/optics/diffraction.js +14 -10
  321. package/dist/optics/diffraction.js.map +1 -1
  322. package/dist/optics/focus-breathing.d.ts +88 -27
  323. package/dist/optics/focus-breathing.js +114 -23
  324. package/dist/optics/focus-breathing.js.map +1 -1
  325. package/dist/optics/focus-state.d.ts +18 -18
  326. package/dist/optics/focus-state.js +21 -15
  327. package/dist/optics/focus-state.js.map +1 -1
  328. package/dist/optics/front-of-lens-filter.d.ts +45 -14
  329. package/dist/optics/front-of-lens-filter.js +259 -88
  330. package/dist/optics/front-of-lens-filter.js.map +1 -1
  331. package/dist/optics/illumination-vignetting.d.ts +16 -17
  332. package/dist/optics/illumination-vignetting.js +40 -17
  333. package/dist/optics/illumination-vignetting.js.map +1 -1
  334. package/dist/optics/irradiance-convolution.d.ts +59 -0
  335. package/dist/optics/irradiance-convolution.js +138 -0
  336. package/dist/optics/irradiance-convolution.js.map +1 -0
  337. package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
  338. package/dist/optics/lateral-chromatic-aberration.js +33 -23
  339. package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
  340. package/dist/optics/lens-psf-kernels.d.ts +89 -0
  341. package/dist/optics/lens-psf-kernels.js +175 -0
  342. package/dist/optics/lens-psf-kernels.js.map +1 -0
  343. package/dist/optics/lens-psf-profile.d.ts +78 -46
  344. package/dist/optics/lens-psf-profile.js +335 -124
  345. package/dist/optics/lens-psf-profile.js.map +1 -1
  346. package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
  347. package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
  348. package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
  349. package/dist/optics/polygon-diffraction.d.ts +80 -23
  350. package/dist/optics/polygon-diffraction.js +130 -25
  351. package/dist/optics/polygon-diffraction.js.map +1 -1
  352. package/dist/optics/profile-contract.d.ts +5 -6
  353. package/dist/optics/profile-contract.js +14 -11
  354. package/dist/optics/profile-contract.js.map +1 -1
  355. package/dist/optics/psf-foundation.d.ts +23 -23
  356. package/dist/optics/psf-foundation.js +24 -21
  357. package/dist/optics/psf-foundation.js.map +1 -1
  358. package/dist/optics/pupil-vignetting.d.ts +118 -0
  359. package/dist/optics/pupil-vignetting.js +264 -0
  360. package/dist/optics/pupil-vignetting.js.map +1 -0
  361. package/dist/optics/radial-distortion.d.ts +34 -33
  362. package/dist/optics/radial-distortion.js +37 -30
  363. package/dist/optics/radial-distortion.js.map +1 -1
  364. package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
  365. package/dist/optics/scene-to-sensor-irradiance.js +73 -45
  366. package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
  367. package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
  368. package/dist/optics/scene-to-sensor-quadrature.js +16 -11
  369. package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
  370. package/dist/optics/sensor-aperture-rays.d.ts +20 -4
  371. package/dist/optics/sensor-aperture-rays.js +32 -14
  372. package/dist/optics/sensor-aperture-rays.js.map +1 -1
  373. package/dist/optics/sensor-environment-query.d.ts +81 -16
  374. package/dist/optics/sensor-environment-query.js +145 -12
  375. package/dist/optics/sensor-environment-query.js.map +1 -1
  376. package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
  377. package/dist/optics/sensor-psf-quadrature.js +18 -11
  378. package/dist/optics/sensor-psf-quadrature.js.map +1 -1
  379. package/dist/optics/sensor-psf-support.d.ts +8 -6
  380. package/dist/optics/sensor-psf-support.js +8 -5
  381. package/dist/optics/sensor-psf-support.js.map +1 -1
  382. package/dist/optics/stray-light.d.ts +22 -19
  383. package/dist/optics/stray-light.js +18 -12
  384. package/dist/optics/stray-light.js.map +1 -1
  385. package/dist/optics/thin-lens.d.ts +10 -9
  386. package/dist/optics/thin-lens.js +12 -8
  387. package/dist/optics/thin-lens.js.map +1 -1
  388. package/dist/optics/zernike-wavefront.d.ts +154 -0
  389. package/dist/optics/zernike-wavefront.js +352 -0
  390. package/dist/optics/zernike-wavefront.js.map +1 -0
  391. package/dist/output/capture-corrected-sdr.d.ts +16 -8
  392. package/dist/output/capture-corrected-sdr.js +16 -8
  393. package/dist/output/capture-corrected-sdr.js.map +1 -1
  394. package/dist/output/capture-geometry.d.ts +34 -36
  395. package/dist/output/capture-geometry.js +52 -32
  396. package/dist/output/capture-geometry.js.map +1 -1
  397. package/dist/output/capture-sdr.d.ts +7 -6
  398. package/dist/output/capture-sdr.js +11 -8
  399. package/dist/output/capture-sdr.js.map +1 -1
  400. package/dist/output/crop.d.ts +22 -6
  401. package/dist/output/crop.js +40 -6
  402. package/dist/output/crop.js.map +1 -1
  403. package/dist/output/geometric-transforms.d.ts +60 -23
  404. package/dist/output/geometric-transforms.js +111 -24
  405. package/dist/output/geometric-transforms.js.map +1 -1
  406. package/dist/output/lens-corrections.d.ts +27 -19
  407. package/dist/output/lens-corrections.js +29 -13
  408. package/dist/output/lens-corrections.js.map +1 -1
  409. package/dist/output/native-capture-sdr.d.ts +71 -16
  410. package/dist/output/native-capture-sdr.js +190 -33
  411. package/dist/output/native-capture-sdr.js.map +1 -1
  412. package/dist/output/png-encoder.d.ts +65 -0
  413. package/dist/output/png-encoder.js +461 -0
  414. package/dist/output/png-encoder.js.map +1 -0
  415. package/dist/output/print-contrast-reference.d.ts +10 -9
  416. package/dist/output/print-contrast-reference.js +10 -8
  417. package/dist/output/print-contrast-reference.js.map +1 -1
  418. package/dist/output/print-detail.d.ts +18 -17
  419. package/dist/output/print-detail.js +12 -10
  420. package/dist/output/print-detail.js.map +1 -1
  421. package/dist/output/print-jpeg.d.ts +26 -5
  422. package/dist/output/print-jpeg.js +117 -50
  423. package/dist/output/print-jpeg.js.map +1 -1
  424. package/dist/output/print-plan.d.ts +19 -19
  425. package/dist/output/print-plan.js +11 -10
  426. package/dist/output/print-plan.js.map +1 -1
  427. package/dist/output/print-region-statistics.d.ts +14 -15
  428. package/dist/output/print-region-statistics.js +11 -11
  429. package/dist/output/print-region-statistics.js.map +1 -1
  430. package/dist/output/sdr-rendering.d.ts +48 -10
  431. package/dist/output/sdr-rendering.js +114 -25
  432. package/dist/output/sdr-rendering.js.map +1 -1
  433. package/dist/output/subject-framing-crop.d.ts +6 -10
  434. package/dist/output/subject-framing-crop.js +23 -13
  435. package/dist/output/subject-framing-crop.js.map +1 -1
  436. package/dist/processing/demosaic.d.ts +90 -0
  437. package/dist/processing/demosaic.js +275 -0
  438. package/dist/processing/demosaic.js.map +1 -0
  439. package/dist/processing/denoise.d.ts +68 -0
  440. package/dist/processing/denoise.js +214 -0
  441. package/dist/processing/denoise.js.map +1 -0
  442. package/dist/processing/focus-stacking.d.ts +17 -0
  443. package/dist/processing/focus-stacking.js +80 -0
  444. package/dist/processing/focus-stacking.js.map +1 -0
  445. package/dist/processing/hdr.d.ts +54 -0
  446. package/dist/processing/hdr.js +172 -0
  447. package/dist/processing/hdr.js.map +1 -0
  448. package/dist/processing/image-ops.d.ts +66 -0
  449. package/dist/processing/image-ops.js +192 -0
  450. package/dist/processing/image-ops.js.map +1 -0
  451. package/dist/processing/panorama.d.ts +51 -0
  452. package/dist/processing/panorama.js +305 -0
  453. package/dist/processing/panorama.js.map +1 -0
  454. package/dist/processing/processing-task.d.ts +85 -0
  455. package/dist/processing/processing-task.js +164 -0
  456. package/dist/processing/processing-task.js.map +1 -0
  457. package/dist/processing/tone-mapping.d.ts +69 -0
  458. package/dist/processing/tone-mapping.js +310 -0
  459. package/dist/processing/tone-mapping.js.map +1 -0
  460. package/dist/schema/camera.d.ts +5 -4
  461. package/dist/schema/illumination-spectral.d.ts +13 -19
  462. package/dist/schema/illumination-spectral.js +23 -19
  463. package/dist/schema/illumination-spectral.js.map +1 -1
  464. package/dist/schema/illumination-temporal.d.ts +12 -15
  465. package/dist/schema/illumination-temporal.js +43 -28
  466. package/dist/schema/illumination-temporal.js.map +1 -1
  467. package/dist/schema/illumination.d.ts +5 -4
  468. package/dist/schema/illumination.js +55 -20
  469. package/dist/schema/illumination.js.map +1 -1
  470. package/dist/schema/scene-radiance-temporal.d.ts +9 -11
  471. package/dist/schema/scene-radiance-temporal.js +26 -23
  472. package/dist/schema/scene-radiance-temporal.js.map +1 -1
  473. package/dist/schema/scene-radiance.d.ts +17 -17
  474. package/dist/schema/scene-radiance.js +56 -34
  475. package/dist/schema/scene-radiance.js.map +1 -1
  476. package/dist/schema/scene.d.ts +14 -13
  477. package/dist/schema/validation.d.ts +0 -1
  478. package/dist/schema/validation.js +17 -15
  479. package/dist/schema/validation.js.map +1 -1
  480. package/dist/sensor/accumulated-charge.d.ts +45 -64
  481. package/dist/sensor/accumulated-charge.js +41 -47
  482. package/dist/sensor/accumulated-charge.js.map +1 -1
  483. package/dist/sensor/architecture.d.ts +22 -25
  484. package/dist/sensor/architecture.js +17 -16
  485. package/dist/sensor/architecture.js.map +1 -1
  486. package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
  487. package/dist/sensor/camera-saturation-capacity.js +36 -34
  488. package/dist/sensor/camera-saturation-capacity.js.map +1 -1
  489. package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
  490. package/dist/sensor/capture-color-sampling-binding.js +39 -41
  491. package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
  492. package/dist/sensor/capture-mode-timing.d.ts +8 -9
  493. package/dist/sensor/capture-mode-timing.js +24 -21
  494. package/dist/sensor/capture-mode-timing.js.map +1 -1
  495. package/dist/sensor/capture-mode.d.ts +28 -30
  496. package/dist/sensor/capture-mode.js +33 -31
  497. package/dist/sensor/capture-mode.js.map +1 -1
  498. package/dist/sensor/color-sampling.d.ts +30 -33
  499. package/dist/sensor/color-sampling.js +32 -37
  500. package/dist/sensor/color-sampling.js.map +1 -1
  501. package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
  502. package/dist/sensor/constant-rate-temporal-integration.js +28 -26
  503. package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
  504. package/dist/sensor/dark-current.d.ts +53 -49
  505. package/dist/sensor/dark-current.js +87 -46
  506. package/dist/sensor/dark-current.js.map +1 -1
  507. package/dist/sensor/environment-photo-signal.d.ts +71 -30
  508. package/dist/sensor/environment-photo-signal.js +127 -46
  509. package/dist/sensor/environment-photo-signal.js.map +1 -1
  510. package/dist/sensor/eqe-electron-rate.d.ts +14 -13
  511. package/dist/sensor/eqe-electron-rate.js +34 -14
  512. package/dist/sensor/eqe-electron-rate.js.map +1 -1
  513. package/dist/sensor/eqe-local-exposure.d.ts +24 -24
  514. package/dist/sensor/eqe-local-exposure.js +15 -11
  515. package/dist/sensor/eqe-local-exposure.js.map +1 -1
  516. package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
  517. package/dist/sensor/eqe-temporal-exposure.js +15 -10
  518. package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
  519. package/dist/sensor/exposure-window.d.ts +48 -34
  520. package/dist/sensor/exposure-window.js +77 -36
  521. package/dist/sensor/exposure-window.js.map +1 -1
  522. package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
  523. package/dist/sensor/fixed-pattern-noise.js +166 -0
  524. package/dist/sensor/fixed-pattern-noise.js.map +1 -0
  525. package/dist/sensor/iso-gain.d.ts +44 -0
  526. package/dist/sensor/iso-gain.js +119 -0
  527. package/dist/sensor/iso-gain.js.map +1 -0
  528. package/dist/sensor/iso-signal-chain.d.ts +25 -48
  529. package/dist/sensor/iso-signal-chain.js +52 -66
  530. package/dist/sensor/iso-signal-chain.js.map +1 -1
  531. package/dist/sensor/local-exposure-binding.d.ts +21 -21
  532. package/dist/sensor/local-exposure-binding.js +22 -18
  533. package/dist/sensor/local-exposure-binding.js.map +1 -1
  534. package/dist/sensor/optical-stack.d.ts +36 -40
  535. package/dist/sensor/optical-stack.js +34 -37
  536. package/dist/sensor/optical-stack.js.map +1 -1
  537. package/dist/sensor/photon-energy.d.ts +22 -28
  538. package/dist/sensor/photon-energy.js +42 -34
  539. package/dist/sensor/photon-energy.js.map +1 -1
  540. package/dist/sensor/physical-charge-capacity.d.ts +20 -30
  541. package/dist/sensor/physical-charge-capacity.js +35 -36
  542. package/dist/sensor/physical-charge-capacity.js.map +1 -1
  543. package/dist/sensor/pixel-pitch.d.ts +2 -3
  544. package/dist/sensor/pixel-pitch.js +4 -2
  545. package/dist/sensor/pixel-pitch.js.map +1 -1
  546. package/dist/sensor/radiometry-readiness.d.ts +13 -15
  547. package/dist/sensor/radiometry-readiness.js +20 -17
  548. package/dist/sensor/radiometry-readiness.js.map +1 -1
  549. package/dist/sensor/raw-readout.d.ts +173 -83
  550. package/dist/sensor/raw-readout.js +425 -160
  551. package/dist/sensor/raw-readout.js.map +1 -1
  552. package/dist/sensor/raw-reconstruction.d.ts +112 -44
  553. package/dist/sensor/raw-reconstruction.js +200 -47
  554. package/dist/sensor/raw-reconstruction.js.map +1 -1
  555. package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
  556. package/dist/sensor/readout-exposure-linkage.js +125 -27
  557. package/dist/sensor/readout-exposure-linkage.js.map +1 -1
  558. package/dist/sensor/readout-timing.d.ts +43 -44
  559. package/dist/sensor/readout-timing.js +38 -30
  560. package/dist/sensor/readout-timing.js.map +1 -1
  561. package/dist/sensor/response-application-compatibility.d.ts +21 -28
  562. package/dist/sensor/response-application-compatibility.js +35 -34
  563. package/dist/sensor/response-application-compatibility.js.map +1 -1
  564. package/dist/sensor/response-operating-range.d.ts +26 -35
  565. package/dist/sensor/response-operating-range.js +40 -39
  566. package/dist/sensor/response-operating-range.js.map +1 -1
  567. package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
  568. package/dist/sensor/responsivity-photocurrent.js +57 -40
  569. package/dist/sensor/responsivity-photocurrent.js.map +1 -1
  570. package/dist/sensor/sampling-aperture.d.ts +21 -25
  571. package/dist/sensor/sampling-aperture.js +29 -28
  572. package/dist/sensor/sampling-aperture.js.map +1 -1
  573. package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
  574. package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
  575. package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
  576. package/dist/sensor/sensor-geometry.d.ts +28 -32
  577. package/dist/sensor/sensor-geometry.js +35 -20
  578. package/dist/sensor/sensor-geometry.js.map +1 -1
  579. package/dist/sensor/signal-noise.d.ts +14 -16
  580. package/dist/sensor/signal-noise.js +15 -13
  581. package/dist/sensor/signal-noise.js.map +1 -1
  582. package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
  583. package/dist/sensor/spatial-sample-reduction.js +39 -48
  584. package/dist/sensor/spatial-sample-reduction.js.map +1 -1
  585. package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
  586. package/dist/sensor/spatial-sampling-quadrature.js +31 -36
  587. package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
  588. package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
  589. package/dist/sensor/spatio-spectral-reduction.js +24 -29
  590. package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
  591. package/dist/sensor/spectral-coverage.d.ts +6 -9
  592. package/dist/sensor/spectral-coverage.js +9 -6
  593. package/dist/sensor/spectral-coverage.js.map +1 -1
  594. package/dist/sensor/spectral-quadrature.d.ts +46 -60
  595. package/dist/sensor/spectral-quadrature.js +38 -48
  596. package/dist/sensor/spectral-quadrature.js.map +1 -1
  597. package/dist/sensor/spectral-response.d.ts +53 -41
  598. package/dist/sensor/spectral-response.js +80 -47
  599. package/dist/sensor/spectral-response.js.map +1 -1
  600. package/dist/sensor/stochastic-seed.d.ts +50 -0
  601. package/dist/sensor/stochastic-seed.js +123 -0
  602. package/dist/sensor/stochastic-seed.js.map +1 -0
  603. package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
  604. package/dist/sensor/temporal-eqe-sum.js +5 -6
  605. package/dist/sensor/temporal-eqe-sum.js.map +1 -1
  606. package/dist/sensor/temporal-photo-signal.d.ts +5 -6
  607. package/dist/sensor/temporal-photo-signal.js +11 -10
  608. package/dist/sensor/temporal-photo-signal.js.map +1 -1
  609. package/dist/sensor/temporal-sample-binding.d.ts +1 -2
  610. package/dist/sensor/temporal-sample-binding.js +3 -3
  611. package/dist/sensor/temporal-sample-binding.js.map +1 -1
  612. package/dist/simulation/poc-simulation.d.ts +16 -16
  613. package/dist/simulation/poc-simulation.js +20 -15
  614. package/dist/simulation/poc-simulation.js.map +1 -1
  615. package/dist/stabilization/camera-shake.d.ts +42 -18
  616. package/dist/stabilization/camera-shake.js +43 -20
  617. package/dist/stabilization/camera-shake.js.map +1 -1
  618. package/dist/stabilization/system.d.ts +44 -41
  619. package/dist/stabilization/system.js +196 -108
  620. package/dist/stabilization/system.js.map +1 -1
  621. package/docs/AGENT_GUIDE.md +183 -0
  622. package/docs/API_REFERENCE.md +761 -2
  623. package/docs/QUICK_START.md +495 -0
  624. package/docs/USAGE.md +1719 -714
  625. package/docs/api/camera-equivalent-focal-length.md +6 -7
  626. package/docs/api/camera-field-of-view.md +16 -8
  627. package/docs/api/camera-lens-projection.md +246 -0
  628. package/docs/api/camera-projected-object-size.md +6 -5
  629. package/docs/api/capture-capture-export-metadata.md +10 -10
  630. package/docs/api/capture-dng-import.md +134 -0
  631. package/docs/api/capture-environment-raw-producer.md +17 -11
  632. package/docs/api/capture-export-jpeg.md +16 -0
  633. package/docs/api/capture-focus-control.md +25 -47
  634. package/docs/api/capture-linear-encoding.md +21 -12
  635. package/docs/api/capture-lossless-jpeg.md +49 -0
  636. package/docs/api/capture-native-environment-optical-stage.md +75 -0
  637. package/docs/api/capture-native-environment-raw.md +161 -4
  638. package/docs/api/capture-native-raw-development.md +69 -4
  639. package/docs/api/capture-native-raw-dng.md +84 -0
  640. package/docs/api/capture-native-raw.md +23 -8
  641. package/docs/api/capture-packed-sensor-raw.md +156 -0
  642. package/docs/api/capture-photographic-export.md +69 -31
  643. package/docs/api/capture-raw-frame-reconstruction.md +8 -8
  644. package/docs/api/capture-raw-white-level.md +37 -0
  645. package/docs/api/capture-release-sequence.md +6 -7
  646. package/docs/api/capture-sensor-raw-frame.md +6 -6
  647. package/docs/api/capture-sensor-raw-producer.md +17 -11
  648. package/docs/api/capture-simulated-capture.md +15 -15
  649. package/docs/api/color-camera-color-matrix.md +103 -0
  650. package/docs/api/color-capture-color.md +22 -11
  651. package/docs/api/color-chromatic-adaptation.md +82 -0
  652. package/docs/api/color-color-difference.md +134 -0
  653. package/docs/api/color-color-matching-functions.md +259 -0
  654. package/docs/api/color-colorimetry-math.md +54 -0
  655. package/docs/api/color-gamut-mapping.md +72 -0
  656. package/docs/api/color-illuminants.md +280 -0
  657. package/docs/api/color-rgb-color-spaces.md +151 -0
  658. package/docs/api/color-sensor-color-development.md +27 -0
  659. package/docs/api/color-srgb-icc.md +2 -4
  660. package/docs/api/color-white-balance.md +95 -19
  661. package/docs/api/composition-image-formation-plan.md +124 -95
  662. package/docs/api/composition-plan-consumer.md +7 -7
  663. package/docs/api/core-calculation-result.md +18 -14
  664. package/docs/api/core-configuration-error.md +1 -1
  665. package/docs/api/core-image-formation.md +7 -7
  666. package/docs/api/core-scientific-assurance.md +12 -10
  667. package/docs/api/core-spectral-composition.md +14 -14
  668. package/docs/api/core-spectral.md +6 -6
  669. package/docs/api/core-validation.md +3 -3
  670. package/docs/api/core-version.md +7 -6
  671. package/docs/api/equipment-exposure-capabilities.md +11 -10
  672. package/docs/api/equipment-generic-tier-assets.md +7 -2
  673. package/docs/api/equipment-generic-tier-presets.md +6 -6
  674. package/docs/api/equipment-iso-capabilities.md +18 -18
  675. package/docs/api/equipment-metering-capabilities.md +6 -6
  676. package/docs/api/equipment-release-capabilities.md +4 -4
  677. package/docs/api/exports.json +2213 -8
  678. package/docs/api/exposure-exposure-duration-control.md +9 -9
  679. package/docs/api/exposure-exposure-mode-resolver.md +35 -31
  680. package/docs/api/exposure-exposure.md +10 -10
  681. package/docs/api/exposure-flash-ttl.md +182 -0
  682. package/docs/api/exposure-flash.md +183 -28
  683. package/docs/api/exposure-metering-scene-radiance.md +11 -10
  684. package/docs/api/exposure-metering-target.md +9 -8
  685. package/docs/api/exposure-metering-temporal.md +8 -8
  686. package/docs/api/exposure-metering.md +69 -9
  687. package/docs/api/exposure-program-line.md +6 -5
  688. package/docs/api/facade-chart-radiance-batch.md +96 -0
  689. package/docs/api/facade-chart-scenes.md +240 -0
  690. package/docs/api/facade-scene-radiance.md +122 -0
  691. package/docs/api/facade-simulate-capture.md +324 -0
  692. package/docs/api/gpu-image-kernel-accelerator.md +157 -0
  693. package/docs/api/gpu-image-kernel-execution.md +152 -0
  694. package/docs/api/motion-camera-rotation.md +43 -26
  695. package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
  696. package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
  697. package/docs/api/motion-capture-rotation-trajectory.md +15 -15
  698. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
  699. package/docs/api/motion-extended-object-projection.md +10 -8
  700. package/docs/api/motion-projected-motion.md +8 -8
  701. package/docs/api/motion-temporal-exposure-sum.md +98 -0
  702. package/docs/api/motion-video-sequence.md +159 -0
  703. package/docs/api/optics-aperture.md +8 -8
  704. package/docs/api/optics-atmospheric-haze.md +104 -0
  705. package/docs/api/optics-brown-conrady-distortion.md +123 -0
  706. package/docs/api/optics-circle-of-confusion.md +5 -4
  707. package/docs/api/optics-complex-pupil-psf.md +57 -16
  708. package/docs/api/optics-depth-of-field.md +12 -6
  709. package/docs/api/optics-diffraction.md +8 -7
  710. package/docs/api/optics-focus-breathing.md +104 -16
  711. package/docs/api/optics-focus-state.md +9 -10
  712. package/docs/api/optics-front-of-lens-filter.md +72 -14
  713. package/docs/api/optics-illumination-vignetting.md +10 -10
  714. package/docs/api/optics-irradiance-convolution.md +95 -0
  715. package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
  716. package/docs/api/optics-lens-psf-kernels.md +72 -0
  717. package/docs/api/optics-lens-psf-profile.md +48 -26
  718. package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
  719. package/docs/api/optics-polygon-diffraction.md +78 -13
  720. package/docs/api/optics-profile-contract.md +4 -4
  721. package/docs/api/optics-psf-foundation.md +12 -12
  722. package/docs/api/optics-pupil-vignetting.md +132 -0
  723. package/docs/api/optics-radial-distortion.md +12 -12
  724. package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
  725. package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
  726. package/docs/api/optics-sensor-aperture-rays.md +3 -2
  727. package/docs/api/optics-sensor-environment-query.md +52 -9
  728. package/docs/api/optics-sensor-psf-quadrature.md +13 -10
  729. package/docs/api/optics-stray-light.md +12 -11
  730. package/docs/api/optics-thin-lens.md +4 -3
  731. package/docs/api/optics-zernike-wavefront.md +229 -0
  732. package/docs/api/output-capture-corrected-sdr.md +10 -7
  733. package/docs/api/output-capture-geometry.md +35 -36
  734. package/docs/api/output-capture-sdr.md +4 -4
  735. package/docs/api/output-crop.md +7 -4
  736. package/docs/api/output-geometric-transforms.md +65 -19
  737. package/docs/api/output-lens-corrections.md +17 -15
  738. package/docs/api/output-native-capture-sdr.md +26 -13
  739. package/docs/api/output-png-encoder.md +105 -0
  740. package/docs/api/output-print-contrast-reference.md +8 -8
  741. package/docs/api/output-print-detail.md +14 -14
  742. package/docs/api/output-print-jpeg.md +22 -5
  743. package/docs/api/output-print-plan.md +18 -18
  744. package/docs/api/output-print-region-statistics.md +14 -14
  745. package/docs/api/output-sdr-rendering.md +52 -10
  746. package/docs/api/output-subject-framing-crop.md +5 -6
  747. package/docs/api/processing-demosaic.md +120 -0
  748. package/docs/api/processing-denoise.md +148 -0
  749. package/docs/api/processing-focus-stacking.md +41 -0
  750. package/docs/api/processing-hdr.md +113 -0
  751. package/docs/api/processing-panorama.md +82 -0
  752. package/docs/api/processing-processing-task.md +107 -0
  753. package/docs/api/processing-tone-mapping.md +142 -0
  754. package/docs/api/schema-camera.md +6 -4
  755. package/docs/api/schema-illumination-spectral.md +10 -11
  756. package/docs/api/schema-illumination-temporal.md +13 -15
  757. package/docs/api/schema-illumination.md +4 -4
  758. package/docs/api/schema-scene-radiance-temporal.md +10 -11
  759. package/docs/api/schema-scene-radiance.md +18 -17
  760. package/docs/api/schema-scene.md +9 -9
  761. package/docs/api/schema-validation.md +1 -1
  762. package/docs/api/sensor-accumulated-charge.md +12 -20
  763. package/docs/api/sensor-architecture.md +15 -16
  764. package/docs/api/sensor-camera-saturation-capacity.md +9 -11
  765. package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
  766. package/docs/api/sensor-capture-mode-timing.md +9 -9
  767. package/docs/api/sensor-capture-mode.md +29 -30
  768. package/docs/api/sensor-color-sampling.md +31 -33
  769. package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
  770. package/docs/api/sensor-dark-current.md +30 -14
  771. package/docs/api/sensor-environment-photo-signal.md +13 -6
  772. package/docs/api/sensor-eqe-electron-rate.md +9 -8
  773. package/docs/api/sensor-eqe-local-exposure.md +18 -17
  774. package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
  775. package/docs/api/sensor-exposure-window.md +24 -24
  776. package/docs/api/sensor-fixed-pattern-noise.md +104 -0
  777. package/docs/api/sensor-iso-gain.md +63 -0
  778. package/docs/api/sensor-iso-signal-chain.md +13 -22
  779. package/docs/api/sensor-local-exposure-binding.md +12 -13
  780. package/docs/api/sensor-optical-stack.md +37 -40
  781. package/docs/api/sensor-photon-energy.md +10 -11
  782. package/docs/api/sensor-physical-charge-capacity.md +8 -13
  783. package/docs/api/sensor-pixel-pitch.md +1 -1
  784. package/docs/api/sensor-radiometry-readiness.md +9 -9
  785. package/docs/api/sensor-raw-readout.md +118 -52
  786. package/docs/api/sensor-raw-reconstruction.md +97 -20
  787. package/docs/api/sensor-readout-exposure-linkage.md +120 -24
  788. package/docs/api/sensor-readout-timing.md +33 -35
  789. package/docs/api/sensor-response-application-compatibility.md +9 -11
  790. package/docs/api/sensor-response-operating-range.md +14 -18
  791. package/docs/api/sensor-responsivity-photocurrent.md +9 -12
  792. package/docs/api/sensor-sampling-aperture.md +22 -25
  793. package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
  794. package/docs/api/sensor-sensor-geometry.md +23 -24
  795. package/docs/api/sensor-signal-noise.md +10 -10
  796. package/docs/api/sensor-spatial-sample-reduction.md +27 -30
  797. package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
  798. package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
  799. package/docs/api/sensor-spectral-coverage.md +5 -5
  800. package/docs/api/sensor-spectral-quadrature.md +33 -35
  801. package/docs/api/sensor-spectral-response.md +28 -16
  802. package/docs/api/sensor-temporal-photo-signal.md +6 -6
  803. package/docs/api/simulation-poc-simulation.md +17 -16
  804. package/docs/api/stabilization-camera-shake.md +29 -10
  805. package/docs/api/stabilization-system.md +25 -21
  806. package/docs/examples/production-request.json +3821 -2157
  807. package/docs/examples/simulate-capture.mjs +14 -0
  808. package/llms.txt +35 -0
  809. package/package.json +32 -12
  810. package/AGENTS.md +0 -674
  811. package/CONTRIBUTING.md +0 -76
  812. package/DCO +0 -33
  813. package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
  814. package/dist/camera/field-of-view.d.ts.map +0 -1
  815. package/dist/camera/projected-object-size.d.ts.map +0 -1
  816. package/dist/capture/capture-export-metadata.d.ts.map +0 -1
  817. package/dist/capture/environment-raw-producer.d.ts.map +0 -1
  818. package/dist/capture/export-jpeg.d.ts.map +0 -1
  819. package/dist/capture/export-tiff.d.ts.map +0 -1
  820. package/dist/capture/focus-control.d.ts.map +0 -1
  821. package/dist/capture/linear-encoding.d.ts.map +0 -1
  822. package/dist/capture/native-environment-raw.d.ts.map +0 -1
  823. package/dist/capture/native-raw-development.d.ts.map +0 -1
  824. package/dist/capture/native-raw.d.ts.map +0 -1
  825. package/dist/capture/photographic-export.d.ts.map +0 -1
  826. package/dist/capture/raw-frame-limits.d.ts.map +0 -1
  827. package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
  828. package/dist/capture/release-sequence.d.ts.map +0 -1
  829. package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
  830. package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
  831. package/dist/capture/simulated-capture.d.ts.map +0 -1
  832. package/dist/color/capture-color.d.ts.map +0 -1
  833. package/dist/color/sensor-color-development.d.ts.map +0 -1
  834. package/dist/color/srgb-icc.d.ts.map +0 -1
  835. package/dist/color/srgb-transfer.d.ts.map +0 -1
  836. package/dist/color/white-balance.d.ts.map +0 -1
  837. package/dist/composition/image-formation-plan.d.ts.map +0 -1
  838. package/dist/composition/plan-consumer.d.ts.map +0 -1
  839. package/dist/core/calculation-result.d.ts.map +0 -1
  840. package/dist/core/canonical-json.d.ts.map +0 -1
  841. package/dist/core/configuration-error.d.ts.map +0 -1
  842. package/dist/core/evidence-provenance.d.ts.map +0 -1
  843. package/dist/core/image-formation.d.ts.map +0 -1
  844. package/dist/core/owned-data.d.ts.map +0 -1
  845. package/dist/core/record-validation.d.ts.map +0 -1
  846. package/dist/core/scientific-assurance.d.ts.map +0 -1
  847. package/dist/core/spectral-composition.d.ts.map +0 -1
  848. package/dist/core/spectral.d.ts.map +0 -1
  849. package/dist/core/validation.d.ts.map +0 -1
  850. package/dist/core/version.d.ts.map +0 -1
  851. package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
  852. package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
  853. package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
  854. package/dist/equipment/iso-capabilities.d.ts.map +0 -1
  855. package/dist/equipment/metering-capabilities.d.ts.map +0 -1
  856. package/dist/equipment/release-capabilities.d.ts.map +0 -1
  857. package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
  858. package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
  859. package/dist/exposure/exposure.d.ts.map +0 -1
  860. package/dist/exposure/flash.d.ts.map +0 -1
  861. package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
  862. package/dist/exposure/metering-target.d.ts.map +0 -1
  863. package/dist/exposure/metering-temporal.d.ts.map +0 -1
  864. package/dist/exposure/metering.d.ts.map +0 -1
  865. package/dist/exposure/program-line.d.ts.map +0 -1
  866. package/dist/index.d.ts.map +0 -1
  867. package/dist/motion/camera-rotation.d.ts.map +0 -1
  868. package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
  869. package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
  870. package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
  871. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
  872. package/dist/motion/extended-object-projection.d.ts.map +0 -1
  873. package/dist/motion/projected-motion.d.ts.map +0 -1
  874. package/dist/optics/aperture.d.ts.map +0 -1
  875. package/dist/optics/circle-of-confusion.d.ts.map +0 -1
  876. package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
  877. package/dist/optics/depth-of-field.d.ts.map +0 -1
  878. package/dist/optics/diffraction.d.ts.map +0 -1
  879. package/dist/optics/focus-breathing.d.ts.map +0 -1
  880. package/dist/optics/focus-state.d.ts.map +0 -1
  881. package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
  882. package/dist/optics/illumination-vignetting.d.ts.map +0 -1
  883. package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
  884. package/dist/optics/lens-psf-profile.d.ts.map +0 -1
  885. package/dist/optics/polygon-diffraction.d.ts.map +0 -1
  886. package/dist/optics/profile-contract.d.ts.map +0 -1
  887. package/dist/optics/psf-foundation.d.ts.map +0 -1
  888. package/dist/optics/radial-distortion.d.ts.map +0 -1
  889. package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
  890. package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
  891. package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
  892. package/dist/optics/sensor-environment-query.d.ts.map +0 -1
  893. package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
  894. package/dist/optics/sensor-psf-support.d.ts.map +0 -1
  895. package/dist/optics/stray-light.d.ts.map +0 -1
  896. package/dist/optics/thin-lens.d.ts.map +0 -1
  897. package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
  898. package/dist/output/capture-geometry.d.ts.map +0 -1
  899. package/dist/output/capture-sdr.d.ts.map +0 -1
  900. package/dist/output/crop.d.ts.map +0 -1
  901. package/dist/output/geometric-transforms.d.ts.map +0 -1
  902. package/dist/output/lens-corrections.d.ts.map +0 -1
  903. package/dist/output/native-capture-sdr.d.ts.map +0 -1
  904. package/dist/output/print-contrast-reference.d.ts.map +0 -1
  905. package/dist/output/print-detail.d.ts.map +0 -1
  906. package/dist/output/print-jpeg.d.ts.map +0 -1
  907. package/dist/output/print-plan.d.ts.map +0 -1
  908. package/dist/output/print-region-statistics.d.ts.map +0 -1
  909. package/dist/output/sdr-rendering.d.ts.map +0 -1
  910. package/dist/output/subject-framing-crop.d.ts.map +0 -1
  911. package/dist/schema/camera.d.ts.map +0 -1
  912. package/dist/schema/camera.js +0 -3
  913. package/dist/schema/camera.js.map +0 -1
  914. package/dist/schema/illumination-spectral.d.ts.map +0 -1
  915. package/dist/schema/illumination-temporal.d.ts.map +0 -1
  916. package/dist/schema/illumination.d.ts.map +0 -1
  917. package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
  918. package/dist/schema/scene-radiance.d.ts.map +0 -1
  919. package/dist/schema/scene.d.ts.map +0 -1
  920. package/dist/schema/scene.js +0 -3
  921. package/dist/schema/scene.js.map +0 -1
  922. package/dist/schema/validation.d.ts.map +0 -1
  923. package/dist/sensor/accumulated-charge.d.ts.map +0 -1
  924. package/dist/sensor/architecture.d.ts.map +0 -1
  925. package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
  926. package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
  927. package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
  928. package/dist/sensor/capture-mode.d.ts.map +0 -1
  929. package/dist/sensor/color-sampling.d.ts.map +0 -1
  930. package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
  931. package/dist/sensor/dark-current.d.ts.map +0 -1
  932. package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
  933. package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
  934. package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
  935. package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
  936. package/dist/sensor/exposure-window.d.ts.map +0 -1
  937. package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
  938. package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
  939. package/dist/sensor/optical-stack.d.ts.map +0 -1
  940. package/dist/sensor/photon-energy.d.ts.map +0 -1
  941. package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
  942. package/dist/sensor/pixel-pitch.d.ts.map +0 -1
  943. package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
  944. package/dist/sensor/raw-readout.d.ts.map +0 -1
  945. package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
  946. package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
  947. package/dist/sensor/readout-timing.d.ts.map +0 -1
  948. package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
  949. package/dist/sensor/response-operating-range.d.ts.map +0 -1
  950. package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
  951. package/dist/sensor/sampling-aperture.d.ts.map +0 -1
  952. package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
  953. package/dist/sensor/sensor-geometry.d.ts.map +0 -1
  954. package/dist/sensor/signal-noise.d.ts.map +0 -1
  955. package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
  956. package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
  957. package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
  958. package/dist/sensor/spectral-coverage.d.ts.map +0 -1
  959. package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
  960. package/dist/sensor/spectral-response.d.ts.map +0 -1
  961. package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
  962. package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
  963. package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
  964. package/dist/simulation/poc-simulation.d.ts.map +0 -1
  965. package/dist/stabilization/camera-shake.d.ts.map +0 -1
  966. package/dist/stabilization/system.d.ts.map +0 -1
  967. package/docs/API_STYLE.md +0 -235
  968. package/docs/ARCHITECTURE.md +0 -356
  969. package/docs/AUTOMATION_COORDINATION.md +0 -190
  970. package/docs/CAPTURE_COLOR.md +0 -25
  971. package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
  972. package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
  973. package/docs/CAPTURE_SDR.md +0 -22
  974. package/docs/DEVELOPERS.md +0 -68
  975. package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
  976. package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
  977. package/docs/EXPORT_ACCEPTANCE.md +0 -133
  978. package/docs/GENERIC_TIER_PRESETS.md +0 -269
  979. package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
  980. package/docs/IMAGE_FORMATION.md +0 -247
  981. package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
  982. package/docs/MOTION_AND_SIGNAL.md +0 -250
  983. package/docs/NATIVE_CAPTURE_SDR.md +0 -70
  984. package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
  985. package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
  986. package/docs/NATIVE_RAW_AND_PRINT.md +0 -47
  987. package/docs/NUMERICAL_CORRECTNESS.md +0 -191
  988. package/docs/PERFORMANCE_BASELINE.md +0 -56
  989. package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
  990. package/docs/PHYSICS_FOUNDATION.md +0 -426
  991. package/docs/POC_API.md +0 -278
  992. package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
  993. package/docs/POC_PROJECTION_REUSE.md +0 -124
  994. package/docs/PRINT_195_196_REVIEW.md +0 -93
  995. package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
  996. package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
  997. package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
  998. package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
  999. package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
  1000. package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
  1001. package/docs/PRINT_PLANNING.md +0 -75
  1002. package/docs/PRINT_REGION_STATISTICS.md +0 -38
  1003. package/docs/PROCESSED_OUTPUT.md +0 -157
  1004. package/docs/PRODUCTION_COMPOSITION.md +0 -373
  1005. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
  1006. package/docs/PROVENANCE.md +0 -115
  1007. package/docs/PSF_FOUNDATION.md +0 -165
  1008. package/docs/RAW_FRAME_ENVELOPE.md +0 -56
  1009. package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
  1010. package/docs/RELEASE_1_0.md +0 -66
  1011. package/docs/RELEASE_1_0_1.md +0 -61
  1012. package/docs/RELEASE_1_1_0.md +0 -25
  1013. package/docs/RELEASE_1_2_0.md +0 -51
  1014. package/docs/RELEASE_1_3_0.md +0 -15
  1015. package/docs/RELEASE_1_4_0.md +0 -23
  1016. package/docs/RELEASE_AUDIT.md +0 -39
  1017. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
  1018. package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
  1019. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
  1020. package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
  1021. package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
  1022. package/docs/SDR_RENDERING.md +0 -33
  1023. package/docs/SENSOR_APERTURE_RAYS.md +0 -23
  1024. package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
  1025. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
  1026. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
  1027. package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
  1028. package/docs/SENSOR_RAW_FRAME.md +0 -20
  1029. package/docs/SENSOR_RAW_PRODUCER.md +0 -77
  1030. package/docs/SIGNAL_CONFORMANCE.md +0 -23
  1031. package/docs/SIMULATED_CAPTURE.md +0 -65
  1032. package/docs/STABILIZATION.md +0 -234
  1033. package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
  1034. package/docs/TIER_ACCEPTANCE.md +0 -129
  1035. package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
  1036. package/docs/V1_COMPOSITION_MAP.md +0 -123
  1037. package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
  1038. package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
  1039. package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
  1040. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
  1041. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
  1042. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
  1043. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
  1044. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
  1045. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
  1046. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
  1047. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
  1048. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
  1049. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
  1050. package/docs/licenses/castleCSF-MIT.txt +0 -21
  1051. package/docs/validation/documentation-fragments.json +0 -212
  1052. package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
  1053. package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
  1054. package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
  1055. package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
  1056. package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
  1057. package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
  1058. package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
  1059. package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
  1060. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
  1061. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
  1062. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
  1063. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
  1064. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
  1065. package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
  1066. package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
  1067. package/docs/validation/print-196-candidate-capabilities.json +0 -28
  1068. package/docs/validation/print-196-candidate-evidence.json +0 -356
  1069. package/docs/validation/print-196-engine-acceptance.json +0 -81
  1070. package/docs/validation/print-detail-capabilities.json +0 -103
  1071. package/docs/validation/print-detail-jpeg-evidence.json +0 -116
  1072. package/docs/validation/print-detail-sdr-evidence.json +0 -81
  1073. package/docs/validation/release-audit-inventory.json +0 -1306
  1074. package/docs/validation/tier-acceptance-report-v1.json +0 -2538
@@ -25,7 +25,7 @@ export interface ProductionPlanConsumerManifest {
25
25
  modelVersion?: string;
26
26
  }[];
27
27
  blockers: readonly ProductionImageFormationBlocker[];
28
- /** Same immutable executed RAW and output results; consumers cannot re-render a different source. */
28
+ /** The same immutable RAW and output results that ran. A consumer cannot re-render from a different source. */
29
29
  environmentCaptureResult?: ProductionImageFormationPlan["environmentCaptureResult"];
30
30
  processedOutputResult?: ProductionImageFormationPlan["processedOutputResult"];
31
31
  physicalSceneToSensorResult: ProductionImageFormationPlan["physicalSceneToSensorResult"];
@@ -42,12 +42,11 @@ export interface ProductionPlanConsumerManifest {
42
42
  consumerMayReduceCommittedTemporalSampleCount: false;
43
43
  }
44
44
  /**
45
- * Creates a deterministic renderer/reference consumption view over one
46
- * finalized semantic production plan.
45
+ * Creates a deterministic view of one finished production plan, for a renderer
46
+ * or a reference consumer.
47
47
  *
48
- * The consumer role changes execution responsibility only. It does not alter
49
- * scientific stage/effect identity, temporal sample count, seeds, or physical
50
- * results.
48
+ * The consumer role only changes who is responsible for executing. It does not
49
+ * change the scientific stages or effects, the number of time samples, the
50
+ * seeds or any physical result.
51
51
  */
52
52
  export declare function createProductionPlanConsumerManifest(input: CreateProductionPlanConsumerManifestInput): ProductionPlanConsumerManifest;
53
- //# sourceMappingURL=plan-consumer.d.ts.map
@@ -1,14 +1,15 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Creates a deterministic renderer/reference consumption view over one finalized semantic production
5
- * plan. The consumer role changes execution responsibility only. It does not alter scientific
6
- * stage/effect identity, temporal sample count, seeds, or physical results.
7
- * @see docs/PRODUCTION_COMPOSITION.md for equations, coordinate/unit conventions, blockers and support
8
- * limits.
3
+ * A deterministic view of one finished production plan, for a renderer or a reference consumer.
4
+ *
5
+ * The consumer role only changes who is responsible for executing. It does not change the scientific
6
+ * stages or effects, the number of time samples, the seeds or any physical result.
7
+ * @see docs/PRODUCTION_COMPOSITION.md for the equations, units, coordinate conventions, known
8
+ * blockers and support limits.
9
9
  */
10
10
  import { InvalidConfigurationError } from "../core/configuration-error.js";
11
11
  import { PRODUCTION_IMAGE_FORMATION_PLAN_VERSION } from "./image-formation-plan.js";
12
+ import { requireInputObject, requireInputKeys } from "../core/record-validation.js";
12
13
  export const PRODUCTION_PLAN_CONSUMER_MANIFEST_VERSION = "0.2.0";
13
14
  function requireConsumerKind(value) {
14
15
  if (value !== "interactive-optimized" &&
@@ -18,6 +19,7 @@ function requireConsumerKind(value) {
18
19
  return value;
19
20
  }
20
21
  function requirePlan(plan) {
22
+ requireInputObject(plan, "plan input");
21
23
  if (plan.version !==
22
24
  PRODUCTION_IMAGE_FORMATION_PLAN_VERSION) {
23
25
  throw new InvalidConfigurationError('plan.version must be "' +
@@ -31,14 +33,15 @@ function requirePlan(plan) {
31
33
  }
32
34
  }
33
35
  /**
34
- * Creates a deterministic renderer/reference consumption view over one
35
- * finalized semantic production plan.
36
+ * Creates a deterministic view of one finished production plan, for a renderer
37
+ * or a reference consumer.
36
38
  *
37
- * The consumer role changes execution responsibility only. It does not alter
38
- * scientific stage/effect identity, temporal sample count, seeds, or physical
39
- * results.
39
+ * The consumer role only changes who is responsible for executing. It does not
40
+ * change the scientific stages or effects, the number of time samples, the
41
+ * seeds or any physical result.
40
42
  */
41
43
  export function createProductionPlanConsumerManifest(input) {
44
+ requireInputKeys(input, "createProductionPlanConsumerManifest", ["plan", "consumerKind"]);
42
45
  requirePlan(input.plan);
43
46
  const consumerKind = requireConsumerKind(input.consumerKind);
44
47
  const activeOrModeledStages = input.plan.stagePlan
@@ -1 +1 @@
1
- {"version":3,"file":"plan-consumer.js","sourceRoot":"","sources":["../../src/composition/plan-consumer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan-consumer.js","sourceRoot":"","sources":["../../src/composition/plan-consumer.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * A deterministic view of one finished production plan, for a renderer or a reference consumer.\n *\n * The consumer role only changes who is responsible for executing. It does not change the scientific\n * stages or effects, the number of time samples, the seeds or any physical result.\n * @see docs/PRODUCTION_COMPOSITION.md for the equations, units, coordinate conventions, known\n * blockers and support limits.\n */\n\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport type {\n ImageFormationEffectId,\n ImageFormationStageId\n} from \"../core/image-formation.js\";\nimport {\n PRODUCTION_IMAGE_FORMATION_PLAN_VERSION,\n type ProductionImageFormationBlocker,\n type ProductionImageFormationPlan,\n type RendererConsumerKind\n} from \"./image-formation-plan.js\";\nimport { requireInputObject, requireInputKeys } from \"../core/record-validation.js\";\n\nexport const PRODUCTION_PLAN_CONSUMER_MANIFEST_VERSION =\n \"0.2.0\" as const;\n\nexport interface CreateProductionPlanConsumerManifestInput {\n plan: ProductionImageFormationPlan;\n consumerKind: RendererConsumerKind;\n}\n\nexport interface ProductionPlanConsumerManifest {\n version:\n typeof PRODUCTION_PLAN_CONSUMER_MANIFEST_VERSION;\n consumerKind: RendererConsumerKind;\n planVersion:\n typeof PRODUCTION_IMAGE_FORMATION_PLAN_VERSION;\n planFingerprint: string;\n planStatus:\n ProductionImageFormationPlan[\"status\"];\n activeOrModeledStages:\n readonly {\n stageId: ImageFormationStageId;\n state: \"active\" | \"modeled-zero\";\n modelId?: string;\n modelVersion?: string;\n resultIdentity?: string;\n }[];\n activeOrModeledEffects:\n readonly {\n effectId: ImageFormationEffectId;\n state: \"active\" | \"modeled-zero\";\n modelId?: string;\n modelVersion?: string;\n }[];\n blockers:\n readonly ProductionImageFormationBlocker[];\n /** The same immutable RAW and output results that ran. A consumer cannot re-render from a different source. */\n environmentCaptureResult?: ProductionImageFormationPlan[\"environmentCaptureResult\"];\n processedOutputResult?: ProductionImageFormationPlan[\"processedOutputResult\"];\n physicalSceneToSensorResult:\n ProductionImageFormationPlan[\"physicalSceneToSensorResult\"];\n temporalCaptureResult:\n ProductionImageFormationPlan[\"temporalCaptureResult\"];\n scientificAssurance:\n ProductionImageFormationPlan[\"scientificAssurance\"];\n stochastic: {\n captureSeedUint32: number;\n consumerMayReplaceSeed: false;\n backendRandomnessMayRedefineScientificResult:\n false;\n };\n scientificSemanticsSharedAcrossConsumerKinds:\n true;\n consumerMayChangeScientificInputs:\n false;\n consumerMayReorderImageFormationStages:\n false;\n consumerMayReduceCommittedTemporalSampleCount:\n false;\n}\n\nfunction requireConsumerKind(\n value: unknown\n): RendererConsumerKind {\n if (\n value !== \"interactive-optimized\" &&\n value !== \"reference\"\n ) {\n throw new InvalidConfigurationError(\n \"consumerKind is invalid.\"\n );\n }\n return value;\n}\n\nfunction requirePlan(\n plan: ProductionImageFormationPlan\n): void {\n requireInputObject(plan, \"plan input\");\n if (\n plan.version !==\n PRODUCTION_IMAGE_FORMATION_PLAN_VERSION\n ) {\n throw new InvalidConfigurationError(\n 'plan.version must be \"' +\n PRODUCTION_IMAGE_FORMATION_PLAN_VERSION +\n '\".'\n );\n }\n if (\n typeof plan.fingerprint?.value !==\n \"string\" ||\n plan.fingerprint.value.length === 0\n ) {\n throw new InvalidConfigurationError(\n \"plan fingerprint must be present.\"\n );\n }\n}\n\n/**\n * Creates a deterministic view of one finished production plan, for a renderer\n * or a reference consumer.\n *\n * The consumer role only changes who is responsible for executing. It does not\n * change the scientific stages or effects, the number of time samples, the\n * seeds or any physical result.\n */\nexport function createProductionPlanConsumerManifest(\n input:\n CreateProductionPlanConsumerManifestInput\n): ProductionPlanConsumerManifest {\n requireInputKeys(input, \"createProductionPlanConsumerManifest\", [\"plan\", \"consumerKind\"]);\n requirePlan(input.plan);\n const consumerKind =\n requireConsumerKind(\n input.consumerKind\n );\n\n const activeOrModeledStages =\n input.plan.stagePlan\n .filter(\n (stage) =>\n stage.state ===\n \"active\" ||\n stage.state ===\n \"modeled-zero\"\n )\n .map((stage) => ({\n stageId: stage.stageId,\n state: stage.state as\n | \"active\"\n | \"modeled-zero\",\n ...(stage.modelId ===\n undefined\n ? {}\n : {\n modelId:\n stage.modelId\n }),\n ...(stage.modelVersion ===\n undefined\n ? {}\n : {\n modelVersion:\n stage.modelVersion\n }),\n ...(stage.resultIdentity ===\n undefined\n ? {}\n : {\n resultIdentity:\n stage.resultIdentity\n })\n }));\n\n const activeOrModeledEffects =\n input.plan.effectPlan\n .filter(\n (effect) =>\n effect.state ===\n \"active\" ||\n effect.state ===\n \"modeled-zero\"\n )\n .map((effect) => ({\n effectId: effect.effectId,\n state: effect.state as\n | \"active\"\n | \"modeled-zero\",\n ...(effect.modelId ===\n undefined\n ? {}\n : {\n modelId:\n effect.modelId\n }),\n ...(effect.modelVersion ===\n undefined\n ? {}\n : {\n modelVersion:\n effect.modelVersion\n })\n }));\n\n return {\n version:\n PRODUCTION_PLAN_CONSUMER_MANIFEST_VERSION,\n consumerKind,\n planVersion:\n PRODUCTION_IMAGE_FORMATION_PLAN_VERSION,\n planFingerprint:\n input.plan.fingerprint.value,\n planStatus:\n input.plan.status,\n activeOrModeledStages,\n activeOrModeledEffects,\n ...(input.plan.environmentCaptureResult === undefined ? {} : { environmentCaptureResult: input.plan.environmentCaptureResult }),\n ...(input.plan.processedOutputResult === undefined ? {} : { processedOutputResult: input.plan.processedOutputResult }),\n blockers:\n input.plan.blockers,\n physicalSceneToSensorResult:\n input.plan\n .physicalSceneToSensorResult,\n temporalCaptureResult:\n input.plan.temporalCaptureResult,\n scientificAssurance:\n input.plan.scientificAssurance,\n stochastic: {\n captureSeedUint32:\n input.plan.stochastic\n .captureSeedUint32,\n consumerMayReplaceSeed: false,\n backendRandomnessMayRedefineScientificResult:\n false\n },\n scientificSemanticsSharedAcrossConsumerKinds:\n true,\n consumerMayChangeScientificInputs:\n false,\n consumerMayReorderImageFormationStages:\n false,\n consumerMayReduceCommittedTemporalSampleCount:\n false\n };\n}\n"]}
@@ -22,8 +22,8 @@ export type UncertaintySource = "measurement" | "model-approximation" | "calibra
22
22
  /**
23
23
  * Optional confidence metadata for a quantified uncertainty estimate.
24
24
  *
25
- * A confidence level is only meaningful when the basis can be stated. It must
26
- * not be used as a generic subjective confidence score.
25
+ * Give a confidence level only when you can state its basis. Do not use it as a
26
+ * general, subjective confidence score.
27
27
  */
28
28
  export interface UncertaintyConfidence {
29
29
  /** Confidence/coverage level as a fraction in the interval (0, 1]. */
@@ -61,8 +61,8 @@ export interface RelativeUncertaintyEstimate extends UncertaintyEstimateBase {
61
61
  }
62
62
  export type UncertaintyEstimate = AbsoluteUncertaintyEstimate | RelativeUncertaintyEstimate;
63
63
  /**
64
- * Documented parameter range over which a model/calibration is considered
65
- * valid. This is model applicability metadata, not a statistical interval.
64
+ * The documented parameter range in which a model or calibration is valid.
65
+ * It says where the model applies. It is not a statistical interval.
66
66
  */
67
67
  export interface CalculationValidRange {
68
68
  /** JSON-style input/model parameter path, e.g. input.focusDistanceM. */
@@ -76,10 +76,10 @@ export interface CalculationValidRange {
76
76
  /**
77
77
  * Optional quality metadata for a calculation result.
78
78
  *
79
- * Components remain separate by default. Callers must not add, combine in
80
- * quadrature, or otherwise collapse uncertainty components unless a
81
- * scientifically justified composition method explicitly documents
82
- * independence/correlation assumptions.
79
+ * Uncertainty components stay separate. Do not add them, combine them in
80
+ * quadrature (root-sum-of-squares) or merge them in any other way, unless you use
81
+ * a scientifically justified method that documents its independence and
82
+ * correlation assumptions.
83
83
  */
84
84
  export interface CalculationQuality {
85
85
  uncertainty?: readonly UncertaintyEstimate[];
@@ -89,15 +89,19 @@ export interface CalculationQuality {
89
89
  /**
90
90
  * Standard result envelope for public scientific calculations.
91
91
  *
92
- * Deterministic analytical results remain lightweight: quality is omitted when
93
- * there is no defensible uncertainty/accuracy metadata to report.
92
+ * Deterministic analytical results stay lightweight. They omit `quality` when
93
+ * there is no defensible uncertainty or accuracy metadata to report.
94
+ *
95
+ * Read-only from 2.0.0: the envelope, `provenance` and `quality` are frozen deeply and `value`
96
+ * at its top level. Copy a value before changing it. Typed arrays inside a value stay mutable.
97
+ * See docs/API_STYLE.md "Read-only results".
94
98
  *
95
99
  * @typeParam T Serializable value returned by the calculation.
96
100
  */
97
101
  export interface CalculationResult<T> {
98
- value: T;
99
- provenance: CalculationProvenance;
100
- quality?: CalculationQuality;
102
+ readonly value: T;
103
+ readonly provenance: CalculationProvenance;
104
+ readonly quality?: CalculationQuality;
101
105
  }
102
106
  /**
103
107
  * Validates result-quality metadata before it enters a public result envelope.
@@ -105,6 +109,10 @@ export interface CalculationResult<T> {
105
109
  * @param quality Optional calculation quality metadata.
106
110
  */
107
111
  export declare function validateCalculationQuality(quality: CalculationQuality | undefined): void;
112
+ /** Internal: exact answer of containsNonFiniteNumber, using the memo-free pre-scan when it decides. */
113
+ export declare function calculationValueContainsNonFiniteNumber(value: unknown): boolean;
114
+ /** Internal: the exact visited-set scan, exposed for equivalence tests only. */
115
+ export declare function calculationValueContainsNonFiniteNumberExact(value: unknown): boolean;
108
116
  /**
109
117
  * Creates a deterministic calculated-result envelope.
110
118
  */
@@ -122,4 +130,3 @@ export declare function estimatedResult<T>(value: T, model: string, modelVersion
122
130
  */
123
131
  export declare function calibratedResult<T>(value: T, model: string, modelVersion: string, assumptions: readonly string[], quality: CalculationQuality): CalculationResult<T>;
124
132
  export {};
125
- //# sourceMappingURL=calculation-result.d.ts.map
@@ -1,11 +1,14 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Validates result-quality metadata before it enters a public result envelope.
5
- * Creates a deterministic calculated-result envelope.
3
+ * The standard result envelope that every public calculation returns.
4
+ *
5
+ * An envelope pairs a value with provenance (how it was produced) and, when it can be
6
+ * stated, quality metadata (uncertainty and validity range). This module defines those
7
+ * types, validates quality metadata, and provides one constructor per provenance kind.
6
8
  * @see docs/API_STYLE.md for equations, coordinate/unit conventions, blockers and support limits.
7
9
  */
8
10
  import { InvalidScientificResultError } from "./validation.js";
11
+ import { rejectUnknownFields, requireInputObject } from "./record-validation.js";
9
12
  const UNCERTAINTY_SOURCES = new Set([
10
13
  "measurement",
11
14
  "model-approximation",
@@ -25,6 +28,8 @@ function validateConfidence(confidence, path) {
25
28
  if (confidence === undefined) {
26
29
  return;
27
30
  }
31
+ requireInputObject(confidence, `Calculation quality field ${path}`);
32
+ rejectUnknownFields(confidence, ["level", "basis"], `calculationQuality.${path}`);
28
33
  if (!Number.isFinite(confidence.level) ||
29
34
  confidence.level <= 0 ||
30
35
  confidence.level > 1) {
@@ -32,8 +37,15 @@ function validateConfidence(confidence, path) {
32
37
  }
33
38
  requireNonEmptyString(`${path}.basis`, confidence.basis);
34
39
  }
40
+ const UNCERTAINTY_BASE_KEYS = ["kind", "quantityPath", "source", "confidence", "note"];
41
+ const ABSOLUTE_UNCERTAINTY_KEYS = [...UNCERTAINTY_BASE_KEYS, "plusMinus", "unit"];
42
+ const RELATIVE_UNCERTAINTY_KEYS = [...UNCERTAINTY_BASE_KEYS, "fraction"];
35
43
  function validateUncertaintyEstimate(estimate, index) {
36
44
  const path = `uncertainty[${index}]`;
45
+ requireInputObject(estimate, `Calculation quality field ${path}`);
46
+ if (estimate.kind === "absolute" || estimate.kind === "relative") {
47
+ rejectUnknownFields(estimate, estimate.kind === "absolute" ? ABSOLUTE_UNCERTAINTY_KEYS : RELATIVE_UNCERTAINTY_KEYS, `calculationQuality.${path}`);
48
+ }
37
49
  requireNonEmptyString(`${path}.quantityPath`, estimate.quantityPath);
38
50
  if (!UNCERTAINTY_SOURCES.has(estimate.source)) {
39
51
  throw new InvalidScientificResultError(`Calculation quality field ${path}.source is invalid.`);
@@ -55,6 +67,8 @@ function validateUncertaintyEstimate(estimate, index) {
55
67
  }
56
68
  function validateValidRange(range, index) {
57
69
  const path = `validRanges[${index}]`;
70
+ requireInputObject(range, `Calculation quality field ${path}`);
71
+ rejectUnknownFields(range, ["parameterPath", "unit", "minimum", "maximum", "note"], `calculationQuality.${path}`);
58
72
  requireNonEmptyString(`${path}.parameterPath`, range.parameterPath);
59
73
  requireNonEmptyString(`${path}.unit`, range.unit);
60
74
  if (range.minimum === undefined && range.maximum === undefined) {
@@ -84,6 +98,8 @@ export function validateCalculationQuality(quality) {
84
98
  if (quality === undefined) {
85
99
  return;
86
100
  }
101
+ requireInputObject(quality, "validateCalculationQuality input");
102
+ rejectUnknownFields(quality, ["uncertainty", "validRanges", "notes"], "calculationQuality");
87
103
  if (quality.uncertainty !== undefined) {
88
104
  if (quality.uncertainty.length === 0) {
89
105
  throw new InvalidScientificResultError("Calculation quality uncertainty must be omitted rather than empty.");
@@ -134,17 +150,199 @@ function assertFiniteNumbers(value, path, seen) {
134
150
  assertFiniteNumbers(entry, `${path}.${key}`, seen);
135
151
  }
136
152
  }
153
+ /**
154
+ * Fast check for a non-finite number anywhere in a value tree. It builds no path strings.
155
+ *
156
+ * It walks the tree exactly as assertFiniteNumbers does: own enumerable string keys in
157
+ * Object.keys order (as Object.entries), array indices that are present (as forEach), and
158
+ * each object once. The slower diagnostic walk runs only when this finds a non-finite
159
+ * number, so the thrown error type and path message are unchanged.
160
+ */
161
+ function containsNonFiniteNumber(value, seen) {
162
+ if (typeof value === "number") {
163
+ return !Number.isFinite(value);
164
+ }
165
+ if (typeof value !== "object" || value === null || seen.has(value)) {
166
+ return false;
167
+ }
168
+ seen.add(value);
169
+ if (Array.isArray(value)) {
170
+ for (let index = 0; index < value.length; index++) {
171
+ if (index in value && containsNonFiniteNumber(value[index], seen)) {
172
+ return true;
173
+ }
174
+ }
175
+ return false;
176
+ }
177
+ const record = value;
178
+ const keys = Object.keys(record);
179
+ for (let index = 0; index < keys.length; index++) {
180
+ if (containsNonFiniteNumber(record[keys[index]], seen)) {
181
+ return true;
182
+ }
183
+ }
184
+ return false;
185
+ }
186
+ /** Object visits allowed to the memo-free pre-scan before it defers to the exact visited-set scan. */
187
+ const FAST_FINITE_SCAN_MAX_OBJECT_VISITS = 1 << 16;
188
+ /** Nesting allowed to the memo-free pre-scan; a cycle or very deep tree defers to the exact scan. */
189
+ const FAST_FINITE_SCAN_MAX_DEPTH = 64;
190
+ const FAST_SCAN_FINITE = 0, FAST_SCAN_NON_FINITE = 1, FAST_SCAN_UNDECIDED = 2;
191
+ /** Remaining object visits of the active pre-scan; saved and restored around nested scans. */
192
+ let fastFiniteScanBudget = 0;
193
+ /**
194
+ * Faster pre-scan that skips the visited-object WeakSet (a 2.0 performance change).
195
+ *
196
+ * It walks the tree like containsNonFiniteNumber (own enumerable string keys in Object.keys
197
+ * order, present array indices). Without a WeakSet it may visit a shared node more than once.
198
+ * So it gives up and returns UNDECIDED after FAST_FINITE_SCAN_MAX_OBJECT_VISITS objects or
199
+ * FAST_FINITE_SCAN_MAX_DEPTH levels of nesting. Any cycle hits the depth limit.
200
+ *
201
+ * Revisiting cannot change the answer, because the set of reachable numbers is the same
202
+ * either way. A non-finite number it finds is reachable, and a finished scan has seen every
203
+ * reachable number. So any decided answer equals the exact scan's answer. UNDECIDED falls
204
+ * back to the exact scan.
205
+ */
206
+ function scanNonFiniteWithoutMemo(value, depth) {
207
+ if (typeof value === "number") {
208
+ return Number.isFinite(value) ? FAST_SCAN_FINITE : FAST_SCAN_NON_FINITE;
209
+ }
210
+ if (typeof value !== "object" || value === null) {
211
+ return FAST_SCAN_FINITE;
212
+ }
213
+ if (depth >= FAST_FINITE_SCAN_MAX_DEPTH || --fastFiniteScanBudget < 0) {
214
+ return FAST_SCAN_UNDECIDED;
215
+ }
216
+ if (Array.isArray(value)) {
217
+ for (let index = 0; index < value.length; index++) {
218
+ if (index in value) {
219
+ const entry = value[index];
220
+ if (typeof entry === "number") {
221
+ if (!Number.isFinite(entry))
222
+ return FAST_SCAN_NON_FINITE;
223
+ }
224
+ else if (typeof entry === "object" && entry !== null) {
225
+ const result = scanNonFiniteWithoutMemo(entry, depth + 1);
226
+ if (result !== FAST_SCAN_FINITE)
227
+ return result;
228
+ }
229
+ }
230
+ }
231
+ return FAST_SCAN_FINITE;
232
+ }
233
+ const record = value;
234
+ const keys = Object.keys(record);
235
+ for (let index = 0; index < keys.length; index++) {
236
+ const entry = record[keys[index]];
237
+ if (typeof entry === "number") {
238
+ if (!Number.isFinite(entry))
239
+ return FAST_SCAN_NON_FINITE;
240
+ }
241
+ else if (typeof entry === "object" && entry !== null) {
242
+ const result = scanNonFiniteWithoutMemo(entry, depth + 1);
243
+ if (result !== FAST_SCAN_FINITE)
244
+ return result;
245
+ }
246
+ }
247
+ return FAST_SCAN_FINITE;
248
+ }
249
+ /** Internal: exact answer of containsNonFiniteNumber, using the memo-free pre-scan when it decides. */
250
+ export function calculationValueContainsNonFiniteNumber(value) {
251
+ const saved = fastFiniteScanBudget;
252
+ fastFiniteScanBudget = FAST_FINITE_SCAN_MAX_OBJECT_VISITS;
253
+ let result;
254
+ try {
255
+ result = scanNonFiniteWithoutMemo(value, 0);
256
+ }
257
+ finally {
258
+ fastFiniteScanBudget = saved;
259
+ }
260
+ return result === FAST_SCAN_UNDECIDED ? containsNonFiniteNumber(value, new WeakSet()) : result === FAST_SCAN_NON_FINITE;
261
+ }
262
+ /** Internal: the exact visited-set scan, exposed for equivalence tests only. */
263
+ export function calculationValueContainsNonFiniteNumberExact(value) {
264
+ return containsNonFiniteNumber(value, new WeakSet());
265
+ }
137
266
  function assertFiniteCalculationValue(value) {
138
- assertFiniteNumbers(value, "value", new WeakSet());
267
+ if (calculationValueContainsNonFiniteNumber(value)) {
268
+ assertFiniteNumbers(value, "value", new WeakSet());
269
+ }
270
+ }
271
+ function validateProvenanceIdentity(provenance) {
272
+ for (const field of ["model", "modelVersion"]) {
273
+ const entry = provenance[field];
274
+ if (typeof entry !== "string" || entry.trim().length === 0) {
275
+ throw new InvalidScientificResultError(`Calculation provenance ${field} must be a non-empty string.`);
276
+ }
277
+ }
278
+ }
279
+ /**
280
+ * Estimated and calibrated results must carry quality metadata. The TypeScript
281
+ * signature alone cannot stop a JavaScript caller from leaving it out, so check at runtime.
282
+ */
283
+ function requireQuality(quality, kind) {
284
+ if (quality === undefined || quality === null) {
285
+ throw new InvalidScientificResultError(`A ${kind} result requires calculation quality metadata.`);
286
+ }
287
+ return quality;
139
288
  }
289
+ /** True for a plain record (prototype Object.prototype or null) or an array: the nodes a result freezes. */
290
+ function isFreezableResultNode(node) {
291
+ if (node === null || typeof node !== "object") {
292
+ return false;
293
+ }
294
+ if (Array.isArray(node)) {
295
+ return true;
296
+ }
297
+ const prototype = Object.getPrototypeOf(node);
298
+ return prototype === Object.prototype || prototype === null;
299
+ }
300
+ /**
301
+ * Deep-freezes the plain records and arrays of provenance or quality metadata in place. A node
302
+ * that is already frozen is not walked again, which also ends any cycle.
303
+ */
304
+ function freezeMetadataTree(node) {
305
+ if (!isFreezableResultNode(node) || Object.isFrozen(node)) {
306
+ return;
307
+ }
308
+ Object.freeze(node);
309
+ for (const entry of Object.values(node)) {
310
+ freezeMetadataTree(entry);
311
+ }
312
+ }
313
+ /**
314
+ * Read-only result envelopes (from 2.0.0). The envelope, its provenance (with assumptions) and
315
+ * its quality metadata are frozen deeply. `value` is frozen at its top level only:
316
+ *
317
+ * - Every public calculation builds at least one envelope, many per call on hot paths. A generic
318
+ * deep walk of `value` made a small scalar call about 3× slower; this shallow freeze costs
319
+ * about 1.4× (measured, docs/API_STYLE.md "Read-only results").
320
+ * - A deep freeze would also freeze any caller-owned object that a value holds by reference.
321
+ * test/result-envelope-freeze.test.ts checks that a calculation leaves its input as it was.
322
+ * - Typed arrays, DataViews and ArrayBuffers cannot be frozen and stay mutable. Class
323
+ * instances, Maps and Sets are not frozen.
324
+ * - Domains that own their data still deep-freeze it (captures, RAW attachments, presets and
325
+ * export metadata use freezeOwnedData), so those values are read-only all the way down.
326
+ */
140
327
  function createResult(value, provenance, quality) {
328
+ validateProvenanceIdentity(provenance);
141
329
  assertFiniteCalculationValue(value);
142
330
  validateCalculationQuality(quality);
143
- return {
144
- value,
145
- provenance,
146
- ...(quality === undefined ? {} : { quality })
147
- };
331
+ if (isFreezableResultNode(value)) {
332
+ Object.freeze(value);
333
+ }
334
+ // Provenance holds only strings and the assumptions array of strings, so freezing those two
335
+ // objects freezes it completely. This avoids a generic walk on every result (a measured hot
336
+ // path; see docs/API_STYLE.md "Read-only results").
337
+ Object.freeze(provenance);
338
+ const assumptions = provenance.assumptions;
339
+ if (assumptions !== undefined && !Object.isFrozen(assumptions)) {
340
+ Object.freeze(assumptions);
341
+ }
342
+ if (quality !== undefined) {
343
+ freezeMetadataTree(quality);
344
+ }
345
+ return Object.freeze(quality === undefined ? { value, provenance } : { value, provenance, quality });
148
346
  }
149
347
  /**
150
348
  * Creates a deterministic calculated-result envelope.
@@ -177,7 +375,7 @@ export function estimatedResult(value, model, modelVersion, assumptions, quality
177
375
  model,
178
376
  modelVersion,
179
377
  assumptions
180
- }, quality);
378
+ }, requireQuality(quality, "estimated"));
181
379
  }
182
380
  /**
183
381
  * Creates a calibrated-result envelope with explicit quality metadata.
@@ -188,6 +386,6 @@ export function calibratedResult(value, model, modelVersion, assumptions, qualit
188
386
  model,
189
387
  modelVersion,
190
388
  assumptions
191
- }, quality);
389
+ }, requireQuality(quality, "calibrated"));
192
390
  }
193
391
  //# sourceMappingURL=calculation-result.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"calculation-result.js","sourceRoot":"","sources":["../../src/core/calculation-result.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"calculation-result.js","sourceRoot":"","sources":["../../src/core/calculation-result.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * The standard result envelope that every public calculation returns.\n *\n * An envelope pairs a value with provenance (how it was produced) and, when it can be\n * stated, quality metadata (uncertainty and validity range). This module defines those\n * types, validates quality metadata, and provides one constructor per provenance kind.\n * @see docs/API_STYLE.md for equations, coordinate/unit conventions, blockers and support limits.\n */\n\nimport { InvalidScientificResultError } from \"./validation.js\";\nimport { rejectUnknownFields, requireInputObject } from \"./record-validation.js\";\n\n/**\n * Scientific provenance labels used throughout the public API.\n */\nexport type ProvenanceKind =\n | \"calculated\"\n | \"calibrated\"\n | \"estimated\"\n | \"approximation\";\n\n/**\n * Metadata describing how a numerical result was produced.\n */\nexport interface CalculationProvenance {\n /** Classification of the result's scientific origin. */\n kind: ProvenanceKind;\n /** Stable identifier for the model or equation set. */\n model: string;\n /** Version of the model, independent of the package version. */\n modelVersion: string;\n /** Concise assumptions that materially affect interpretation. */\n assumptions?: readonly string[];\n}\n\n/**\n * Source category for a quantified uncertainty estimate.\n */\nexport type UncertaintySource =\n | \"measurement\"\n | \"model-approximation\"\n | \"calibration\";\n\n/**\n * Optional confidence metadata for a quantified uncertainty estimate.\n *\n * Give a confidence level only when you can state its basis. Do not use it as a\n * general, subjective confidence score.\n */\nexport interface UncertaintyConfidence {\n /** Confidence/coverage level as a fraction in the interval (0, 1]. */\n level: number;\n /** Concise description of the statistical/empirical basis. */\n basis: string;\n}\n\ninterface UncertaintyEstimateBase {\n /** JSON-style path to the affected result quantity, e.g. value.distanceM. */\n quantityPath: string;\n /** Physical/statistical origin of this uncertainty component. */\n source: UncertaintySource;\n /** Optional confidence/coverage metadata when scientifically meaningful. */\n confidence?: UncertaintyConfidence;\n /** Concise interpretation note, if needed. */\n note?: string;\n}\n\n/**\n * Absolute symmetric uncertainty around a result quantity.\n */\nexport interface AbsoluteUncertaintyEstimate extends UncertaintyEstimateBase {\n kind: \"absolute\";\n /** Symmetric ± magnitude in the explicitly named unit. */\n plusMinus: number;\n /** Explicit unit such as mm, m, px, or \"1\" for dimensionless values. */\n unit: string;\n}\n\n/**\n * Relative symmetric uncertainty around a result quantity.\n */\nexport interface RelativeUncertaintyEstimate extends UncertaintyEstimateBase {\n kind: \"relative\";\n /** Symmetric ± fractional magnitude; 0.05 means ±5%. */\n fraction: number;\n}\n\nexport type UncertaintyEstimate =\n | AbsoluteUncertaintyEstimate\n | RelativeUncertaintyEstimate;\n\n/**\n * The documented parameter range in which a model or calibration is valid.\n * It says where the model applies. It is not a statistical interval.\n */\nexport interface CalculationValidRange {\n /** JSON-style input/model parameter path, e.g. input.focusDistanceM. */\n parameterPath: string;\n /** Explicit unit such as m, mm, ISO, or \"1\" for dimensionless values. */\n unit: string;\n minimum?: number;\n maximum?: number;\n note?: string;\n}\n\n/**\n * Optional quality metadata for a calculation result.\n *\n * Uncertainty components stay separate. Do not add them, combine them in\n * quadrature (root-sum-of-squares) or merge them in any other way, unless you use\n * a scientifically justified method that documents its independence and\n * correlation assumptions.\n */\nexport interface CalculationQuality {\n uncertainty?: readonly UncertaintyEstimate[];\n validRanges?: readonly CalculationValidRange[];\n notes?: readonly string[];\n}\n\n/**\n * Standard result envelope for public scientific calculations.\n *\n * Deterministic analytical results stay lightweight. They omit `quality` when\n * there is no defensible uncertainty or accuracy metadata to report.\n *\n * Read-only from 2.0.0: the envelope, `provenance` and `quality` are frozen deeply and `value`\n * at its top level. Copy a value before changing it. Typed arrays inside a value stay mutable.\n * See docs/API_STYLE.md \"Read-only results\".\n *\n * @typeParam T Serializable value returned by the calculation.\n */\nexport interface CalculationResult<T> {\n readonly value: T;\n readonly provenance: CalculationProvenance;\n readonly quality?: CalculationQuality;\n}\n\nconst UNCERTAINTY_SOURCES = new Set<UncertaintySource>([\n \"measurement\",\n \"model-approximation\",\n \"calibration\"\n]);\n\nfunction requireNonEmptyString(path: string, value: unknown): void {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new InvalidScientificResultError(\n `Calculation quality field ${path} must not be empty.`\n );\n }\n}\n\nfunction requireNonNegativeFinite(path: string, value: number): void {\n if (!Number.isFinite(value) || value < 0) {\n throw new InvalidScientificResultError(\n `Calculation quality field ${path} must be finite and greater than or equal to zero.`\n );\n }\n}\n\nfunction validateConfidence(\n confidence: UncertaintyConfidence | undefined,\n path: string\n): void {\n if (confidence === undefined) {\n return;\n }\n requireInputObject(confidence, `Calculation quality field ${path}`);\n rejectUnknownFields(confidence, [\"level\", \"basis\"], `calculationQuality.${path}`);\n\n if (\n !Number.isFinite(confidence.level) ||\n confidence.level <= 0 ||\n confidence.level > 1\n ) {\n throw new InvalidScientificResultError(\n `Calculation quality field ${path}.level must be in (0, 1].`\n );\n }\n requireNonEmptyString(`${path}.basis`, confidence.basis);\n}\n\nconst UNCERTAINTY_BASE_KEYS = [\"kind\", \"quantityPath\", \"source\", \"confidence\", \"note\"] as const;\nconst ABSOLUTE_UNCERTAINTY_KEYS: readonly string[] = [...UNCERTAINTY_BASE_KEYS, \"plusMinus\", \"unit\"];\nconst RELATIVE_UNCERTAINTY_KEYS: readonly string[] = [...UNCERTAINTY_BASE_KEYS, \"fraction\"];\n\nfunction validateUncertaintyEstimate(\n estimate: UncertaintyEstimate,\n index: number\n): void {\n const path = `uncertainty[${index}]`;\n requireInputObject(estimate, `Calculation quality field ${path}`);\n if (estimate.kind === \"absolute\" || estimate.kind === \"relative\") {\n rejectUnknownFields(estimate, estimate.kind === \"absolute\" ? ABSOLUTE_UNCERTAINTY_KEYS : RELATIVE_UNCERTAINTY_KEYS,\n `calculationQuality.${path}`);\n }\n requireNonEmptyString(`${path}.quantityPath`, estimate.quantityPath);\n if (!UNCERTAINTY_SOURCES.has(estimate.source as UncertaintySource)) {\n throw new InvalidScientificResultError(\n `Calculation quality field ${path}.source is invalid.`\n );\n }\n validateConfidence(estimate.confidence, `${path}.confidence`);\n\n if (estimate.note !== undefined) {\n requireNonEmptyString(`${path}.note`, estimate.note);\n }\n\n if (estimate.kind === \"absolute\") {\n requireNonNegativeFinite(`${path}.plusMinus`, estimate.plusMinus);\n requireNonEmptyString(`${path}.unit`, estimate.unit);\n return;\n }\n\n if (estimate.kind === \"relative\") {\n requireNonNegativeFinite(`${path}.fraction`, estimate.fraction);\n return;\n }\n\n throw new InvalidScientificResultError(\n `Calculation quality field ${path}.kind is invalid.`\n );\n}\n\nfunction validateValidRange(\n range: CalculationValidRange,\n index: number\n): void {\n const path = `validRanges[${index}]`;\n requireInputObject(range, `Calculation quality field ${path}`);\n rejectUnknownFields(range, [\"parameterPath\", \"unit\", \"minimum\", \"maximum\", \"note\"], `calculationQuality.${path}`);\n requireNonEmptyString(`${path}.parameterPath`, range.parameterPath);\n requireNonEmptyString(`${path}.unit`, range.unit);\n\n if (range.minimum === undefined && range.maximum === undefined) {\n throw new InvalidScientificResultError(\n `Calculation quality field ${path} must include minimum or maximum.`\n );\n }\n\n if (range.minimum !== undefined && !Number.isFinite(range.minimum)) {\n throw new InvalidScientificResultError(\n `Calculation quality field ${path}.minimum must be finite.`\n );\n }\n if (range.maximum !== undefined && !Number.isFinite(range.maximum)) {\n throw new InvalidScientificResultError(\n `Calculation quality field ${path}.maximum must be finite.`\n );\n }\n if (\n range.minimum !== undefined &&\n range.maximum !== undefined &&\n range.minimum > range.maximum\n ) {\n throw new InvalidScientificResultError(\n `Calculation quality field ${path} minimum must not exceed maximum.`\n );\n }\n if (range.note !== undefined) {\n requireNonEmptyString(`${path}.note`, range.note);\n }\n}\n\n/**\n * Validates result-quality metadata before it enters a public result envelope.\n *\n * @param quality Optional calculation quality metadata.\n */\nexport function validateCalculationQuality(\n quality: CalculationQuality | undefined\n): void {\n if (quality === undefined) {\n return;\n }\n requireInputObject(quality, \"validateCalculationQuality input\");\n rejectUnknownFields(quality, [\"uncertainty\", \"validRanges\", \"notes\"], \"calculationQuality\");\n\n if (quality.uncertainty !== undefined) {\n if (quality.uncertainty.length === 0) {\n throw new InvalidScientificResultError(\n \"Calculation quality uncertainty must be omitted rather than empty.\"\n );\n }\n quality.uncertainty.forEach(validateUncertaintyEstimate);\n }\n\n if (quality.validRanges !== undefined) {\n if (quality.validRanges.length === 0) {\n throw new InvalidScientificResultError(\n \"Calculation quality validRanges must be omitted rather than empty.\"\n );\n }\n quality.validRanges.forEach(validateValidRange);\n }\n\n if (quality.notes !== undefined) {\n if (quality.notes.length === 0) {\n throw new InvalidScientificResultError(\n \"Calculation quality notes must be omitted rather than empty.\"\n );\n }\n quality.notes.forEach((note, index) => {\n requireNonEmptyString(`notes[${index}]`, note);\n });\n }\n\n if (\n quality.uncertainty === undefined &&\n quality.validRanges === undefined &&\n quality.notes === undefined\n ) {\n throw new InvalidScientificResultError(\n \"Calculation quality must contain uncertainty, validRanges, or notes.\"\n );\n }\n}\n\nfunction assertFiniteNumbers(\n value: unknown,\n path: string,\n seen: WeakSet<object>\n): void {\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) {\n throw new InvalidScientificResultError(\n `Calculation produced a non-finite number at ${path}.`\n );\n }\n return;\n }\n\n if (typeof value !== \"object\" || value === null) {\n return;\n }\n\n if (seen.has(value)) {\n return;\n }\n seen.add(value);\n\n if (Array.isArray(value)) {\n value.forEach((entry, index) => {\n assertFiniteNumbers(entry, `${path}[${index}]`, seen);\n });\n return;\n }\n\n for (const [key, entry] of Object.entries(value)) {\n assertFiniteNumbers(entry, `${path}.${key}`, seen);\n }\n}\n\n/**\n * Fast check for a non-finite number anywhere in a value tree. It builds no path strings.\n *\n * It walks the tree exactly as assertFiniteNumbers does: own enumerable string keys in\n * Object.keys order (as Object.entries), array indices that are present (as forEach), and\n * each object once. The slower diagnostic walk runs only when this finds a non-finite\n * number, so the thrown error type and path message are unchanged.\n */\nfunction containsNonFiniteNumber(value: unknown, seen: WeakSet<object>): boolean {\n if (typeof value === \"number\") {\n return !Number.isFinite(value);\n }\n if (typeof value !== \"object\" || value === null || seen.has(value)) {\n return false;\n }\n seen.add(value);\n if (Array.isArray(value)) {\n for (let index = 0; index < value.length; index++) {\n if (index in value && containsNonFiniteNumber(value[index], seen)) {\n return true;\n }\n }\n return false;\n }\n const record = value as Record<string, unknown>;\n const keys = Object.keys(record);\n for (let index = 0; index < keys.length; index++) {\n if (containsNonFiniteNumber(record[keys[index]!], seen)) {\n return true;\n }\n }\n return false;\n}\n\n/** Object visits allowed to the memo-free pre-scan before it defers to the exact visited-set scan. */\nconst FAST_FINITE_SCAN_MAX_OBJECT_VISITS = 1 << 16;\n/** Nesting allowed to the memo-free pre-scan; a cycle or very deep tree defers to the exact scan. */\nconst FAST_FINITE_SCAN_MAX_DEPTH = 64;\nconst FAST_SCAN_FINITE = 0, FAST_SCAN_NON_FINITE = 1, FAST_SCAN_UNDECIDED = 2;\n/** Remaining object visits of the active pre-scan; saved and restored around nested scans. */\nlet fastFiniteScanBudget = 0;\n\n/**\n * Faster pre-scan that skips the visited-object WeakSet (a 2.0 performance change).\n *\n * It walks the tree like containsNonFiniteNumber (own enumerable string keys in Object.keys\n * order, present array indices). Without a WeakSet it may visit a shared node more than once.\n * So it gives up and returns UNDECIDED after FAST_FINITE_SCAN_MAX_OBJECT_VISITS objects or\n * FAST_FINITE_SCAN_MAX_DEPTH levels of nesting. Any cycle hits the depth limit.\n *\n * Revisiting cannot change the answer, because the set of reachable numbers is the same\n * either way. A non-finite number it finds is reachable, and a finished scan has seen every\n * reachable number. So any decided answer equals the exact scan's answer. UNDECIDED falls\n * back to the exact scan.\n */\nfunction scanNonFiniteWithoutMemo(value: unknown, depth: number): number {\n if (typeof value === \"number\") {\n return Number.isFinite(value) ? FAST_SCAN_FINITE : FAST_SCAN_NON_FINITE;\n }\n if (typeof value !== \"object\" || value === null) {\n return FAST_SCAN_FINITE;\n }\n if (depth >= FAST_FINITE_SCAN_MAX_DEPTH || --fastFiniteScanBudget < 0) {\n return FAST_SCAN_UNDECIDED;\n }\n if (Array.isArray(value)) {\n for (let index = 0; index < value.length; index++) {\n if (index in value) {\n const entry: unknown = value[index];\n if (typeof entry === \"number\") {\n if (!Number.isFinite(entry)) return FAST_SCAN_NON_FINITE;\n } else if (typeof entry === \"object\" && entry !== null) {\n const result = scanNonFiniteWithoutMemo(entry, depth + 1);\n if (result !== FAST_SCAN_FINITE) return result;\n }\n }\n }\n return FAST_SCAN_FINITE;\n }\n const record = value as Record<string, unknown>;\n const keys = Object.keys(record);\n for (let index = 0; index < keys.length; index++) {\n const entry = record[keys[index]!];\n if (typeof entry === \"number\") {\n if (!Number.isFinite(entry)) return FAST_SCAN_NON_FINITE;\n } else if (typeof entry === \"object\" && entry !== null) {\n const result = scanNonFiniteWithoutMemo(entry, depth + 1);\n if (result !== FAST_SCAN_FINITE) return result;\n }\n }\n return FAST_SCAN_FINITE;\n}\n\n/** Internal: exact answer of containsNonFiniteNumber, using the memo-free pre-scan when it decides. */\nexport function calculationValueContainsNonFiniteNumber(value: unknown): boolean {\n const saved = fastFiniteScanBudget;\n fastFiniteScanBudget = FAST_FINITE_SCAN_MAX_OBJECT_VISITS;\n let result: number;\n try {\n result = scanNonFiniteWithoutMemo(value, 0);\n } finally {\n fastFiniteScanBudget = saved;\n }\n return result === FAST_SCAN_UNDECIDED ? containsNonFiniteNumber(value, new WeakSet<object>()) : result === FAST_SCAN_NON_FINITE;\n}\n\n/** Internal: the exact visited-set scan, exposed for equivalence tests only. */\nexport function calculationValueContainsNonFiniteNumberExact(value: unknown): boolean {\n return containsNonFiniteNumber(value, new WeakSet<object>());\n}\n\nfunction assertFiniteCalculationValue(value: unknown): void {\n if (calculationValueContainsNonFiniteNumber(value)) {\n assertFiniteNumbers(value, \"value\", new WeakSet<object>());\n }\n}\n\nfunction validateProvenanceIdentity(provenance: CalculationProvenance): void {\n for (const field of [\"model\", \"modelVersion\"] as const) {\n const entry: unknown = provenance[field];\n if (typeof entry !== \"string\" || entry.trim().length === 0) {\n throw new InvalidScientificResultError(\n `Calculation provenance ${field} must be a non-empty string.`\n );\n }\n }\n}\n\n/**\n * Estimated and calibrated results must carry quality metadata. The TypeScript\n * signature alone cannot stop a JavaScript caller from leaving it out, so check at runtime.\n */\nfunction requireQuality(\n quality: CalculationQuality | undefined,\n kind: \"estimated\" | \"calibrated\"\n): CalculationQuality {\n if (quality === undefined || quality === null) {\n throw new InvalidScientificResultError(\n `A ${kind} result requires calculation quality metadata.`\n );\n }\n return quality;\n}\n\n/** True for a plain record (prototype Object.prototype or null) or an array: the nodes a result freezes. */\nfunction isFreezableResultNode(node: unknown): node is object {\n if (node === null || typeof node !== \"object\") {\n return false;\n }\n if (Array.isArray(node)) {\n return true;\n }\n const prototype: unknown = Object.getPrototypeOf(node);\n return prototype === Object.prototype || prototype === null;\n}\n\n/**\n * Deep-freezes the plain records and arrays of provenance or quality metadata in place. A node\n * that is already frozen is not walked again, which also ends any cycle.\n */\nfunction freezeMetadataTree(node: unknown): void {\n if (!isFreezableResultNode(node) || Object.isFrozen(node)) {\n return;\n }\n Object.freeze(node);\n for (const entry of Object.values(node)) {\n freezeMetadataTree(entry);\n }\n}\n\n/**\n * Read-only result envelopes (from 2.0.0). The envelope, its provenance (with assumptions) and\n * its quality metadata are frozen deeply. `value` is frozen at its top level only:\n *\n * - Every public calculation builds at least one envelope, many per call on hot paths. A generic\n * deep walk of `value` made a small scalar call about 3× slower; this shallow freeze costs\n * about 1.4× (measured, docs/API_STYLE.md \"Read-only results\").\n * - A deep freeze would also freeze any caller-owned object that a value holds by reference.\n * test/result-envelope-freeze.test.ts checks that a calculation leaves its input as it was.\n * - Typed arrays, DataViews and ArrayBuffers cannot be frozen and stay mutable. Class\n * instances, Maps and Sets are not frozen.\n * - Domains that own their data still deep-freeze it (captures, RAW attachments, presets and\n * export metadata use freezeOwnedData), so those values are read-only all the way down.\n */\nfunction createResult<T>(\n value: T,\n provenance: CalculationProvenance,\n quality?: CalculationQuality\n): CalculationResult<T> {\n validateProvenanceIdentity(provenance);\n assertFiniteCalculationValue(value);\n validateCalculationQuality(quality);\n\n if (isFreezableResultNode(value)) {\n Object.freeze(value);\n }\n // Provenance holds only strings and the assumptions array of strings, so freezing those two\n // objects freezes it completely. This avoids a generic walk on every result (a measured hot\n // path; see docs/API_STYLE.md \"Read-only results\").\n Object.freeze(provenance);\n const assumptions = provenance.assumptions;\n if (assumptions !== undefined && !Object.isFrozen(assumptions)) {\n Object.freeze(assumptions);\n }\n if (quality !== undefined) {\n freezeMetadataTree(quality);\n }\n return Object.freeze(quality === undefined ? { value, provenance } : { value, provenance, quality });\n}\n\n/**\n * Creates a deterministic calculated-result envelope.\n */\nexport function calculatedResult<T>(\n value: T,\n model: string,\n modelVersion: string,\n assumptions?: readonly string[],\n quality?: CalculationQuality\n): CalculationResult<T> {\n return createResult(\n value,\n {\n kind: \"calculated\",\n model,\n modelVersion,\n ...(assumptions === undefined ? {} : { assumptions })\n },\n quality\n );\n}\n\n/**\n * Creates an approximation-result envelope.\n */\nexport function approximationResult<T>(\n value: T,\n model: string,\n modelVersion: string,\n assumptions: readonly string[],\n quality?: CalculationQuality\n): CalculationResult<T> {\n return createResult(\n value,\n {\n kind: \"approximation\",\n model,\n modelVersion,\n assumptions\n },\n quality\n );\n}\n\n/**\n * Creates an estimated-result envelope with explicit quality metadata.\n */\nexport function estimatedResult<T>(\n value: T,\n model: string,\n modelVersion: string,\n assumptions: readonly string[],\n quality: CalculationQuality\n): CalculationResult<T> {\n return createResult(\n value,\n {\n kind: \"estimated\",\n model,\n modelVersion,\n assumptions\n },\n requireQuality(quality, \"estimated\")\n );\n}\n\n/**\n * Creates a calibrated-result envelope with explicit quality metadata.\n */\nexport function calibratedResult<T>(\n value: T,\n model: string,\n modelVersion: string,\n assumptions: readonly string[],\n quality: CalculationQuality\n): CalculationResult<T> {\n return createResult(\n value,\n {\n kind: \"calibrated\",\n model,\n modelVersion,\n assumptions\n },\n requireQuality(quality, \"calibrated\")\n );\n}\n"]}
@@ -5,14 +5,19 @@ export interface CanonicalJsonPolicy {
5
5
  unsupportedValueMessage: string;
6
6
  }
7
7
  /**
8
- * Serializes a parsed, acyclic plain-data tree with sorted enumerable object
9
- * keys, original array order and finite JSON numbers. JSON escaping and negative
10
- * zero representation follow JSON.stringify. The source is never mutated.
8
+ * Serializes a parsed, acyclic tree of plain data to JSON text.
11
9
  *
12
- * Undefined object properties follow the explicit domain policy; undefined array
13
- * entries and unsupported scalar types always fail. Callers own dense-array,
14
- * plain-record and cycle validation. This is serialization mechanics, not a
15
- * general input parser, cryptographic hash or standardized canonical-JSON claim.
10
+ * Object keys (enumerable) are sorted. Arrays keep their order. Numbers must be finite.
11
+ * String escaping and negative zero follow JSON.stringify. The input is never changed.
12
+ *
13
+ * The domain policy decides what happens to undefined object properties. These always
14
+ * fail with the policy's unsupported-value message:
15
+ * - undefined array entries and array holes;
16
+ * - non-plain objects (Map, Set, Date, typed arrays, class instances, or any prototype
17
+ * other than Object.prototype or null);
18
+ * - unsupported scalar types.
19
+ *
20
+ * The caller must rule out cycles first. This is serialization only. It is not a general
21
+ * input parser, a cryptographic hash or an implementation of a canonical-JSON standard.
16
22
  */
17
23
  export declare function stringifyCanonicalJson(value: unknown, policy: CanonicalJsonPolicy): string;
18
- //# sourceMappingURL=canonical-json.d.ts.map