コード例 #1
0
 public static function run($pluginsInitCode, Kwf_SourceMaps_SourceMap $sourcemap)
 {
     $js = "\n            require('es6-promise').polyfill(); //required for older nodejs\n            var postcss = require('postcss');\n            var plugins = [];\n            " . $pluginsInitCode . "\n            var instance = postcss( plugins );\n            var css = '';\n            process.stdin.setEncoding('utf-8')\n            process.stdin.on('data', function(buf) { css += buf.toString(); });\n            process.stdin.on('end', function() {\n                instance.process(css).then(function (result) {\n                    process.stdout.write(result.css);\n                }).catch(function(e) {\n                    console.log(e);\n                    process.exit(1);\n                });\n            });\n            process.stdin.resume();\n        ";
     $runfile = tempnam("temp/", 'postcss');
     file_put_contents($runfile, $js);
     putenv("NODE_PATH=" . getcwd() . "/node_modules" . PATH_SEPARATOR . getcwd() . "/" . KWF_PATH . PATH_SEPARATOR . getcwd() . "/");
     $cmd = getcwd() . "/" . VENDOR_PATH . "/bin/node " . $runfile;
     $cmd .= " 2>&1";
     $process = new Symfony\Component\Process\Process($cmd);
     $mapData = $sourcemap->getMapContentsData(false);
     $hasSourcemap = !!$mapData->mappings;
     if ($hasSourcemap) {
         $process->setInput($sourcemap->getFileContentsInlineMap(false));
     } else {
         $process->setInput($sourcemap->getFileContents());
     }
     if ($process->run() !== 0) {
         throw new Kwf_Exception("Process '{$cmd}' failed with " . $process->getExitCode() . "\n" . $process->getOutput());
     }
     putenv("NODE_PATH=");
     unlink($runfile);
     $out = $process->getOutput();
     if (Kwf_SourceMaps_SourceMap::hasInline($out)) {
         $ret = Kwf_SourceMaps_SourceMap::createFromInline($out);
     } else {
         $ret = Kwf_SourceMaps_SourceMap::createEmptyMap($out);
         $ret->setMimeType('text/css');
     }
     $ret->setSources($sourcemap->getSources());
     return $ret;
 }
コード例 #2
0
 public function filter(Kwf_SourceMaps_SourceMap $sourcemap)
 {
     $temp = tempnam('temp/', 'commonjs');
     file_put_contents($temp, $sourcemap->getFileContents());
     $parsedFile = Kwf_Assets_CommonJs_ModuleDepsParser::parse($temp);
     unlink($temp);
     $newSourceMap = Kwf_SourceMaps_SourceMap::createEmptyMap($parsedFile['source']);
     if (isset($sourcemap->getMapContentsData(false)->{'_x_org_koala-framework_trlData'})) {
         $newSourceMap->getMapContentsData(false)->{'_x_org_koala-framework_trlData'} = $sourcemap->getMapContentsData(false)->{'_x_org_koala-framework_trlData'};
     }
     if (isset($sourcemap->getMapContentsData(false)->{'_x_org_koala-framework_masterFiles'})) {
         $newSourceMap->getMapContentsData(false)->{'_x_org_koala-framework_masterFiles'} = $sourcemap->getMapContentsData(false)->{'_x_org_koala-framework_masterFiles'};
     }
     return $newSourceMap;
 }
