lost+found/src/attributes.js
function _gpfDefAttr (name, base, definition) {
    var
        isAlias = name.charAt(0) === "$",
        fullName,
        result;
    if (isAlias) {
        name = name.substr(1);
        fullName = name + "Attribute";
    } else {
        fullName = name;
    }
    result = _gpfDefAttrBase(fullName, base, definition);
    if (isAlias) {
        _gpfAlias(result, name);
    }
    return result;
}
function _gpfDefAttr (name, base, definition) {
    var
        isAlias = name.charAt(0) === "$",
        fullName,
        result;
    if (isAlias) {
        name = name.substr(1);
        fullName = name + "Attribute";
    } else {
        fullName = name;
    }
    result = _gpfDefAttrBase(fullName, base, definition);
    if (isAlias) {
        _gpfAlias(result, name);
    }
    return result;
}
function _gpfDefAttr ( name , base , definition ) { var isAlias = name . charAt ( 0 ) === "$" , fullName , result ; if ( isAlias ) { name = name . substr ( 1 ) ; fullName = name + "Attribute" ; } else { fullName = name ; } result = _gpfDefAttrBase ( fullName , base , definition ) ; if ( isAlias ) { _gpfAlias ( result , name ) ; } return result ; }
gpf.define for attributes

@param {String} name Attribute name. If it contains a dot, it is treated as absolute contextual.
Otherwise, it is relative to "gpf.attributes". If starting with $ (and no dot), the contextual name will be the
"gpf.attributes." + name(without $) + "Attribute" and an alias is automatically created
@param {Function|string} [base=undefined] base Base attribute (or contextual name)
@param {Object} [definition=undefined] definition Attribute definition
@return {Function}
gpf . define for attributes