lockfile again

This commit is contained in:
Tim Bendt
2025-11-26 11:50:55 -05:00
parent af3c23cb6e
commit 6ceecaa69e
4461 changed files with 641349 additions and 10 deletions

View File

@@ -0,0 +1,64 @@
<?php
namespace League\Event;
abstract class AbstractEvent implements EventInterface
{
/**
* Has propagation stopped?
*
* @var bool
*/
protected $propagationStopped = false;
/**
* The emitter instance.
*
* @var EmitterInterface|null
*/
protected $emitter;
/**
* @inheritdoc
*/
public function setEmitter(EmitterInterface $emitter)
{
$this->emitter = $emitter;
return $this;
}
/**
* @inheritdoc
*/
public function getEmitter()
{
return $this->emitter;
}
/**
* @inheritdoc
*/
public function stopPropagation()
{
$this->propagationStopped = true;
return $this;
}
/**
* @inheritdoc
*/
public function isPropagationStopped()
{
return $this->propagationStopped;
}
/**
* @inheritdoc
*/
public function getName()
{
return get_class($this);
}
}

View File

@@ -0,0 +1,14 @@
<?php
namespace League\Event;
abstract class AbstractListener implements ListenerInterface
{
/**
* @inheritdoc
*/
public function isListener($listener)
{
return $this === $listener;
}
}

View File

@@ -0,0 +1,49 @@
<?php
namespace League\Event;
class BufferedEmitter extends Emitter
{
/**
* @var EventInterface[]
*/
protected $bufferedEvents = [];
/**
* @inheritdoc
*/
public function emit($event)
{
$this->bufferedEvents[] = $event;
return $event;
}
/**
* @inheritdoc
*/
public function emitBatch(array $events)
{
foreach ($events as $event) {
$this->bufferedEvents[] = $event;
}
return $events;
}
/**
* Emit the buffered events.
*
* @return array
*/
public function emitBufferedEvents()
{
$result = [];
while ($event = array_shift($this->bufferedEvents)) {
$result[] = parent::emit($event);
}
return $result;
}
}

View File

@@ -0,0 +1,65 @@
<?php
namespace League\Event;
class CallbackListener implements ListenerInterface
{
/**
* The callback.
*
* @var callable
*/
protected $callback;
/**
* Create a new callback listener instance.
*
* @param callable $callback
*/
public function __construct(callable $callback)
{
$this->callback = $callback;
}
/**
* Get the callback.
*
* @return callable
*/
public function getCallback()
{
return $this->callback;
}
/**
* @inheritdoc
*/
public function handle(EventInterface $event)
{
call_user_func_array($this->callback, func_get_args());
}
/**
* @inheritdoc
*/
public function isListener($listener)
{
if ($listener instanceof CallbackListener) {
$listener = $listener->getCallback();
}
return $this->callback === $listener;
}
/**
* Named constructor
*
* @param callable $callable
*
* @return static
*/
public static function fromCallable(callable $callable)
{
return new static($callable);
}
}

268
vendor/league/event/src/Emitter.php vendored Normal file
View File

