src/AssetConfig.php
protected function resolveExtends()
    {
        $extend = [];
        foreach ($this->_targets as $name => $target) {
            if (empty($target['extend'])) {
                continue;
            }
            $parent = $target['extend'];
            if (empty($this->_targets[$parent])) {
                throw new RuntimeException("Invalid extend in '$name'. There is no '$parent' target defined.");
            }
            $extend[] = $name;
        }

        $expander = function ($target) use (&$expander, $extend) {
            $config = $this->_targets[$target];
            $parentConfig = false;

            // Recurse through parents to collect all config.
            if (in_array($target, $extend)) {
                $parentConfig = $expander($config['extend']);
            }
            if (!$parentConfig) {
                return $config;
            }
            $config['files'] = array_merge($parentConfig['files'], $config['files']);
            $config['filters'] = array_merge($parentConfig['filters'], $config['filters']);
            $config['theme'] = $parentConfig['theme'] || $config['theme'];
            return $config;
        };

        foreach ($extend as $target) {
            $this->_targets[$target] = $expander($target);
        }
    }
protected function resolveExtends()
    {
        $extend = [];
        foreach ($this->_targets as $name => $target) {
            if (empty($target['extend'])) {
                continue;
            }
            $parent = $target['extend'];
            if (empty($this->_targets[$parent])) {
                throw new RuntimeException("Invalid extend in '$name'. There is no '$parent' target defined.");
            }
            $extend[] = $name;
        }

        $expander = function ($target) use (&$expander, $extend) {
            $config = $this->_targets[$target];
            $parentConfig = false;

            // Recurse through parents to collect all config.
            if (in_array($target, $extend)) {
                $parentConfig = $expander($config['extend']);
            }
            if (!$parentConfig) {
                return $config;
            }
            $config['files'] = array_merge($parentConfig['files'], $config['files']);
            $config['filters'] = array_merge($parentConfig['filters'], $config['filters']);
            $config['theme'] = $parentConfig['theme'] || $config['theme'];
            return $config;
        };

        foreach ($extend as $target) {
            $this->_targets[$target] = $expander($target);
        }
    }
protected function resolveExtends ( ) { $ extend = [ ] ; foreach ( $ this -> _targets as $ name => $ target ) { if ( empty ( $ target [ 'extend' ] ) ) { continue ; } $ parent = $ target [ 'extend' ] ; if ( empty ( $ this -> _targets [ $ parent ] ) ) { throw new RuntimeException ( "Invalid extend in '$name'. There is no '$parent' target defined." ) ; } $ extend [ ] = $ name ; } $ expander = function ( $ target ) use ( & $ expander , $ extend ) { $ config = $ this -> _targets [ $ target ] ; $ parentConfig = false ; // Recurse through parents to collect all config. if ( in_array ( $ target , $ extend ) ) { $ parentConfig = $ expander ( $ config [ 'extend' ] ) ; } if ( ! $ parentConfig ) { return $ config ; } $ config [ 'files' ] = array_merge ( $ parentConfig [ 'files' ] , $ config [ 'files' ] ) ; $ config [ 'filters' ] = array_merge ( $ parentConfig [ 'filters' ] , $ config [ 'filters' ] ) ; $ config [ 'theme' ] = $ parentConfig [ 'theme' ] || $ config [ 'theme' ] ; return $ config ; } ; foreach ( $ extend as $ target ) { $ this -> _targets [ $ target ] = $ expander ( $ target ) ; } }
Once all targets have been built, resolve extend options.

@return void
@throws RuntimeException
Once all targets have been built resolve extend options .