public function index() { MMinifiedDatum::truncate(); return 'ok'; }
protected function compress($regex, $content, $type = 'js', $version, $excludes) { $files = []; $compressed = preg_replace_callback($regex, function ($matches) use(&$files, $type, $excludes) { if (!empty($excludes) && preg_match("~{$excludes}~", basename($matches[1] ?? ''))) { return $matches[0]; } if ($type === 'css' && !preg_match('/rel="stylesheet"/i', $matches[0])) { return $matches[0]; } else { $files[] = $matches[1]; } return ''; }, $content); if (!empty($files)) { MMinifiedDatum::unguard(true); $name = sprintf('%s.%s', md5(json_encode($files)), $type); $count = MMinifiedDatum::where('name', '=', $name)->where('version', '=', $version)->count(); $baseDir = $this->bootLoader->getBaseDir(); if (empty($count)) { set_time_limit(120); $asset = new AssetCollection(array_map(function ($f) use($type, $baseDir) { $file = realpath(sprintf('%s/public/%s', $baseDir, $f)); $minified = preg_match('/\\.min\\./', $file); if ($type === 'css') { $url = preg_replace('#.*/static/#', '/static/', $this->utils->unixPath($file)); $filters = array_merge([new CssImportFilter(), new CssRewriteFilter()], !$minified ? [new CssMinFilter()] : []); } elseif (!$minified) { $filters = [new JSMinFilter()]; } return new FileAsset($file, !empty($filters) ? $filters : [], $baseDir . '/public', !empty($url) ? $url : ''); }, $files)); $asset->setTargetPath(sprintf('/static/cache/%s/', $type)); if (MMinifiedDatum::create(['name' => $name, 'version' => $version, 'content' => $asset->dump(), 'created_at' => Carbon::now()])) { $count = 1; } } } if (!empty($count) && !empty($name)) { $tag = sprintf($type == 'js' ? '<scrip' . 't src="%s"></script>' : '<lin' . 'k href="%s" type="text/css" rel="stylesheet" media="all">', "/static/cache/{$version}/{$name}"); $compressed = $type === 'css' ? preg_replace('#(<style|</head)#ms', "{$tag}\n\\1", $compressed, 1) : preg_replace('#(<script|</head)#ms', "{$tag}\n\\1", $compressed, 1); return $compressed; } return $content; }