コード例 #3
0
 public function testStringReplaceMultipleInOneLine()
 {
     $map = new Kwf_SourceMaps_SourceMap(Kwf_SourceMaps_TestData::$testMap, Kwf_SourceMaps_TestData::$testGeneratedCode);
     $map->stringReplace('a', 'xbbbbxxxxxxxx');
     //0        1         2         3         4
     //1234567890123456789012345678901234567890123
     //   ONE.foo=function(a){return baz(a);};
     $s = " ONE.foo=function(xbbbbxxxxxxxx){return bxbbbbxxxxxxxxz(xbbbbxxxxxxxx);};\n" . " TWO.inc=function(xbbbbxxxxxxxx){return xbbbbxxxxxxxx+1;};";
     $this->assertEquals($map->getFileContents(), $s);
     $mappings = $map->getMappings();
     $this->assertEquals($mappings[3], array('generatedLine' => 1, 'generatedColumn' => 18, 'originalSource' => '/the/root/one.js', 'originalLine' => 1, 'originalColumn' => 21, 'originalName' => 'bar'));
     $this->assertEquals($mappings[4], array('generatedLine' => 1, 'generatedColumn' => 21 + 12, 'originalSource' => '/the/root/one.js', 'originalLine' => 2, 'originalColumn' => 3, 'originalName' => null));
     $this->assertEquals($mappings[5], array('generatedLine' => 1, 'generatedColumn' => 28 + 12, 'originalSource' => '/the/root/one.js', 'originalLine' => 2, 'originalColumn' => 10, 'originalName' => 'baz'));
     $this->assertEquals($mappings[6], array('generatedLine' => 1, 'generatedColumn' => 32 + 12 + 12, 'originalSource' => '/the/root/one.js', 'originalLine' => 2, 'originalColumn' => 14, 'originalName' => 'bar'));
     $this->assertEquals($mappings[10], array('generatedLine' => 2, 'generatedColumn' => 18, 'originalSource' => '/the/root/two.js', 'originalLine' => 1, 'originalColumn' => 21, 'originalName' => 'n'));
     $this->assertEquals($mappings[11], array('generatedLine' => 2, 'generatedColumn' => 21 + 12, 'originalSource' => '/the/root/two.js', 'originalLine' => 2, 'originalColumn' => 3, 'originalName' => null));
     $this->assertEquals($mappings[12], array('generatedLine' => 2, 'generatedColumn' => 28 + 12, 'originalSource' => '/the/root/two.js', 'originalLine' => 2, 'originalColumn' => 10, 'originalName' => 'n'));
 }
コード例 #4
0
 public function testConcatThree()
 {
     $map1 = new Kwf_SourceMaps_SourceMap(Kwf_SourceMaps_TestData::$testMap, Kwf_SourceMaps_TestData::$testGeneratedCode);
     $map2 = new Kwf_SourceMaps_SourceMap(Kwf_SourceMaps_TestData::$testMap, Kwf_SourceMaps_TestData::$testGeneratedCode);
     $map3 = new Kwf_SourceMaps_SourceMap(Kwf_SourceMaps_TestData::$testMap, Kwf_SourceMaps_TestData::$testGeneratedCode);
     $map1->concat($map2);
     $map1->concat($map3);
     $mappings = $map1->getMappings();
     $this->assertEquals(13 * 3, count($mappings));
     $this->assertEquals($mappings[0], array('generatedLine' => 1, 'generatedColumn' => 1, 'originalSource' => '/the/root/one.js', 'originalLine' => 1, 'originalColumn' => 1, 'originalName' => null));
     $this->assertEquals($mappings[12], array('generatedLine' => 2, 'generatedColumn' => 28, 'originalSource' => '/the/root/two.js', 'originalLine' => 2, 'originalColumn' => 10, 'originalName' => 'n'));
     $mappingsOffs = 13 * 2;
     $genLineOffs = 2 * 2;
     $this->assertEquals($mappings[$mappingsOffs + 0], array('generatedLine' => $genLineOffs + 1, 'generatedColumn' => 1, 'originalSource' => '/the/root/one.js', 'originalLine' => 1, 'originalColumn' => 1, 'originalName' => null));
     $this->assertEquals($mappings[$mappingsOffs + 12], array('generatedLine' => $genLineOffs + 2, 'generatedColumn' => 28, 'originalSource' => '/the/root/two.js', 'originalLine' => 2, 'originalColumn' => 10, 'originalName' => 'n'));
     $contents = $map1->getFileContents();
     $contents = explode("\n", $contents);
     $this->assertEquals(2 * 3, count($contents));
 }