/**
  * {@inheritdoc}
  */
 public function processSource($contents, FileSource $source)
 {
     $file = $source->getFileInfo();
     $contents = preg_replace_callback("'(\\Wurl\\s*\\()([^\\)]+)\\)'i", function (array $m) use($file) {
         $url = trim($m[2], '"\'');
         if (preg_match("'^[^:]+://.+'", $url)) {
             return $m[0];
         }
         $base = dirname($file->getPathname());
         $loc = $base . '/' . ltrim($url, '/\\');
         $loc = preg_replace("'[^/]+/\\.\\./'", '', $loc);
         $params = [];
         if (false !== strpos($loc, '?')) {
             list($loc, $tmp) = explode('?', $loc, 2);
             parse_str($tmp, $params);
         }
         if ($this->publisher->isPublic($loc)) {
             return $m[1] . "'" . $this->publisher->getResourceUri($loc, $params) . "')";
         }
         if (!is_file($loc)) {
             throw new \OutOfBoundsException(sprintf('Resource "%s" referenced by "%s" was not found', $loc, $file->getPathname()));
         }
         if (false === ($embed = @file_get_contents($loc))) {
             throw new \OutOfBoundsException(sprintf('Unable to load contents of resource "%s" embedded into "%s"', $loc, $file->getPathname()));
         }
         return sprintf("%s'data:%s;base64,%s')", $m[1], Filesystem::guessMimeTypeFromFilename($loc), base64_encode($embed));
     }, $contents);
     return $contents;
 }
 /**
  * {@inheritdoc}
  */
 public function isSupported(FileSource $source)
 {
     $file = $source->getFileInfo()->getPathname();
     if (preg_match("'\\.min\\.js\$'i", $file)) {
         return false;
     }
     if (preg_match("'\\.js\$'i", $file)) {
         return true;
     }
     return false;
 }