@@ -0,0 +1,268 @@
<?php
namespace League\Event;
use InvalidArgumentException;
class Emitter implements EmitterInterface
{
/**
* The registered listeners.
*
* @var array
*/
protected $listeners = [];
/**
* The sorted listeners
*
* Listeners will get sorted and stored for re-use.
*
* @var ListenerInterface[]
*/
protected $sortedListeners = [];
/**
* @inheritdoc
*/
public function addListener($event, $listener, $priority = self::P_NORMAL)
{
$listener = $this->ensureListener($listener);
$this->listeners[$event][$priority][] = $listener;
$this->clearSortedListeners($event);
return $this;
}
/**
* @inheritdoc
*/
public function addOneTimeListener($event, $listener, $priority = self::P_NORMAL)
{
$listener = $this->ensureListener($listener);
$listener = new OneTimeListener($listener);
return $this->addListener($event, $listener, $priority);
}
/**
* @inheritdoc
*/
public function useListenerProvider(ListenerProviderInterface $provider)
{
$acceptor = new ListenerAcceptor($this);
$provider->provideListeners($acceptor);
return $this;
}
/**
* @inheritdoc
*/
public function removeListener($event, $listener)
{
$this->clearSortedListeners($event);
$listeners = $this->hasListeners($event)
? $this->listeners[$event]
: [];
$filter = function ($registered) use ($listener) {
return ! $registered->isListener($listener);
};
foreach ($listeners as $priority => $collection) {
$listeners[$priority] = array_filter($collection, $filter);
}
$this->listeners[$event] = $listeners;
return $this;
}
/**
* @inheritdoc
*/
public function removeAllListeners($event)
{
$this->clearSortedListeners($event);
if ($this->hasListeners($event)) {
unset($this->listeners[$event]);
}
return $this;
}
/**
* Ensure the input is a listener.
*
* @param ListenerInterface|callable $listener
*
* @throws InvalidArgumentException
*
* @return ListenerInterface
*/
protected function ensureListener($listener)
{
if ($listener instanceof ListenerInterface) {
return $listener;
}
if (is_callable($listener)) {
return CallbackListener::fromCallable($listener);
}
throw new InvalidArgumentException('Listeners should be ListenerInterface, Closure or callable. Received type: '.gettype($listener));
}
/**
* @inheritdoc
*/
public function hasListeners($event)
{
if (! isset($this->listeners[$event]) || count($this->listeners[$event]) === 0) {
return false;
}
return true;
}
/**
* @inheritdoc
*/
public function getListeners($event)
{
if (array_key_exists($event, $this->sortedListeners)) {
return $this->sortedListeners[$event];
}
return $this->sortedListeners[$event] = $this->getSortedListeners($event);
}
/**
* Get the listeners sorted by priority for a given event.
*
* @param string $event
*
* @return ListenerInterface[]
*/
protected function getSortedListeners($event)
{
if (! $this->hasListeners($event)) {
return [];
}
$listeners = $this->listeners[$event];
krsort($listeners);
return call_user_func_array('array_merge', $listeners);
}
/**
* @inheritdoc
*/
public function emit($event)
{
list($name, $event) = $this->prepareEvent($event);
$arguments = [$event] + func_get_args();
$this->invokeListeners($name, $event, $arguments);
$this->invokeListeners('*', $event, $arguments);
return $event;
}
/**
* @inheritdoc
*/
public function emitBatch(array $events)
{
$results = [];
foreach ($events as $event) {
$results[] = $this->emit($event);
}
return $results;
}
/**
* @inheritdoc
*/
public function emitGeneratedEvents(GeneratorInterface $generator)
{
$events = $generator->releaseEvents();
return $this->emitBatch($events);
}
/**
* Invoke the listeners for an event.
*
* @param string $name
* @param EventInterface $event
* @param array $arguments
*
* @return void
*/
protected function invokeListeners($name, EventInterface $event, array $arguments)
{
$listeners = $this->getListeners($name);
foreach ($listeners as $listener) {
if ($event->isPropagationStopped()) {
break;
}
call_user_func_array([$listener, 'handle'], $arguments);
}
}
/**
* Prepare an event for emitting.
*
* @param string|EventInterface $event
*
* @return array
*/
protected function prepareEvent($event)
{
$event = $this->ensureEvent($event);
$name = $event->getName();
$event->setEmitter($this);
return [$name, $event];
}
/**
* Ensure event input is of type EventInterface or convert it.
*
* @param string|EventInterface $event
*
* @throws InvalidArgumentException
*
* @return EventInterface
*/
protected function ensureEvent($event)
{
if (is_string($event)) {
return Event::named($event);
}
if (! $event instanceof EventInterface) {
throw new InvalidArgumentException('Events should be provides as Event instances or string, received type: '.gettype($event));
}
return $event;
}
/**
* Clear the sorted listeners for an event
*
* @param $event
*/
protected function clearSortedListeners($event)
{
unset($this->sortedListeners[$event]);
}
}

View File

@@ -0,0 +1,22 @@
<?php
namespace League\Event;
interface EmitterAwareInterface
{
/**
* Set the Emitter.
*
* @param EmitterInterface $emitter
*
* @return $this
*/
public function setEmitter(?EmitterInterface $emitter = null);
/**
* Get the Emitter.
*
* @return EmitterInterface
*/
public function getEmitter();
}

View File

@@ -0,0 +1,41 @@
<?php
namespace League\Event;
trait EmitterAwareTrait
{
/**
* The emitter instance.
*
* @var EmitterInterface|null
*/
protected $emitter;
/**
* Set the Emitter.
*
* @param EmitterInterface|null $emitter
*
* @return $this
*/
public function setEmitter(?EmitterInterface $emitter = null)
{
$this->emitter = $emitter;
return $this;
}
/**
* Get the Emitter.
*
* @return EmitterInterface
*/
public function getEmitter()
{
if (! $this->emitter) {
$this->emitter = new Emitter();
}
return $this->emitter;
}
}

View File

@@ -0,0 +1,92 @@
<?php
namespace League\Event;
interface EmitterInterface extends ListenerAcceptorInterface
{
/**
* Remove a specific listener for an event.
*
* The first parameter should be the event name, and the second should be
* the event listener. It may implement the League\Event\ListenerInterface
* or simply be "callable".
*
* @param string $event
* @param ListenerInterface|callable $listener
*
* @return $this
*/
public function removeListener($event, $listener);
/**
* Use a provider to add listeners.
*
* @param ListenerProviderInterface $provider
*
* @return $this
*/
public function useListenerProvider(ListenerProviderInterface $provider);
/**
* Remove all listeners for an event.
*
* The first parameter should be the event name. All event listeners will
* be removed.
*
* @param string $event
*
* @return $this
*/
public function removeAllListeners($event);
/**
* Check whether an event has listeners.
*
* The first parameter should be the event name. We'll return true if the
* event has one or more registered even listeners, and false otherwise.
*
* @param string $event
*
* @return bool
*/
public function hasListeners($event);
/**
* Get all the listeners for an event.
*
* The first parameter should be the event name. We'll return an array of
* all the registered even listeners, or an empty array if there are none.
*
* @param string $event
*
* @return array
*/
public function getListeners($event);
/**
* Emit an event.
*
* @param string|EventInterface $event
*
* @return EventInterface
*/
public function emit($event);
/**
* Emit a batch of events.
*
* @param array $events
*
* @return array
*/
public function emitBatch(array $events);
/**
* Release all events stored in a generator
*
* @param GeneratorInterface $generator
*
* @return EventInterface[]
*/
public function emitGeneratedEvents(GeneratorInterface $generator);
}

113
vendor/league/event/src/EmitterTrait.php vendored Normal file
View File

@@ -0,0 +1,113 @@
<?php
namespace League\Event;
trait EmitterTrait
{
use EmitterAwareTrait;
/**
* Add a listener for an event.
*
* The first parameter should be the event name, and the second should be
* the event listener. It may implement the League\Event\ListenerInterface
* or simply be "callable".
*
* @param string $event
* @param ListenerInterface|callable $listener
* @param int $priority
*
* @return $this
*/
public function addListener($event, $listener, $priority = ListenerAcceptorInterface::P_NORMAL)
{
$this->getEmitter()->addListener($event, $listener, $priority);
return $this;
}
/**
* Add a one time listener for an event.
*
* The first parameter should be the event name, and the second should be
* the event listener. It may implement the League\Event\ListenerInterface
* or simply be "callable".
*
* @param string $event
* @param ListenerInterface|callable $listener
* @param int $priority
*
* @return $this
*/
public function addOneTimeListener($event, $listener, $priority = ListenerAcceptorInterface::P_NORMAL)
{
$this->getEmitter()->addOneTimeListener($event, $listener, $priority);
return $this;
}
/**
* Remove a specific listener for an event.
*
* The first parameter should be the event name, and the second should be
* the event listener. It may implement the League\Event\ListenerInterface
* or simply be "callable".
*
* @param string $event
* @param ListenerInterface|callable $listener
*
* @return $this
*/
public function removeListener($event, $listener)
{
$this->getEmitter()->removeListener($event, $listener);
return $this;
}
/**
* Remove all listeners for an event.
*
* The first parameter should be the event name. All event listeners will
* be removed.
*
* @param string $event
*
* @return $this
*/
public function removeAllListeners($event)
{
$this->getEmitter()->removeAllListeners($event);
return $this;
}
/**
* Add listeners from a provider.
*
* @param ListenerProviderInterface $provider
*
* @return $this
*/
public function useListenerProvider(ListenerProviderInterface $provider)
{
$this->getEmitter()->useListenerProvider($provider);
return $this;
}
/**
* Emit an event.
*
* @param string|EventInterface $event
*
* @return EventInterface
*/
public function emit($event)
{
$emitter = $this->getEmitter();
$arguments = [$event] + func_get_args();
return call_user_func_array([$emitter, 'emit'], $arguments);
}
}

43
vendor/league/event/src/Event.php vendored Normal file
View File

@@ -0,0 +1,43 @@
<?php
namespace League\Event;
class Event extends AbstractEvent
{
/**
* The event name.
*
* @var string
*/
protected $name;
/**
* Create a new event instance.
*
* @param string $name
*/
public function __construct($name)
{
$this->name = $name;
}
/**
* @inheritdoc
*/
public function getName()
{
return $this->name;
}
/**
* Create a new event instance.
*
* @param string $name
*
* @return static
*/
public static function named($name)
{
return new static($name);
}
}

View File

@@ -0,0 +1,43 @@
<?php
namespace League\Event;
interface EventInterface
{
/**
* Set the Emitter.
*
* @param EmitterInterface $emitter
*
* @return $this
*/
public function setEmitter(EmitterInterface $emitter);
/**
* Get the Emitter.
*
* @return EmitterInterface
*/
public function getEmitter();
/**
* Stop event propagation.
*
* @return $this
*/
public function stopPropagation();
/**
* Check whether propagation was stopped.
*
* @return bool
*/
public function isPropagationStopped();
/**
* Get the event name.
*
* @return string
*/
public function getName();
}

