@@ -8,6 +8,9 @@ import {WHITES} from "../adapt.js";
8
8
/** @typedef {import("../types.js").Coords } Coords */
9
9
/** @typedef {import("../types.js").Matrix3x3 } Matrix3x3 */
10
10
/** @typedef {import("../types.js").Vector3 } Vector3 */
11
+ /** @typedef {import("../types.js").Cam16Object } Cam16Object */
12
+ /** @typedef {import("../types.js").Cam16Input } Cam16Input */
13
+ /** @typedef {import("../types.js").Cam16Environment } Cam16Environment */
11
14
12
15
const white = WHITES . D65 ;
13
16
const adaptedCoef = 0.42 ;
@@ -117,6 +120,7 @@ export function invHueQuadrature (H) {
117
120
* @param {number } backgroundLuminance
118
121
* @param {keyof typeof surroundMap } surround
119
122
* @param {boolean } discounting
123
+ * @returns {Cam16Environment }
120
124
*/
121
125
export function environment (
122
126
refWhite ,
@@ -146,11 +150,10 @@ export function environment (
146
150
const rgbW = multiply_v3_m3x3 ( xyzW , cat16 ) ;
147
151
148
152
// Surround: dark, dim, and average
149
- // @ts -expect-error surround is never used again
150
- surround = surroundMap [ env . surround ] ;
151
- const f = surround [ 0 ] ;
152
- env . c = surround [ 1 ] ;
153
- env . nc = surround [ 2 ] ;
153
+ let values = surroundMap [ env . surround ] ;
154
+ const f = values [ 0 ] ;
155
+ env . c = values [ 1 ] ;
156
+ env . nc = values [ 2 ] ;
154
157
155
158
const k = 1 / ( 5 * env . la + 1 ) ;
156
159
const k4 = k ** 4 ;
@@ -199,27 +202,28 @@ const viewingConditions = environment(
199
202
false ,
200
203
) ;
201
204
202
- /** @typedef {{J: number, C: number, h: number, s: number, Q: number, M: number, H: number} } Cam16Object */
203
205
204
206
/**
205
- * @param {Cam16Object } cam16
206
- * @param {Record<string, unknown> } env
207
+ * @param {Cam16Input } cam16
208
+ * @param {Cam16Environment } env
207
209
* @returns {[number, number, number] }
208
- * @todo Add types for `env`
209
210
*/
210
211
export function fromCam16 ( cam16 , env ) {
211
212
212
213
// These check ensure one, and only one attribute for a
213
214
// given category is provided.
215
+ // @ts -expect-error The '^` operator is not allowed for boolean types
214
216
if ( ! ( ( cam16 . J !== undefined ) ^ ( cam16 . Q !== undefined ) ) ) {
215
217
throw new Error ( "Conversion requires one and only one: 'J' or 'Q'" ) ;
216
218
}
217
219
220
+ // @ts -expect-error - The '^` operator is not allowed for boolean types
218
221
if ( ! ( ( cam16 . C !== undefined ) ^ ( cam16 . M !== undefined ) ^ ( cam16 . s !== undefined ) ) ) {
219
222
throw new Error ( "Conversion requires one and only one: 'C', 'M' or 's'" ) ;
220
223
}
221
224
222
225
// Hue is absolutely required
226
+ // @ts -expect-error - The '^` operator is not allowed for boolean types
223
227
if ( ! ( ( cam16 . h !== undefined ) ^ ( cam16 . H !== undefined ) ) ) {
224
228
throw new Error ( "Conversion requires one and only one: 'h' or 'H'" ) ;
225
229
}
@@ -302,9 +306,8 @@ export function fromCam16 (cam16, env) {
302
306
303
307
/**
304
308
* @param {[number, number, number] } xyzd65
305
- * @param {Record<string, unknown> } env
309
+ * @param {Cam16Environment } env
306
310
* @returns {Cam16Object }
307
- * @todo Add types for `env`
308
311
*/
309
312
export function toCam16 ( xyzd65 , env ) {
310
313
// Cone response
0 commit comments