@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
@@ -1 +1 @@
1
- {"version":3,"file":"iso-capabilities.js","sourceRoot":"","sources":["../../src/equipment/iso-capabilities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"iso-capabilities.js","sourceRoot":"","sources":["../../src/equipment/iso-capabilities.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * ISO capabilities: which standard, expanded and Auto ISO settings a body offers, and in which\n * capture modes.\n *\n * The parser validates untrusted input and returns the normalized typed contract. Unknown enum\n * values, missing required fields and incompatible scientific data are rejected.\n *\n * ISO is an exposure-index (EI) control setting. It does not create photons and says nothing about\n * read noise. Standard and expanded settings, limits per capture mode, and whether Auto ISO is\n * available are all stated explicitly. If availability is unknown, automatic control is not allowed.\n * @see docs/GENERIC_TIER_PRESETS.md for the equations, units, coordinate conventions, known blockers\n * and support limits.\n */\n\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport {\n parseEvidenceList,\n type EvidenceProvenance\n} from \"../core/evidence-provenance.js\";\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport type {\n ResolvedGenericEquipmentExposureCapabilities,\n ResolvedNumericSettingGrid\n} from \"./exposure-capabilities.js\";\nimport { requireInputKeys, rejectUnknownFields, rejectUnknownVariantFields } from \"../core/record-validation.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport const ISO_CAPABILITY_PROFILE_SCHEMA_VERSION =\n \"0.1.0\" as const;\n\nexport type IsoCapabilityAvailability =\n | \"supported\"\n | \"unsupported\"\n | \"unknown\";\n\nexport interface IsoExposureIndexRange {\n minimum: number;\n maximum: number;\n}\n\nexport type IsoStandardSettingGrid =\n | {\n kind: \"continuous-within-range\";\n }\n | {\n kind: \"discrete-values\";\n values: readonly number[];\n };\n\nexport interface IsoExpandedSetting {\n settingId: string;\n label: string;\n direction: \"low\" | \"high\";\n exposureIndexEquivalent: number;\n autoIsoEligible: boolean;\n evidence: readonly EvidenceProvenance[];\n}\n\nexport type IsoAutoIsoCapability =\n | {\n availability: \"supported\";\n standardExposureIndexRange:\n IsoExposureIndexRange;\n evidence: readonly EvidenceProvenance[];\n }\n | {\n availability:\n | \"unsupported\"\n | \"unknown\";\n evidence: readonly EvidenceProvenance[];\n };\n\nexport interface IsoCaptureModePolicy {\n captureModeId: string;\n standardExposureIndexRange:\n IsoExposureIndexRange;\n expandedSettingIds:\n readonly string[];\n autoIso:\n IsoAutoIsoCapability;\n evidence: readonly EvidenceProvenance[];\n}\n\nexport interface IsoCapabilityProfile {\n schemaVersion:\n typeof ISO_CAPABILITY_PROFILE_SCHEMA_VERSION;\n profileId: string;\n profileVersion: string;\n capabilityMeaning:\n \"reported-exposure-index-capability-not-physical-gain\";\n standard: {\n exposureIndexRange:\n IsoExposureIndexRange;\n settingGrid:\n IsoStandardSettingGrid;\n };\n expandedSettings:\n readonly IsoExpandedSetting[];\n autoIso:\n IsoAutoIsoCapability;\n captureModePolicies:\n readonly IsoCaptureModePolicy[];\n evidence:\n readonly EvidenceProvenance[];\n}\n\nexport type RequestedIsoSetting =\n | {\n kind: \"standard\";\n exposureIndex: number;\n }\n | {\n kind: \"expanded\";\n settingId: string;\n };\n\nexport interface ResolveIsoCapabilityInput {\n profile:\n IsoCapabilityProfile;\n setting:\n RequestedIsoSetting;\n captureModeId?: string;\n}\n\nexport interface ResolvedIsoCapability {\n profileId: string;\n profileVersion: string;\n captureModeId: string | null;\n setting:\n | {\n kind: \"standard\";\n exposureIndex: number;\n }\n | {\n kind: \"expanded\";\n settingId: string;\n label: string;\n direction:\n \"low\" | \"high\";\n exposureIndexEquivalent:\n number;\n };\n reportedExposureIndex: number;\n expandedSetting: boolean;\n autoIsoEligible:\n boolean;\n standardExposureIndexRange:\n IsoExposureIndexRange;\n standardSettingGrid:\n IsoStandardSettingGrid;\n autoIso:\n IsoAutoIsoCapability;\n capturedPhotonExpectationModified:\n false;\n photonShotNoiseStatisticsModified:\n false;\n physicalGainInferred:\n false;\n conversionGainInferred:\n false;\n readNoiseInferred: false;\n saturationInferred: false;\n exactCommercialCameraBehaviorClaimed:\n false;\n}\n\nfunction requireRecord(\n value: unknown,\n path: string,\n allowedKeys: readonly string[] | null\n): UnknownRecord {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value)\n ) {\n throw new InvalidConfigurationError(\n path + \" must be an object.\"\n );\n }\n if (allowedKeys !== null) rejectUnknownFields(value, allowedKeys, path);\n return value as UnknownRecord;\n}\n\nfunction requireNonEmptyString(\n value: unknown,\n path: string\n): string {\n if (\n typeof value !== \"string\" ||\n value.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must be a non-empty string.\"\n );\n }\n return value.trim();\n}\n\nfunction requirePositiveFinite(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value) ||\n value <= 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must be finite and greater than zero.\"\n );\n }\n return value;\n}\n\nfunction parseRange(\n value: unknown,\n path: string\n): IsoExposureIndexRange {\n const record =\n requireRecord(value, path, [\"minimum\", \"maximum\"]);\n const minimum =\n requirePositiveFinite(\n record.minimum,\n path + \".minimum\"\n );\n const maximum =\n requirePositiveFinite(\n record.maximum,\n path + \".maximum\"\n );\n if (minimum > maximum) {\n throw new InvalidConfigurationError(\n path +\n \".minimum must be less than or equal to maximum.\"\n );\n }\n return {\n minimum,\n maximum\n };\n}\n\nfunction rangeWithin(\n inner:\n IsoExposureIndexRange,\n outer:\n IsoExposureIndexRange\n): boolean {\n return (\n inner.minimum >=\n outer.minimum &&\n inner.maximum <=\n outer.maximum\n );\n}\n\nfunction parseGrid(\n value: unknown,\n range:\n IsoExposureIndexRange,\n path: string\n): IsoStandardSettingGrid {\n const record =\n requireRecord(value, path, null);\n rejectUnknownVariantFields(record, \"kind\", { \"continuous-within-range\": [\"kind\"], \"discrete-values\": [\"kind\", \"values\"] }, path);\n if (\n record.kind ===\n \"continuous-within-range\"\n ) {\n return {\n kind:\n \"continuous-within-range\"\n };\n }\n if (\n record.kind ===\n \"discrete-values\"\n ) {\n if (\n !Array.isArray(\n record.values\n ) ||\n record.values.length === 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \".values must be a non-empty array.\"\n );\n }\n let previous =\n Number.NEGATIVE_INFINITY;\n const values =\n record.values.map(\n (entry, index) => {\n const parsed =\n requirePositiveFinite(\n entry,\n path +\n \".values[\" +\n index +\n \"]\"\n );\n if (\n parsed <= previous\n ) {\n throw new InvalidConfigurationError(\n path +\n \".values must be strictly increasing.\"\n );\n }\n if (\n parsed <\n range.minimum ||\n parsed >\n range.maximum\n ) {\n throw new InvalidConfigurationError(\n path +\n \".values must remain inside the standard ISO range.\"\n );\n }\n previous = parsed;\n return parsed;\n }\n );\n if (\n values[0] !==\n range.minimum ||\n values[\n values.length - 1\n ] !== range.maximum\n ) {\n throw new InvalidConfigurationError(\n path +\n \".values must include the exact standard range endpoints.\"\n );\n }\n return {\n kind:\n \"discrete-values\",\n values\n };\n }\n throw new InvalidConfigurationError(\n path + \".kind is invalid.\"\n );\n}\n\nfunction parseAvailability(\n value: unknown,\n path: string\n): IsoCapabilityAvailability {\n if (\n value !== \"supported\" &&\n value !== \"unsupported\" &&\n value !== \"unknown\"\n ) {\n throw new InvalidConfigurationError(\n path + \" is invalid.\"\n );\n }\n return value;\n}\n\nfunction parseAutoIso(\n value: unknown,\n standardRange:\n IsoExposureIndexRange,\n path: string\n): IsoAutoIsoCapability {\n const record =\n requireRecord(value, path, [\"availability\", \"evidence\", \"standardExposureIndexRange\"]);\n const availability =\n parseAvailability(\n record.availability,\n path + \".availability\"\n );\n const evidence =\n parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n );\n\n if (\n availability ===\n \"supported\"\n ) {\n const autoRange =\n parseRange(\n record\n .standardExposureIndexRange,\n path +\n \".standardExposureIndexRange\"\n );\n if (\n !rangeWithin(\n autoRange,\n standardRange\n )\n ) {\n throw new InvalidConfigurationError(\n path +\n \".standardExposureIndexRange must lie inside the standard ISO range.\"\n );\n }\n return {\n availability:\n \"supported\",\n standardExposureIndexRange:\n autoRange,\n evidence\n };\n }\n\n if (\n record\n .standardExposureIndexRange !==\n undefined\n ) {\n throw new InvalidConfigurationError(\n path +\n \".standardExposureIndexRange must be omitted unless Auto ISO is supported.\"\n );\n }\n\n return {\n availability,\n evidence\n };\n}\n\nfunction parseExpandedSetting(\n value: unknown,\n standardRange:\n IsoExposureIndexRange,\n path: string\n): IsoExpandedSetting {\n const record =\n requireRecord(value, path, [\"direction\", \"exposureIndexEquivalent\", \"autoIsoEligible\", \"settingId\", \"label\", \"evidence\"]);\n const direction =\n record.direction;\n if (\n direction !== \"low\" &&\n direction !== \"high\"\n ) {\n throw new InvalidConfigurationError(\n path +\n \".direction must be low or high.\"\n );\n }\n const exposureIndexEquivalent =\n requirePositiveFinite(\n record\n .exposureIndexEquivalent,\n path +\n \".exposureIndexEquivalent\"\n );\n if (\n (\n direction === \"low\" &&\n exposureIndexEquivalent >=\n standardRange.minimum\n ) ||\n (\n direction === \"high\" &&\n exposureIndexEquivalent <=\n standardRange.maximum\n )\n ) {\n throw new InvalidConfigurationError(\n path +\n \".exposureIndexEquivalent must lie outside the standard range in the declared direction.\"\n );\n }\n if (\n typeof record.autoIsoEligible !==\n \"boolean\"\n ) {\n throw new InvalidConfigurationError(\n path +\n \".autoIsoEligible must be boolean.\"\n );\n }\n\n return {\n settingId:\n requireNonEmptyString(\n record.settingId,\n path + \".settingId\"\n ),\n label:\n requireNonEmptyString(\n record.label,\n path + \".label\"\n ),\n direction,\n exposureIndexEquivalent,\n autoIsoEligible:\n record.autoIsoEligible,\n evidence:\n parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n}\n\nfunction parseCaptureModePolicy(\n value: unknown,\n standardRange:\n IsoExposureIndexRange,\n expandedIds:\n ReadonlySet<string>,\n path: string\n): IsoCaptureModePolicy {\n const record =\n requireRecord(value, path, [\"standardExposureIndexRange\", \"expandedSettingIds\", \"captureModeId\", \"autoIso\", \"evidence\"]);\n const modeRange =\n parseRange(\n record\n .standardExposureIndexRange,\n path +\n \".standardExposureIndexRange\"\n );\n if (\n !rangeWithin(\n modeRange,\n standardRange\n )\n ) {\n throw new InvalidConfigurationError(\n path +\n \".standardExposureIndexRange must lie inside the global standard range.\"\n );\n }\n if (\n !Array.isArray(\n record.expandedSettingIds\n )\n ) {\n throw new InvalidConfigurationError(\n path +\n \".expandedSettingIds must be an array.\"\n );\n }\n const expandedSettingIds =\n record.expandedSettingIds.map(\n (entry, index) => {\n const id =\n requireNonEmptyString(\n entry,\n path +\n \".expandedSettingIds[\" +\n index +\n \"]\"\n );\n if (!expandedIds.has(id)) {\n throw new InvalidConfigurationError(\n path +\n \".expandedSettingIds contains an unknown settingId.\"\n );\n }\n return id;\n }\n );\n if (\n new Set(\n expandedSettingIds\n ).size !==\n expandedSettingIds.length\n ) {\n throw new InvalidConfigurationError(\n path +\n \".expandedSettingIds must not contain duplicates.\"\n );\n }\n\n return {\n captureModeId:\n requireNonEmptyString(\n record.captureModeId,\n path + \".captureModeId\"\n ),\n standardExposureIndexRange:\n modeRange,\n expandedSettingIds,\n autoIso:\n parseAutoIso(\n record.autoIso,\n modeRange,\n path + \".autoIso\"\n ),\n evidence:\n parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n}\n\n/**\n * Validates an untrusted declaration and returns the normalized typed contract. Unknown enum values,\n * missing required fields and incompatible scientific data are rejected here.\n *\n * ISO is an exposure-index (EI) control setting. It does not create photons and says nothing about\n * read noise. Standard and expanded settings, limits per capture mode, and whether Auto ISO is\n * available are all stated explicitly. If availability is unknown, automatic control is not allowed.\n * @param value - unknown. Untrusted input; TypeScript types alone are not validation.\n * @returns IsoCapabilityProfile. The result states its shape and scientific status; a successful call does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the root export and exact type graph.\n */\nexport function parseIsoCapabilityProfile(\n value: unknown\n): IsoCapabilityProfile {\n const record =\n requireRecord(\n value,\n \"isoCapabilityProfile\", [\"schemaVersion\", \"capabilityMeaning\", \"standard\", \"expandedSettings\", \"captureModePolicies\", \"profileId\", \"profileVersion\", \"autoIso\", \"evidence\"]\n );\n if (\n record.schemaVersion !==\n ISO_CAPABILITY_PROFILE_SCHEMA_VERSION\n ) {\n throw new InvalidConfigurationError(\n 'isoCapabilityProfile.schemaVersion must be \"' +\n ISO_CAPABILITY_PROFILE_SCHEMA_VERSION +\n '\".'\n );\n }\n if (\n record.capabilityMeaning !==\n \"reported-exposure-index-capability-not-physical-gain\"\n ) {\n throw new InvalidConfigurationError(\n \"isoCapabilityProfile.capabilityMeaning is invalid.\"\n );\n }\n const standard =\n requireRecord(\n record.standard,\n \"isoCapabilityProfile.standard\", [\"exposureIndexRange\", \"settingGrid\"]\n );\n const standardRange =\n parseRange(\n standard\n .exposureIndexRange,\n \"isoCapabilityProfile.standard.exposureIndexRange\"\n );\n const settingGrid =\n parseGrid(\n standard.settingGrid,\n standardRange,\n \"isoCapabilityProfile.standard.settingGrid\"\n );\n\n if (\n !Array.isArray(\n record.expandedSettings\n )\n ) {\n throw new InvalidConfigurationError(\n \"isoCapabilityProfile.expandedSettings must be an array.\"\n );\n }\n const expandedSettings =\n record.expandedSettings.map(\n (entry, index) =>\n parseExpandedSetting(\n entry,\n standardRange,\n \"isoCapabilityProfile.expandedSettings[\" +\n index +\n \"]\"\n )\n );\n const expandedIds =\n expandedSettings.map(\n (entry) =>\n entry.settingId\n );\n if (\n new Set(expandedIds).size !==\n expandedIds.length\n ) {\n throw new InvalidConfigurationError(\n \"isoCapabilityProfile.expandedSettings must not contain duplicate settingId values.\"\n );\n }\n const expandedIdSet =\n new Set(expandedIds);\n\n if (\n !Array.isArray(\n record.captureModePolicies\n )\n ) {\n throw new InvalidConfigurationError(\n \"isoCapabilityProfile.captureModePolicies must be an array.\"\n );\n }\n const captureModePolicies =\n record.captureModePolicies.map(\n (entry, index) =>\n parseCaptureModePolicy(\n entry,\n standardRange,\n expandedIdSet,\n \"isoCapabilityProfile.captureModePolicies[\" +\n index +\n \"]\"\n )\n );\n const modeIds =\n captureModePolicies.map(\n (entry) =>\n entry.captureModeId\n );\n if (\n new Set(modeIds).size !==\n modeIds.length\n ) {\n throw new InvalidConfigurationError(\n \"isoCapabilityProfile.captureModePolicies must not contain duplicate captureModeId values.\"\n );\n }\n\n return {\n schemaVersion:\n ISO_CAPABILITY_PROFILE_SCHEMA_VERSION,\n profileId:\n requireNonEmptyString(\n record.profileId,\n \"isoCapabilityProfile.profileId\"\n ),\n profileVersion:\n requireNonEmptyString(\n record.profileVersion,\n \"isoCapabilityProfile.profileVersion\"\n ),\n capabilityMeaning:\n \"reported-exposure-index-capability-not-physical-gain\",\n standard: {\n exposureIndexRange:\n standardRange,\n settingGrid\n },\n expandedSettings,\n autoIso:\n parseAutoIso(\n record.autoIso,\n standardRange,\n \"isoCapabilityProfile.autoIso\"\n ),\n captureModePolicies,\n evidence:\n parseEvidenceList(\n record.evidence,\n \"isoCapabilityProfile.evidence\"\n )\n };\n}\n\nfunction isStandardValueSupported(\n value: number,\n range:\n IsoExposureIndexRange,\n grid:\n IsoStandardSettingGrid\n): boolean {\n if (\n value < range.minimum ||\n value > range.maximum\n ) {\n return false;\n }\n return (\n grid.kind ===\n \"continuous-within-range\" ||\n grid.values.includes(value)\n );\n}\n\nfunction resolveModePolicy(\n profile:\n IsoCapabilityProfile,\n captureModeId:\n string | undefined\n): {\n range:\n IsoExposureIndexRange;\n expandedSettingIds:\n ReadonlySet<string>;\n autoIso:\n IsoAutoIsoCapability;\n} {\n if (\n captureModeId ===\n undefined\n ) {\n return {\n range:\n profile.standard\n .exposureIndexRange,\n expandedSettingIds:\n new Set(\n profile\n .expandedSettings\n .map(\n (entry) =>\n entry.settingId\n )\n ),\n autoIso:\n profile.autoIso\n };\n }\n if (\n captureModeId.trim()\n .length === 0\n ) {\n throw new InvalidConfigurationError(\n \"captureModeId must be a non-empty string when provided.\"\n );\n }\n const policy =\n profile.captureModePolicies.find(\n (entry) =>\n entry.captureModeId ===\n captureModeId\n );\n if (policy === undefined) {\n return {\n range:\n profile.standard\n .exposureIndexRange,\n expandedSettingIds:\n new Set(\n profile\n .expandedSettings\n .map(\n (entry) =>\n entry.settingId\n )\n ),\n autoIso:\n profile.autoIso\n };\n }\n return {\n range:\n policy\n .standardExposureIndexRange,\n expandedSettingIds:\n new Set(\n policy\n .expandedSettingIds\n ),\n autoIso:\n policy.autoIso\n };\n}\n\n/**\n * Resolves one standard, expanded or Auto ISO request against what the profile and capture mode\n * declare as available. Reports \"unavailable\" or \"unknown\" explicitly.\n *\n * ISO is an exposure-index (EI) control setting. It does not create photons and says nothing about\n * read noise. Standard and expanded settings, limits per capture mode, and whether Auto ISO is\n * available are all stated explicitly. If availability is unknown, automatic control is not allowed.\n * @param input - ResolveIsoCapabilityInput. See that type for coordinates, units and profile binding.\n * @returns ResolvedIsoCapability. The result states its shape and scientific status; a successful call does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the root export and exact type graph.\n */\nexport function resolveIsoCapability(\n input:\n ResolveIsoCapabilityInput\n): ResolvedIsoCapability {\n requireInputKeys(input, \"resolveIsoCapability\", [\"profile\", \"setting\", \"captureModeId\"]);\n const profile =\n parseIsoCapabilityProfile(\n input.profile\n );\n const modePolicy =\n resolveModePolicy(\n profile,\n input.captureModeId\n );\n\n if (\n input.setting.kind ===\n \"standard\"\n ) {\n if (\n typeof input.setting\n .exposureIndex !==\n \"number\" ||\n !Number.isFinite(\n input.setting\n .exposureIndex\n ) ||\n input.setting\n .exposureIndex <= 0\n ) {\n throw new InvalidScientificInputError(\n \"standard exposureIndex must be finite and greater than zero.\"\n );\n }\n if (\n !isStandardValueSupported(\n input.setting\n .exposureIndex,\n modePolicy.range,\n profile.standard\n .settingGrid\n )\n ) {\n throw new InvalidScientificInputError(\n \"Requested standard exposure index is not supported by the selected ISO capability/mode.\"\n );\n }\n\n const autoEligible =\n modePolicy.autoIso\n .availability ===\n \"supported\" &&\n input.setting\n .exposureIndex >=\n modePolicy.autoIso\n .standardExposureIndexRange\n .minimum &&\n input.setting\n .exposureIndex <=\n modePolicy.autoIso\n .standardExposureIndexRange\n .maximum;\n\n return {\n profileId:\n profile.profileId,\n profileVersion:\n profile.profileVersion,\n captureModeId:\n input.captureModeId ??\n null,\n setting: {\n kind: \"standard\",\n exposureIndex:\n input.setting\n .exposureIndex\n },\n reportedExposureIndex:\n input.setting\n .exposureIndex,\n expandedSetting: false,\n autoIsoEligible:\n autoEligible,\n standardExposureIndexRange: {\n ...modePolicy.range\n },\n standardSettingGrid:\n profile.standard\n .settingGrid.kind ===\n \"continuous-within-range\"\n ? {\n kind:\n \"continuous-within-range\"\n }\n : {\n kind:\n \"discrete-values\",\n values: [\n ...profile.standard\n .settingGrid\n .values\n ]\n },\n autoIso:\n modePolicy.autoIso,\n capturedPhotonExpectationModified:\n false,\n photonShotNoiseStatisticsModified:\n false,\n physicalGainInferred:\n false,\n conversionGainInferred:\n false,\n readNoiseInferred:\n false,\n saturationInferred:\n false,\n exactCommercialCameraBehaviorClaimed:\n false\n };\n }\n\n if (\n input.setting.kind !==\n \"expanded\"\n ) {\n throw new InvalidConfigurationError(\n \"ISO setting must be a valid standard or expanded setting.\"\n );\n }\n const expandedSettingId =\n input.setting.settingId;\n if (\n typeof expandedSettingId !==\n \"string\" ||\n expandedSettingId.trim()\n .length === 0\n ) {\n throw new InvalidConfigurationError(\n \"ISO setting must be a valid standard or expanded setting.\"\n );\n }\n\n const setting =\n profile.expandedSettings.find(\n (entry) =>\n entry.settingId ===\n expandedSettingId\n );\n if (\n setting === undefined ||\n !modePolicy\n .expandedSettingIds\n .has(setting.settingId)\n ) {\n throw new InvalidScientificInputError(\n \"Requested expanded ISO setting is not supported by the selected ISO capability/mode.\"\n );\n }\n\n return {\n profileId:\n profile.profileId,\n profileVersion:\n profile.profileVersion,\n captureModeId:\n input.captureModeId ??\n null,\n setting: {\n kind: \"expanded\",\n settingId:\n setting.settingId,\n label: setting.label,\n direction:\n setting.direction,\n exposureIndexEquivalent:\n setting\n .exposureIndexEquivalent\n },\n reportedExposureIndex:\n setting\n .exposureIndexEquivalent,\n expandedSetting: true,\n autoIsoEligible:\n modePolicy.autoIso\n .availability ===\n \"supported\" &&\n setting.autoIsoEligible,\n standardExposureIndexRange: {\n ...modePolicy.range\n },\n standardSettingGrid:\n profile.standard\n .settingGrid.kind ===\n \"continuous-within-range\"\n ? {\n kind:\n \"continuous-within-range\"\n }\n : {\n kind:\n \"discrete-values\",\n values: [\n ...profile.standard\n .settingGrid.values\n ]\n },\n autoIso:\n modePolicy.autoIso,\n capturedPhotonExpectationModified:\n false,\n photonShotNoiseStatisticsModified:\n false,\n physicalGainInferred:\n false,\n conversionGainInferred:\n false,\n readNoiseInferred: false,\n saturationInferred: false,\n exactCommercialCameraBehaviorClaimed:\n false\n };\n}\n\n\nexport interface BindIsoCapabilityToExposureCapabilitiesInput {\n isoCapabilityProfile:\n IsoCapabilityProfile;\n equipmentCapabilities:\n ResolvedGenericEquipmentExposureCapabilities;\n captureModeId?: string;\n}\n\nexport interface BoundIsoExposureCapabilities {\n isoCapabilityProfileId: string;\n isoCapabilityProfileVersion: string;\n captureModeId: string | null;\n capabilities:\n ResolvedGenericEquipmentExposureCapabilities;\n expandedSettingsExcludedFromNumericExposureGrid:\n true;\n physicalGainInferred: false;\n readNoiseInferred: false;\n}\n\nfunction sameResolvedGrid(\n resolved:\n ResolvedNumericSettingGrid,\n detailed:\n IsoStandardSettingGrid\n): boolean {\n if (\n resolved.kind !==\n detailed.kind\n ) {\n return false;\n }\n if (\n resolved.kind ===\n \"continuous-within-range\" ||\n detailed.kind ===\n \"continuous-within-range\"\n ) {\n return true;\n }\n return (\n resolved.values.length ===\n detailed.values.length &&\n resolved.values.every(\n (value, index) =>\n value ===\n detailed.values[index]\n )\n );\n}\n\nfunction gridWithinRange(\n grid:\n ResolvedNumericSettingGrid,\n range:\n IsoExposureIndexRange\n): ResolvedNumericSettingGrid {\n if (\n grid.kind ===\n \"continuous-within-range\"\n ) {\n return {\n kind:\n \"continuous-within-range\"\n };\n }\n const values =\n grid.values.filter(\n (value) =>\n value >= range.minimum &&\n value <= range.maximum\n );\n if (values.length === 0) {\n throw new InvalidScientificInputError(\n \"Selected capture-mode ISO range contains no values from the resolved equipment ISO grid.\"\n );\n }\n return {\n kind: \"discrete-values\",\n values\n };\n}\n\n/**\n * Combines the detailed ISO/EI capability profile with the numeric capability\n * envelope that the exposure-mode resolvers use.\n *\n * The existing equipment capability must match the profile's global standard\n * ISO range and grid exactly. A capture-mode policy backed by evidence may\n * narrow the standard manual range for that mode. Auto ISO may be narrower\n * still. Expanded settings (such as L and H) stay outside the resolvers'\n * ordinary numeric ISO grid; use resolveIsoCapability() for them.\n */\nexport function bindIsoCapabilityToExposureCapabilities(\n input:\n BindIsoCapabilityToExposureCapabilitiesInput\n): BoundIsoExposureCapabilities {\n requireInputKeys(input, \"bindIsoCapabilityToExposureCapabilities\", [\"isoCapabilityProfile\", \"equipmentCapabilities\", \"captureModeId\"]);\n const profile =\n parseIsoCapabilityProfile(\n input.isoCapabilityProfile\n );\n const source =\n input.equipmentCapabilities;\n\n if (\n source.iso.minimum !==\n profile.standard\n .exposureIndexRange\n .minimum ||\n source.iso.maximum !==\n profile.standard\n .exposureIndexRange\n .maximum ||\n !sameResolvedGrid(\n source.iso.settingGrid,\n profile.standard\n .settingGrid\n )\n ) {\n throw new InvalidScientificInputError(\n \"Detailed ISO capability standard range/grid must exactly match the existing resolved equipment ISO capability.\"\n );\n }\n\n const modePolicy =\n resolveModePolicy(\n profile,\n input.captureModeId\n );\n const settingGrid =\n gridWithinRange(\n source.iso.settingGrid,\n modePolicy.range\n );\n\n const iso =\n modePolicy.autoIso\n .availability ===\n \"supported\"\n ? {\n minimum:\n modePolicy.range.minimum,\n maximum:\n modePolicy.range.maximum,\n settingGrid,\n autoIsoAvailability:\n \"supported\" as const,\n autoIsoMinimum:\n modePolicy.autoIso\n .standardExposureIndexRange\n .minimum,\n autoIsoMaximum:\n modePolicy.autoIso\n .standardExposureIndexRange\n .maximum\n }\n : {\n minimum:\n modePolicy.range.minimum,\n maximum:\n modePolicy.range.maximum,\n settingGrid,\n autoIsoAvailability:\n modePolicy.autoIso\n .availability\n };\n\n return {\n isoCapabilityProfileId:\n profile.profileId,\n isoCapabilityProfileVersion:\n profile.profileVersion,\n captureModeId:\n input.captureModeId ??\n null,\n capabilities: {\n ...source,\n iso\n },\n expandedSettingsExcludedFromNumericExposureGrid:\n true,\n physicalGainInferred:\n false,\n readNoiseInferred:\n false\n };\n}\n"]}
@@ -43,16 +43,15 @@ export interface AssessExposureMeteringProfileCompatibilityInput {
43
43
  /**
44
44
  * Parses generic body metering capability metadata.
45
45
  *
46
- * This profile declares which engine-owned metering profiles/modes a generic
47
- * body can select. It deliberately does not duplicate target/calibration
48
- * values from those metering profiles.
46
+ * This profile declares which of the engine's metering profiles and modes a
47
+ * generic body can select. It deliberately does not copy target or
48
+ * calibration values from those metering profiles.
49
49
  */
50
50
  export declare function parseGenericBodyMeteringCapabilityProfile(value: unknown): GenericBodyMeteringCapabilityProfile;
51
51
  /**
52
52
  * Checks whether one engine metering profile is selectable on a generic body.
53
53
  *
54
- * Calibration/target policy remains authoritative in the metering profile and
55
- * is never copied into equipment capability metadata.
54
+ * The metering profile stays the single source of its calibration and target
55
+ * policy. They are never copied into equipment capability metadata.
56
56
  */
57
57
  export declare function assessExposureMeteringProfileCompatibility(input: AssessExposureMeteringProfileCompatibilityInput): MeteringCapabilityCompatibilityAssessment;
58
- //# sourceMappingURL=metering-capabilities.d.ts.map
@@ -1,32 +1,34 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Parses generic body metering capability metadata. This profile declares which engine-owned metering
5
- * profiles/modes a generic body can select. It deliberately does not duplicate target/calibration
6
- * values from those metering profiles.
7
- * Checks whether one engine metering profile is selectable on a generic body. Calibration/target
8
- * policy remains authoritative in the metering profile and is never copied into equipment capability
9
- * metadata.
10
- * @see docs/GENERIC_TIER_PRESETS.md for equations, coordinate/unit conventions, blockers and support
11
- * limits.
3
+ * Metering capabilities of a generic body: which of the engine's metering profiles and modes it can
4
+ * select.
5
+ *
6
+ * This profile deliberately does not copy target or calibration values from those metering profiles.
7
+ * The metering profile stays the single source of its calibration and target policy.
8
+ * @see docs/GENERIC_TIER_PRESETS.md for the equations, units, coordinate conventions, known blockers
9
+ * and support limits.
12
10
  */
13
11
  import { InvalidConfigurationError } from "../core/configuration-error.js";
14
12
  import { parseEvidenceList } from "../core/evidence-provenance.js";
15
13
  import { InvalidScientificInputError } from "../core/validation.js";
16
14
  import { parseExposureMeteringProfile } from "../exposure/metering.js";
15
+ import { requireInputKeys, rejectUnknownFields } from "../core/record-validation.js";
17
16
  export const GENERIC_BODY_METERING_CAPABILITY_SCHEMA_VERSION = "0.1.0";
18
17
  const POLICY_KINDS = new Set([
19
18
  "multi-zone-uniform",
20
19
  "center-weighted-radial",
21
20
  "spot",
22
- "highlight-weighted"
21
+ "highlight-weighted",
22
+ "highlight-priority"
23
23
  ]);
24
- function requireRecord(value, path) {
24
+ function requireRecord(value, path, allowedKeys) {
25
25
  if (typeof value !== "object" ||
26
26
  value === null ||
27
27
  Array.isArray(value)) {
28
28
  throw new InvalidConfigurationError(path + " must be an object.");
29
29
  }
30
+ if (allowedKeys !== null)
31
+ rejectUnknownFields(value, allowedKeys, path);
30
32
  return value;
31
33
  }
32
34
  function requireNonEmptyString(value, path) {
@@ -54,12 +56,12 @@ function parsePolicyKind(value, path) {
54
56
  /**
55
57
  * Parses generic body metering capability metadata.
56
58
  *
57
- * This profile declares which engine-owned metering profiles/modes a generic
58
- * body can select. It deliberately does not duplicate target/calibration
59
- * values from those metering profiles.
59
+ * This profile declares which of the engine's metering profiles and modes a
60
+ * generic body can select. It deliberately does not copy target or
61
+ * calibration values from those metering profiles.
60
62
  */
61
63
  export function parseGenericBodyMeteringCapabilityProfile(value) {
62
- const record = requireRecord(value, "genericBodyMeteringCapabilityProfile");
64
+ const record = requireRecord(value, "genericBodyMeteringCapabilityProfile", ["schemaVersion", "scientificStatus", "supportedMeteringProfiles", "spotFocusPointLinkage", "profileId", "profileVersion", "evidence"]);
63
65
  if (record.schemaVersion !==
64
66
  GENERIC_BODY_METERING_CAPABILITY_SCHEMA_VERSION) {
65
67
  throw new InvalidConfigurationError('genericBodyMeteringCapabilityProfile.schemaVersion must be "' +
@@ -79,7 +81,7 @@ export function parseGenericBodyMeteringCapabilityProfile(value) {
79
81
  const path = "genericBodyMeteringCapabilityProfile.supportedMeteringProfiles[" +
80
82
  index +
81
83
  "]";
82
- const item = requireRecord(entry, path);
84
+ const item = requireRecord(entry, path, ["meteringProfileId", "policyKind", "evidence"]);
83
85
  return {
84
86
  meteringProfileId: requireNonEmptyString(item.meteringProfileId, path + ".meteringProfileId"),
85
87
  policyKind: parsePolicyKind(item.policyKind, path + ".policyKind"),
@@ -91,7 +93,7 @@ export function parseGenericBodyMeteringCapabilityProfile(value) {
91
93
  ids.length) {
92
94
  throw new InvalidConfigurationError("genericBodyMeteringCapabilityProfile.supportedMeteringProfiles must not contain duplicate meteringProfileId values.");
93
95
  }
94
- const spotLink = requireRecord(record.spotFocusPointLinkage, "genericBodyMeteringCapabilityProfile.spotFocusPointLinkage");
96
+ const spotLink = requireRecord(record.spotFocusPointLinkage, "genericBodyMeteringCapabilityProfile.spotFocusPointLinkage", ["availability", "evidence"]);
95
97
  return {
96
98
  schemaVersion: GENERIC_BODY_METERING_CAPABILITY_SCHEMA_VERSION,
97
99
  profileId: requireNonEmptyString(record.profileId, "genericBodyMeteringCapabilityProfile.profileId"),
@@ -108,10 +110,11 @@ export function parseGenericBodyMeteringCapabilityProfile(value) {
108
110
  /**
109
111
  * Checks whether one engine metering profile is selectable on a generic body.
110
112
  *
111
- * Calibration/target policy remains authoritative in the metering profile and
112
- * is never copied into equipment capability metadata.
113
+ * The metering profile stays the single source of its calibration and target
114
+ * policy. They are never copied into equipment capability metadata.
113
115
  */
114
116
  export function assessExposureMeteringProfileCompatibility(input) {
117
+ requireInputKeys(input, "assessExposureMeteringProfileCompatibility", ["bodyCapabilities", "meteringProfile"]);
115
118
  const body = parseGenericBodyMeteringCapabilityProfile(input.bodyCapabilities);
116
119
  const metering = parseExposureMeteringProfile(input.meteringProfile);
117
120
  const declared = body.supportedMeteringProfiles.find((entry) => entry.meteringProfileId ===
@@ -1 +1 @@
1
- {"version":3,"file":"metering-capabilities.js","sourceRoot":"","sources":["../../src/equipment/metering-capabilities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metering-capabilities.js","sourceRoot":"","sources":["../../src/equipment/metering-capabilities.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Metering capabilities of a generic body: which of the engine's metering profiles and modes it can\n * select.\n *\n * This profile deliberately does not copy target or calibration values from those metering profiles.\n * The metering profile stays the single source of its calibration and target policy.\n * @see docs/GENERIC_TIER_PRESETS.md for the equations, units, coordinate conventions, known blockers\n * and support limits.\n */\n\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport {\n parseEvidenceList,\n type EvidenceProvenance\n} from \"../core/evidence-provenance.js\";\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport {\n parseExposureMeteringProfile,\n type ExposureMeteringPolicy,\n type ExposureMeteringProfile\n} from \"../exposure/metering.js\";\nimport type { GenericCapabilityAvailability } from \"./exposure-capabilities.js\";\nimport { requireInputKeys, rejectUnknownFields } from \"../core/record-validation.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport const GENERIC_BODY_METERING_CAPABILITY_SCHEMA_VERSION =\n \"0.1.0\" as const;\n\nexport interface GenericSupportedMeteringProfile {\n meteringProfileId: string;\n policyKind: ExposureMeteringPolicy[\"kind\"];\n evidence: readonly EvidenceProvenance[];\n}\n\nexport interface GenericBodyMeteringCapabilityProfile {\n schemaVersion:\n typeof GENERIC_BODY_METERING_CAPABILITY_SCHEMA_VERSION;\n profileId: string;\n profileVersion: string;\n scientificStatus: \"approximation\";\n evidence: readonly EvidenceProvenance[];\n supportedMeteringProfiles:\n readonly GenericSupportedMeteringProfile[];\n spotFocusPointLinkage: {\n availability: GenericCapabilityAvailability;\n evidence: readonly EvidenceProvenance[];\n };\n}\n\nexport type MeteringCapabilityCompatibilityBlocker =\n | \"metering-profile-unsupported\"\n | \"metering-policy-mismatch\";\n\nexport interface MeteringCapabilityCompatibilityAssessment {\n schemaVersion:\n typeof GENERIC_BODY_METERING_CAPABILITY_SCHEMA_VERSION;\n status: \"compatible\" | \"blocked\";\n bodyProfile: {\n profileId: string;\n profileVersion: string;\n };\n meteringProfile: {\n profileId: string;\n policyKind: ExposureMeteringPolicy[\"kind\"];\n };\n targetPolicyOwnership: \"metering-profile\";\n targetCalibrationDuplicatedInEquipmentProfile: false;\n spotFocusPointLinkageAvailability:\n GenericCapabilityAvailability;\n blockers:\n readonly MeteringCapabilityCompatibilityBlocker[];\n}\n\nexport interface AssessExposureMeteringProfileCompatibilityInput {\n bodyCapabilities:\n GenericBodyMeteringCapabilityProfile;\n meteringProfile:\n ExposureMeteringProfile;\n}\n\nconst POLICY_KINDS =\n new Set<ExposureMeteringPolicy[\"kind\"]>([\n \"multi-zone-uniform\",\n \"center-weighted-radial\",\n \"spot\",\n \"highlight-weighted\",\n \"highlight-priority\"\n ]);\n\nfunction requireRecord(\n value: unknown,\n path: string,\n allowedKeys: readonly string[] | null\n): UnknownRecord {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value)\n ) {\n throw new InvalidConfigurationError(\n path + \" must be an object.\"\n );\n }\n if (allowedKeys !== null) rejectUnknownFields(value, allowedKeys, path);\n return value as UnknownRecord;\n}\n\nfunction requireNonEmptyString(\n value: unknown,\n path: string\n): string {\n if (\n typeof value !== \"string\" ||\n value.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n path + \" must be a non-empty string.\"\n );\n }\n return value.trim();\n}\n\nfunction parseAvailability(\n value: unknown,\n path: string\n): GenericCapabilityAvailability {\n if (\n value !== \"supported\" &&\n value !== \"unsupported\" &&\n value !== \"unknown\"\n ) {\n throw new InvalidConfigurationError(\n path + \" is invalid.\"\n );\n }\n return value;\n}\n\nfunction parsePolicyKind(\n value: unknown,\n path: string\n): ExposureMeteringPolicy[\"kind\"] {\n if (\n typeof value !== \"string\" ||\n !POLICY_KINDS.has(\n value as ExposureMeteringPolicy[\"kind\"]\n )\n ) {\n throw new InvalidConfigurationError(\n path + \" is invalid.\"\n );\n }\n return value as ExposureMeteringPolicy[\"kind\"];\n}\n\n/**\n * Parses generic body metering capability metadata.\n *\n * This profile declares which of the engine's metering profiles and modes a\n * generic body can select. It deliberately does not copy target or\n * calibration values from those metering profiles.\n */\nexport function parseGenericBodyMeteringCapabilityProfile(\n value: unknown\n): GenericBodyMeteringCapabilityProfile {\n const record = requireRecord(\n value,\n \"genericBodyMeteringCapabilityProfile\", [\"schemaVersion\", \"scientificStatus\", \"supportedMeteringProfiles\", \"spotFocusPointLinkage\", \"profileId\", \"profileVersion\", \"evidence\"]\n );\n\n if (\n record.schemaVersion !==\n GENERIC_BODY_METERING_CAPABILITY_SCHEMA_VERSION\n ) {\n throw new InvalidConfigurationError(\n 'genericBodyMeteringCapabilityProfile.schemaVersion must be \"' +\n GENERIC_BODY_METERING_CAPABILITY_SCHEMA_VERSION +\n '\".'\n );\n }\n if (\n record.scientificStatus !==\n \"approximation\"\n ) {\n throw new InvalidConfigurationError(\n 'genericBodyMeteringCapabilityProfile.scientificStatus must be \"approximation\".'\n );\n }\n\n if (\n !Array.isArray(\n record.supportedMeteringProfiles\n ) ||\n record.supportedMeteringProfiles\n .length === 0\n ) {\n throw new InvalidConfigurationError(\n \"genericBodyMeteringCapabilityProfile.supportedMeteringProfiles must be a non-empty array.\"\n );\n }\n\n const supported =\n record.supportedMeteringProfiles.map(\n (entry, index) => {\n const path =\n \"genericBodyMeteringCapabilityProfile.supportedMeteringProfiles[\" +\n index +\n \"]\";\n const item =\n requireRecord(entry, path, [\"meteringProfileId\", \"policyKind\", \"evidence\"]);\n return {\n meteringProfileId:\n requireNonEmptyString(\n item.meteringProfileId,\n path + \".meteringProfileId\"\n ),\n policyKind:\n parsePolicyKind(\n item.policyKind,\n path + \".policyKind\"\n ),\n evidence:\n parseEvidenceList(\n item.evidence,\n path + \".evidence\"\n )\n };\n }\n );\n\n const ids =\n supported.map(\n (entry) =>\n entry.meteringProfileId\n );\n if (\n new Set(ids).size !==\n ids.length\n ) {\n throw new InvalidConfigurationError(\n \"genericBodyMeteringCapabilityProfile.supportedMeteringProfiles must not contain duplicate meteringProfileId values.\"\n );\n }\n\n const spotLink =\n requireRecord(\n record.spotFocusPointLinkage,\n \"genericBodyMeteringCapabilityProfile.spotFocusPointLinkage\", [\"availability\", \"evidence\"]\n );\n\n return {\n schemaVersion:\n GENERIC_BODY_METERING_CAPABILITY_SCHEMA_VERSION,\n profileId:\n requireNonEmptyString(\n record.profileId,\n \"genericBodyMeteringCapabilityProfile.profileId\"\n ),\n profileVersion:\n requireNonEmptyString(\n record.profileVersion,\n \"genericBodyMeteringCapabilityProfile.profileVersion\"\n ),\n scientificStatus:\n \"approximation\",\n evidence:\n parseEvidenceList(\n record.evidence,\n \"genericBodyMeteringCapabilityProfile.evidence\"\n ),\n supportedMeteringProfiles:\n supported,\n spotFocusPointLinkage: {\n availability:\n parseAvailability(\n spotLink.availability,\n \"genericBodyMeteringCapabilityProfile.spotFocusPointLinkage.availability\"\n ),\n evidence:\n parseEvidenceList(\n spotLink.evidence,\n \"genericBodyMeteringCapabilityProfile.spotFocusPointLinkage.evidence\"\n )\n }\n };\n}\n\n/**\n * Checks whether one engine metering profile is selectable on a generic body.\n *\n * The metering profile stays the single source of its calibration and target\n * policy. They are never copied into equipment capability metadata.\n */\nexport function assessExposureMeteringProfileCompatibility(\n input:\n AssessExposureMeteringProfileCompatibilityInput\n): MeteringCapabilityCompatibilityAssessment {\n requireInputKeys(input, \"assessExposureMeteringProfileCompatibility\", [\"bodyCapabilities\", \"meteringProfile\"]);\n const body =\n parseGenericBodyMeteringCapabilityProfile(\n input.bodyCapabilities\n );\n const metering =\n parseExposureMeteringProfile(\n input.meteringProfile\n );\n\n const declared =\n body.supportedMeteringProfiles.find(\n (entry) =>\n entry.meteringProfileId ===\n metering.profileId\n );\n\n const blockers:\n MeteringCapabilityCompatibilityBlocker[] =\n [];\n\n if (declared === undefined) {\n blockers.push(\n \"metering-profile-unsupported\"\n );\n } else if (\n declared.policyKind !==\n metering.policy.kind\n ) {\n blockers.push(\n \"metering-policy-mismatch\"\n );\n }\n\n if (\n blockers.length >\n new Set(blockers).size\n ) {\n throw new InvalidScientificInputError(\n \"Metering capability compatibility blockers must remain unique.\"\n );\n }\n\n return {\n schemaVersion:\n GENERIC_BODY_METERING_CAPABILITY_SCHEMA_VERSION,\n status:\n blockers.length === 0\n ? \"compatible\"\n : \"blocked\",\n bodyProfile: {\n profileId: body.profileId,\n profileVersion:\n body.profileVersion\n },\n meteringProfile: {\n profileId:\n metering.profileId,\n policyKind:\n metering.policy.kind\n },\n targetPolicyOwnership:\n \"metering-profile\",\n targetCalibrationDuplicatedInEquipmentProfile:\n false,\n spotFocusPointLinkageAvailability:\n body.spotFocusPointLinkage\n .availability,\n blockers\n };\n}\n"]}
@@ -25,9 +25,8 @@ export interface GenericReleaseCapabilityProfile {
25
25
  /**
26
26
  * Parses generic logical-release/drive capabilities.
27
27
  *
28
- * The first schema deliberately models non-overlapping ordinary still
29
- * exposures only. Buffer/media/thermal slowdown and pre-release capture remain
30
- * outside this profile.
28
+ * The first schema deliberately models only ordinary still exposures that do
29
+ * not overlap. Slowdown from the buffer, media or heat, and pre-release
30
+ * capture, are not part of this profile.
31
31
  */
32
32
  export declare function parseGenericReleaseCapabilityProfile(value: unknown): GenericReleaseCapabilityProfile;
33
- //# sourceMappingURL=release-capabilities.d.ts.map
@@ -1,12 +1,14 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Parses generic logical-release/drive capabilities. The first schema deliberately models
5
- * non-overlapping ordinary still exposures only. Buffer/media/thermal slowdown and pre-release capture
6
- * remain outside this profile.
7
- * @see docs/GENERIC_TIER_PRESETS.md for equations, coordinate/unit conventions, blockers and support
8
- * limits.
3
+ * Release and drive capabilities of a generic body: what happens when the shutter button is pressed
4
+ * (single shot, burst, self-timer, and exposure brackets).
5
+ *
6
+ * The first schema deliberately models only ordinary still exposures that do not overlap. Slowdown
7
+ * from the buffer, media or heat, and pre-release capture, are not part of this profile.
8
+ * @see docs/GENERIC_TIER_PRESETS.md for the equations, units, coordinate conventions, known blockers
9
+ * and support limits.
9
10
  */
11
+ import { rejectUnknownFields } from "../core/record-validation.js";
10
12
  import { InvalidConfigurationError } from "../core/configuration-error.js";
11
13
  import { parseEvidenceList } from "../core/evidence-provenance.js";
12
14
  export const GENERIC_RELEASE_CAPABILITY_SCHEMA_VERSION = "0.1.0";
@@ -20,12 +22,14 @@ const BRACKET_AXES = new Set([
20
22
  "iso",
21
23
  "aperture"
22
24
  ]);
23
- function requireRecord(value, path) {
25
+ function requireRecord(value, path, allowedKeys) {
24
26
  if (typeof value !== "object" ||
25
27
  value === null ||
26
28
  Array.isArray(value)) {
27
29
  throw new InvalidConfigurationError(path + " must be an object.");
28
30
  }
31
+ if (allowedKeys !== null)
32
+ rejectUnknownFields(value, allowedKeys, path);
29
33
  return value;
30
34
  }
31
35
  function requireNonEmptyString(value, path) {
@@ -71,7 +75,7 @@ function parseAvailability(value, path) {
71
75
  return value;
72
76
  }
73
77
  function parseFact(value, path, parseValue) {
74
- const record = requireRecord(value, path);
78
+ const record = requireRecord(value, path, ["value", "evidence"]);
75
79
  return {
76
80
  value: parseValue(record.value, path + ".value"),
77
81
  evidence: parseEvidenceList(record.evidence, path + ".evidence")
@@ -124,12 +128,12 @@ function parseBracketAxes(value, path) {
124
128
  /**
125
129
  * Parses generic logical-release/drive capabilities.
126
130
  *
127
- * The first schema deliberately models non-overlapping ordinary still
128
- * exposures only. Buffer/media/thermal slowdown and pre-release capture remain
129
- * outside this profile.
131
+ * The first schema deliberately models only ordinary still exposures that do
132
+ * not overlap. Slowdown from the buffer, media or heat, and pre-release
133
+ * capture, are not part of this profile.
130
134
  */
131
135
  export function parseGenericReleaseCapabilityProfile(value) {
132
- const record = requireRecord(value, "genericReleaseCapabilityProfile");
136
+ const record = requireRecord(value, "genericReleaseCapabilityProfile", ["schemaVersion", "scientificStatus", "overlappingOrdinaryStillExposures", "exposureBracketing", "focusBracketing", "profileId", "profileVersion", "evidence", "supportedDriveModes", "maximumLogicalFramesPerSequence", "maximumCadenceFps", "minimumInterFrameGapSeconds"]);
133
137
  if (record.schemaVersion !==
134
138
  GENERIC_RELEASE_CAPABILITY_SCHEMA_VERSION) {
135
139
  throw new InvalidConfigurationError('genericReleaseCapabilityProfile.schemaVersion must be "' +
@@ -144,8 +148,8 @@ export function parseGenericReleaseCapabilityProfile(value) {
144
148
  false) {
145
149
  throw new InvalidConfigurationError("genericReleaseCapabilityProfile.overlappingOrdinaryStillExposures must be false in schema 0.1.0.");
146
150
  }
147
- const exposureBracketing = requireRecord(record.exposureBracketing, "genericReleaseCapabilityProfile.exposureBracketing");
148
- const focusBracketing = requireRecord(record.focusBracketing, "genericReleaseCapabilityProfile.focusBracketing");
151
+ const exposureBracketing = requireRecord(record.exposureBracketing, "genericReleaseCapabilityProfile.exposureBracketing", ["availability", "supportedAxes"]);
152
+ const focusBracketing = requireRecord(record.focusBracketing, "genericReleaseCapabilityProfile.focusBracketing", ["availability"]);
149
153
  const exposureAvailability = parseFact(exposureBracketing.availability, "genericReleaseCapabilityProfile.exposureBracketing.availability", parseAvailability);
150
154
  const axes = parseBracketAxes(exposureBracketing.supportedAxes, "genericReleaseCapabilityProfile.exposureBracketing.supportedAxes");
151
155
  if (exposureAvailability.value !==
@@ -1 +1 @@
1
- {"version":3,"file":"release-capabilities.js","sourceRoot":"","sources":["../../src/equipment/release-capabilities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"release-capabilities.js","sourceRoot":"","sources":["../../src/equipment/release-capabilities.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Release and drive capabilities of a generic body: what happens when the shutter button is pressed\n * (single shot, burst, self-timer, and exposure brackets).\n *\n * The first schema deliberately models only ordinary still exposures that do not overlap. Slowdown\n * from the buffer, media or heat, and pre-release capture, are not part of this profile.\n * @see docs/GENERIC_TIER_PRESETS.md for the equations, units, coordinate conventions, known blockers\n * and support limits.\n */\n\nimport { rejectUnknownFields } from \"../core/record-validation.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport {\n parseEvidenceList,\n type EvidenceBackedFact,\n type EvidenceProvenance\n} from \"../core/evidence-provenance.js\";\nimport type { GenericCapabilityAvailability } from \"./exposure-capabilities.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport const GENERIC_RELEASE_CAPABILITY_SCHEMA_VERSION =\n \"0.1.0\" as const;\n\nexport type GenericReleaseDriveMode =\n | \"single\"\n | \"burst\"\n | \"self-timer\";\n\nexport type GenericExposureBracketAxis =\n | \"shutter\"\n | \"iso\"\n | \"aperture\";\n\nexport interface GenericReleaseCapabilityProfile {\n schemaVersion:\n typeof GENERIC_RELEASE_CAPABILITY_SCHEMA_VERSION;\n profileId: string;\n profileVersion: string;\n scientificStatus: \"approximation\";\n evidence: readonly EvidenceProvenance[];\n supportedDriveModes:\n EvidenceBackedFact<\n readonly GenericReleaseDriveMode[]\n >;\n maximumLogicalFramesPerSequence:\n EvidenceBackedFact<number>;\n maximumCadenceFps:\n EvidenceBackedFact<number>;\n minimumInterFrameGapSeconds:\n EvidenceBackedFact<number>;\n overlappingOrdinaryStillExposures:\n false;\n exposureBracketing: {\n availability:\n EvidenceBackedFact<\n GenericCapabilityAvailability\n >;\n supportedAxes:\n readonly GenericExposureBracketAxis[];\n };\n focusBracketing: {\n availability:\n EvidenceBackedFact<\n GenericCapabilityAvailability\n >;\n };\n}\n\nconst DRIVE_MODES =\n new Set<GenericReleaseDriveMode>([\n \"single\",\n \"burst\",\n \"self-timer\"\n ]);\n\nconst BRACKET_AXES =\n new Set<GenericExposureBracketAxis>([\n \"shutter\",\n \"iso\",\n \"aperture\"\n ]);\n\nfunction requireRecord(\n value: unknown,\n path: string,\n allowedKeys: readonly string[] | null\n): UnknownRecord {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value)\n ) {\n throw new InvalidConfigurationError(\n path + \" must be an object.\"\n );\n }\n if (allowedKeys !== null) rejectUnknownFields(value, allowedKeys, path);\n return value as UnknownRecord;\n}\n\nfunction requireNonEmptyString(\n value: unknown,\n path: string\n): string {\n if (\n typeof value !== \"string\" ||\n value.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n path + \" must be a non-empty string.\"\n );\n }\n return value.trim();\n}\n\nfunction requirePositiveFinite(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value) ||\n value <= 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must be finite and greater than zero.\"\n );\n }\n return value;\n}\n\nfunction requireNonNegativeFinite(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value) ||\n value < 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must be finite and greater than or equal to zero.\"\n );\n }\n return value;\n}\n\nfunction requirePositiveSafeInteger(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isSafeInteger(value) ||\n value <= 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must be a positive safe integer.\"\n );\n }\n return value;\n}\n\nfunction parseAvailability(\n value: unknown,\n path: string\n): GenericCapabilityAvailability {\n if (\n value !== \"supported\" &&\n value !== \"unsupported\" &&\n value !== \"unknown\"\n ) {\n throw new InvalidConfigurationError(\n path + \" is invalid.\"\n );\n }\n return value;\n}\n\nfunction parseFact<T>(\n value: unknown,\n path: string,\n parseValue: (\n value: unknown,\n path: string\n ) => T\n): EvidenceBackedFact<T> {\n const record =\n requireRecord(value, path, [\"value\", \"evidence\"]);\n return {\n value:\n parseValue(\n record.value,\n path + \".value\"\n ),\n evidence:\n parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n}\n\nfunction parseDriveModes(\n value: unknown,\n path: string\n): readonly GenericReleaseDriveMode[] {\n if (\n !Array.isArray(value) ||\n value.length === 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must be a non-empty array.\"\n );\n }\n const parsed =\n value.map((entry, index) => {\n if (\n typeof entry !== \"string\" ||\n !DRIVE_MODES.has(\n entry as GenericReleaseDriveMode\n )\n ) {\n throw new InvalidConfigurationError(\n path +\n \"[\" +\n index +\n \"] is invalid.\"\n );\n }\n return entry as GenericReleaseDriveMode;\n });\n if (\n new Set(parsed).size !==\n parsed.length\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must not contain duplicates.\"\n );\n }\n return parsed;\n}\n\nfunction parseBracketAxes(\n value: unknown,\n path: string\n): readonly GenericExposureBracketAxis[] {\n if (!Array.isArray(value)) {\n throw new InvalidConfigurationError(\n path + \" must be an array.\"\n );\n }\n const parsed =\n value.map((entry, index) => {\n if (\n typeof entry !== \"string\" ||\n !BRACKET_AXES.has(\n entry as GenericExposureBracketAxis\n )\n ) {\n throw new InvalidConfigurationError(\n path +\n \"[\" +\n index +\n \"] is invalid.\"\n );\n }\n return entry as GenericExposureBracketAxis;\n });\n if (\n new Set(parsed).size !==\n parsed.length\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must not contain duplicates.\"\n );\n }\n return parsed;\n}\n\n/**\n * Parses generic logical-release/drive capabilities.\n *\n * The first schema deliberately models only ordinary still exposures that do\n * not overlap. Slowdown from the buffer, media or heat, and pre-release\n * capture, are not part of this profile.\n */\nexport function parseGenericReleaseCapabilityProfile(\n value: unknown\n): GenericReleaseCapabilityProfile {\n const record =\n requireRecord(\n value,\n \"genericReleaseCapabilityProfile\", [\"schemaVersion\", \"scientificStatus\", \"overlappingOrdinaryStillExposures\", \"exposureBracketing\", \"focusBracketing\", \"profileId\", \"profileVersion\", \"evidence\", \"supportedDriveModes\", \"maximumLogicalFramesPerSequence\", \"maximumCadenceFps\", \"minimumInterFrameGapSeconds\"]\n );\n\n if (\n record.schemaVersion !==\n GENERIC_RELEASE_CAPABILITY_SCHEMA_VERSION\n ) {\n throw new InvalidConfigurationError(\n 'genericReleaseCapabilityProfile.schemaVersion must be \"' +\n GENERIC_RELEASE_CAPABILITY_SCHEMA_VERSION +\n '\".'\n );\n }\n if (\n record.scientificStatus !==\n \"approximation\"\n ) {\n throw new InvalidConfigurationError(\n 'genericReleaseCapabilityProfile.scientificStatus must be \"approximation\".'\n );\n }\n if (\n record.overlappingOrdinaryStillExposures !==\n false\n ) {\n throw new InvalidConfigurationError(\n \"genericReleaseCapabilityProfile.overlappingOrdinaryStillExposures must be false in schema 0.1.0.\"\n );\n }\n\n const exposureBracketing =\n requireRecord(\n record.exposureBracketing,\n \"genericReleaseCapabilityProfile.exposureBracketing\", [\"availability\", \"supportedAxes\"]\n );\n const focusBracketing =\n requireRecord(\n record.focusBracketing,\n \"genericReleaseCapabilityProfile.focusBracketing\", [\"availability\"]\n );\n\n const exposureAvailability =\n parseFact(\n exposureBracketing.availability,\n \"genericReleaseCapabilityProfile.exposureBracketing.availability\",\n parseAvailability\n );\n const axes =\n parseBracketAxes(\n exposureBracketing.supportedAxes,\n \"genericReleaseCapabilityProfile.exposureBracketing.supportedAxes\"\n );\n\n if (\n exposureAvailability.value !==\n \"supported\" &&\n axes.length > 0\n ) {\n throw new InvalidConfigurationError(\n \"Unsupported/unknown exposure bracketing must not declare supported axes.\"\n );\n }\n\n return {\n schemaVersion:\n GENERIC_RELEASE_CAPABILITY_SCHEMA_VERSION,\n profileId:\n requireNonEmptyString(\n record.profileId,\n \"genericReleaseCapabilityProfile.profileId\"\n ),\n profileVersion:\n requireNonEmptyString(\n record.profileVersion,\n \"genericReleaseCapabilityProfile.profileVersion\"\n ),\n scientificStatus:\n \"approximation\",\n evidence:\n parseEvidenceList(\n record.evidence,\n \"genericReleaseCapabilityProfile.evidence\"\n ),\n supportedDriveModes:\n parseFact(\n record.supportedDriveModes,\n \"genericReleaseCapabilityProfile.supportedDriveModes\",\n parseDriveModes\n ),\n maximumLogicalFramesPerSequence:\n parseFact(\n record.maximumLogicalFramesPerSequence,\n \"genericReleaseCapabilityProfile.maximumLogicalFramesPerSequence\",\n requirePositiveSafeInteger\n ),\n maximumCadenceFps:\n parseFact(\n record.maximumCadenceFps,\n \"genericReleaseCapabilityProfile.maximumCadenceFps\",\n requirePositiveFinite\n ),\n minimumInterFrameGapSeconds:\n parseFact(\n record.minimumInterFrameGapSeconds,\n \"genericReleaseCapabilityProfile.minimumInterFrameGapSeconds\",\n requireNonNegativeFinite\n ),\n overlappingOrdinaryStillExposures:\n false,\n exposureBracketing: {\n availability:\n exposureAvailability,\n supportedAxes: axes\n },\n focusBracketing: {\n availability:\n parseFact(\n focusBracketing.availability,\n \"genericReleaseCapabilityProfile.focusBracketing.availability\",\n parseAvailability\n )\n }\n };\n}\n"]}
@@ -1,12 +1,15 @@
1
1
  /**
2
- * Module boundary and integration notes.
3
- * Resolves shutter-duration control semantics to a concrete positive elapsed duration before physical
4
- * exposure integration. Bulb and Time are control behaviors only. Neither implies a shutter mechanism,
5
- * exposure-boundary topology, tripod, stabilization state, long exposure NR, or temperature model.
6
- * Binds a resolved duration into the authoritative #12 exposure-window input. The existing shutter
7
- * mechanism/opening/closing schedules remain untouched. Only the seconds-valued nominal duration is
8
- * supplied here.
9
- * @see docs/USAGE.md for equations, coordinate/unit conventions, blockers and support limits.
2
+ * Shutter-duration control. Turns a control setting (a timed value, Bulb or Time) into a concrete,
3
+ * positive elapsed duration, before the physical exposure is integrated.
4
+ *
5
+ * Bulb and Time are only control behaviours. Neither implies a shutter mechanism, an exposure-boundary
6
+ * layout, a tripod, a stabilization state, long-exposure noise reduction (NR) or a temperature model.
7
+ *
8
+ * The binding function puts a resolved duration into the capture exposure-window input. The existing
9
+ * shutter mechanism and opening/closing schedules are left as they are. Only the nominal duration, in
10
+ * seconds, is supplied.
11
+ * @see docs/USAGE.md for the equations, units, coordinate conventions, known blockers and support
12
+ * limits.
10
13
  */
11
14
  import { type EvidenceProvenance } from "../core/evidence-provenance.js";
12
15
  import type { CalculateCaptureExposureWindowsInput } from "../sensor/exposure-window.js";
@@ -53,20 +56,19 @@ export interface BindResolvedExposureDurationToCaptureExposureInput {
53
56
  exposureWindowInput: Omit<CalculateCaptureExposureWindowsInput, "nominalExposureDurationSeconds">;
54
57
  }
55
58
  /**
56
- * Resolves shutter-duration control semantics to a concrete positive elapsed
57
- * duration before physical exposure integration.
59
+ * Turns a shutter-duration control setting into a concrete, positive elapsed
60
+ * duration, before the physical exposure is integrated.
58
61
  *
59
- * Bulb and Time are control behaviors only. Neither implies a shutter
60
- * mechanism, exposure-boundary topology, tripod, stabilization state, long
61
- * exposure NR, or temperature model.
62
+ * Bulb and Time are only control behaviours. Neither implies a shutter
63
+ * mechanism, an exposure-boundary layout, a tripod, a stabilization state,
64
+ * long-exposure noise reduction (NR) or a temperature model.
62
65
  */
63
66
  export declare function resolveExposureDurationControl(control: ExposureDurationControl): ExposureDurationControlResolution;
64
67
  /**
65
- * Binds a resolved duration into the authoritative #12 exposure-window input.
68
+ * Puts a resolved duration into the capture exposure-window input.
66
69
  *
67
- * The existing shutter mechanism/opening/closing schedules remain untouched.
68
- * Only the seconds-valued nominal duration is supplied here.
70
+ * The existing shutter mechanism and opening/closing schedules are left as
71
+ * they are. Only the nominal duration, in seconds, is supplied.
69
72
  */
70
73
  export declare function bindResolvedExposureDurationToCaptureExposureInput(input: BindResolvedExposureDurationToCaptureExposureInput): CalculateCaptureExposureWindowsInput;
71
74
  export {};
72
- //# sourceMappingURL=exposure-duration-control.d.ts.map