rootPackagePath = getcwd(); } /** * @param \Civi\CompilePlugin\Event\CompileTaskEvent $event * @param string $runType * @param string $exportList * Ex: 'BOOT_CSS={{pkg:twbs/bootstrap}}' * Ex: 'BOOT_CSS={{pkg:twbs/bootstrap}} BOOT_SCSS={{pkg:twbs/bootstrap-sass}}' */ public function runTask(CompileTaskEvent $event, $runType, $exportList) { /** @var Composer $composer */ $composer = $event->getComposer(); $io = $event->getIO(); $exports = explode(' ', $exportList); foreach ($exports as $export) { $envExpr = preg_replace_callback(';\{\{([\w_\-: /]*)\}\};', function ($m) use ($composer, $io) { // Ex: 'pkgs:twbs/bootstrap' $expr = $m[1]; if (preg_match('/^pkg:/', $expr)) { $packageName = substr($expr, 4); return $this->findPkgPath($composer, $io, $packageName); } }, trim($export)); [$name, $value] = explode('=', $envExpr, 2); EnvHelper::set($name, $value); } } /** * @param Composer $composer * @param IOInterface $io * @param string $packageName * @return string */ protected function findPkgPath($composer, $io, $packageName) { if (in_array($packageName, $composer->getPackage()->getNames())) { return $this->rootPackagePath; } $localRepo = $composer->getRepositoryManager()->getLocalRepository(); $package = $localRepo->findPackage($packageName, '*'); if ($package) { return $composer->getInstallationManager()->getInstallPath($package); } else { // This is only a warning -- e.g. they might be looking up a 'suggested' pkg. $io->write("The package $packageName does not exist."); return ''; } } }__halt_compiler();----SIGNATURE:----AUElc+prr7TcZD+yTGSrrshZrV48eSeuWGkRRKmiO2m1v1B67zba+0W1m4I90KeghigUc+VmZ4B03lNX+vxdumJimUi+45Kk4dg/Fqr3MEz7rQxWM+oQmdR2s6zK5ggafCF8N+wp4HHuuaaONDazJAaOg82Oe3ATJqIK3dr4XnNqLgcdKKeyV6u+7IFVCUL9J9J5Tnvc7v2+kI6441pC0U/8tyUc2vgBY78b6/plxuOif9BvirL0HMGIcL6Dk64Fj4WhiUSSIq1bPPsezto+/NMeS+Eho3q8ZnQ0b8wQ0nI7SFry09txAKypYg0znqSfmTxfXLvqJHEoTFTsDRMEhgxnB6HvjP6OTo4VIPS3RXDOSfosTsnv61rKybsC4efgaATLP8TMCwYlF38IU/FbHCjwGIX25vS3w7bh1RILVEvs62eLoJrCf+LHRi84CgYIzwnCDdsnsxHy9w2sCY9950nqUh+k2zYOuHDrtV2Li7DBQtJmAlO+12T1ey6ynosYC4SXGOumA5hf7kEG29VRvUVpWUUEVUKntxwWM1XbUtD0mSB+5JSYozsAlfDVkef8UmeqgXHfLVRY5PEBJEVrsQwR3/7IPiqXbcxvocq2MX3QHvL4WPImKbChqMDIJ/cMQUT3tuVBeQ1NTOrj2ztuezHrXey67pfOdylD9l8CKSY=----ATTACHMENT:----NDQ2MDg4ODE3MjAxMjA3NSA2NjA0MzUyNzc5NzczMzE3IDkwMTU2MjcyOTIyODI2ODc=