import {Info} from './info.js' import * as types from './types.js' /** @type {Array} */ // @ts-expect-error: hush. const checks = Object.keys(types) export class DefinedInfo extends Info { /** * @constructor * @param {string} property * @param {string} attribute * @param {number|null} [mask] * @param {string} [space] */ constructor(property, attribute, mask, space) { let index = -1 super(property, attribute) mark(this, 'space', space) if (typeof mask === 'number') { while (++index < checks.length) { const check = checks[index] mark(this, checks[index], (mask & types[check]) === types[check]) } } } } DefinedInfo.prototype.defined = true /** * @param {DefinedInfo} values * @param {string} key * @param {unknown} value */ function mark(values, key, value) { if (value) { // @ts-expect-error: assume `value` matches the expected value of `key`. values[key] = value } }