| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 | 
							- <?php
 
- namespace Aws\Endpoint;
 
- use JmesPath\Env;
 
- class PartitionEndpointProvider
 
- {
 
-     /** @var Partition[] */
 
-     private $partitions;
 
-     /** @var string */
 
-     private $defaultPartition;
 
-     /** @var array  */
 
-     private $options;
 
-     /**
 
-      * The 'options' parameter accepts the following arguments:
 
-      *
 
-      * - sts_regional_endpoints: For STS legacy regions, set to 'regional' to
 
-      *   use regional endpoints, 'legacy' to use the legacy global endpoint.
 
-      *   Defaults to 'legacy'.
 
-      * - s3_us_east_1_regional_endpoint: For S3 us-east-1 region, set to 'regional'
 
-      *   to use the regional endpoint, 'legacy' to use the legacy global endpoint.
 
-      *   Defaults to 'legacy'.
 
-      *
 
-      * @param array $partitions
 
-      * @param string $defaultPartition
 
-      * @param array $options
 
-      */
 
-     public function __construct(
 
-         array $partitions,
 
-         $defaultPartition = 'aws',
 
-         $options = []
 
-     ) {
 
-         $this->partitions = array_map(function (array $definition) {
 
-             return new Partition($definition);
 
-         }, array_values($partitions));
 
-         $this->defaultPartition = $defaultPartition;
 
-         $this->options = $options;
 
-     }
 
-     public function __invoke(array $args = [])
 
-     {
 
-         $partition = $this->getPartition(
 
-             isset($args['region']) ? $args['region'] : '',
 
-             isset($args['service']) ? $args['service'] : ''
 
-         );
 
-         $args['options'] = $this->options;
 
-         return $partition($args);
 
-     }
 
-     /**
 
-      * Returns the partition containing the provided region or the default
 
-      * partition if no match is found.
 
-      *
 
-      * @param string $region
 
-      * @param string $service
 
-      *
 
-      * @return Partition
 
-      */
 
-     public function getPartition($region, $service)
 
-     {
 
-         foreach ($this->partitions as $partition) {
 
-             if ($partition->isRegionMatch($region, $service)) {
 
-                 return $partition;
 
-             }
 
-         }
 
-         return $this->getPartitionByName($this->defaultPartition);
 
-     }
 
-     /**
 
-      * Returns the partition with the provided name or null if no partition with
 
-      * the provided name can be found.
 
-      *
 
-      * @param string $name
 
-      *
 
-      * @return Partition|null
 
-      */
 
-     public function getPartitionByName($name)
 
-     {
 
-         foreach ($this->partitions as $partition) {
 
-             if ($name === $partition->getName()) {
 
-                 return $partition;
 
-             }
 
-         }
 
-     }
 
-     /**
 
-      * Creates and returns the default SDK partition provider.
 
-      *
 
-      * @param array $options
 
-      * @return PartitionEndpointProvider
 
-      */
 
-     public static function defaultProvider($options = [])
 
-     {
 
-         $data = \Aws\load_compiled_json(__DIR__ . '/../data/endpoints.json');
 
-         $prefixData = \Aws\load_compiled_json(__DIR__ . '/../data/endpoints_prefix_history.json');
 
-         $mergedData = self::mergePrefixData($data, $prefixData);
 
-         return new self($mergedData['partitions'], 'aws', $options);
 
-     }
 
-     /**
 
-      * Copy endpoint data for other prefixes used by a given service
 
-      *
 
-      * @param $data
 
-      * @param $prefixData
 
-      * @return array
 
-      */
 
-     public static function mergePrefixData($data, $prefixData)
 
-     {
 
-         $prefixGroups = $prefixData['prefix-groups'];
 
-         foreach ($data["partitions"] as $index => $partition) {
 
-             foreach ($prefixGroups as $current => $old) {
 
-                 $serviceData = Env::search("services.\"{$current}\"", $partition);
 
-                 if (!empty($serviceData)) {
 
-                     foreach ($old as $prefix) {
 
-                         if (empty(Env::search("services.\"{$prefix}\"", $partition))) {
 
-                             $data["partitions"][$index]["services"][$prefix] = $serviceData;
 
-                         }
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-         return $data;
 
-     }
 
- }
 
 
  |