1: <?php declare(strict_types=1);
2:
3: namespace Salient\Utility\Event;
4:
5: use Composer\Autoload\ClassLoader as Loader;
6: use Composer\InstalledVersions as Installed;
7:
8: /**
9: * Dispatched when package data is received from the Composer runtime API
10: *
11: * @api
12: *
13: * @template TData
14: */
15: final class PackageDataReceivedEvent
16: {
17: /** @var TData */
18: private $Data;
19: /** @var class-string<Installed|Loader> */
20: private string $Class;
21: private string $Method;
22: /** @var mixed[] */
23: private array $Arguments;
24:
25: /**
26: * @internal
27: *
28: * @param TData $data
29: * @param class-string<Installed|Loader> $class
30: * @param mixed ...$args
31: */
32: public function __construct(
33: $data,
34: string $class,
35: string $method,
36: ...$args
37: ) {
38: $this->Data = $data;
39: $this->Class = $class;
40: $this->Method = $method;
41: $this->Arguments = $args;
42: }
43:
44: /**
45: * Check if the given Composer runtime API method was called
46: *
47: * @param class-string<Installed|Loader> $class
48: */
49: public function isMethod(string $class, string $method): bool
50: {
51: return strcasecmp($class, $this->Class) === 0
52: && strcasecmp($method, $this->Method) === 0;
53: }
54:
55: /**
56: * Get arguments passed to the Composer runtime API when the method was
57: * called
58: *
59: * @return mixed[]
60: */
61: public function getArguments(): array
62: {
63: return $this->Arguments;
64: }
65:
66: /**
67: * Get data received from the Composer runtime API
68: *
69: * @return TData
70: */
71: public function getData()
72: {
73: return $this->Data;
74: }
75:
76: /**
77: * Replace data received from the Composer runtime API
78: *
79: * @param TData $data
80: */
81: public function setData($data): void
82: {
83: $this->Data = $data;
84: }
85: }
86: