ker/mod/tfw.binding.property-manager.js
function readonly( target, attribs ) {
    const attribNames = Object.keys( attribs );
    attribNames.forEach( function ( attName ) {
        const attValue = attribs[ attName ];
        if ( typeof attValue === 'function' ) {
            Object.defineProperty(
                target,
                attName, {
                    set() {
                        throw Error( `Attribute "${attName}" is read only!` );
                    },
                    get: attValue,
                    configurable: false,
                    enumerable: true
                }
            );
        } else {
            Object.defineProperty(
                target,
                attName, {
                    value: attValue,
                    writable: false,
                    configurable: false,
                    enumerable: true
                }
            );
        }
    } );
}
function readonly( target, attribs ) {
    const attribNames = Object.keys( attribs );
    attribNames.forEach( function ( attName ) {
        const attValue = attribs[ attName ];
        if ( typeof attValue === 'function' ) {
            Object.defineProperty(
                target,
                attName, {
                    set() {
                        throw Error( `Attribute "${attName}" is read only!` );
                    },
                    get: attValue,
                    configurable: false,
                    enumerable: true
                }
            );
        } else {
            Object.defineProperty(
                target,
                attName, {
                    value: attValue,
                    writable: false,
                    configurable: false,
                    enumerable: true
                }
            );
        }
    } );
}
function readonly ( target , attribs ) { const attribNames = Object . keys ( attribs ) ; attribNames . forEach ( function ( attName ) { const attValue = attribs [ attName ] ; if ( typeof attValue === 'function' ) { Object . defineProperty ( target , attName , { set ( ) { throw Error ( ` ${ attName } ` ) ; } , get : attValue , configurable : false , enumerable : true } ) ; } else { Object . defineProperty ( target , attName , { value : attValue , writable : false , configurable : false , enumerable : true } ) ; } } ) ; }
Create a readonly attribute.

@param {object} target - Object which will bear the readonly attribute.
@param {object} attribs - Attributes with their values.
@returns {undefined}
Create a readonly attribute .