function flattenMixins(mixins, target, opts) {
    mixins.forEach(item => {
        if (typeof item === 'function') {
            item = item(true, opts); // return okam mixin definition
        }

        if (!item || typeof item !== 'object') {
            return;
        }

        let submixins = item.mixins;
        if (Array.isArray(submixins) && submixins.length) {
            item = Object.assign({}, item);
            flattenMixins(submixins, item, opts);
        }

        Object.keys(item).forEach(
            k => doMixin(target, item, k, opts)
        );
    });
}
function flattenMixins(mixins, target, opts) {
    mixins.forEach(item => {
        if (typeof item === 'function') {
            item = item(true, opts); 
        }

        if (!item || typeof item !== 'object') {
            return;
        }

        let submixins = item.mixins;
        if (Array.isArray(submixins) && submixins.length) {
            item = Object.assign({}, item);
            flattenMixins(submixins, item, opts);
        }

        Object.keys(item).forEach(
            k => doMixin(target, item, k, opts)
        );
    });
}
function flattenMixins ( mixins , target , opts ) { mixins . forEach ( item => { if ( typeof item === 'function' ) { item = item ( true , opts ) ; // return okam mixin definition } if ( ! item || typeof item !== 'object' ) { return ; } let submixins = item . mixins ; if ( Array . isArray ( submixins ) && submixins . length ) { item = Object . assign ( { } , item ) ; flattenMixins ( submixins , item , opts ) ; } Object . keys ( item ) . forEach ( k => doMixin ( target , item , k , opts ) ) ; } ) ; }
Flatten mixins for not support native behavior or Page mixins

@inner
@param {Array.<string|Object>} mixins the mixins
@param {Object} target the target component or behavior
@param {Object=} opts the mixin options
Flatten mixins for not support native behavior or Page mixins