mirror of
https://github.com/crazywhalecc/static-php-cli.git
synced 2026-07-08 17:35:36 +08:00
allow * stage to subscribe to everything
This commit is contained in:
@@ -367,9 +367,12 @@ class PackageLoader
|
|||||||
|
|
||||||
public static function getBeforeStageCallbacks(string $package_name, string $stage): iterable
|
public static function getBeforeStageCallbacks(string $package_name, string $stage): iterable
|
||||||
{
|
{
|
||||||
// match condition
|
// match condition; '*' is a wildcard that fires for every package's stage
|
||||||
$installer = ApplicationContext::get(PackageInstaller::class);
|
$installer = ApplicationContext::get(PackageInstaller::class);
|
||||||
$stages = self::$before_stages[$package_name][$stage] ?? [];
|
$stages = array_merge(
|
||||||
|
self::$before_stages[$package_name][$stage] ?? [],
|
||||||
|
$package_name === '*' ? [] : (self::$before_stages['*'][$stage] ?? []),
|
||||||
|
);
|
||||||
foreach ($stages as [$callback, $only_when_package_resolved, $conditionals]) {
|
foreach ($stages as [$callback, $only_when_package_resolved, $conditionals]) {
|
||||||
if ($only_when_package_resolved !== null && !$installer->isPackageResolved($only_when_package_resolved)) {
|
if ($only_when_package_resolved !== null && !$installer->isPackageResolved($only_when_package_resolved)) {
|
||||||
continue;
|
continue;
|
||||||
@@ -385,9 +388,12 @@ class PackageLoader
|
|||||||
|
|
||||||
public static function getAfterStageCallbacks(string $package_name, string $stage): array
|
public static function getAfterStageCallbacks(string $package_name, string $stage): array
|
||||||
{
|
{
|
||||||
// match condition
|
// match condition; '*' is a wildcard that fires for every package's stage
|
||||||
$installer = ApplicationContext::get(PackageInstaller::class);
|
$installer = ApplicationContext::get(PackageInstaller::class);
|
||||||
$stages = self::$after_stages[$package_name][$stage] ?? [];
|
$stages = array_merge(
|
||||||
|
self::$after_stages[$package_name][$stage] ?? [],
|
||||||
|
$package_name === '*' ? [] : (self::$after_stages['*'][$stage] ?? []),
|
||||||
|
);
|
||||||
$result = [];
|
$result = [];
|
||||||
foreach ($stages as [$callback, $only_when_package_resolved, $conditionals]) {
|
foreach ($stages as [$callback, $only_when_package_resolved, $conditionals]) {
|
||||||
if ($only_when_package_resolved !== null && !$installer->isPackageResolved($only_when_package_resolved)) {
|
if ($only_when_package_resolved !== null && !$installer->isPackageResolved($only_when_package_resolved)) {
|
||||||
@@ -425,6 +431,20 @@ class PackageLoader
|
|||||||
{
|
{
|
||||||
foreach (['BeforeStage' => self::$before_stages, 'AfterStage' => self::$after_stages] as $event_name => $ev_all) {
|
foreach (['BeforeStage' => self::$before_stages, 'AfterStage' => self::$after_stages] as $event_name => $ev_all) {
|
||||||
foreach ($ev_all as $package_name => $stages) {
|
foreach ($ev_all as $package_name => $stages) {
|
||||||
|
// wildcard hooks fire for every package's stage; nothing to validate against
|
||||||
|
if ($package_name === '*') {
|
||||||
|
foreach ($stages as $stage_name => $before_events) {
|
||||||
|
foreach ($before_events as [$event_callable, $only_when_package_resolved, $conditionals]) {
|
||||||
|
if ($only_when_package_resolved !== null && !self::hasPackage($only_when_package_resolved)) {
|
||||||
|
throw new RegistryException("{$event_name} event for wildcard [*] stage [{$stage_name}] has unknown only_when_package_resolved package [{$only_when_package_resolved}].");
|
||||||
|
}
|
||||||
|
if (!is_callable($event_callable)) {
|
||||||
|
throw new RegistryException("{$event_name} event for wildcard [*] stage [{$stage_name}] has invalid callable.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
// check package exists
|
// check package exists
|
||||||
if (!self::hasPackage($package_name)) {
|
if (!self::hasPackage($package_name)) {
|
||||||
throw new RegistryException(
|
throw new RegistryException(
|
||||||
|
|||||||
Reference in New Issue
Block a user