10
vendor/league/event/src/Generator.php vendored Normal file
View File

@@ -0,0 +1,10 @@
<?php
namespace League\Event;
class Generator implements GeneratorInterface
{
use GeneratorTrait {
addEvent as public;
}
}

View File

@@ -0,0 +1,13 @@
<?php
namespace League\Event;
interface GeneratorInterface
{
/**
* Release all the added events.
*
* @return EventInterface[]
*/
public function releaseEvents();
}

View File

@@ -0,0 +1,40 @@
<?php
namespace League\Event;
trait GeneratorTrait
{
/**
* The registered events.
*
* @var EventInterface[]
*/
protected $events = [];
/**
* Add an event.
*
* @param EventInterface $event
*
* @return $this
*/
protected function addEvent(EventInterface $event)
{
$this->events[] = $event;
return $this;
}
/**
* Release all the added events.
*
* @return EventInterface[]
*/
public function releaseEvents()
{
$events = $this->events;
$this->events = [];
return $events;
}
}

View File

@@ -0,0 +1,43 @@
<?php
namespace League\Event;
class ListenerAcceptor implements ListenerAcceptorInterface
{
/**
* The emitter instance.
*
* @var EmitterInterface|null
*/
protected $emitter;
/**
* Constructor
*
* @param EmitterInterface $emitter
*/
public function __construct(EmitterInterface $emitter)
{
$this->emitter = $emitter;
}
/**
* @inheritdoc
*/
public function addListener($event, $listener, $priority = self::P_NORMAL)
{
$this->emitter->addListener($event, $listener, $priority);
return $this;
}
/**
* @inheritdoc
*/
public function addOneTimeListener($event, $listener, $priority = self::P_NORMAL)
{
$this->emitter->addOneTimeListener($event, $listener, $priority);
return $this;
}
}

View File

@@ -0,0 +1,59 @@
<?php
namespace League\Event;
interface ListenerAcceptorInterface
{
/**
* High priority.
*
* @const int
*/
const P_HIGH = 100;
/**
* Normal priority.
*
* @const int
*/
const P_NORMAL = 0;
/**
* Low priority.
*
* @const int
*/
const P_LOW = -100;
/**
* Add a listener for an event.
*
* The first parameter should be the event name, and the second should be
* the event listener. It may implement the League\Event\ListenerInterface
* or simply be "callable". In this case, the priority emitter also accepts
* an optional third parameter specifying the priority as an integer. You
* may use one of our predefined constants here if you want.
*
* @param string $event
* @param ListenerInterface|callable $listener
* @param int $priority
*
* @return $this
*/
public function addListener($event, $listener, $priority = self::P_NORMAL);
/**
* Add a one time listener for an event.
*
* The first parameter should be the event name, and the second should be
* the event listener. It may implement the League\Event\ListenerInterface
* or simply be "callable".
*
* @param string $event
* @param ListenerInterface|callable $listener
* @param int $priority
*
* @return $this
*/
public function addOneTimeListener($event, $listener, $priority = self::P_NORMAL);
}

View File

@@ -0,0 +1,24 @@
<?php
namespace League\Event;
interface ListenerInterface
{
/**
* Handle an event.
*
* @param EventInterface $event
*
* @return void
*/
public function handle(EventInterface $event);
/**
* Check whether the listener is the given parameter.
*
* @param mixed $listener
*
* @return bool
*/
public function isListener($listener);
}

View File

@@ -0,0 +1,15 @@
<?php
namespace League\Event;
interface ListenerProviderInterface
{
/**
* Provide event
*
* @param ListenerAcceptorInterface $listenerAcceptor
*
* @return $this
*/
public function provideListeners(ListenerAcceptorInterface $listenerAcceptor);
}

View File

@@ -0,0 +1,57 @@
<?php
namespace League\Event;
class OneTimeListener implements ListenerInterface
{
/**
* The listener instance.
*
* @var ListenerInterface
*/
protected $listener;
/**
* Create a new one time listener instance.
*
* @param ListenerInterface $listener
*/
public function __construct(ListenerInterface $listener)
{
$this->listener = $listener;
}
/**
* Get the wrapped listener.
*
* @return ListenerInterface
*/
public function getWrappedListener()
{
return $this->listener;
}
/**
* @inheritdoc
*/
public function handle(EventInterface $event)
{
$name = $event->getName();
$emitter = $event->getEmitter();
$emitter->removeListener($name, $this->listener);
return call_user_func_array([$this->listener, 'handle'], func_get_args());
}
/**
* @inheritdoc
*/
public function isListener($listener)
{
if ($listener instanceof OneTimeListener) {
$listener = $listener->getWrappedListener();
}
return $this->listener->isListener($listener);
}
}