/**
  * @internal
  */
 public static function _buildAll($componentClasses)
 {
     $masterLayouts = "\$all-master-layouts: ();\n";
     foreach (Kwc_Abstract::getComponentClasses() as $c) {
         if (Kwc_Abstract::hasSetting($c, 'masterLayout')) {
             $masterLayout = Kwc_Abstract::getSetting($c, 'masterLayout');
             $f = new Kwf_Assets_Dependency_File(Kwf_Assets_ProviderList_Default::getInstance(), $masterLayout['layoutConfig']);
             $masterLayouts .= $f->getContentsSourceString() . "\n";
             $masterLayouts .= "\$all-master-layouts: map-merge(\$all-master-layouts, \$master-layouts);\n";
         }
     }
     $masterLayouts .= "\$master-layouts: \$all-master-layouts;\n";
     $masterLayouts .= "\$all-master-layouts: null\n";
     $file = "temp/scss-generated/config/_master-layouts.scss";
     if (!is_dir(dirname($file))) {
         mkdir(dirname($file), 0777, true);
     }
     if (!file_exists($file) || file_get_contents($file) != $masterLayouts) {
         //only modify if actually changed
         file_put_contents($file, $masterLayouts);
     }
     foreach ($componentClasses as $cmp) {
         if (Kwc_Abstract::hasSetting($cmp, 'masterLayout')) {
             self::getInstance($cmp)->_build();
         }
     }
     foreach ($componentClasses as $cmp) {
         if (Kwc_Abstract::hasSetting($cmp, 'masterLayout')) {
             //fills $_supportedContexts and $_supportedBoxContexts
             self::getInstance($cmp)->getSupportedContexts();
             self::getInstance($cmp)->_getSupportedBoxesContexts();
         }
     }
     $data = array('contexts' => self::$_supportedContexts, 'boxContexts' => self::$_supportedBoxContexts);
     file_put_contents('build/component/masterlayoutcontexts', serialize($data));
 }
 private function _buildPackageContents($mimeType)
 {
     foreach ($this->_providerList->getProviders() as $provider) {
         $provider->initialize();
     }
     $packageMap = Kwf_SourceMaps_SourceMap::createEmptyMap('');
     if ($mimeType == 'text/css' || $mimeType == 'text/css; ie8') {
         $packageMap->setMimeType('text/css');
     } else {
         $packageMap->setMimeType('text/javascript');
     }
     $trlData = array();
     // ***** commonjs
     $commonJsData = $this->_getCommonJsData($mimeType);
     if ($commonJsData) {
         foreach ($commonJsData as &$i) {
             $data = $i['source']->getMapContentsData(false);
             if (isset($data->{'_x_org_koala-framework_trlData'})) {
                 $trlData = array_merge($trlData, $data->{'_x_org_koala-framework_trlData'});
             }
             $data->sourcesContent = $data->sources;
             //browser-pack needs sourcesContent, else it would ignore input source map. This is fake obviously and we'll drop it anyway after browser-pack finished
             if (isset($i['source']->getMapContentsData(false)->sources[0])) {
                 $i['sourceFile'] = $i['source']->getMapContentsData(false)->sources[0];
             }
             $i['source'] = $i['source']->getFileContentsInlineMap(false);
         }
         $contents = 'window.require = ' . Kwf_Assets_CommonJs_BrowserPack::pack(array_values($commonJsData));
         $map = Kwf_SourceMaps_SourceMap::createFromInline($contents);
         $fileContents = $map->getFileContents();
         $fileContents .= ";\n";
         $map->setFileContents($fileContents);
         $data = $map->getMapContentsData(false);
         unset($data->sourcesContent);
         //drop fake sourcesContent (see comment above)
         if ($data->sources[0] == 'node_modules/browser-pack/_prelude.js') {
             $data->sources[0] = '/assets/web/node_modules/browser-pack/_prelude.js';
         }
         $packageMap->concat($map);
     }
     // ***** non-commonjs, css
     $filterMimeType = $mimeType;
     if ($filterMimeType == 'text/css; ie8') {
         $filterMimeType = 'text/css';
     }
     foreach ($this->_getFilteredUniqueDependencies($filterMimeType) as $dep) {
         if ($dep->getIncludeInPackage()) {
             if (!(($mimeType == 'text/javascript' || $mimeType == 'text/javascript; defer') && $dep->isCommonJsEntry())) {
                 $map = $this->_getFilteredDependencyContents($dep, $mimeType);
                 $data = $map->getMapContentsData(false);
                 if (isset($data->{'_x_org_koala-framework_trlData'})) {
                     $trlData = array_merge($trlData, $data->{'_x_org_koala-framework_trlData'});
                 }
                 if (strpos($map->getFileContents(), "//@ sourceMappingURL=") !== false && strpos($map->getFileContents(), "//# sourceMappingURL=") !== false) {
                     throw new Kwf_Exception("contents must not contain sourceMappingURL");
                 }
                 $sourcesCount = 0;
                 $packageData = $packageMap->getMapContentsData(false);
                 if (isset($packageData->sources)) {
                     $sourcesCount = count($packageData->sources);
                 }
                 unset($packageData);
                 // $ret .= "/* *** $dep */\n"; // attention: commenting this in breaks source maps
                 $packageMap->concat($map);
                 if (isset($data->{'_x_org_koala-framework_sourcesContent'})) {
                     $packageMapData = $packageMap->getMapContentsData(false);
                     if (!isset($packageMapData->{'_x_org_koala-framework_sourcesContent'})) {
                         $packageMapData->{'_x_org_koala-framework_sourcesContent'} = array();
                     }
                     //copy sourcesContent to packageMap with $sourcesCount offset
                     foreach ($data->{'_x_org_koala-framework_sourcesContent'} as $k => $i) {
                         $packageMapData->{'_x_org_koala-framework_sourcesContent'}[$k + $sourcesCount] = $i;
                     }
                 }
             }
         }
     }
     if ($mimeType == 'text/javascript' || $mimeType == 'text/javascript; defer') {
         if ($uniquePrefix = Kwf_Config::getValue('application.uniquePrefix')) {
             $packageMap = Kwf_Assets_Package_Filter_UniquePrefix::filter($packageMap, $uniquePrefix);
         }
     }
     foreach ($this->getProviderList()->getFilters() as $filter) {
         if ($filter->getExecuteFor() == Kwf_Assets_Filter_Abstract::EXECUTE_FOR_PACKAGE && $filter->getMimeType() == $mimeType) {
             $packageMap = $filter->filter($packageMap);
         }
     }
     $data = $packageMap->getMapContentsData(false);
     $data->sourcesContent = array();
     foreach ($data->sources as $k => $i) {
         if (substr($i, 0, 8) != '/assets/') {
             throw new Kwf_Exception("Source path doesn't start with /assets/: {$i}");
         }
         $i = substr($i, 8);
         if (isset($data->{'_x_org_koala-framework_sourcesContent'}[$k])) {
             $data->sourcesContent[$k] = $data->{'_x_org_koala-framework_sourcesContent'}[$k];
         } else {
             $i = new Kwf_Assets_Dependency_File($this->_providerList, $i);
             $data->sourcesContent[$k] = $i->getContentsSourceString();
         }
     }
     return array('contents' => $packageMap, 'trlData' => $trlData);
 }