| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- /**
- * @import {Space} from 'property-information'
- */
- import {Info} from './info.js'
- import * as types from './types.js'
- const checks = /** @type {ReadonlyArray<keyof typeof types>} */ (
- Object.keys(types)
- )
- export class DefinedInfo extends Info {
- /**
- * @constructor
- * @param {string} property
- * Property.
- * @param {string} attribute
- * Attribute.
- * @param {number | null | undefined} [mask]
- * Mask.
- * @param {Space | undefined} [space]
- * Space.
- * @returns
- * Info.
- */
- 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
- /**
- * @template {keyof DefinedInfo} Key
- * Key type.
- * @param {DefinedInfo} values
- * Info.
- * @param {Key} key
- * Key.
- * @param {DefinedInfo[Key]} value
- * Value.
- * @returns {undefined}
- * Nothing.
- */
- function mark(values, key, value) {
- if (value) {
- values[key] = value
- }
- }
|