![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mets.corals.io/wp-content/metras.v32/vendor/roots/acorn/src/Acorn/ |
<?php namespace Roots\Acorn; use Exception; use Roots\Acorn\Filesystem\Filesystem; class PackageManifest { /** * The filesystem instance. * * @var \Roots\Acorn\Filesystem\Filesystem */ public $files; /** * The base path. * * @var string */ public $basePath; /** * The vendor path. * * @var string */ public $vendorPath; /** * The manifest path. * * @var string|null */ public $manifestPath; /** * The loaded manifest array. * * @var array */ public $manifest; /** * Create a new package manifest instance. * * @param \Roots\Acorn\Filesystem\Filesystem $files * @param string $basePath * @param string $manifestPath * @return void */ public function __construct(Filesystem $files, $basePath, $manifestPath) { $this->files = $files; $this->basePath = $basePath; $this->manifestPath = $manifestPath; $this->vendorPath = $basePath . '/vendor'; } /** * Get all of the service provider class names for all packages. * * @return array */ public function providers() { return collect($this->getManifest())->flatMap(function ($configuration) { return (array) ($configuration['providers'] ?? []); })->filter()->all(); } /** * Get all of the aliases for all packages. * * @return array */ public function aliases() { return collect($this->getManifest())->flatMap(function ($configuration) { return (array) ($configuration['aliases'] ?? []); })->filter()->all(); } /** * Get the current package manifest. * * @return array */ protected function getManifest() { if (! is_null($this->manifest)) { return $this->manifest; } if (! file_exists($this->manifestPath)) { $this->build(); } $this->files->get($this->manifestPath); return $this->manifest = file_exists($this->manifestPath) ? $this->files->getRequire($this->manifestPath) : []; } /** * Build the manifest and write it to disk. * * @return void */ public function build() { $packages = []; if ($this->files->exists($path = $this->vendorPath . '/composer/installed.json')) { $packages = json_decode($this->files->get($path), true); } $ignoreAll = in_array('*', $ignore = $this->packagesToIgnore()); $this->write(collect($packages)->mapWithKeys(function ($package) { return [$this->format($package['name']) => $package['extra']['acorn'] ?? []]; })->each(function ($configuration) use (&$ignore) { $ignore = array_merge($ignore, $configuration['dont-discover'] ?? []); })->reject(function ($configuration, $package) use ($ignore, $ignoreAll) { return $ignoreAll || in_array($package, $ignore); })->filter()->all()); } /** * Format the given package name. * * @param string $package * @return string */ protected function format($package) { return str_replace($this->vendorPath . '/', '', $package); } /** * Get all of the package names that should be ignored. * * @return array */ protected function packagesToIgnore() { if (! file_exists($this->basePath . '/composer.json')) { return []; } return json_decode(file_get_contents( $this->basePath . '/composer.json' ), true)['extra']['acorn']['dont-discover'] ?? []; } /** * Write the given manifest array to disk. * * @param array $manifest * @return void * * @throws \Exception */ protected function write(array $manifest) { if (! is_writable(dirname($this->manifestPath))) { throw new Exception('The ' . dirname($this->manifestPath) . ' directory must be present and writable.'); } $this->files->replace( $this->manifestPath, '<?php return ' . var_export($manifest, true) . ';' ); } }